@mongrov/db 0.2.1 → 0.2.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.
@@ -1,15 +1,20 @@
1
1
  /**
2
2
  * MMKV backend for KVStore.
3
3
  * Wraps synchronous MMKV calls in async interface for API consistency.
4
+ * Falls back to in-memory storage if MMKV native module isn't available.
4
5
  */
5
6
  import type { KVStore } from '../types';
6
7
  /**
7
8
  * MMKV-backed KVStore implementation.
8
9
  * Fast synchronous storage wrapped in async API.
10
+ * Falls back to in-memory storage if native module isn't available.
9
11
  */
10
12
  export declare class MMKVBackend implements KVStore {
11
- private mmkv;
13
+ private instanceId;
14
+ private _storage;
15
+ private _mmkvAvailable;
12
16
  constructor(instanceId?: string);
17
+ private getStorage;
13
18
  get(key: string): Promise<string | null>;
14
19
  set(key: string, value: string): Promise<void>;
15
20
  delete(key: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"mmkv-backend.d.ts","sourceRoot":"","sources":["../../src/kv-backends/mmkv-backend.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAoBvC;;;GAGG;AACH,qBAAa,WAAY,YAAW,OAAO;IACzC,OAAO,CAAC,IAAI,CAAuD;gBAEvD,UAAU,GAAE,MAAqB;IAKvC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIxC,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,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAU5C,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGtC"}
1
+ {"version":3,"file":"mmkv-backend.d.ts","sourceRoot":"","sources":["../../src/kv-backends/mmkv-backend.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAyBvC;;;;GAIG;AACH,qBAAa,WAAY,YAAW,OAAO;IACzC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,cAAc,CAAuB;gBAEjC,UAAU,GAAE,MAAqB;IAK7C,OAAO,CAAC,UAAU;IA0BZ,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIxC,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,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAU5C,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGtC"}
@@ -1,42 +1,63 @@
1
1
  /**
2
2
  * MMKV backend for KVStore.
3
3
  * Wraps synchronous MMKV calls in async interface for API consistency.
4
+ * Falls back to in-memory storage if MMKV native module isn't available.
4
5
  */
5
- // Lazy import to allow optional peer dependency
6
- let MMKV;
7
- function getMMKV() {
8
- if (!MMKV) {
9
- try {
10
- // eslint-disable-next-line @typescript-eslint/no-require-imports
11
- MMKV = require('react-native-mmkv').MMKV;
12
- }
13
- catch {
14
- throw new Error('@mongrov/db: react-native-mmkv is required for KVStore. ' +
15
- 'Install it with: pnpm add react-native-mmkv');
16
- }
17
- }
18
- return MMKV;
6
+ function createMemoryStorage() {
7
+ const store = new Map();
8
+ return {
9
+ getString: (key) => store.get(key),
10
+ set: (key, value) => { store.set(key, value); },
11
+ delete: (key) => { store.delete(key); },
12
+ getAllKeys: () => Array.from(store.keys()),
13
+ clearAll: () => { store.clear(); },
14
+ };
19
15
  }
20
16
  /**
21
17
  * MMKV-backed KVStore implementation.
22
18
  * Fast synchronous storage wrapped in async API.
19
+ * Falls back to in-memory storage if native module isn't available.
23
20
  */
24
21
  export class MMKVBackend {
25
22
  constructor(instanceId = 'mongrov-kv') {
26
- const MMKVClass = getMMKV();
27
- this.mmkv = new MMKVClass({ id: instanceId });
23
+ this._storage = null;
24
+ this._mmkvAvailable = null;
25
+ this.instanceId = instanceId;
26
+ // Don't initialize here - defer to first access
27
+ }
28
+ getStorage() {
29
+ if (this._storage)
30
+ return this._storage;
31
+ if (this._mmkvAvailable === null) {
32
+ try {
33
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
34
+ const { MMKV } = require('react-native-mmkv');
35
+ this._storage = new MMKV({ id: this.instanceId });
36
+ this._mmkvAvailable = true;
37
+ }
38
+ catch (e) {
39
+ // Native module not available - use in-memory fallback
40
+ // This can happen during JS bundle evaluation before native modules are ready
41
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
42
+ console.warn(`[@mongrov/db] MMKV not available for instance "${this.instanceId}", using in-memory fallback:`, e);
43
+ }
44
+ this._storage = createMemoryStorage();
45
+ this._mmkvAvailable = false;
46
+ }
47
+ }
48
+ return this._storage;
28
49
  }
29
50
  async get(key) {
30
- return this.mmkv.getString(key) ?? null;
51
+ return this.getStorage().getString(key) ?? null;
31
52
  }
32
53
  async set(key, value) {
33
- this.mmkv.set(key, value);
54
+ this.getStorage().set(key, value);
34
55
  }
35
56
  async delete(key) {
36
- this.mmkv.delete(key);
57
+ this.getStorage().delete(key);
37
58
  }
38
59
  async getObject(key) {
39
- const value = this.mmkv.getString(key);
60
+ const value = this.getStorage().getString(key);
40
61
  if (value === undefined)
41
62
  return null;
42
63
  try {
@@ -47,13 +68,13 @@ export class MMKVBackend {
47
68
  }
48
69
  }
49
70
  async setObject(key, value) {
50
- this.mmkv.set(key, JSON.stringify(value));
71
+ this.getStorage().set(key, JSON.stringify(value));
51
72
  }
52
73
  async clear() {
53
- this.mmkv.clearAll();
74
+ this.getStorage().clearAll();
54
75
  }
55
76
  async getAllKeys() {
56
- return this.mmkv.getAllKeys();
77
+ return this.getStorage().getAllKeys();
57
78
  }
58
79
  }
59
80
  //# sourceMappingURL=mmkv-backend.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mmkv-backend.js","sourceRoot":"","sources":["../../src/kv-backends/mmkv-backend.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,gDAAgD;AAChD,IAAI,IAA6C,CAAA;AAEjD,SAAS,OAAO;IACd,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,CAAC;YACH,iEAAiE;YACjE,IAAI,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAA;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,0DAA0D;gBACxD,6CAA6C,CAChD,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,WAAW;IAGtB,YAAY,aAAqB,YAAY;QAC3C,MAAM,SAAS,GAAG,OAAO,EAAE,CAAA;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,SAAS,CAAI,GAAW;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QACpC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM,CAAA;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAI,GAAW,EAAE,KAAQ;QACtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAA;IAC/B,CAAC;CACF"}
1
+ {"version":3,"file":"mmkv-backend.js","sourceRoot":"","sources":["../../src/kv-backends/mmkv-backend.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mongrov/db",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Database utilities for @mongrov apps: KVStore + RxDB",
5
5
  "license": "MIT",
6
6
  "repository": {