@quereus/plugin-react-native-leveldb 4.11.0 → 4.12.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/README.md CHANGED
@@ -16,6 +16,40 @@ LevelDB storage plugin for Quereus on React Native. Provides fast, persistent st
16
16
  - **Persistent**: Data survives app restarts
17
17
  - **Atomic batch writes**: Uses native LevelDB WriteBatch for atomic multi-key operations
18
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
+
19
53
  ## Installation
20
54
 
21
55
  ```bash
@@ -1,13 +1,28 @@
1
1
  /**
2
2
  * React Native LevelDB KVStore provider implementation.
3
3
  *
4
- * Manages LevelDB stores for the StoreModule in React Native environments.
4
+ * Manages LevelDB stores for the StoreModule in React Native environments. Each logical
5
+ * store is its own on-device LevelDB database, named after the store.
5
6
  *
6
- * Storage naming convention:
7
- * {prefix}.{schema}.{table} - Data store (row data)
8
- * {prefix}.{schema}.{table}_idx_{name} - Index store (secondary indexes)
9
- * {prefix}.__stats__ - Unified stats store (row counts for all tables)
10
- * {prefix}.__catalog__ - Catalog store (DDL metadata)
7
+ * Storage naming convention. Every logical store name comes from the shared builders
8
+ * (`buildDataStoreName` / `buildIndexStoreName`), then {@link encodeDatabaseName} escapes
9
+ * it into a filename-safe form:
10
+ *
11
+ * {prefix}.{encoded {schema}.{table}} - Data store (row data)
12
+ * {prefix}.{encoded {schema}.{table}_idx_{name}} - Index store (secondary indexes)
13
+ * {prefix}.__stats__ - Unified stats store (row counts)
14
+ * {prefix}.__catalog__ - Catalog store (DDL metadata)
15
+ *
16
+ * e.g. table `users` in schema `main` → `quereus.main.users`; a table named `a/b` →
17
+ * `quereus.main.a%2Fb`.
18
+ *
19
+ * The two reserved stores are NOT run through the encoder, and that is what keeps them in
20
+ * a namespace no table can reach — see {@link encodeDatabaseName}.
21
+ *
22
+ * HARD CUTOVER: an earlier version derived its own names and lowercased only part of them
23
+ * (an index store was `{prefix}.{schema}.{table}_idx_{indexName}` with the index name's
24
+ * case preserved, so one logical index could occupy two on-device databases). Those
25
+ * databases are NOT read here and must be re-created; there is no on-disk migration.
11
26
  */
12
27
  import type { KVStore, KVStoreProvider } from '@quereus/store';
13
28
  import { type LevelDBOpenFn, type LevelDBWriteBatchConstructor } from './store.js';
@@ -53,15 +68,6 @@ export declare class ReactNativeLevelDBProvider implements KVStoreProvider {
53
68
  private catalogStore;
54
69
  private statsStore;
55
70
  constructor(options: ReactNativeLevelDBProviderOptions);
56
- /**
57
- * Get the database name for a table.
58
- * Uses dots as separators for a flat namespace.
59
- */
60
- private getDatabaseName;
61
- /**
62
- * Get the key for the store cache.
63
- */
64
- private getStoreKey;
65
71
  getStore(schemaName: string, tableName: string, _options?: Record<string, unknown>): Promise<KVStore>;
66
72
  getIndexStore(schemaName: string, tableName: string, indexName: string): Promise<KVStore>;
67
73
  getStatsStore(_schemaName: string, _tableName: string): Promise<KVStore>;
@@ -71,8 +77,22 @@ export declare class ReactNativeLevelDBProvider implements KVStoreProvider {
71
77
  closeAll(): Promise<void>;
72
78
  deleteIndexStore(schemaName: string, tableName: string, indexName: string): Promise<void>;
73
79
  deleteTableStores(schemaName: string, tableName: string, indexNames: readonly string[]): Promise<void>;
80
+ /**
81
+ * Get or open the store for a logical store name, caching by that CANONICAL name —
82
+ * the same string the shared builders produce and `StoreModule` reasons about. Keying
83
+ * the cache by anything else (a separately-derived spelling) risks two cache entries
84
+ * for one on-device database, or one entry shared by two.
85
+ */
74
86
  private getOrCreateStore;
75
- private closeStoreByKey;
87
+ private closeStoreByName;
88
+ /**
89
+ * Erase a store's keyspace and drop its cached handle, so a store re-opened later under
90
+ * the same name is EMPTY — the reclaim contract on
91
+ * {@link KVStoreProvider.deleteTableStores}. Same shape as `@quereus/plugin-leveldb`'s
92
+ * `clearAndDropStore`: the store owns the erase ({@link ReactNativeLevelDBStore.clear}),
93
+ * the provider owns the handle.
94
+ */
95
+ private clearAndDropStore;
76
96
  }
77
97
  /**
78
98
  * Create a React Native LevelDB provider with the given options.
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAA2B,KAAK,aAAa,EAAE,KAAK,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAE5G;;GAEG;AACH,MAAM,WAAW,iCAAiC;IACjD;;;;OAIG;IACH,MAAM,EAAE,aAAa,CAAC;IAEtB;;;OAGG;IACH,UAAU,EAAE,4BAA4B,CAAC;IAEzC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,eAAe;IACjE,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,MAAM,CAA8C;IAC5D,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,UAAU,CAAwC;gBAE9C,OAAO,EAAE,iCAAiC;IAOtD;;;OAGG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAIb,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMzF,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWxE,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAUnC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBzB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzF,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB5G,OAAO,CAAC,gBAAgB;YAaV,eAAe;CAO7B;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,iCAAiC,GAAG,0BAA0B,CAEvH"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAA2B,KAAK,aAAa,EAAE,KAAK,4BAA4B,EAAE,MAAM,YAAY,CAAC;AA2E5G;;GAEG;AACH,MAAM,WAAW,iCAAiC;IACjD;;;;OAIG;IACH,MAAM,EAAE,aAAa,CAAC;IAEtB;;;OAGG;IACH,UAAU,EAAE,4BAA4B,CAAC;IAEzC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,eAAe;IACjE,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,MAAM,CAA8C;IAC5D,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,UAAU,CAAwC;gBAE9C,OAAO,EAAE,iCAAiC;IAOhD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzF,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWxE,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAUnC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBzB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzF,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5G;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;YAuBV,gBAAgB;IAQ9B;;;;;;OAMG;YACW,iBAAiB;CAgB/B;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,iCAAiC,GAAG,0BAA0B,CAEvH"}
@@ -1,16 +1,102 @@
1
1
  /**
2
2
  * React Native LevelDB KVStore provider implementation.
3
3
  *
4
- * Manages LevelDB stores for the StoreModule in React Native environments.
4
+ * Manages LevelDB stores for the StoreModule in React Native environments. Each logical
5
+ * store is its own on-device LevelDB database, named after the store.
5
6
  *
6
- * Storage naming convention:
7
- * {prefix}.{schema}.{table} - Data store (row data)
8
- * {prefix}.{schema}.{table}_idx_{name} - Index store (secondary indexes)
9
- * {prefix}.__stats__ - Unified stats store (row counts for all tables)
10
- * {prefix}.__catalog__ - Catalog store (DDL metadata)
7
+ * Storage naming convention. Every logical store name comes from the shared builders
8
+ * (`buildDataStoreName` / `buildIndexStoreName`), then {@link encodeDatabaseName} escapes
9
+ * it into a filename-safe form:
10
+ *
11
+ * {prefix}.{encoded {schema}.{table}} - Data store (row data)
12
+ * {prefix}.{encoded {schema}.{table}_idx_{name}} - Index store (secondary indexes)
13
+ * {prefix}.__stats__ - Unified stats store (row counts)
14
+ * {prefix}.__catalog__ - Catalog store (DDL metadata)
15
+ *
16
+ * e.g. table `users` in schema `main` → `quereus.main.users`; a table named `a/b` →
17
+ * `quereus.main.a%2Fb`.
18
+ *
19
+ * The two reserved stores are NOT run through the encoder, and that is what keeps them in
20
+ * a namespace no table can reach — see {@link encodeDatabaseName}.
21
+ *
22
+ * HARD CUTOVER: an earlier version derived its own names and lowercased only part of them
23
+ * (an index store was `{prefix}.{schema}.{table}_idx_{indexName}` with the index name's
24
+ * case preserved, so one logical index could occupy two on-device databases). Those
25
+ * databases are NOT read here and must be re-created; there is no on-disk migration.
11
26
  */
12
- import { STORE_SUFFIX, STATS_STORE_NAME } from '@quereus/store';
27
+ import { buildDataStoreName, buildIndexStoreName, CATALOG_STORE_NAME, STATS_STORE_NAME } from '@quereus/store';
13
28
  import { ReactNativeLevelDBStore } from './store.js';
29
+ const textEncoder = new TextEncoder();
30
+ /**
31
+ * True when `byte` may appear literally in a database name.
32
+ *
33
+ * Printable ASCII only, minus the escape introducer `%` and every byte that is hostile in
34
+ * a filesystem path — rn-leveldb resolves the name it is given as a path under the app's
35
+ * documents directory, so the name has to be safe as a SINGLE path component.
36
+ *
37
+ * Excluded: `/` and `\` (path separators — excluding them is what stops a quoted table
38
+ * name from reaching a directory boundary, so a name like `..` can only ever be a strange
39
+ * filename, never a traversal), `:` (a separator on Apple platforms and in Windows paths),
40
+ * and `* ? " < > |` (illegal on Windows). The last group is not needed on iOS/Android but
41
+ * costs nothing: ordinary identifiers contain none of these, and excluding them keeps the
42
+ * name usable if a host ever puts it on a Windows-like filesystem. Control bytes, NUL,
43
+ * space and every non-ASCII byte fall outside the printable range and are escaped too.
44
+ */
45
+ function isSafeNameByte(byte) {
46
+ if (byte < 0x21 || byte > 0x7e)
47
+ return false;
48
+ switch (byte) {
49
+ case 0x25: // '%' — reserved as the escape introducer, so the mapping stays injective
50
+ case 0x2f: // '/'
51
+ case 0x5c: // '\'
52
+ case 0x3a: // ':'
53
+ case 0x2a: // '*'
54
+ case 0x3f: // '?'
55
+ case 0x22: // '"'
56
+ case 0x3c: // '<'
57
+ case 0x3e: // '>'
58
+ case 0x7c: // '|'
59
+ return false;
60
+ default:
61
+ return true;
62
+ }
63
+ }
64
+ /**
65
+ * Escape a logical store name into a filename-safe on-device database name.
66
+ *
67
+ * Percent-encoding of the UTF-8 bytes, same shape as `@quereus/plugin-leveldb`'s
68
+ * `encodeSublevelName` (no SQL is involved here, so `%` is free to be the introducer) but
69
+ * with a stricter safe set — see {@link isSafeNameByte}. Ordinary lowercase identifiers,
70
+ * `.` and `_` pass through unchanged; the name is never decoded back.
71
+ *
72
+ * The mapping is injective over the names the shared builders can produce, which is what
73
+ * `StoreModule.assertStoreNameFree` relies on: it compares LOGICAL names and only stands in
74
+ * for a physical collision check while each provider's encoding is one-to-one. (It is NOT
75
+ * injective over arbitrary JS strings — `TextEncoder` folds every unpaired surrogate to
76
+ * U+FFFD — but those builders reject such an identifier, so no such name reaches here.)
77
+ *
78
+ * Disjoint from the reserved store names: `{databaseName}.__stats__` and
79
+ * `{databaseName}.__catalog__` are used UNESCAPED, and every canonical store name contains
80
+ * at least one `.` (it is built as `{schema}.{table}`) which survives escaping, while
81
+ * neither reserved name contains one. Do not run the reserved names through this function.
82
+ */
83
+ // NOTE: escaping is a 3x expansion per unsafe byte, and the result is one path component,
84
+ // which most filesystems cap at 255 bytes. A 90-character Cyrillic table name is 193 bytes
85
+ // as raw UTF-8 (which the previous unescaped naming handed to rn-leveldb) but 553 bytes
86
+ // escaped, so names of roughly 80+ non-ASCII characters that used to open will now fail on
87
+ // device with a filesystem error. Not reproducible off-device (the tests drive MockLevelDB,
88
+ // which has no path). If long non-ASCII table names ever need to work here, hash the tail of
89
+ // an over-long encoded name rather than widening the safe set — the escape must stay
90
+ // injective. The other three providers have no equivalent limit.
91
+ function encodeDatabaseName(name) {
92
+ let out = '';
93
+ for (const byte of textEncoder.encode(name)) {
94
+ out += isSafeNameByte(byte)
95
+ ? String.fromCharCode(byte)
96
+ : '%' + byte.toString(16).toUpperCase().padStart(2, '0');
97
+ }
98
+ return out;
99
+ }
14
100
  /**
15
101
  * React Native LevelDB implementation of KVStoreProvider.
16
102
  *
@@ -31,27 +117,11 @@ export class ReactNativeLevelDBProvider {
31
117
  this.databaseName = options.databaseName ?? 'quereus';
32
118
  this.createIfMissing = options.createIfMissing ?? true;
33
119
  }
34
- /**
35
- * Get the database name for a table.
36
- * Uses dots as separators for a flat namespace.
37
- */
38
- getDatabaseName(schemaName, tableName) {
39
- return `${this.databaseName}.${schemaName}.${tableName}`.toLowerCase();
40
- }
41
- /**
42
- * Get the key for the store cache.
43
- */
44
- getStoreKey(schemaName, tableName) {
45
- return `${schemaName}.${tableName}`.toLowerCase();
46
- }
47
120
  async getStore(schemaName, tableName, _options) {
48
- const key = this.getStoreKey(schemaName, tableName);
49
- return this.getOrCreateStore(key, this.getDatabaseName(schemaName, tableName));
121
+ return this.getOrCreateStore(buildDataStoreName(schemaName, tableName));
50
122
  }
51
123
  async getIndexStore(schemaName, tableName, indexName) {
52
- const key = `${this.getStoreKey(schemaName, tableName)}${STORE_SUFFIX.INDEX}${indexName}`;
53
- const dbName = `${this.getDatabaseName(schemaName, tableName)}${STORE_SUFFIX.INDEX}${indexName}`;
54
- return this.getOrCreateStore(key, dbName);
124
+ return this.getOrCreateStore(buildIndexStoreName(schemaName, tableName, indexName));
55
125
  }
56
126
  async getStatsStore(_schemaName, _tableName) {
57
127
  // Use the unified __stats__ store for all tables
@@ -65,7 +135,7 @@ export class ReactNativeLevelDBProvider {
65
135
  }
66
136
  async getCatalogStore() {
67
137
  if (!this.catalogStore) {
68
- const catalogDbName = `${this.databaseName}.__catalog__`;
138
+ const catalogDbName = `${this.databaseName}.${CATALOG_STORE_NAME}`;
69
139
  this.catalogStore = ReactNativeLevelDBStore.open(this.openFn, this.WriteBatch, catalogDbName, {
70
140
  createIfMissing: this.createIfMissing,
71
141
  });
@@ -73,12 +143,10 @@ export class ReactNativeLevelDBProvider {
73
143
  return this.catalogStore;
74
144
  }
75
145
  async closeStore(schemaName, tableName) {
76
- const key = this.getStoreKey(schemaName, tableName);
77
- await this.closeStoreByKey(key);
146
+ await this.closeStoreByName(buildDataStoreName(schemaName, tableName));
78
147
  }
79
148
  async closeIndexStore(schemaName, tableName, indexName) {
80
- const key = `${this.getStoreKey(schemaName, tableName)}${STORE_SUFFIX.INDEX}${indexName}`;
81
- await this.closeStoreByKey(key);
149
+ await this.closeStoreByName(buildIndexStoreName(schemaName, tableName, indexName));
82
150
  }
83
151
  async closeAll() {
84
152
  for (const store of this.stores.values()) {
@@ -95,40 +163,76 @@ export class ReactNativeLevelDBProvider {
95
163
  }
96
164
  }
97
165
  async deleteIndexStore(schemaName, tableName, indexName) {
98
- const key = `${this.getStoreKey(schemaName, tableName)}${STORE_SUFFIX.INDEX}${indexName}`;
99
- await this.closeStoreByKey(key);
100
- // Note: LevelDB doesn't have a built-in delete, would need filesystem ops
166
+ await this.clearAndDropStore(buildIndexStoreName(schemaName, tableName, indexName));
101
167
  }
102
168
  async deleteTableStores(schemaName, tableName, indexNames) {
103
- // Close data store
104
- const dataKey = this.getStoreKey(schemaName, tableName);
105
- await this.closeStoreByKey(dataKey);
106
- // Stats are in the unified __stats__ store, so no need to close a separate store
107
- // The individual stats entry will be removed by the calling code if needed
108
- // Close exactly the table's index stores (by name), not every store matching
169
+ // Erase the data store's keyspace.
170
+ await this.clearAndDropStore(buildDataStoreName(schemaName, tableName));
171
+ // Stats live in the unified __stats__ store, so there is no per-table stats store to
172
+ // clear here. (The table's ENTRY in that store is not reclaimed by anyone today —
173
+ // tracked as `bug-drop-table-leaves-stale-stats-entry`; it is a stale row-count
174
+ // estimate, not stale rows.)
175
+ // Erase exactly the table's index stores (by name), not every store matching
109
176
  // the `{table}_idx_` prefix — that prefix also matches a sibling table
110
177
  // literally named `{table}_idx_<x>`.
111
178
  for (const indexName of indexNames) {
112
- await this.closeStoreByKey(`${dataKey}${STORE_SUFFIX.INDEX}${indexName}`);
179
+ await this.clearAndDropStore(buildIndexStoreName(schemaName, tableName, indexName));
113
180
  }
114
181
  }
115
- getOrCreateStore(key, dbName) {
116
- let store = this.stores.get(key);
182
+ /**
183
+ * Get or open the store for a logical store name, caching by that CANONICAL name —
184
+ * the same string the shared builders produce and `StoreModule` reasons about. Keying
185
+ * the cache by anything else (a separately-derived spelling) risks two cache entries
186
+ * for one on-device database, or one entry shared by two.
187
+ */
188
+ getOrCreateStore(storeName) {
189
+ let store = this.stores.get(storeName);
190
+ if (store?.isClosed()) {
191
+ // A handle handed out earlier was closed out-of-band (e.g. the StoreTable's
192
+ // releaseIndexStore closes the index handle just before dropIndex calls
193
+ // deleteIndexStore). Evict the stale entry and re-open the database — every read
194
+ // through a closed handle throws, including the clearing walk below.
195
+ this.stores.delete(storeName);
196
+ store = undefined;
197
+ }
117
198
  if (!store) {
199
+ const dbName = `${this.databaseName}.${encodeDatabaseName(storeName)}`;
118
200
  store = ReactNativeLevelDBStore.open(this.openFn, this.WriteBatch, dbName, {
119
201
  createIfMissing: this.createIfMissing,
120
202
  });
121
- this.stores.set(key, store);
203
+ this.stores.set(storeName, store);
122
204
  }
123
205
  return store;
124
206
  }
125
- async closeStoreByKey(key) {
126
- const store = this.stores.get(key);
207
+ async closeStoreByName(storeName) {
208
+ const store = this.stores.get(storeName);
127
209
  if (store) {
128
210
  await store.close();
129
- this.stores.delete(key);
211
+ this.stores.delete(storeName);
130
212
  }
131
213
  }
214
+ /**
215
+ * Erase a store's keyspace and drop its cached handle, so a store re-opened later under
216
+ * the same name is EMPTY — the reclaim contract on
217
+ * {@link KVStoreProvider.deleteTableStores}. Same shape as `@quereus/plugin-leveldb`'s
218
+ * `clearAndDropStore`: the store owns the erase ({@link ReactNativeLevelDBStore.clear}),
219
+ * the provider owns the handle.
220
+ */
221
+ async clearAndDropStore(storeName) {
222
+ // NOTE: opening the store first means clearing a store that never existed CREATES an
223
+ // empty on-device database as a side effect (createIfMissing defaults true). Harmless
224
+ // — the operation is still a no-op for data, which is what the reclaim contract asks
225
+ // of an absent store — and it leaves the same empty-database residue described below.
226
+ const store = this.getOrCreateStore(storeName);
227
+ await store.clear();
228
+ // NOTE: this empties the database but leaves the on-device LevelDB DIRECTORY in place
229
+ // (a few KB of MANIFEST/LOG/CURRENT per dropped store). The row data — the leak that
230
+ // matters on a phone — is gone. If empty-database residue ever matters, add an optional
231
+ // `destroyFn` provider option (rn-leveldb's database-destroy entry point) and call it
232
+ // after clearing; check the installed rn-leveldb version for that API's real shape
233
+ // rather than guessing, since it is only a peer dependency here.
234
+ await this.closeStoreByName(storeName);
235
+ }
132
236
  }
133
237
  /**
134
238
  * Create a React Native LevelDB provider with the given options.
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"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"}
@@ -131,6 +131,12 @@ export declare class ReactNativeLevelDBStore implements KVStore {
131
131
  errorIfExists?: boolean;
132
132
  }): ReactNativeLevelDBStore;
133
133
  get(key: Uint8Array): Promise<Uint8Array | undefined>;
134
+ /**
135
+ * The shared fallback is the right answer here: rn-leveldb's `getBuf` is a SYNCHRONOUS
136
+ * native call with no multi-get in its surface, so there is no round trip to collapse —
137
+ * a batch is already just N in-process reads.
138
+ */
139
+ getMany(keys: readonly Uint8Array[]): Promise<(Uint8Array | undefined)[]>;
134
140
  put(key: Uint8Array, value: Uint8Array): Promise<void>;
135
141
  delete(key: Uint8Array): Promise<void>;
136
142
  has(key: Uint8Array): Promise<boolean>;
@@ -143,7 +149,34 @@ export declare class ReactNativeLevelDBStore implements KVStore {
143
149
  */
144
150
  private walkEntries;
145
151
  batch(): WriteBatch;
152
+ /**
153
+ * Delete every entry in the store, leaving the database itself open and usable — the
154
+ * erase behind the provider's reclaim of a dropped table (`LevelDBStore.clear`'s
155
+ * counterpart, which its sublevel can do natively).
156
+ *
157
+ * rn-leveldb exposes no range delete, so the erase is a bounded walk that deletes what
158
+ * it reads: each pass takes at most {@link CLEAR_CHUNK_SIZE} keys and deletes them in
159
+ * one `WriteBatch`, then resumes strictly PAST the last key it saw. Resuming — rather
160
+ * than re-reading from the start — is what makes the walk terminate after exactly one
161
+ * pass over the keyspace even if a delete did not land, instead of spinning forever.
162
+ *
163
+ * NOTE: chunked, therefore not crash-atomic — a process death partway through leaves a
164
+ * tail of keys behind, which a store re-opened under the same name would then see. Same
165
+ * exposure as `@quereus/plugin-leveldb`'s sublevel clear. If DDL crash-consistency is
166
+ * ever tightened, a cleared store needs a tombstone the next open honors rather than a
167
+ * best-effort walk.
168
+ */
169
+ clear(): Promise<void>;
170
+ /** At most {@link CLEAR_CHUNK_SIZE} keys, starting strictly past `after`. */
171
+ private readKeyChunk;
146
172
  close(): Promise<void>;
173
+ /**
174
+ * True once {@link close} has run. Lets the provider notice a handle a caller closed
175
+ * out-of-band (`StoreTableBase.releaseIndexStore` closes an index handle just before
176
+ * `dropIndex` asks the provider to delete that store) and re-open instead of handing
177
+ * back a dead one.
178
+ */
179
+ isClosed(): boolean;
147
180
  approximateCount(options?: IterateOptions): Promise<number>;
148
181
  private checkOpen;
149
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
package/dist/src/store.js CHANGED
@@ -7,7 +7,17 @@
7
7
  // `compareBytes` is the ordering oracle the KVStore contract and its conformance battery
8
8
  // are written against — the bound checks below must use that exact definition, not a
9
9
  // re-derived copy that could drift from it.
10
- import { compareBytes } from '@quereus/store';
10
+ import { compareBytes, defaultGetMany } from '@quereus/store';
11
+ /**
12
+ * Keys read-then-deleted per pass by {@link ReactNativeLevelDBStore.clear}.
13
+ *
14
+ * Emptying the keyspace in bounded chunks — rather than reading every key into one
15
+ * `WriteBatch` — keeps peak memory at a chunk however large the store is, the same
16
+ * bounded-peak rule {@link KVStore.iterate} is held to. The size is the usual peak-memory /
17
+ * round-trip tradeoff; it is a judgement call, not a measurement (nothing has profiled a
18
+ * drop on device).
19
+ */
20
+ const CLEAR_CHUNK_SIZE = 512;
11
21
  /**
12
22
  * LevelDB implementation of KVStore for React Native.
13
23
  *
@@ -40,6 +50,14 @@ export class ReactNativeLevelDBStore {
40
50
  const result = this.db.getBuf(toArrayBuffer(key));
41
51
  return result === null ? undefined : toUint8Array(result);
42
52
  }
53
+ /**
54
+ * The shared fallback is the right answer here: rn-leveldb's `getBuf` is a SYNCHRONOUS
55
+ * native call with no multi-get in its surface, so there is no round trip to collapse —
56
+ * a batch is already just N in-process reads.
57
+ */
58
+ getMany(keys) {
59
+ return defaultGetMany(this, keys);
60
+ }
43
61
  async put(key, value) {
44
62
  this.checkOpen();
45
63
  this.db.put(toArrayBuffer(key), toArrayBuffer(value));
@@ -162,12 +180,70 @@ export class ReactNativeLevelDBStore {
162
180
  this.checkOpen();
163
181
  return new ReactNativeLevelDBWriteBatch(this.db, this.WriteBatchCtor);
164
182
  }
183
+ /**
184
+ * Delete every entry in the store, leaving the database itself open and usable — the
185
+ * erase behind the provider's reclaim of a dropped table (`LevelDBStore.clear`'s
186
+ * counterpart, which its sublevel can do natively).
187
+ *
188
+ * rn-leveldb exposes no range delete, so the erase is a bounded walk that deletes what
189
+ * it reads: each pass takes at most {@link CLEAR_CHUNK_SIZE} keys and deletes them in
190
+ * one `WriteBatch`, then resumes strictly PAST the last key it saw. Resuming — rather
191
+ * than re-reading from the start — is what makes the walk terminate after exactly one
192
+ * pass over the keyspace even if a delete did not land, instead of spinning forever.
193
+ *
194
+ * NOTE: chunked, therefore not crash-atomic — a process death partway through leaves a
195
+ * tail of keys behind, which a store re-opened under the same name would then see. Same
196
+ * exposure as `@quereus/plugin-leveldb`'s sublevel clear. If DDL crash-consistency is
197
+ * ever tightened, a cleared store needs a tombstone the next open honors rather than a
198
+ * best-effort walk.
199
+ */
200
+ async clear() {
201
+ this.checkOpen();
202
+ let cursor;
203
+ for (;;) {
204
+ const keys = await this.readKeyChunk(cursor);
205
+ if (keys.length === 0)
206
+ break;
207
+ cursor = keys[keys.length - 1];
208
+ // A fresh batch per pass: `WriteBatch` is documented single-use, so reusing one
209
+ // across writes would lean on backend-specific behavior this store happens to
210
+ // have and `@quereus/plugin-leveldb` does not.
211
+ const batch = this.batch();
212
+ for (const key of keys) {
213
+ batch.delete(key);
214
+ }
215
+ await batch.write();
216
+ // A short chunk means the walk reached the end of the keyspace.
217
+ if (keys.length < CLEAR_CHUNK_SIZE)
218
+ break;
219
+ }
220
+ }
221
+ /** At most {@link CLEAR_CHUNK_SIZE} keys, starting strictly past `after`. */
222
+ async readKeyChunk(after) {
223
+ const range = after === undefined
224
+ ? { limit: CLEAR_CHUNK_SIZE }
225
+ : { gt: after, limit: CLEAR_CHUNK_SIZE };
226
+ const keys = [];
227
+ for await (const entry of this.iterate(range)) {
228
+ keys.push(entry.key);
229
+ }
230
+ return keys;
231
+ }
165
232
  async close() {
166
233
  if (!this.closed) {
167
234
  this.closed = true;
168
235
  this.db.close();
169
236
  }
170
237
  }
238
+ /**
239
+ * True once {@link close} has run. Lets the provider notice a handle a caller closed
240
+ * out-of-band (`StoreTableBase.releaseIndexStore` closes an index handle just before
241
+ * `dropIndex` asks the provider to delete that store) and re-open instead of handing
242
+ * back a dead one.
243
+ */
244
+ isClosed() {
245
+ return this.closed;
246
+ }
171
247
  async approximateCount(options) {
172
248
  this.checkOpen();
173
249
  // LevelDB doesn't have a native count, so we iterate and count
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quereus/plugin-react-native-leveldb",
3
- "version": "4.11.0",
3
+ "version": "4.12.0",
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.11.0",
45
- "@quereus/quereus": "^4.11.0",
46
- "@quereus/store": "^4.11.0",
44
+ "@quereus/isolation": "^4.12.0",
45
+ "@quereus/quereus": "^4.12.0",
46
+ "@quereus/store": "^4.12.0",
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.11.0",
91
- "@quereus/store": "^4.11.0"
90
+ "@quereus/quereus": "^4.12.0",
91
+ "@quereus/store": "^4.12.0"
92
92
  },
93
93
  "devDependencies": {
94
94
  "@quereus/isolation": "*",