@optimystic/db-p2p-storage-rn 1.0.0-beta.2 → 1.0.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 +16 -0
- package/dist/src/keys.d.ts.map +1 -1
- package/dist/src/keys.js +7 -4
- package/dist/src/keys.js.map +1 -1
- package/dist/src/leveldb-kv-store.d.ts.map +1 -1
- package/dist/src/leveldb-kv-store.js +5 -2
- package/dist/src/leveldb-kv-store.js.map +1 -1
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js +3 -0
- package/dist/src/logger.js.map +1 -1
- package/package.json +3 -3
- package/src/keys.ts +7 -4
- package/src/leveldb-kv-store.ts +5 -2
- package/src/logger.ts +4 -0
package/README.md
CHANGED
|
@@ -56,6 +56,22 @@ const libp2p = await createLibp2pNode({
|
|
|
56
56
|
Use the Node-free `/rn` entry point of `@optimystic/db-p2p` so the Node-only
|
|
57
57
|
TCP transport doesn't get bundled into the React Native app.
|
|
58
58
|
|
|
59
|
+
## Debug logging
|
|
60
|
+
|
|
61
|
+
`DEBUG=` does not work in React Native, and without it every `optimystic:*`
|
|
62
|
+
log channel is silently off — so an empty device capture proves nothing.
|
|
63
|
+
Turn logging on in code, early in your app's entry point:
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
import { enableOptimysticLogging } from '@optimystic/db-core';
|
|
67
|
+
|
|
68
|
+
enableOptimysticLogging('optimystic:*');
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
It prints one `optimystic logging on: …` confirmation line; look for that
|
|
72
|
+
first. See `docs/debugging.md` § "Turning logging on" in the repository for
|
|
73
|
+
the `log` option, libp2p's separate switch, and the cost on device.
|
|
74
|
+
|
|
59
75
|
## Related packages
|
|
60
76
|
|
|
61
77
|
- **[@optimystic/db-p2p](../db-p2p)** — the distributed layer this backend
|
package/dist/src/keys.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,eAAO,MAAM,YAAY,IAAO,CAAC;AACjC,eAAO,MAAM,aAAa,IAAO,CAAC;AAClC,eAAO,MAAM,WAAW,IAAO,CAAC;AAChC,eAAO,MAAM,gBAAgB,IAAO,CAAC;AACrC,eAAO,MAAM,gBAAgB,IAAO,CAAC;AACrC,eAAO,MAAM,UAAU,IAAO,CAAC;AAC/B,eAAO,MAAM,MAAM,KAAO,CAAC;AAC3B,eAAO,MAAM,YAAY,KAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,eAAO,MAAM,YAAY,IAAO,CAAC;AACjC,eAAO,MAAM,aAAa,IAAO,CAAC;AAClC,eAAO,MAAM,WAAW,IAAO,CAAC;AAChC,eAAO,MAAM,gBAAgB,IAAO,CAAC;AACrC,eAAO,MAAM,gBAAgB,IAAO,CAAC;AACrC,eAAO,MAAM,UAAU,IAAO,CAAC;AAC/B,eAAO,MAAM,MAAM,KAAO,CAAC;AAC3B,eAAO,MAAM,YAAY,KAAO,CAAC;AA6BjC,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAEvD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,IAAI;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,UAAU,CAAA;CAAE,CAEnE;AAED,4EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAI9D;AAeD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAEpE;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAGvD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAExE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAEjE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAE7E;AAED,sGAAsG;AACtG,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,UAAU,CAAA;CAAE,CAapG;AAED,+FAA+F;AAC/F,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIxE;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAE7C;AAED,wGAAwG;AACxG,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,UAAU,CAAA;CAAE,CAcjF;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAErD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAEvD"}
|
package/dist/src/keys.js
CHANGED
|
@@ -32,7 +32,10 @@ export const TAG_PROOFS = 0x06;
|
|
|
32
32
|
export const TAG_KV = 0x10;
|
|
33
33
|
export const TAG_IDENTITY = 0x20;
|
|
34
34
|
const textEncoder = new TextEncoder();
|
|
35
|
-
|
|
35
|
+
// Built on first use, not at module load: Hermes (React Native) has no native `TextDecoder`, so a
|
|
36
|
+
// module-scope construction fails the import itself whenever it runs ahead of the host's polyfill.
|
|
37
|
+
let textDecoderInstance;
|
|
38
|
+
const textDecoder = () => textDecoderInstance ??= new TextDecoder();
|
|
36
39
|
function encodeBlockEnvelope(tag, blockId) {
|
|
37
40
|
const blockIdBytes = textEncoder.encode(blockId);
|
|
38
41
|
const out = new Uint8Array(1 + 4 + blockIdBytes.length);
|
|
@@ -71,7 +74,7 @@ export function metadataRange() {
|
|
|
71
74
|
export function blockIdFromMetadataKey(key) {
|
|
72
75
|
const view = new DataView(key.buffer, key.byteOffset, key.byteLength);
|
|
73
76
|
const blockIdLen = view.getUint32(1, false);
|
|
74
|
-
return textDecoder.decode(key.subarray(5, 5 + blockIdLen));
|
|
77
|
+
return textDecoder().decode(key.subarray(5, 5 + blockIdLen));
|
|
75
78
|
}
|
|
76
79
|
/**
|
|
77
80
|
* `tag || len(blockId) || blockId || rev (8 BE)`. The fixed-width big-endian suffix is
|
|
@@ -130,7 +133,7 @@ export function blockEnvelopeRange(tag, blockId) {
|
|
|
130
133
|
export function actionIdFromKey(key, blockId) {
|
|
131
134
|
const blockIdLen = textEncoder.encode(blockId).length;
|
|
132
135
|
const suffixOffset = 1 + 4 + blockIdLen;
|
|
133
|
-
return textDecoder.decode(key.subarray(suffixOffset));
|
|
136
|
+
return textDecoder().decode(key.subarray(suffixOffset));
|
|
134
137
|
}
|
|
135
138
|
export function kvKey(key) {
|
|
136
139
|
return concat(Uint8Array.of(TAG_KV), textEncoder.encode(key));
|
|
@@ -153,7 +156,7 @@ export function kvPrefixRange(prefix) {
|
|
|
153
156
|
}
|
|
154
157
|
/** Strip the leading `TAG_KV` byte from a key, returning the UTF-8 string portion. */
|
|
155
158
|
export function kvKeyToString(raw) {
|
|
156
|
-
return textDecoder.decode(raw.subarray(1));
|
|
159
|
+
return textDecoder().decode(raw.subarray(1));
|
|
157
160
|
}
|
|
158
161
|
export function identityKey(keyName) {
|
|
159
162
|
return concat(Uint8Array.of(TAG_IDENTITY), textEncoder.encode(keyName));
|
package/dist/src/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAChC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC;AAC3B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAEjC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leveldb-kv-store.d.ts","sourceRoot":"","sources":["../../src/leveldb-kv-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAS,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"leveldb-kv-store.d.ts","sourceRoot":"","sources":["../../src/leveldb-kv-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAS,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAS5D;;;;;;;;GAQG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAGlC,OAAO,CAAC,QAAQ,CAAC,EAAE;IAF/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEH,EAAE,EAAE,WAAW,EAAE,MAAM,GAAE,MAA0B;IAI1E,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAM7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAK7C"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { drain } from './leveldb-like.js';
|
|
2
2
|
import { kvKey, kvKeyToString, kvPrefixRange } from './keys.js';
|
|
3
3
|
const textEncoder = new TextEncoder();
|
|
4
|
-
|
|
4
|
+
// Built on first use, not at module load: Hermes (React Native) has no native `TextDecoder`, so a
|
|
5
|
+
// module-scope construction fails the import itself whenever it runs ahead of the host's polyfill.
|
|
6
|
+
let textDecoderInstance;
|
|
7
|
+
const textDecoder = () => textDecoderInstance ??= new TextDecoder();
|
|
5
8
|
/**
|
|
6
9
|
* LevelDB-backed `IKVStore` adapter for React Native peers.
|
|
7
10
|
*
|
|
@@ -22,7 +25,7 @@ export class LevelDBKVStore {
|
|
|
22
25
|
const bytes = await this.db.get(kvKey(this.prefix + key));
|
|
23
26
|
if (!bytes)
|
|
24
27
|
return undefined;
|
|
25
|
-
return textDecoder.decode(bytes);
|
|
28
|
+
return textDecoder().decode(bytes);
|
|
26
29
|
}
|
|
27
30
|
async set(key, value) {
|
|
28
31
|
await this.db.put(kvKey(this.prefix + key), textEncoder.encode(value));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leveldb-kv-store.js","sourceRoot":"","sources":["../../src/leveldb-kv-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAoB,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEhE,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"leveldb-kv-store.js","sourceRoot":"","sources":["../../src/leveldb-kv-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAoB,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEhE,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,kGAAkG;AAClG,mGAAmG;AACnG,IAAI,mBAA4C,CAAC;AACjD,MAAM,WAAW,GAAG,GAAgB,EAAE,CAAC,mBAAmB,KAAK,IAAI,WAAW,EAAE,CAAC;AAEjF;;;;;;;;GAQG;AACH,MAAM,OAAO,cAAc;IAGG;IAFZ,MAAM,CAAS;IAEhC,YAA6B,EAAe,EAAE,SAAiB,iBAAiB;QAAnD,OAAE,GAAF,EAAE,CAAa;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,OAAO,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QACnC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACvB,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc;QACxB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5F,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACnF,CAAC;CACD"}
|
package/dist/src/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,CAEjE"}
|
package/dist/src/logger.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import debug from 'debug';
|
|
2
|
+
import { registerDebugModule } from '@optimystic/db-core';
|
|
2
3
|
const BASE_NAMESPACE = 'optimystic:db-p2p-storage-rn';
|
|
4
|
+
// So `enableOptimysticLogging` reaches this package's copy of `debug`, which may be no one else's.
|
|
5
|
+
registerDebugModule('db-p2p-storage-rn', debug);
|
|
3
6
|
export function createLogger(subNamespace) {
|
|
4
7
|
return debug(`${BASE_NAMESPACE}:${subNamespace}`);
|
|
5
8
|
}
|
package/dist/src/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,cAAc,GAAG,8BAA8B,CAAC;AAEtD,mGAAmG;AACnG,mBAAmB,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;AAEhD,MAAM,UAAU,YAAY,CAAC,YAAoB;IAChD,OAAO,KAAK,CAAC,GAAG,cAAc,IAAI,YAAY,EAAE,CAAC,CAAC;AACnD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@optimystic/db-p2p-storage-rn",
|
|
3
|
-
"version": "1.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "React Native LevelDB storage backend for @optimystic/db-p2p",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"typescript": "^5.9.3"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@optimystic/db-core": "^1.0.0
|
|
58
|
-
"@optimystic/db-p2p": "^1.0.0
|
|
57
|
+
"@optimystic/db-core": "^1.0.0",
|
|
58
|
+
"@optimystic/db-p2p": "^1.0.0",
|
|
59
59
|
"debug": "^4.4.3"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
package/src/keys.ts
CHANGED
|
@@ -34,7 +34,10 @@ export const TAG_KV = 0x10;
|
|
|
34
34
|
export const TAG_IDENTITY = 0x20;
|
|
35
35
|
|
|
36
36
|
const textEncoder = new TextEncoder();
|
|
37
|
-
|
|
37
|
+
// Built on first use, not at module load: Hermes (React Native) has no native `TextDecoder`, so a
|
|
38
|
+
// module-scope construction fails the import itself whenever it runs ahead of the host's polyfill.
|
|
39
|
+
let textDecoderInstance: TextDecoder | undefined;
|
|
40
|
+
const textDecoder = (): TextDecoder => textDecoderInstance ??= new TextDecoder();
|
|
38
41
|
|
|
39
42
|
function encodeBlockEnvelope(tag: number, blockId: string): Uint8Array {
|
|
40
43
|
const blockIdBytes = textEncoder.encode(blockId);
|
|
@@ -77,7 +80,7 @@ export function metadataRange(): { gte: Uint8Array; lt: Uint8Array } {
|
|
|
77
80
|
export function blockIdFromMetadataKey(key: Uint8Array): string {
|
|
78
81
|
const view = new DataView(key.buffer, key.byteOffset, key.byteLength);
|
|
79
82
|
const blockIdLen = view.getUint32(1, false);
|
|
80
|
-
return textDecoder.decode(key.subarray(5, 5 + blockIdLen));
|
|
83
|
+
return textDecoder().decode(key.subarray(5, 5 + blockIdLen));
|
|
81
84
|
}
|
|
82
85
|
|
|
83
86
|
/**
|
|
@@ -144,7 +147,7 @@ export function blockEnvelopeRange(tag: number, blockId: string): { gte: Uint8Ar
|
|
|
144
147
|
export function actionIdFromKey(key: Uint8Array, blockId: string): string {
|
|
145
148
|
const blockIdLen = textEncoder.encode(blockId).length;
|
|
146
149
|
const suffixOffset = 1 + 4 + blockIdLen;
|
|
147
|
-
return textDecoder.decode(key.subarray(suffixOffset));
|
|
150
|
+
return textDecoder().decode(key.subarray(suffixOffset));
|
|
148
151
|
}
|
|
149
152
|
|
|
150
153
|
export function kvKey(key: string): Uint8Array {
|
|
@@ -170,7 +173,7 @@ export function kvPrefixRange(prefix: string): { gte: Uint8Array; lt: Uint8Array
|
|
|
170
173
|
|
|
171
174
|
/** Strip the leading `TAG_KV` byte from a key, returning the UTF-8 string portion. */
|
|
172
175
|
export function kvKeyToString(raw: Uint8Array): string {
|
|
173
|
-
return textDecoder.decode(raw.subarray(1));
|
|
176
|
+
return textDecoder().decode(raw.subarray(1));
|
|
174
177
|
}
|
|
175
178
|
|
|
176
179
|
export function identityKey(keyName: string): Uint8Array {
|
package/src/leveldb-kv-store.ts
CHANGED
|
@@ -3,7 +3,10 @@ import { drain, type LevelDBLike } from './leveldb-like.js';
|
|
|
3
3
|
import { kvKey, kvKeyToString, kvPrefixRange } from './keys.js';
|
|
4
4
|
|
|
5
5
|
const textEncoder = new TextEncoder();
|
|
6
|
-
|
|
6
|
+
// Built on first use, not at module load: Hermes (React Native) has no native `TextDecoder`, so a
|
|
7
|
+
// module-scope construction fails the import itself whenever it runs ahead of the host's polyfill.
|
|
8
|
+
let textDecoderInstance: TextDecoder | undefined;
|
|
9
|
+
const textDecoder = (): TextDecoder => textDecoderInstance ??= new TextDecoder();
|
|
7
10
|
|
|
8
11
|
/**
|
|
9
12
|
* LevelDB-backed `IKVStore` adapter for React Native peers.
|
|
@@ -24,7 +27,7 @@ export class LevelDBKVStore implements IKVStore {
|
|
|
24
27
|
async get(key: string): Promise<string | undefined> {
|
|
25
28
|
const bytes = await this.db.get(kvKey(this.prefix + key));
|
|
26
29
|
if (!bytes) return undefined;
|
|
27
|
-
return textDecoder.decode(bytes);
|
|
30
|
+
return textDecoder().decode(bytes);
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
async set(key: string, value: string): Promise<void> {
|
package/src/logger.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import debug from 'debug';
|
|
2
|
+
import { registerDebugModule } from '@optimystic/db-core';
|
|
2
3
|
|
|
3
4
|
const BASE_NAMESPACE = 'optimystic:db-p2p-storage-rn';
|
|
4
5
|
|
|
6
|
+
// So `enableOptimysticLogging` reaches this package's copy of `debug`, which may be no one else's.
|
|
7
|
+
registerDebugModule('db-p2p-storage-rn', debug);
|
|
8
|
+
|
|
5
9
|
export function createLogger(subNamespace: string): debug.Debugger {
|
|
6
10
|
return debug(`${BASE_NAMESPACE}:${subNamespace}`);
|
|
7
11
|
}
|