@quereus/plugin-react-native-leveldb 4.13.1 → 4.15.2

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.
Files changed (2) hide show
  1. package/README.md +277 -277
  2. package/package.json +6 -6
package/README.md CHANGED
@@ -1,277 +1,277 @@
1
- # @quereus/plugin-react-native-leveldb
2
-
3
- > **Stability: Beta** — complete and tested, but the surface is still being shaped; a
4
- > breaking change may land in a minor release. It rides `@quereus/store`'s on-disk key
5
- > encoding, which is not frozen. See [Stability Tiers](../../docs/stability.md#tiers).
6
-
7
- LevelDB storage plugin for Quereus on React Native. Provides fast, persistent storage for mobile iOS and Android applications using the [`@quereus/store`](../quereus-store/) module.
8
-
9
- ## Features
10
-
11
- - **Fast**: LevelDB offers excellent read/write performance, significantly faster than AsyncStorage
12
- - **Transaction isolation**: Read-committed + read-your-own-writes by default (no write-write conflict detection; not snapshot isolation)
13
- - **Synchronous API**: Uses rn-leveldb's synchronous, blocking APIs
14
- - **Binary data**: Full support for binary keys and values via ArrayBuffers
15
- - **Sorted keys**: Efficient range queries with ordered iteration
16
- - **Persistent**: Data survives app restarts
17
- - **Atomic batch writes**: Uses native LevelDB WriteBatch for atomic multi-key operations
18
-
19
- ## Database naming
20
-
21
- Each logical store — a table's row data, or one of its secondary indexes — is its own
22
- on-device LevelDB database. The name comes from `@quereus/store`'s shared builders, is
23
- percent-escaped into a filename-safe form, and is prefixed with the configurable
24
- `databaseName` (default `quereus`):
25
-
26
- | Logical store | LevelDB database |
27
- | --- | --- |
28
- | table `t` in schema `main` | `quereus.main.t` |
29
- | index `x` on table `t` | `quereus.main.t_idx_x` |
30
- | table `a b` in schema `main` | `quereus.main.a%20b` |
31
- | table `a/b` in schema `main` | `quereus.main.a%2Fb` |
32
- | unified stats | `quereus.__stats__` |
33
- | catalog (DDL) | `quereus.__catalog__` |
34
-
35
- rn-leveldb resolves the name it is given as a path under the app's documents directory, so
36
- the escape covers every byte that is hostile in a filename: the path separators `/` and
37
- `\`, `:`, the Windows-illegal `* ? " < > |`, `%` itself (the escape introducer), and every
38
- control, space and non-ASCII byte. Because the separators can never appear literally, the
39
- whole name is always a single path component. The escape is reversible in principle, which
40
- is what guarantees two differently-named tables never share one database.
41
-
42
- The two reserved databases are deliberately **not** escaped, which is what keeps them
43
- unreachable from any user table: every logical store name contains a `.` (it is built as
44
- `{schema}.{table}`) and neither `__stats__` nor `__catalog__` does.
45
-
46
- > **Hard cutover (no on-disk migration).** An earlier version derived its own names and
47
- > lowercased only part of them — an index store was named with the index name's original
48
- > case, so one logical index could occupy two on-device databases depending on how the SQL
49
- > spelled it. Databases written by the older version are **not** read by this version and
50
- > must be re-created. Pre-1.0 dev data is expected to be thrown away; there is no migration
51
- > importer.
52
-
53
- ## Installation
54
-
55
- ```bash
56
- npm install @quereus/plugin-react-native-leveldb @quereus/store @quereus/isolation rn-leveldb
57
-
58
- # Don't forget to link native modules
59
- cd ios && pod install
60
- ```
61
-
62
- ## Required Polyfills
63
-
64
- React Native apps typically need a few runtime polyfills for Quereus and its plugins:
65
-
66
- - **`structuredClone`** - Quereus uses it internally for deep cloning operations
67
- - **`TextEncoder` / `TextDecoder`** - Used by store plugins for binary data encoding
68
- - **`Symbol.asyncIterator`** - Required for async-iterable support (for-await-of loops, async generators)
69
- - Quereus uses async iterables extensively for query results and data streaming
70
- - While Hermes has a workaround for AsyncGenerator objects, the `Symbol.asyncIterator` symbol itself must exist
71
- - Without it, you'll get `ReferenceError: Can't find variable: Symbol` when checking for async iterables
72
-
73
- **The plugin automatically checks for these polyfills** and throws a clear error message with installation instructions if any are missing.
74
-
75
- You can use packages like `core-js` or provide your own implementations:
76
-
77
- ```bash
78
- npm install core-js text-encoding
79
- ```
80
-
81
- Then in your app's entry point:
82
-
83
- ```typescript
84
- import 'core-js/features/structured-clone';
85
- import 'text-encoding';
86
-
87
- // Ensure Symbol.asyncIterator exists
88
- if (typeof Symbol.asyncIterator === 'undefined') {
89
- (Symbol as any).asyncIterator = Symbol.for('Symbol.asyncIterator');
90
- }
91
- ```
92
-
93
- ## Quick Start
94
-
95
- ### With registerPlugin (Recommended)
96
-
97
- ```typescript
98
- import { LevelDB, LevelDBWriteBatch } from 'rn-leveldb';
99
- import { Database, registerPlugin } from '@quereus/quereus';
100
- import leveldbPlugin from '@quereus/plugin-react-native-leveldb/plugin';
101
-
102
- const db = new Database();
103
- await registerPlugin(db, leveldbPlugin, {
104
- openFn: (name, createIfMissing, errorIfExists) => new LevelDB(name, createIfMissing, errorIfExists),
105
- WriteBatch: LevelDBWriteBatch,
106
- });
107
-
108
- await db.exec(`
109
- create table users (id integer primary key, name text)
110
- using store
111
- `);
112
-
113
- // Full transaction isolation enabled by default
114
- await db.exec('BEGIN');
115
- await db.exec(`insert into users (id, name) values (1, 'Alice')`);
116
- const user = await db.get('select * from users where id = 1'); // Sees uncommitted insert
117
- await db.exec('COMMIT');
118
- ```
119
-
120
- ### Disabling Isolation
121
-
122
- If you need maximum performance and don't require read-your-own-writes within transactions:
123
-
124
- ```typescript
125
- await registerPlugin(db, leveldbPlugin, {
126
- openFn: (name, createIfMissing, errorIfExists) => new LevelDB(name, createIfMissing, errorIfExists),
127
- WriteBatch: LevelDBWriteBatch,
128
- isolation: false // Disable isolation layer
129
- });
130
- ```
131
-
132
- ### Direct Usage with Provider
133
-
134
- ```typescript
135
- import { LevelDB, LevelDBWriteBatch } from 'rn-leveldb';
136
- import { Database } from '@quereus/quereus';
137
- import { createReactNativeLevelDBProvider } from '@quereus/plugin-react-native-leveldb';
138
- import { createIsolatedStoreModule } from '@quereus/store';
139
-
140
- const db = new Database();
141
- const provider = createReactNativeLevelDBProvider({
142
- openFn: (name, createIfMissing, errorIfExists) => new LevelDB(name, createIfMissing, errorIfExists),
143
- WriteBatch: LevelDBWriteBatch,
144
- });
145
- const storeModule = new StoreModule(provider);
146
- db.registerModule('store', storeModule);
147
-
148
- await db.exec(`
149
- create table users (id integer primary key, name text)
150
- using store
151
- `);
152
- ```
153
-
154
- ## API
155
-
156
- ### ReactNativeLevelDBStore
157
-
158
- Low-level KVStore implementation:
159
-
160
- ```typescript
161
- import { LevelDB, LevelDBWriteBatch } from 'rn-leveldb';
162
- import { ReactNativeLevelDBStore } from '@quereus/plugin-react-native-leveldb';
163
-
164
- // Open using the factory function
165
- const openFn = (name, createIfMissing, errorIfExists) => new LevelDB(name, createIfMissing, errorIfExists);
166
- const store = ReactNativeLevelDBStore.open(openFn, LevelDBWriteBatch, 'mystore');
167
-
168
- await store.put(key, value);
169
- const data = await store.get(key);
170
- await store.delete(key);
171
-
172
- // Range iteration
173
- for await (const { key, value } of store.iterate({ gte: startKey, lt: endKey })) {
174
- console.log(key, value);
175
- }
176
-
177
- // Atomic batch writes (uses native LevelDB WriteBatch)
178
- const batch = store.batch();
179
- batch.put(key1, value1);
180
- batch.put(key2, value2);
181
- batch.delete(key3);
182
- await batch.write();
183
-
184
- await store.close();
185
- ```
186
-
187
- ### ReactNativeLevelDBProvider
188
-
189
- Factory for managing multiple stores:
190
-
191
- ```typescript
192
- import { LevelDB, LevelDBWriteBatch } from 'rn-leveldb';
193
- import { createReactNativeLevelDBProvider } from '@quereus/plugin-react-native-leveldb';
194
-
195
- const provider = createReactNativeLevelDBProvider({
196
- openFn: (name, createIfMissing, errorIfExists) => new LevelDB(name, createIfMissing, errorIfExists),
197
- WriteBatch: LevelDBWriteBatch,
198
- databaseName: 'myapp',
199
- });
200
-
201
- const userStore = await provider.getStore('main', 'users');
202
- const catalogStore = await provider.getCatalogStore();
203
-
204
- await provider.closeStore('main', 'users');
205
- await provider.closeAll();
206
- ```
207
-
208
- ## Configuration
209
-
210
- ### Plugin Settings
211
-
212
- | Setting | Type | Default | Description |
213
- |---------|------|---------|-------------|
214
- | `openFn` | function | **required** | Factory function: `(name, createIfMissing, errorIfExists) => LevelDB` |
215
- | `WriteBatch` | constructor | **required** | LevelDBWriteBatch constructor from rn-leveldb |
216
- | `databaseName` | string | `'quereus'` | Base name prefix for all LevelDB databases |
217
- | `createIfMissing` | boolean | `true` | Create databases if they don't exist |
218
- | `moduleName` | string | `'store'` | Name to register the virtual table module under |
219
-
220
- ## Example with Transactions
221
-
222
- ```typescript
223
- import { LevelDB, LevelDBWriteBatch } from 'rn-leveldb';
224
- import { Database, registerPlugin } from '@quereus/quereus';
225
- import leveldbPlugin from '@quereus/plugin-react-native-leveldb/plugin';
226
-
227
- const db = new Database();
228
- await registerPlugin(db, leveldbPlugin, {
229
- openFn: (name, createIfMissing, errorIfExists) => new LevelDB(name, createIfMissing, errorIfExists),
230
- WriteBatch: LevelDBWriteBatch,
231
- });
232
-
233
- await db.exec(`create table accounts (id integer primary key, balance real) using store`);
234
-
235
- await db.exec('begin');
236
- try {
237
- await db.exec(`update accounts set balance = balance - 100 where id = 1`);
238
- await db.exec(`update accounts set balance = balance + 100 where id = 2`);
239
- await db.exec('commit');
240
- } catch (e) {
241
- await db.exec('rollback');
242
- throw e;
243
- }
244
- ```
245
-
246
- ## Why LevelDB?
247
-
248
- rn-leveldb provides significant performance advantages over other React Native storage options:
249
-
250
- | Storage Solution | Operations/sec | Notes |
251
- |------------------|----------------|-------|
252
- | rn-leveldb | ~50,000 | Synchronous, blocking API |
253
- | AsyncStorage | ~2,000 | JSON serialization overhead |
254
- | react-native-sqlite-storage | ~5,000 | Full SQL parsing overhead |
255
-
256
- LevelDB is ideal for Quereus because:
257
- - **Sorted keys**: Natural fit for the StoreModule's index-organized storage
258
- - **Binary support**: No JSON serialization needed for keys/values
259
- - **Range scans**: Efficient ordered iteration for query execution
260
-
261
- ## Peer Dependencies
262
-
263
- This plugin requires:
264
- - `@quereus/quereus` ^0.24.0
265
- - `@quereus/store` ^0.3.5
266
- - `rn-leveldb` ^3.11.0
267
-
268
- ## Related Packages
269
-
270
- - [`@quereus/store`](../quereus-store/) - Core storage module (StoreModule, StoreTable)
271
- - [`@quereus/plugin-leveldb`](../quereus-plugin-leveldb/) - LevelDB plugin for Node.js
272
- - [`@quereus/plugin-indexeddb`](../quereus-plugin-indexeddb/) - IndexedDB plugin for browsers
273
-
274
- ## License
275
-
276
- MIT
277
-
1
+ # @quereus/plugin-react-native-leveldb
2
+
3
+ > **Stability: Beta** — complete and tested, but the surface is still being shaped; a
4
+ > breaking change may land in a minor release. It rides `@quereus/store`'s on-disk key
5
+ > encoding, which is not frozen. See [Stability Tiers](../../docs/stability.md#tiers).
6
+
7
+ LevelDB storage plugin for Quereus on React Native. Provides fast, persistent storage for mobile iOS and Android applications using the [`@quereus/store`](../quereus-store/) module.
8
+
9
+ ## Features
10
+
11
+ - **Fast**: LevelDB offers excellent read/write performance, significantly faster than AsyncStorage
12
+ - **Transaction isolation**: Read-committed + read-your-own-writes by default (no write-write conflict detection; not snapshot isolation)
13
+ - **Synchronous API**: Uses rn-leveldb's synchronous, blocking APIs
14
+ - **Binary data**: Full support for binary keys and values via ArrayBuffers
15
+ - **Sorted keys**: Efficient range queries with ordered iteration
16
+ - **Persistent**: Data survives app restarts
17
+ - **Atomic batch writes**: Uses native LevelDB WriteBatch for atomic multi-key operations
18
+
19
+ ## Database naming
20
+
21
+ Each logical store — a table's row data, or one of its secondary indexes — is its own
22
+ on-device LevelDB database. The name comes from `@quereus/store`'s shared builders, is
23
+ percent-escaped into a filename-safe form, and is prefixed with the configurable
24
+ `databaseName` (default `quereus`):
25
+
26
+ | Logical store | LevelDB database |
27
+ | --- | --- |
28
+ | table `t` in schema `main` | `quereus.main.t` |
29
+ | index `x` on table `t` | `quereus.main.t_idx_x` |
30
+ | table `a b` in schema `main` | `quereus.main.a%20b` |
31
+ | table `a/b` in schema `main` | `quereus.main.a%2Fb` |
32
+ | unified stats | `quereus.__stats__` |
33
+ | catalog (DDL) | `quereus.__catalog__` |
34
+
35
+ rn-leveldb resolves the name it is given as a path under the app's documents directory, so
36
+ the escape covers every byte that is hostile in a filename: the path separators `/` and
37
+ `\`, `:`, the Windows-illegal `* ? " < > |`, `%` itself (the escape introducer), and every
38
+ control, space and non-ASCII byte. Because the separators can never appear literally, the
39
+ whole name is always a single path component. The escape is reversible in principle, which
40
+ is what guarantees two differently-named tables never share one database.
41
+
42
+ The two reserved databases are deliberately **not** escaped, which is what keeps them
43
+ unreachable from any user table: every logical store name contains a `.` (it is built as
44
+ `{schema}.{table}`) and neither `__stats__` nor `__catalog__` does.
45
+
46
+ > **Hard cutover (no on-disk migration).** An earlier version derived its own names and
47
+ > lowercased only part of them — an index store was named with the index name's original
48
+ > case, so one logical index could occupy two on-device databases depending on how the SQL
49
+ > spelled it. Databases written by the older version are **not** read by this version and
50
+ > must be re-created. Pre-1.0 dev data is expected to be thrown away; there is no migration
51
+ > importer.
52
+
53
+ ## Installation
54
+
55
+ ```bash
56
+ npm install @quereus/plugin-react-native-leveldb @quereus/store @quereus/isolation rn-leveldb
57
+
58
+ # Don't forget to link native modules
59
+ cd ios && pod install
60
+ ```
61
+
62
+ ## Required Polyfills
63
+
64
+ React Native apps typically need a few runtime polyfills for Quereus and its plugins:
65
+
66
+ - **`structuredClone`** - Quereus uses it internally for deep cloning operations
67
+ - **`TextEncoder` / `TextDecoder`** - Used by store plugins for binary data encoding
68
+ - **`Symbol.asyncIterator`** - Required for async-iterable support (for-await-of loops, async generators)
69
+ - Quereus uses async iterables extensively for query results and data streaming
70
+ - While Hermes has a workaround for AsyncGenerator objects, the `Symbol.asyncIterator` symbol itself must exist
71
+ - Without it, you'll get `ReferenceError: Can't find variable: Symbol` when checking for async iterables
72
+
73
+ **The plugin automatically checks for these polyfills** and throws a clear error message with installation instructions if any are missing.
74
+
75
+ You can use packages like `core-js` or provide your own implementations:
76
+
77
+ ```bash
78
+ npm install core-js text-encoding
79
+ ```
80
+
81
+ Then in your app's entry point:
82
+
83
+ ```typescript
84
+ import 'core-js/features/structured-clone';
85
+ import 'text-encoding';
86
+
87
+ // Ensure Symbol.asyncIterator exists
88
+ if (typeof Symbol.asyncIterator === 'undefined') {
89
+ (Symbol as any).asyncIterator = Symbol.for('Symbol.asyncIterator');
90
+ }
91
+ ```
92
+
93
+ ## Quick Start
94
+
95
+ ### With registerPlugin (Recommended)
96
+
97
+ ```typescript
98
+ import { LevelDB, LevelDBWriteBatch } from 'rn-leveldb';
99
+ import { Database, registerPlugin } from '@quereus/quereus';
100
+ import leveldbPlugin from '@quereus/plugin-react-native-leveldb/plugin';
101
+
102
+ const db = new Database();
103
+ await registerPlugin(db, leveldbPlugin, {
104
+ openFn: (name, createIfMissing, errorIfExists) => new LevelDB(name, createIfMissing, errorIfExists),
105
+ WriteBatch: LevelDBWriteBatch,
106
+ });
107
+
108
+ await db.exec(`
109
+ create table users (id integer primary key, name text)
110
+ using store
111
+ `);
112
+
113
+ // Full transaction isolation enabled by default
114
+ await db.exec('BEGIN');
115
+ await db.exec(`insert into users (id, name) values (1, 'Alice')`);
116
+ const user = await db.get('select * from users where id = 1'); // Sees uncommitted insert
117
+ await db.exec('COMMIT');
118
+ ```
119
+
120
+ ### Disabling Isolation
121
+
122
+ If you need maximum performance and don't require read-your-own-writes within transactions:
123
+
124
+ ```typescript
125
+ await registerPlugin(db, leveldbPlugin, {
126
+ openFn: (name, createIfMissing, errorIfExists) => new LevelDB(name, createIfMissing, errorIfExists),
127
+ WriteBatch: LevelDBWriteBatch,
128
+ isolation: false // Disable isolation layer
129
+ });
130
+ ```
131
+
132
+ ### Direct Usage with Provider
133
+
134
+ ```typescript
135
+ import { LevelDB, LevelDBWriteBatch } from 'rn-leveldb';
136
+ import { Database } from '@quereus/quereus';
137
+ import { createReactNativeLevelDBProvider } from '@quereus/plugin-react-native-leveldb';
138
+ import { createIsolatedStoreModule } from '@quereus/store';
139
+
140
+ const db = new Database();
141
+ const provider = createReactNativeLevelDBProvider({
142
+ openFn: (name, createIfMissing, errorIfExists) => new LevelDB(name, createIfMissing, errorIfExists),
143
+ WriteBatch: LevelDBWriteBatch,
144
+ });
145
+ const storeModule = new StoreModule(provider);
146
+ db.registerModule('store', storeModule);
147
+
148
+ await db.exec(`
149
+ create table users (id integer primary key, name text)
150
+ using store
151
+ `);
152
+ ```
153
+
154
+ ## API
155
+
156
+ ### ReactNativeLevelDBStore
157
+
158
+ Low-level KVStore implementation:
159
+
160
+ ```typescript
161
+ import { LevelDB, LevelDBWriteBatch } from 'rn-leveldb';
162
+ import { ReactNativeLevelDBStore } from '@quereus/plugin-react-native-leveldb';
163
+
164
+ // Open using the factory function
165
+ const openFn = (name, createIfMissing, errorIfExists) => new LevelDB(name, createIfMissing, errorIfExists);
166
+ const store = ReactNativeLevelDBStore.open(openFn, LevelDBWriteBatch, 'mystore');
167
+
168
+ await store.put(key, value);
169
+ const data = await store.get(key);
170
+ await store.delete(key);
171
+
172
+ // Range iteration
173
+ for await (const { key, value } of store.iterate({ gte: startKey, lt: endKey })) {
174
+ console.log(key, value);
175
+ }
176
+
177
+ // Atomic batch writes (uses native LevelDB WriteBatch)
178
+ const batch = store.batch();
179
+ batch.put(key1, value1);
180
+ batch.put(key2, value2);
181
+ batch.delete(key3);
182
+ await batch.write();
183
+
184
+ await store.close();
185
+ ```
186
+
187
+ ### ReactNativeLevelDBProvider
188
+
189
+ Factory for managing multiple stores:
190
+
191
+ ```typescript
192
+ import { LevelDB, LevelDBWriteBatch } from 'rn-leveldb';
193
+ import { createReactNativeLevelDBProvider } from '@quereus/plugin-react-native-leveldb';
194
+
195
+ const provider = createReactNativeLevelDBProvider({
196
+ openFn: (name, createIfMissing, errorIfExists) => new LevelDB(name, createIfMissing, errorIfExists),
197
+ WriteBatch: LevelDBWriteBatch,
198
+ databaseName: 'myapp',
199
+ });
200
+
201
+ const userStore = await provider.getStore('main', 'users');
202
+ const catalogStore = await provider.getCatalogStore();
203
+
204
+ await provider.closeStore('main', 'users');
205
+ await provider.closeAll();
206
+ ```
207
+
208
+ ## Configuration
209
+
210
+ ### Plugin Settings
211
+
212
+ | Setting | Type | Default | Description |
213
+ |---------|------|---------|-------------|
214
+ | `openFn` | function | **required** | Factory function: `(name, createIfMissing, errorIfExists) => LevelDB` |
215
+ | `WriteBatch` | constructor | **required** | LevelDBWriteBatch constructor from rn-leveldb |
216
+ | `databaseName` | string | `'quereus'` | Base name prefix for all LevelDB databases |
217
+ | `createIfMissing` | boolean | `true` | Create databases if they don't exist |
218
+ | `moduleName` | string | `'store'` | Name to register the virtual table module under |
219
+
220
+ ## Example with Transactions
221
+
222
+ ```typescript
223
+ import { LevelDB, LevelDBWriteBatch } from 'rn-leveldb';
224
+ import { Database, registerPlugin } from '@quereus/quereus';
225
+ import leveldbPlugin from '@quereus/plugin-react-native-leveldb/plugin';
226
+
227
+ const db = new Database();
228
+ await registerPlugin(db, leveldbPlugin, {
229
+ openFn: (name, createIfMissing, errorIfExists) => new LevelDB(name, createIfMissing, errorIfExists),
230
+ WriteBatch: LevelDBWriteBatch,
231
+ });
232
+
233
+ await db.exec(`create table accounts (id integer primary key, balance real) using store`);
234
+
235
+ await db.exec('begin');
236
+ try {
237
+ await db.exec(`update accounts set balance = balance - 100 where id = 1`);
238
+ await db.exec(`update accounts set balance = balance + 100 where id = 2`);
239
+ await db.exec('commit');
240
+ } catch (e) {
241
+ await db.exec('rollback');
242
+ throw e;
243
+ }
244
+ ```
245
+
246
+ ## Why LevelDB?
247
+
248
+ rn-leveldb provides significant performance advantages over other React Native storage options:
249
+
250
+ | Storage Solution | Operations/sec | Notes |
251
+ |------------------|----------------|-------|
252
+ | rn-leveldb | ~50,000 | Synchronous, blocking API |
253
+ | AsyncStorage | ~2,000 | JSON serialization overhead |
254
+ | react-native-sqlite-storage | ~5,000 | Full SQL parsing overhead |
255
+
256
+ LevelDB is ideal for Quereus because:
257
+ - **Sorted keys**: Natural fit for the StoreModule's index-organized storage
258
+ - **Binary support**: No JSON serialization needed for keys/values
259
+ - **Range scans**: Efficient ordered iteration for query execution
260
+
261
+ ## Peer Dependencies
262
+
263
+ This plugin requires:
264
+ - `@quereus/quereus` ^0.24.0
265
+ - `@quereus/store` ^0.3.5
266
+ - `rn-leveldb` ^3.11.0
267
+
268
+ ## Related Packages
269
+
270
+ - [`@quereus/store`](../quereus-store/) - Core storage module (StoreModule, StoreTable)
271
+ - [`@quereus/plugin-leveldb`](../quereus-plugin-leveldb/) - LevelDB plugin for Node.js
272
+ - [`@quereus/plugin-indexeddb`](../quereus-plugin-indexeddb/) - IndexedDB plugin for browsers
273
+
274
+ ## License
275
+
276
+ MIT
277
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quereus/plugin-react-native-leveldb",
3
- "version": "4.13.1",
3
+ "version": "4.15.2",
4
4
  "type": "module",
5
5
  "description": "React Native LevelDB storage plugin for Quereus - mobile persistent storage",
6
6
  "keywords": [
@@ -41,9 +41,9 @@
41
41
  }
42
42
  },
43
43
  "peerDependencies": {
44
- "@quereus/isolation": "^4.13.1",
45
- "@quereus/quereus": "^4.13.1",
46
- "@quereus/store": "^4.13.1",
44
+ "@quereus/isolation": "^4.15.2",
45
+ "@quereus/quereus": "^4.15.2",
46
+ "@quereus/store": "^4.15.2",
47
47
  "rn-leveldb": "^3.11.0"
48
48
  },
49
49
  "engines": {
@@ -87,8 +87,8 @@
87
87
  "test": "cd ../.. && node --import ./packages/quereus-plugin-react-native-leveldb/register.mjs node_modules/mocha/bin/mocha.js \"packages/quereus-plugin-react-native-leveldb/test/**/*.spec.ts\" --reporter min --colors"
88
88
  },
89
89
  "dependencies": {
90
- "@quereus/quereus": "^4.13.1",
91
- "@quereus/store": "^4.13.1"
90
+ "@quereus/quereus": "^4.15.2",
91
+ "@quereus/store": "^4.15.2"
92
92
  },
93
93
  "devDependencies": {
94
94
  "@quereus/isolation": "*",