cojson-storage-indexeddb 0.19.3 → 0.19.4

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.
@@ -1,4 +1,4 @@
1
1
 
2
- > cojson-storage-indexeddb@0.19.3 build /home/runner/_work/jazz/jazz/packages/cojson-storage-indexeddb
2
+ > cojson-storage-indexeddb@0.19.4 build /home/runner/_work/jazz/jazz/packages/cojson-storage-indexeddb
3
3
  > rm -rf ./dist && tsc --sourceMap --outDir dist
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # cojson-storage-indexeddb
2
2
 
3
+ ## 0.19.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 8778937: Fixed "unable to add key to index 'uniqueSessions'" when using a Jazz app in multiple tabs
8
+ - cojson@0.19.4
9
+
3
10
  ## 0.19.3
4
11
 
5
12
  ### Patch Changes
@@ -10,6 +10,7 @@ export declare class CoJsonIDBTransaction {
10
10
  done: boolean;
11
11
  constructor(db: IDBDatabase);
12
12
  refresh(): void;
13
+ rollback(): void;
13
14
  startedAt: number;
14
15
  isReusable(): boolean;
15
16
  getObjectStore(name: StoreName): IDBObjectStore;
@@ -1 +1 @@
1
- {"version":3,"file":"CoJsonIDBTransaction.d.ts","sourceRoot":"","sources":["../src/CoJsonIDBTransaction.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,UAAU,GACV,cAAc,GACd,gBAAgB,CAAC;AAKrB,qBAAa,oBAAoB;IAC/B,EAAE,EAAE,WAAW,CAAC;IACR,EAAE,EAAE,cAAc,CAAC;IAE3B,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC,EAAE,CAAM;IAClD,cAAc,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAM;IAEpC,EAAE,SAAiB;IAEnB,OAAO,UAAS;IAChB,MAAM,UAAS;IACf,IAAI,UAAS;gBAED,EAAE,EAAE,WAAW;IAM3B,OAAO;IAcP,SAAS,SAAqB;IAC9B,UAAU;IAKV,cAAc,CAAC,IAAI,EAAE,SAAS;IAS9B,OAAO,CAAC,WAAW;IAgCnB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC;IAyB1D,MAAM;CAKP;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,EAAE,EAAE,WAAW,EACf,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,UAAU,CAAC,CAAC,CAAC,cAenD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,EACxD,EAAE,EAAE,WAAW,EACf,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,CAAC,cAeT"}
1
+ {"version":3,"file":"CoJsonIDBTransaction.d.ts","sourceRoot":"","sources":["../src/CoJsonIDBTransaction.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,UAAU,GACV,cAAc,GACd,gBAAgB,CAAC;AAKrB,qBAAa,oBAAoB;IAC/B,EAAE,EAAE,WAAW,CAAC;IACR,EAAE,EAAE,cAAc,CAAC;IAE3B,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC,EAAE,CAAM;IAClD,cAAc,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAM;IAEpC,EAAE,SAAiB;IAEnB,OAAO,UAAS;IAChB,MAAM,UAAS;IACf,IAAI,UAAS;gBAED,EAAE,EAAE,WAAW;IAM3B,OAAO;IAcP,QAAQ;IAIR,SAAS,SAAqB;IAC9B,UAAU;IAKV,cAAc,CAAC,IAAI,EAAE,SAAS;IAS9B,OAAO,CAAC,WAAW;IAgCnB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC;IAyB1D,MAAM;CAKP;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,EAAE,EAAE,WAAW,EACf,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,UAAU,CAAC,CAAC,CAAC,cAenD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,EACxD,EAAE,EAAE,WAAW,EACf,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,CAAC,cAeT"}
@@ -22,6 +22,9 @@ export class CoJsonIDBTransaction {
22
22
  this.done = true;
23
23
  };
24
24
  }
25
+ rollback() {
26
+ this.tx.abort();
27
+ }
25
28
  isReusable() {
26
29
  const delta = performance.now() - this.startedAt;
27
30
  return !this.done && !this.failed && delta <= 100;
@@ -1 +1 @@
1
- {"version":3,"file":"CoJsonIDBTransaction.js","sourceRoot":"","sources":["../src/CoJsonIDBTransaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CoJsonIDBTransaction.js","sourceRoot":"","sources":["../src/CoJsonIDBTransaction.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,11 @@
1
- import type { CojsonInternalTypes, RawCoID, SessionID } from "cojson";
1
+ import type { CojsonInternalTypes, RawCoID, SessionID, DBTransactionInterfaceAsync } from "cojson";
2
2
  import type { DBClientInterfaceAsync, SessionRow, SignatureAfterRow, StoredCoValueRow, StoredSessionRow, TransactionRow } from "cojson";
3
3
  import { CoJsonIDBTransaction } from "./CoJsonIDBTransaction.js";
4
- export declare class IDBClient implements DBClientInterfaceAsync {
5
- private db;
6
- activeTransaction: CoJsonIDBTransaction | undefined;
7
- autoBatchingTransaction: CoJsonIDBTransaction | undefined;
8
- constructor(db: IDBDatabase);
9
- makeRequest<T>(handler: (txEntry: CoJsonIDBTransaction) => IDBRequest<T>): Promise<T>;
10
- getCoValue(coValueId: RawCoID): Promise<StoredCoValueRow | undefined>;
11
- getCoValueRowID(coValueId: RawCoID): Promise<number | undefined>;
12
- getCoValueSessions(coValueRowId: number): Promise<StoredSessionRow[]>;
4
+ export declare class IDBTransaction implements DBTransactionInterfaceAsync {
5
+ private tx;
6
+ constructor(tx: CoJsonIDBTransaction);
7
+ run<T>(handler: (txEntry: CoJsonIDBTransaction) => IDBRequest<T>): Promise<T>;
13
8
  getSingleCoValueSession(coValueRowId: number, sessionID: SessionID): Promise<StoredSessionRow | undefined>;
14
- getNewTransactionInSession(sessionRowId: number, fromIdx: number, toIdx: number): Promise<TransactionRow[]>;
15
- getSignatures(sessionRowId: number, firstNewTxIdx: number): Promise<SignatureAfterRow[]>;
16
- upsertCoValue(id: RawCoID, header?: CojsonInternalTypes.CoValueHeader): Promise<number | undefined>;
17
9
  addSessionUpdate({ sessionUpdate, sessionRow, }: {
18
10
  sessionUpdate: SessionRow;
19
11
  sessionRow?: StoredSessionRow;
@@ -24,7 +16,18 @@ export declare class IDBClient implements DBClientInterfaceAsync {
24
16
  idx: number;
25
17
  signature: CojsonInternalTypes.Signature;
26
18
  }): Promise<IDBValidKey>;
27
- closeTransaction(tx: CoJsonIDBTransaction): void;
28
- transaction(operationsCallback: () => unknown): Promise<void>;
19
+ }
20
+ export declare class IDBClient implements DBClientInterfaceAsync {
21
+ private db;
22
+ activeTransaction: CoJsonIDBTransaction | undefined;
23
+ autoBatchingTransaction: CoJsonIDBTransaction | undefined;
24
+ constructor(db: IDBDatabase);
25
+ getCoValue(coValueId: RawCoID): Promise<StoredCoValueRow | undefined>;
26
+ getCoValueRowID(coValueId: RawCoID): Promise<number | undefined>;
27
+ getCoValueSessions(coValueRowId: number): Promise<StoredSessionRow[]>;
28
+ getNewTransactionInSession(sessionRowId: number, fromIdx: number, toIdx: number): Promise<TransactionRow[]>;
29
+ getSignatures(sessionRowId: number, firstNewTxIdx: number): Promise<SignatureAfterRow[]>;
30
+ upsertCoValue(id: RawCoID, header?: CojsonInternalTypes.CoValueHeader): Promise<number | undefined>;
31
+ transaction(operationsCallback: (tx: DBTransactionInterfaceAsync) => Promise<unknown>): Promise<void>;
29
32
  }
30
33
  //# sourceMappingURL=idbClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"idbClient.d.ts","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACtE,OAAO,KAAK,EAEV,sBAAsB,EACtB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,oBAAoB,EAGrB,MAAM,2BAA2B,CAAC;AAGnC,qBAAa,SAAU,YAAW,sBAAsB;IACtD,OAAO,CAAC,EAAE,CAAC;IAEX,iBAAiB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACpD,uBAAuB,EAAE,oBAAoB,GAAG,SAAS,CAAC;gBAE9C,EAAE,EAAE,WAAW;IAI3B,WAAW,CAAC,CAAC,EACX,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,UAAU,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,CAAC,CAAC;IAgBP,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAMrE,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIhE,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAMrE,uBAAuB,CAC3B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAMlC,0BAA0B,CAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,EAAE,CAAC;IAQtB,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAWzB,aAAa,CACjB,EAAE,EAAE,OAAO,EACX,MAAM,CAAC,EAAE,mBAAmB,CAAC,aAAa,GACzC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAWxB,gBAAgB,CAAC,EACrB,aAAa,EACb,UAAU,GACX,EAAE;QACD,aAAa,EAAE,UAAU,CAAC;QAC1B,UAAU,CAAC,EAAE,gBAAgB,CAAC;KAC/B,GAAG,OAAO,CAAC,MAAM,CAAC;IAcb,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,mBAAmB,CAAC,WAAW;IAW3C,iBAAiB,CAAC,EACtB,YAAY,EACZ,GAAG,EACH,SAAS,GACV,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC;KAC1C;IAUD,gBAAgB,CAAC,EAAE,EAAE,oBAAoB;IAQnC,WAAW,CAAC,kBAAkB,EAAE,MAAM,OAAO;CAYpD"}
1
+ {"version":3,"file":"idbClient.d.ts","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,OAAO,EACP,SAAS,EACT,2BAA2B,EAC5B,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAEV,sBAAsB,EACtB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,oBAAoB,EAGrB,MAAM,2BAA2B,CAAC;AAEnC,qBAAa,cAAe,YAAW,2BAA2B;IACpD,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,oBAAoB;IAE5C,GAAG,CAAC,CAAC,EACH,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,UAAU,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,CAAC,CAAC;IAIP,uBAAuB,CAC3B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IASlC,gBAAgB,CAAC,EACrB,aAAa,EACb,UAAU,GACX,EAAE;QACD,aAAa,EAAE,UAAU,CAAC;QAC1B,UAAU,CAAC,EAAE,gBAAgB,CAAC;KAC/B,GAAG,OAAO,CAAC,MAAM,CAAC;IAcb,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,mBAAmB,CAAC,WAAW;IAW3C,iBAAiB,CAAC,EACtB,YAAY,EACZ,GAAG,EACH,SAAS,GACV,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC;KAC1C;CASF;AAED,qBAAa,SAAU,YAAW,sBAAsB;IACtD,OAAO,CAAC,EAAE,CAAC;IAEX,iBAAiB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACpD,uBAAuB,EAAE,oBAAoB,GAAG,SAAS,CAAC;gBAE9C,EAAE,EAAE,WAAW;IAIrB,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAMrE,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIhE,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAMrE,0BAA0B,CAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,EAAE,CAAC;IAQtB,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAWzB,aAAa,CACjB,EAAE,EAAE,OAAO,EACX,MAAM,CAAC,EAAE,mBAAmB,CAAC,aAAa,GACzC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAWxB,WAAW,CACf,kBAAkB,EAAE,CAAC,EAAE,EAAE,2BAA2B,KAAK,OAAO,CAAC,OAAO,CAAC;CAW5E"}
package/dist/idbClient.js CHANGED
@@ -1,19 +1,44 @@
1
1
  import { CoJsonIDBTransaction, putIndexedDbStore, queryIndexedDbStore, } from "./CoJsonIDBTransaction.js";
2
+ export class IDBTransaction {
3
+ constructor(tx) {
4
+ this.tx = tx;
5
+ }
6
+ run(handler) {
7
+ return this.tx.handleRequest(handler);
8
+ }
9
+ async getSingleCoValueSession(coValueRowId, sessionID) {
10
+ return this.run((tx) => tx
11
+ .getObjectStore("sessions")
12
+ .index("uniqueSessions")
13
+ .get([coValueRowId, sessionID]));
14
+ }
15
+ async addSessionUpdate({ sessionUpdate, sessionRow, }) {
16
+ return this.run((tx) => tx.getObjectStore("sessions").put(sessionRow?.rowID
17
+ ? {
18
+ rowID: sessionRow.rowID,
19
+ ...sessionUpdate,
20
+ }
21
+ : sessionUpdate));
22
+ }
23
+ async addTransaction(sessionRowID, idx, newTransaction) {
24
+ await this.run((tx) => tx.getObjectStore("transactions").add({
25
+ ses: sessionRowID,
26
+ idx,
27
+ tx: newTransaction,
28
+ }));
29
+ }
30
+ async addSignatureAfter({ sessionRowID, idx, signature, }) {
31
+ return this.run((tx) => tx.getObjectStore("signatureAfter").put({
32
+ ses: sessionRowID,
33
+ idx,
34
+ signature,
35
+ }));
36
+ }
37
+ }
2
38
  export class IDBClient {
3
39
  constructor(db) {
4
40
  this.db = db;
5
41
  }
6
- makeRequest(handler) {
7
- if (this.activeTransaction) {
8
- return this.activeTransaction.handleRequest(handler);
9
- }
10
- if (this.autoBatchingTransaction?.isReusable()) {
11
- return this.autoBatchingTransaction.handleRequest(handler);
12
- }
13
- const tx = new CoJsonIDBTransaction(this.db);
14
- this.autoBatchingTransaction = tx;
15
- return tx.handleRequest(handler);
16
- }
17
42
  async getCoValue(coValueId) {
18
43
  return queryIndexedDbStore(this.db, "coValues", (store) => store.index("coValuesById").get(coValueId));
19
44
  }
@@ -23,9 +48,6 @@ export class IDBClient {
23
48
  async getCoValueSessions(coValueRowId) {
24
49
  return queryIndexedDbStore(this.db, "sessions", (store) => store.index("sessionsByCoValue").getAll(coValueRowId));
25
50
  }
26
- async getSingleCoValueSession(coValueRowId, sessionID) {
27
- return queryIndexedDbStore(this.db, "sessions", (store) => store.index("uniqueSessions").get([coValueRowId, sessionID]));
28
- }
29
51
  async getNewTransactionInSession(sessionRowId, fromIdx, toIdx) {
30
52
  return queryIndexedDbStore(this.db, "transactions", (store) => store.getAll(IDBKeyRange.bound([sessionRowId, fromIdx], [sessionRowId, toIdx])));
31
53
  }
@@ -41,43 +63,14 @@ export class IDBClient {
41
63
  header,
42
64
  }).catch(() => this.getCoValueRowID(id));
43
65
  }
44
- async addSessionUpdate({ sessionUpdate, sessionRow, }) {
45
- return this.makeRequest((tx) => tx.getObjectStore("sessions").put(sessionRow?.rowID
46
- ? {
47
- rowID: sessionRow.rowID,
48
- ...sessionUpdate,
49
- }
50
- : sessionUpdate));
51
- }
52
- async addTransaction(sessionRowID, idx, newTransaction) {
53
- await this.makeRequest((tx) => tx.getObjectStore("transactions").add({
54
- ses: sessionRowID,
55
- idx,
56
- tx: newTransaction,
57
- }));
58
- }
59
- async addSignatureAfter({ sessionRowID, idx, signature, }) {
60
- return this.makeRequest((tx) => tx.getObjectStore("signatureAfter").put({
61
- ses: sessionRowID,
62
- idx,
63
- signature,
64
- }));
65
- }
66
- closeTransaction(tx) {
67
- tx.commit();
68
- if (tx === this.activeTransaction) {
69
- this.activeTransaction = undefined;
70
- }
71
- }
72
66
  async transaction(operationsCallback) {
73
67
  const tx = new CoJsonIDBTransaction(this.db);
74
- this.activeTransaction = tx;
75
68
  try {
76
- await operationsCallback();
69
+ await operationsCallback(new IDBTransaction(tx));
77
70
  tx.commit(); // Tells the browser to not wait for another possible request and commit the transaction immediately
78
71
  }
79
- finally {
80
- this.activeTransaction = undefined;
72
+ catch (error) {
73
+ tx.rollback();
81
74
  }
82
75
  }
83
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"idbClient.js","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idbClient.js","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "cojson-storage-indexeddb",
3
- "version": "0.19.3",
3
+ "version": "0.19.4",
4
4
  "main": "dist/index.js",
5
5
  "type": "module",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",
8
8
  "dependencies": {
9
- "cojson": "0.19.3"
9
+ "cojson": "0.19.4"
10
10
  },
11
11
  "devDependencies": {
12
12
  "typescript": "5.6.2",
@@ -40,6 +40,10 @@ export class CoJsonIDBTransaction {
40
40
  };
41
41
  }
42
42
 
43
+ rollback() {
44
+ this.tx.abort();
45
+ }
46
+
43
47
  startedAt = performance.now();
44
48
  isReusable() {
45
49
  const delta = performance.now() - this.startedAt;
package/src/idbClient.ts CHANGED
@@ -1,4 +1,9 @@
1
- import type { CojsonInternalTypes, RawCoID, SessionID } from "cojson";
1
+ import type {
2
+ CojsonInternalTypes,
3
+ RawCoID,
4
+ SessionID,
5
+ DBTransactionInterfaceAsync,
6
+ } from "cojson";
2
7
  import type {
3
8
  CoValueRow,
4
9
  DBClientInterfaceAsync,
@@ -13,34 +18,89 @@ import {
13
18
  putIndexedDbStore,
14
19
  queryIndexedDbStore,
15
20
  } from "./CoJsonIDBTransaction.js";
16
- import { StoreName } from "./CoJsonIDBTransaction.js";
17
21
 
18
- export class IDBClient implements DBClientInterfaceAsync {
19
- private db;
22
+ export class IDBTransaction implements DBTransactionInterfaceAsync {
23
+ constructor(private tx: CoJsonIDBTransaction) {}
20
24
 
21
- activeTransaction: CoJsonIDBTransaction | undefined;
22
- autoBatchingTransaction: CoJsonIDBTransaction | undefined;
25
+ run<T>(
26
+ handler: (txEntry: CoJsonIDBTransaction) => IDBRequest<T>,
27
+ ): Promise<T> {
28
+ return this.tx.handleRequest<T>(handler);
29
+ }
23
30
 
24
- constructor(db: IDBDatabase) {
25
- this.db = db;
31
+ async getSingleCoValueSession(
32
+ coValueRowId: number,
33
+ sessionID: SessionID,
34
+ ): Promise<StoredSessionRow | undefined> {
35
+ return this.run((tx) =>
36
+ tx
37
+ .getObjectStore("sessions")
38
+ .index("uniqueSessions")
39
+ .get([coValueRowId, sessionID]),
40
+ );
26
41
  }
27
42
 
28
- makeRequest<T>(
29
- handler: (txEntry: CoJsonIDBTransaction) => IDBRequest<T>,
30
- ): Promise<T> {
31
- if (this.activeTransaction) {
32
- return this.activeTransaction.handleRequest<T>(handler);
33
- }
43
+ async addSessionUpdate({
44
+ sessionUpdate,
45
+ sessionRow,
46
+ }: {
47
+ sessionUpdate: SessionRow;
48
+ sessionRow?: StoredSessionRow;
49
+ }): Promise<number> {
50
+ return this.run<number>(
51
+ (tx) =>
52
+ tx.getObjectStore("sessions").put(
53
+ sessionRow?.rowID
54
+ ? {
55
+ rowID: sessionRow.rowID,
56
+ ...sessionUpdate,
57
+ }
58
+ : sessionUpdate,
59
+ ) as IDBRequest<number>,
60
+ );
61
+ }
34
62
 
35
- if (this.autoBatchingTransaction?.isReusable()) {
36
- return this.autoBatchingTransaction.handleRequest<T>(handler);
37
- }
63
+ async addTransaction(
64
+ sessionRowID: number,
65
+ idx: number,
66
+ newTransaction: CojsonInternalTypes.Transaction,
67
+ ) {
68
+ await this.run((tx) =>
69
+ tx.getObjectStore("transactions").add({
70
+ ses: sessionRowID,
71
+ idx,
72
+ tx: newTransaction,
73
+ } satisfies TransactionRow),
74
+ );
75
+ }
38
76
 
39
- const tx = new CoJsonIDBTransaction(this.db);
77
+ async addSignatureAfter({
78
+ sessionRowID,
79
+ idx,
80
+ signature,
81
+ }: {
82
+ sessionRowID: number;
83
+ idx: number;
84
+ signature: CojsonInternalTypes.Signature;
85
+ }) {
86
+ return this.run((tx) =>
87
+ tx.getObjectStore("signatureAfter").put({
88
+ ses: sessionRowID,
89
+ idx,
90
+ signature,
91
+ }),
92
+ );
93
+ }
94
+ }
40
95
 
41
- this.autoBatchingTransaction = tx;
96
+ export class IDBClient implements DBClientInterfaceAsync {
97
+ private db;
98
+
99
+ activeTransaction: CoJsonIDBTransaction | undefined;
100
+ autoBatchingTransaction: CoJsonIDBTransaction | undefined;
42
101
 
43
- return tx.handleRequest<T>(handler);
102
+ constructor(db: IDBDatabase) {
103
+ this.db = db;
44
104
  }
45
105
 
46
106
  async getCoValue(coValueId: RawCoID): Promise<StoredCoValueRow | undefined> {
@@ -59,15 +119,6 @@ export class IDBClient implements DBClientInterfaceAsync {
59
119
  );
60
120
  }
61
121
 
62
- async getSingleCoValueSession(
63
- coValueRowId: number,
64
- sessionID: SessionID,
65
- ): Promise<StoredSessionRow | undefined> {
66
- return queryIndexedDbStore(this.db, "sessions", (store) =>
67
- store.index("uniqueSessions").get([coValueRowId, sessionID]),
68
- );
69
- }
70
-
71
122
  async getNewTransactionInSession(
72
123
  sessionRowId: number,
73
124
  fromIdx: number,
@@ -108,76 +159,16 @@ export class IDBClient implements DBClientInterfaceAsync {
108
159
  }).catch(() => this.getCoValueRowID(id));
109
160
  }
110
161
 
111
- async addSessionUpdate({
112
- sessionUpdate,
113
- sessionRow,
114
- }: {
115
- sessionUpdate: SessionRow;
116
- sessionRow?: StoredSessionRow;
117
- }): Promise<number> {
118
- return this.makeRequest<number>(
119
- (tx) =>
120
- tx.getObjectStore("sessions").put(
121
- sessionRow?.rowID
122
- ? {
123
- rowID: sessionRow.rowID,
124
- ...sessionUpdate,
125
- }
126
- : sessionUpdate,
127
- ) as IDBRequest<number>,
128
- );
129
- }
130
-
131
- async addTransaction(
132
- sessionRowID: number,
133
- idx: number,
134
- newTransaction: CojsonInternalTypes.Transaction,
162
+ async transaction(
163
+ operationsCallback: (tx: DBTransactionInterfaceAsync) => Promise<unknown>,
135
164
  ) {
136
- await this.makeRequest((tx) =>
137
- tx.getObjectStore("transactions").add({
138
- ses: sessionRowID,
139
- idx,
140
- tx: newTransaction,
141
- } satisfies TransactionRow),
142
- );
143
- }
144
-
145
- async addSignatureAfter({
146
- sessionRowID,
147
- idx,
148
- signature,
149
- }: {
150
- sessionRowID: number;
151
- idx: number;
152
- signature: CojsonInternalTypes.Signature;
153
- }) {
154
- return this.makeRequest((tx) =>
155
- tx.getObjectStore("signatureAfter").put({
156
- ses: sessionRowID,
157
- idx,
158
- signature,
159
- }),
160
- );
161
- }
162
-
163
- closeTransaction(tx: CoJsonIDBTransaction) {
164
- tx.commit();
165
-
166
- if (tx === this.activeTransaction) {
167
- this.activeTransaction = undefined;
168
- }
169
- }
170
-
171
- async transaction(operationsCallback: () => unknown) {
172
165
  const tx = new CoJsonIDBTransaction(this.db);
173
166
 
174
- this.activeTransaction = tx;
175
-
176
167
  try {
177
- await operationsCallback();
168
+ await operationsCallback(new IDBTransaction(tx));
178
169
  tx.commit(); // Tells the browser to not wait for another possible request and commit the transaction immediately
179
- } finally {
180
- this.activeTransaction = undefined;
170
+ } catch (error) {
171
+ tx.rollback();
181
172
  }
182
173
  }
183
174
  }