@optimystic/db-p2p-storage-rn 1.15.0 → 1.16.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/src/rn-opener.ts CHANGED
@@ -3,6 +3,7 @@ import type {
3
3
  LevelDBIteratorOptions,
4
4
  LevelDBLike,
5
5
  LevelDBWriteBatchLike,
6
+ LevelDBWriteOptions,
6
7
  } from './leveldb-like.js';
7
8
 
8
9
  /**
@@ -95,6 +96,11 @@ export function wrapRNLevelDB(native: RNLevelDBNative, WriteBatch: RNLevelDBWrit
95
96
  }
96
97
 
97
98
  class RNLevelDBAdapter implements LevelDBLike {
99
+ // `rn-leveldb` 3.11 writes every batch with LevelDB's default `WriteOptions` (`sync = false`)
100
+ // and offers no way to ask for a sync; `react-native-storage-syncs-once-rn-leveldb-can` is
101
+ // the upstream change that flips this to true.
102
+ readonly canSync = false;
103
+
98
104
  constructor(
99
105
  private readonly native: RNLevelDBNative,
100
106
  private readonly WriteBatch: RNLevelDBWriteBatchCtor,
@@ -105,14 +111,6 @@ class RNLevelDBAdapter implements LevelDBLike {
105
111
  return result === null ? undefined : new Uint8Array(result);
106
112
  }
107
113
 
108
- async put(key: Uint8Array, value: Uint8Array): Promise<void> {
109
- this.native.put(toArrayBuffer(key), toArrayBuffer(value));
110
- }
111
-
112
- async delete(key: Uint8Array): Promise<void> {
113
- this.native.delete(toArrayBuffer(key));
114
- }
115
-
116
114
  batch(): LevelDBWriteBatchLike {
117
115
  return new RNLevelDBWriteBatchAdapter(this.native, new this.WriteBatch());
118
116
  }
@@ -142,8 +140,12 @@ class RNLevelDBWriteBatchAdapter implements LevelDBWriteBatchLike {
142
140
  return this;
143
141
  }
144
142
 
145
- async write(): Promise<void> {
143
+ /** Unsynced, as every `rn-leveldb` write is. A sync asked of a handle whose `canSync` is false is a caller bug, refused before anything is written. */
144
+ async write(options?: LevelDBWriteOptions): Promise<void> {
146
145
  try {
146
+ if (options?.sync) {
147
+ throw new Error('rn-leveldb cannot sync a write: callers check canSync before asking (react-native-storage-syncs-once-rn-leveldb-can)');
148
+ }
147
149
  this.native.write(this.batch);
148
150
  } finally {
149
151
  this.batch.close();