react-native-mmkv 2.0.0 → 2.1.1

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 (56) hide show
  1. package/MMKV/CHANGELOG.md +30 -0
  2. package/MMKV/Core/CMakeLists.txt +2 -1
  3. package/MMKV/Core/CodedInputDataCrypt.cpp +1 -1
  4. package/MMKV/Core/Core.xcodeproj/project.pbxproj +7 -4
  5. package/MMKV/Core/InterProcessLock_Win32.cpp +10 -5
  6. package/MMKV/Core/MMBuffer.h +1 -0
  7. package/MMKV/Core/MMKV.cpp +359 -17
  8. package/MMKV/Core/MMKV.h +29 -4
  9. package/MMKV/Core/MMKVLog.cpp +11 -10
  10. package/MMKV/Core/MMKVLog.h +1 -1
  11. package/MMKV/Core/MMKVPredef.h +6 -4
  12. package/MMKV/Core/MMKV_Android.cpp +2 -6
  13. package/MMKV/Core/MMKV_IO.cpp +1 -3
  14. package/MMKV/Core/MMKV_IO.h +3 -3
  15. package/MMKV/Core/MemoryFile.cpp +276 -43
  16. package/MMKV/Core/MemoryFile.h +85 -9
  17. package/MMKV/Core/MemoryFile_Android.cpp +37 -18
  18. package/MMKV/Core/MemoryFile_Linux.cpp +120 -0
  19. package/MMKV/Core/MemoryFile_OSX.cpp +92 -2
  20. package/MMKV/Core/MemoryFile_Win32.cpp +254 -34
  21. package/MMKV/Core/aes/openssl/openssl_aes.h +2 -2
  22. package/MMKV/Core/aes/openssl/openssl_aes_core.cpp +4 -4
  23. package/MMKV/README.md +4 -4
  24. package/README.md +17 -4
  25. package/android/CMakeLists.txt +3 -2
  26. package/android/src/main/cpp/MmkvHostObject.cpp +36 -0
  27. package/ios/MmkvHostObject.mm +48 -5
  28. package/ios/MmkvModule.h +0 -2
  29. package/ios/MmkvModule.mm +16 -16
  30. package/package.json +26 -2
  31. package/react-native-mmkv.podspec +1 -1
  32. package/lib/commonjs/MMKV.js +0 -127
  33. package/lib/commonjs/MMKV.js.map +0 -1
  34. package/lib/commonjs/createMMKV.js +0 -30
  35. package/lib/commonjs/createMMKV.js.map +0 -1
  36. package/lib/commonjs/createMMKV.web.js +0 -67
  37. package/lib/commonjs/createMMKV.web.js.map +0 -1
  38. package/lib/commonjs/hooks.js +0 -142
  39. package/lib/commonjs/hooks.js.map +0 -1
  40. package/lib/commonjs/index.js +0 -32
  41. package/lib/commonjs/index.js.map +0 -1
  42. package/lib/module/MMKV.js +0 -116
  43. package/lib/module/MMKV.js.map +0 -1
  44. package/lib/module/createMMKV.js +0 -19
  45. package/lib/module/createMMKV.js.map +0 -1
  46. package/lib/module/createMMKV.web.js +0 -57
  47. package/lib/module/createMMKV.web.js.map +0 -1
  48. package/lib/module/hooks.js +0 -127
  49. package/lib/module/hooks.js.map +0 -1
  50. package/lib/module/index.js +0 -3
  51. package/lib/module/index.js.map +0 -1
  52. package/lib/typescript/MMKV.d.ts +0 -114
  53. package/lib/typescript/createMMKV.d.ts +0 -5
  54. package/lib/typescript/createMMKV.web.d.ts +0 -2
  55. package/lib/typescript/hooks.d.ts +0 -49
  56. package/lib/typescript/index.d.ts +0 -2
@@ -1,116 +0,0 @@
1
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
- import { unstable_batchedUpdates } from 'react-native';
4
- import { createMMKV } from './createMMKV';
5
- const onValueChangedListeners = new Map();
6
- /**
7
- * A single MMKV instance.
8
- */
9
-
10
- export class MMKV {
11
- /**
12
- * Creates a new MMKV instance with the given Configuration.
13
- * If no custom `id` is supplied, `'default'` will be used.
14
- */
15
- constructor(configuration = {
16
- id: 'mmkv.default'
17
- }) {
18
- _defineProperty(this, "nativeInstance", void 0);
19
-
20
- _defineProperty(this, "functionCache", void 0);
21
-
22
- _defineProperty(this, "id", void 0);
23
-
24
- this.id = configuration.id;
25
- this.nativeInstance = createMMKV(configuration);
26
- this.functionCache = {};
27
- }
28
-
29
- get onValueChangedListeners() {
30
- if (!onValueChangedListeners.has(this.id)) {
31
- onValueChangedListeners.set(this.id, []);
32
- }
33
-
34
- return onValueChangedListeners.get(this.id);
35
- }
36
-
37
- getFunctionFromCache(functionName) {
38
- if (this.functionCache[functionName] == null) {
39
- this.functionCache[functionName] = this.nativeInstance[functionName];
40
- }
41
-
42
- return this.functionCache[functionName];
43
- }
44
-
45
- onValuesAboutToChange(keys) {
46
- if (this.onValueChangedListeners.length === 0) return;
47
- setImmediate(() => {
48
- unstable_batchedUpdates(() => {
49
- for (const key of keys) {
50
- for (const listener of this.onValueChangedListeners) {
51
- listener(key);
52
- }
53
- }
54
- });
55
- });
56
- }
57
-
58
- set(key, value) {
59
- this.onValuesAboutToChange([key]);
60
- const func = this.getFunctionFromCache('set');
61
- return func(key, value);
62
- }
63
-
64
- getBoolean(key) {
65
- const func = this.getFunctionFromCache('getBoolean');
66
- return func(key);
67
- }
68
-
69
- getString(key) {
70
- const func = this.getFunctionFromCache('getString');
71
- return func(key);
72
- }
73
-
74
- getNumber(key) {
75
- const func = this.getFunctionFromCache('getNumber');
76
- return func(key);
77
- }
78
-
79
- contains(key) {
80
- const func = this.getFunctionFromCache('contains');
81
- return func(key);
82
- }
83
-
84
- delete(key) {
85
- this.onValuesAboutToChange([key]);
86
- const func = this.getFunctionFromCache('delete');
87
- return func(key);
88
- }
89
-
90
- getAllKeys() {
91
- const func = this.getFunctionFromCache('getAllKeys');
92
- return func();
93
- }
94
-
95
- clearAll() {
96
- const keys = this.getAllKeys();
97
- this.onValuesAboutToChange(keys);
98
- const func = this.getFunctionFromCache('clearAll');
99
- return func();
100
- }
101
-
102
- addOnValueChangedListener(onValueChanged) {
103
- this.onValueChangedListeners.push(onValueChanged);
104
- return {
105
- remove: () => {
106
- const index = this.onValueChangedListeners.indexOf(onValueChanged);
107
-
108
- if (index !== -1) {
109
- this.onValueChangedListeners.splice(index, 1);
110
- }
111
- }
112
- };
113
- }
114
-
115
- }
116
- //# sourceMappingURL=MMKV.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["MMKV.ts"],"names":["unstable_batchedUpdates","createMMKV","onValueChangedListeners","Map","MMKV","constructor","configuration","id","nativeInstance","functionCache","has","set","get","getFunctionFromCache","functionName","onValuesAboutToChange","keys","length","setImmediate","key","listener","value","func","getBoolean","getString","getNumber","contains","delete","getAllKeys","clearAll","addOnValueChangedListener","onValueChanged","push","remove","index","indexOf","splice"],"mappings":"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","sourcesContent":["import { unstable_batchedUpdates } from 'react-native';\nimport { createMMKV } from './createMMKV';\n\ninterface Listener {\n remove: () => void;\n}\n\n/**\n * Used for configuration of a single MMKV instance.\n */\nexport interface MMKVConfiguration {\n /**\n * The MMKV instance's ID. If you want to use multiple instances, make sure to use different IDs!\n *\n * @example\n * ```ts\n * const userStorage = new MMKV({ id: `user-${userId}-storage` })\n * const globalStorage = new MMKV({ id: 'global-app-storage' })\n * ```\n *\n * @default 'mmkv.default'\n */\n id: string;\n /**\n * The MMKV instance's root path. By default, MMKV stores file inside `$(Documents)/mmkv/`. You can customize MMKV's root directory on MMKV initialization:\n *\n * @example\n * ```ts\n * const temporaryStorage = new MMKV({ path: '/tmp/' })\n * ```\n */\n path?: string;\n /**\n * The MMKV instance's encryption/decryption key. By default, MMKV stores all key-values in plain text on file, relying on iOS's sandbox to make sure the file is encrypted. Should you worry about information leaking, you can choose to encrypt MMKV.\n *\n * @example\n * ```ts\n * const secureStorage = new MMKV({ encryptionKey: 'my-encryption-key!' })\n * ```\n */\n encryptionKey?: string;\n}\n\n/**\n * Represents a single MMKV instance.\n */\ninterface MMKVInterface {\n /**\n * Set a value for the given `key`.\n */\n set: (key: string, value: boolean | string | number) => void;\n /**\n * Get a boolean value for the given `key`.\n *\n * @default false\n */\n getBoolean: (key: string) => boolean;\n /**\n * Get a string value for the given `key`.\n *\n * @default undefined\n */\n getString: (key: string) => string | undefined;\n /**\n * Get a number value for the given `key`.\n *\n * @default 0\n */\n getNumber: (key: string) => number;\n /**\n * Checks whether the given `key` is being stored in this MMKV instance.\n */\n contains: (key: string) => boolean;\n /**\n * Delete the given `key`.\n */\n delete: (key: string) => void;\n /**\n * Get all keys.\n *\n * @default []\n */\n getAllKeys: () => string[];\n /**\n * Delete all keys.\n */\n clearAll: () => void;\n /**\n * Adds a value changed listener.\n */\n addOnValueChangedListener: (\n onValueChanged: (key: string) => void\n ) => Listener;\n}\n\nexport type NativeMMKV = Pick<\n MMKVInterface,\n | 'clearAll'\n | 'contains'\n | 'delete'\n | 'getAllKeys'\n | 'getBoolean'\n | 'getNumber'\n | 'getString'\n | 'set'\n>;\n\nconst onValueChangedListeners = new Map<string, ((key: string) => void)[]>();\n\n/**\n * A single MMKV instance.\n */\nexport class MMKV implements MMKVInterface {\n private nativeInstance: NativeMMKV;\n private functionCache: Partial<NativeMMKV>;\n private id: string;\n\n /**\n * Creates a new MMKV instance with the given Configuration.\n * If no custom `id` is supplied, `'default'` will be used.\n */\n constructor(configuration: MMKVConfiguration = { id: 'mmkv.default' }) {\n this.id = configuration.id;\n this.nativeInstance = createMMKV(configuration);\n this.functionCache = {};\n }\n\n private get onValueChangedListeners() {\n if (!onValueChangedListeners.has(this.id)) {\n onValueChangedListeners.set(this.id, []);\n }\n return onValueChangedListeners.get(this.id)!;\n }\n\n private getFunctionFromCache<T extends keyof NativeMMKV>(\n functionName: T\n ): NativeMMKV[T] {\n if (this.functionCache[functionName] == null) {\n this.functionCache[functionName] = this.nativeInstance[functionName];\n }\n return this.functionCache[functionName] as NativeMMKV[T];\n }\n\n private onValuesAboutToChange(keys: string[]) {\n if (this.onValueChangedListeners.length === 0) return;\n\n setImmediate(() => {\n unstable_batchedUpdates(() => {\n for (const key of keys) {\n for (const listener of this.onValueChangedListeners) {\n listener(key);\n }\n }\n });\n });\n }\n\n set(key: string, value: boolean | string | number): void {\n this.onValuesAboutToChange([key]);\n\n const func = this.getFunctionFromCache('set');\n return func(key, value);\n }\n getBoolean(key: string): boolean {\n const func = this.getFunctionFromCache('getBoolean');\n return func(key);\n }\n getString(key: string): string | undefined {\n const func = this.getFunctionFromCache('getString');\n return func(key);\n }\n getNumber(key: string): number {\n const func = this.getFunctionFromCache('getNumber');\n return func(key);\n }\n contains(key: string): boolean {\n const func = this.getFunctionFromCache('contains');\n return func(key);\n }\n delete(key: string): void {\n this.onValuesAboutToChange([key]);\n\n const func = this.getFunctionFromCache('delete');\n return func(key);\n }\n getAllKeys(): string[] {\n const func = this.getFunctionFromCache('getAllKeys');\n return func();\n }\n clearAll(): void {\n const keys = this.getAllKeys();\n this.onValuesAboutToChange(keys);\n\n const func = this.getFunctionFromCache('clearAll');\n return func();\n }\n\n addOnValueChangedListener(onValueChanged: (key: string) => void): Listener {\n this.onValueChangedListeners.push(onValueChanged);\n\n return {\n remove: () => {\n const index = this.onValueChangedListeners.indexOf(onValueChanged);\n if (index !== -1) {\n this.onValueChangedListeners.splice(index, 1);\n }\n },\n };\n }\n}\n"]}
@@ -1,19 +0,0 @@
1
- import { NativeModules } from 'react-native';
2
- // Root directory of all MMKV stores
3
- const ROOT_DIRECTORY = null;
4
- export const createMMKV = config => {
5
- // Check if the constructor exists. If not, try installing the JSI bindings.
6
- if (global.mmkvCreateNewInstance == null) {
7
- // get the MMKV ReactModule
8
- const MMKVModule = NativeModules.MMKV;
9
- if (MMKVModule == null || typeof MMKVModule.install !== 'function') throw new Error('The native MMKV Module could not be found! Is it correctly installed and autolinked?'); // Call the synchronous blocking install() function
10
-
11
- const result = MMKVModule.install(ROOT_DIRECTORY);
12
- if (result !== true) throw new Error(`The native MMKV Module could not be installed! Looks like something went wrong when installing JSI bindings: ${result}`); // Check again if the constructor now exists. If not, throw an error.
13
-
14
- if (global.mmkvCreateNewInstance == null) throw new Error('Failed to create a new MMKV instance, the native initializer function does not exist. Is the native MMKV library correctly installed? Make sure to disable any remote debugger (e.g. Chrome) to use JSI!');
15
- }
16
-
17
- return global.mmkvCreateNewInstance(config);
18
- };
19
- //# sourceMappingURL=createMMKV.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["createMMKV.ts"],"names":["NativeModules","ROOT_DIRECTORY","createMMKV","config","global","mmkvCreateNewInstance","MMKVModule","MMKV","install","Error","result"],"mappings":"AAAA,SAASA,aAAT,QAA8B,cAA9B;AAQA;AACA,MAAMC,cAA6B,GAAG,IAAtC;AAEA,OAAO,MAAMC,UAAU,GAAIC,MAAD,IAA2C;AACnE;AACA,MAAIC,MAAM,CAACC,qBAAP,IAAgC,IAApC,EAA0C;AACxC;AACA,UAAMC,UAAU,GAAGN,aAAa,CAACO,IAAjC;AACA,QAAID,UAAU,IAAI,IAAd,IAAsB,OAAOA,UAAU,CAACE,OAAlB,KAA8B,UAAxD,EACE,MAAM,IAAIC,KAAJ,CACJ,sFADI,CAAN,CAJsC,CAOxC;;AACA,UAAMC,MAAM,GAAGJ,UAAU,CAACE,OAAX,CAAmBP,cAAnB,CAAf;AACA,QAAIS,MAAM,KAAK,IAAf,EACE,MAAM,IAAID,KAAJ,CACH,gHAA+GC,MAAO,EADnH,CAAN,CAVsC,CAaxC;;AACA,QAAIN,MAAM,CAACC,qBAAP,IAAgC,IAApC,EACE,MAAM,IAAII,KAAJ,CACJ,0MADI,CAAN;AAGH;;AAED,SAAOL,MAAM,CAACC,qBAAP,CAA6BF,MAA7B,CAAP;AACD,CAvBM","sourcesContent":["import { NativeModules } from 'react-native';\nimport type { MMKVConfiguration, NativeMMKV } from 'react-native-mmkv';\n\n// global func declaration for JSI functions\ndeclare global {\n function mmkvCreateNewInstance(configuration: MMKVConfiguration): NativeMMKV;\n}\n\n// Root directory of all MMKV stores\nconst ROOT_DIRECTORY: string | null = null;\n\nexport const createMMKV = (config: MMKVConfiguration): NativeMMKV => {\n // Check if the constructor exists. If not, try installing the JSI bindings.\n if (global.mmkvCreateNewInstance == null) {\n // get the MMKV ReactModule\n const MMKVModule = NativeModules.MMKV;\n if (MMKVModule == null || typeof MMKVModule.install !== 'function')\n throw new Error(\n 'The native MMKV Module could not be found! Is it correctly installed and autolinked?'\n );\n // Call the synchronous blocking install() function\n const result = MMKVModule.install(ROOT_DIRECTORY);\n if (result !== true)\n throw new Error(\n `The native MMKV Module could not be installed! Looks like something went wrong when installing JSI bindings: ${result}`\n );\n // Check again if the constructor now exists. If not, throw an error.\n if (global.mmkvCreateNewInstance == null)\n throw new Error(\n 'Failed to create a new MMKV instance, the native initializer function does not exist. Is the native MMKV library correctly installed? Make sure to disable any remote debugger (e.g. Chrome) to use JSI!'\n );\n }\n\n return global.mmkvCreateNewInstance(config);\n};\n"]}
@@ -1,57 +0,0 @@
1
- var _window$document;
2
-
3
- /* global localStorage */
4
- const canUseDOM = typeof window !== 'undefined' && ((_window$document = window.document) === null || _window$document === void 0 ? void 0 : _window$document.createElement) != null;
5
- export const createMMKV = config => {
6
- if (config.id !== 'mmkv.default') {
7
- throw new Error("MMKV: 'id' is not supported on Web!");
8
- }
9
-
10
- if (config.encryptionKey != null) {
11
- throw new Error("MMKV: 'encryptionKey' is not supported on Web!");
12
- }
13
-
14
- if (config.path != null) {
15
- throw new Error("MMKV: 'path' is not supported on Web!");
16
- }
17
-
18
- const storage = () => {
19
- var _ref, _global$localStorage, _global, _window;
20
-
21
- if (!canUseDOM) {
22
- throw new Error('Tried to access storage on the server. Did you forget to call this in useEffect?');
23
- }
24
-
25
- const domStorage = (_ref = (_global$localStorage = (_global = global) === null || _global === void 0 ? void 0 : _global.localStorage) !== null && _global$localStorage !== void 0 ? _global$localStorage : (_window = window) === null || _window === void 0 ? void 0 : _window.localStorage) !== null && _ref !== void 0 ? _ref : localStorage;
26
-
27
- if (domStorage == null) {
28
- throw new Error(`Could not find 'localStorage' instance!`);
29
- }
30
-
31
- return domStorage;
32
- };
33
-
34
- return {
35
- clearAll: () => storage().clear(),
36
- delete: key => storage().removeItem(key),
37
- set: (key, value) => storage().setItem(key, value.toString()),
38
- getString: key => {
39
- var _storage$getItem;
40
-
41
- return (_storage$getItem = storage().getItem(key)) !== null && _storage$getItem !== void 0 ? _storage$getItem : undefined;
42
- },
43
- getNumber: key => {
44
- var _storage$getItem2;
45
-
46
- return Number((_storage$getItem2 = storage().getItem(key)) !== null && _storage$getItem2 !== void 0 ? _storage$getItem2 : 0);
47
- },
48
- getBoolean: key => {
49
- var _storage$getItem3;
50
-
51
- return Boolean((_storage$getItem3 = storage().getItem(key)) !== null && _storage$getItem3 !== void 0 ? _storage$getItem3 : false);
52
- },
53
- getAllKeys: () => Object.keys(storage()),
54
- contains: key => storage().getItem(key) != null
55
- };
56
- };
57
- //# sourceMappingURL=createMMKV.web.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["createMMKV.web.ts"],"names":["canUseDOM","window","document","createElement","createMMKV","config","id","Error","encryptionKey","path","storage","domStorage","global","localStorage","clearAll","clear","delete","key","removeItem","set","value","setItem","toString","getString","getItem","undefined","getNumber","Number","getBoolean","Boolean","getAllKeys","Object","keys","contains"],"mappings":";;AAAA;AAGA,MAAMA,SAAS,GACb,OAAOC,MAAP,KAAkB,WAAlB,IAAiC,qBAAAA,MAAM,CAACC,QAAP,sEAAiBC,aAAjB,KAAkC,IADrE;AAGA,OAAO,MAAMC,UAAU,GAAIC,MAAD,IAA2C;AACnE,MAAIA,MAAM,CAACC,EAAP,KAAc,cAAlB,EAAkC;AAChC,UAAM,IAAIC,KAAJ,CAAU,qCAAV,CAAN;AACD;;AACD,MAAIF,MAAM,CAACG,aAAP,IAAwB,IAA5B,EAAkC;AAChC,UAAM,IAAID,KAAJ,CAAU,gDAAV,CAAN;AACD;;AACD,MAAIF,MAAM,CAACI,IAAP,IAAe,IAAnB,EAAyB;AACvB,UAAM,IAAIF,KAAJ,CAAU,uCAAV,CAAN;AACD;;AAED,QAAMG,OAAO,GAAG,MAAM;AAAA;;AACpB,QAAI,CAACV,SAAL,EAAgB;AACd,YAAM,IAAIO,KAAJ,CACJ,kFADI,CAAN;AAGD;;AACD,UAAMI,UAAU,8CACdC,MADc,4CACd,QAAQC,YADM,kFACUZ,MADV,4CACU,QAAQY,YADlB,uCACkCA,YADlD;;AAEA,QAAIF,UAAU,IAAI,IAAlB,EAAwB;AACtB,YAAM,IAAIJ,KAAJ,CAAW,yCAAX,CAAN;AACD;;AACD,WAAOI,UAAP;AACD,GAZD;;AAcA,SAAO;AACLG,IAAAA,QAAQ,EAAE,MAAMJ,OAAO,GAAGK,KAAV,EADX;AAELC,IAAAA,MAAM,EAAGC,GAAD,IAASP,OAAO,GAAGQ,UAAV,CAAqBD,GAArB,CAFZ;AAGLE,IAAAA,GAAG,EAAE,CAACF,GAAD,EAAMG,KAAN,KAAgBV,OAAO,GAAGW,OAAV,CAAkBJ,GAAlB,EAAuBG,KAAK,CAACE,QAAN,EAAvB,CAHhB;AAILC,IAAAA,SAAS,EAAGN,GAAD;AAAA;;AAAA,iCAASP,OAAO,GAAGc,OAAV,CAAkBP,GAAlB,CAAT,+DAAmCQ,SAAnC;AAAA,KAJN;AAKLC,IAAAA,SAAS,EAAGT,GAAD;AAAA;;AAAA,aAASU,MAAM,sBAACjB,OAAO,GAAGc,OAAV,CAAkBP,GAAlB,CAAD,iEAA2B,CAA3B,CAAf;AAAA,KALN;AAMLW,IAAAA,UAAU,EAAGX,GAAD;AAAA;;AAAA,aAASY,OAAO,sBAACnB,OAAO,GAAGc,OAAV,CAAkBP,GAAlB,CAAD,iEAA2B,KAA3B,CAAhB;AAAA,KANP;AAOLa,IAAAA,UAAU,EAAE,MAAMC,MAAM,CAACC,IAAP,CAAYtB,OAAO,EAAnB,CAPb;AAQLuB,IAAAA,QAAQ,EAAGhB,GAAD,IAASP,OAAO,GAAGc,OAAV,CAAkBP,GAAlB,KAA0B;AARxC,GAAP;AAUD,CAnCM","sourcesContent":["/* global localStorage */\nimport type { MMKVConfiguration, NativeMMKV } from 'react-native-mmkv';\n\nconst canUseDOM =\n typeof window !== 'undefined' && window.document?.createElement != null;\n\nexport const createMMKV = (config: MMKVConfiguration): NativeMMKV => {\n if (config.id !== 'mmkv.default') {\n throw new Error(\"MMKV: 'id' is not supported on Web!\");\n }\n if (config.encryptionKey != null) {\n throw new Error(\"MMKV: 'encryptionKey' is not supported on Web!\");\n }\n if (config.path != null) {\n throw new Error(\"MMKV: 'path' is not supported on Web!\");\n }\n\n const storage = () => {\n if (!canUseDOM) {\n throw new Error(\n 'Tried to access storage on the server. Did you forget to call this in useEffect?'\n );\n }\n const domStorage =\n global?.localStorage ?? window?.localStorage ?? localStorage;\n if (domStorage == null) {\n throw new Error(`Could not find 'localStorage' instance!`);\n }\n return domStorage;\n };\n\n return {\n clearAll: () => storage().clear(),\n delete: (key) => storage().removeItem(key),\n set: (key, value) => storage().setItem(key, value.toString()),\n getString: (key) => storage().getItem(key) ?? undefined,\n getNumber: (key) => Number(storage().getItem(key) ?? 0),\n getBoolean: (key) => Boolean(storage().getItem(key) ?? false),\n getAllKeys: () => Object.keys(storage()),\n contains: (key) => storage().getItem(key) != null,\n };\n};\n"]}
@@ -1,127 +0,0 @@
1
- import { useRef, useState, useMemo, useCallback, useEffect } from 'react';
2
- import { MMKV } from './MMKV';
3
-
4
- function isConfigurationEqual(left, right) {
5
- return left.encryptionKey === right.encryptionKey && left.id === right.id && left.path === right.path;
6
- }
7
-
8
- let defaultInstance = null;
9
-
10
- function getDefaultInstance() {
11
- if (defaultInstance == null) {
12
- defaultInstance = new MMKV();
13
- }
14
-
15
- return defaultInstance;
16
- }
17
-
18
- export function useMMKV(configuration) {
19
- const instance = useRef();
20
- const lastConfiguration = useRef();
21
-
22
- if (lastConfiguration.current == null || !isConfigurationEqual(lastConfiguration.current, configuration)) {
23
- lastConfiguration.current = configuration;
24
- instance.current = new MMKV(configuration);
25
- } // @ts-expect-error it's not null, I promise.
26
-
27
-
28
- return instance;
29
- }
30
-
31
- function createMMKVHook(getter) {
32
- return (key, instance) => {
33
- const mmkv = instance !== null && instance !== void 0 ? instance : getDefaultInstance();
34
- const [value, setValue] = useState(() => getter(mmkv, key));
35
- const valueRef = useRef(value);
36
- valueRef.current = value;
37
- const set = useCallback(v => {
38
- const newValue = typeof v === 'function' ? v(valueRef.current) : v;
39
-
40
- switch (typeof newValue) {
41
- case 'number':
42
- case 'string':
43
- case 'boolean':
44
- mmkv.set(key, newValue);
45
- break;
46
-
47
- case 'undefined':
48
- mmkv.delete(key);
49
- break;
50
-
51
- default:
52
- throw new Error(`MMKV: Type ${typeof newValue} is not supported!`);
53
- }
54
- }, [key, mmkv]);
55
- useEffect(() => {
56
- const listener = mmkv.addOnValueChangedListener(changedKey => {
57
- if (changedKey === key) {
58
- setValue(getter(mmkv, key));
59
- }
60
- });
61
- return () => listener.remove();
62
- }, [key, mmkv]);
63
- return useMemo(() => [value, set], [value, set]);
64
- };
65
- }
66
- /**
67
- * Use the string value of the given `key` from the given MMKV storage instance.
68
- *
69
- * If no instance is provided, a shared default instance will be used.
70
- *
71
- * @example
72
- * ```ts
73
- * const [username, setUsername] = useMMKVString("user.name")
74
- * ```
75
- */
76
-
77
-
78
- export const useMMKVString = createMMKVHook((instance, key) => instance.getString(key));
79
- /**
80
- * Use the number value of the given `key` from the given MMKV storage instance.
81
- *
82
- * If no instance is provided, a shared default instance will be used.
83
- *
84
- * @example
85
- * ```ts
86
- * const [age, setAge] = useMMKVNumber("user.age")
87
- * ```
88
- */
89
-
90
- export const useMMKVNumber = createMMKVHook((instance, key) => instance.getNumber(key));
91
- /**
92
- * Use the boolean value of the given `key` from the given MMKV storage instance.
93
- *
94
- * If no instance is provided, a shared default instance will be used.
95
- *
96
- * @example
97
- * ```ts
98
- * const [isPremiumAccount, setIsPremiumAccount] = useMMKVBoolean("user.isPremium")
99
- * ```
100
- */
101
-
102
- export const useMMKVBoolean = createMMKVHook((instance, key) => instance.getBoolean(key));
103
- /**
104
- * Use an object value of the given `key` from the given MMKV storage instance.
105
- *
106
- * If no instance is provided, a shared default instance will be used.
107
- *
108
- * The object will be serialized using `JSON`.
109
- *
110
- * @example
111
- * ```ts
112
- * const [user, setUser] = useMMKVObject<User>("user")
113
- * ```
114
- */
115
-
116
- export function useMMKVObject(key, instance) {
117
- const [string, setString] = useMMKVString(key, instance);
118
- const value = useMemo(() => {
119
- if (string == null) return undefined;
120
- return JSON.parse(string);
121
- }, [string]);
122
- const setValue = useCallback(v => {
123
- setString(JSON.stringify(v));
124
- }, [setString]);
125
- return [value, setValue];
126
- }
127
- //# sourceMappingURL=hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["hooks.ts"],"names":["useRef","useState","useMemo","useCallback","useEffect","MMKV","isConfigurationEqual","left","right","encryptionKey","id","path","defaultInstance","getDefaultInstance","useMMKV","configuration","instance","lastConfiguration","current","createMMKVHook","getter","key","mmkv","value","setValue","valueRef","set","v","newValue","delete","Error","listener","addOnValueChangedListener","changedKey","remove","useMMKVString","getString","useMMKVNumber","getNumber","useMMKVBoolean","getBoolean","useMMKVObject","string","setString","undefined","JSON","parse","stringify"],"mappings":"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","sourcesContent":["import React, {\n useRef,\n useState,\n useMemo,\n useCallback,\n useEffect,\n} from 'react';\nimport { MMKV, MMKVConfiguration } from './MMKV';\n\nfunction isConfigurationEqual(\n left: MMKVConfiguration,\n right: MMKVConfiguration\n): boolean {\n return (\n left.encryptionKey === right.encryptionKey &&\n left.id === right.id &&\n left.path === right.path\n );\n}\n\nlet defaultInstance: MMKV | null = null;\nfunction getDefaultInstance(): MMKV {\n if (defaultInstance == null) {\n defaultInstance = new MMKV();\n }\n return defaultInstance;\n}\n\nexport function useMMKV(\n configuration: MMKVConfiguration\n): React.RefObject<MMKV> {\n const instance = useRef<MMKV>();\n\n const lastConfiguration = useRef<MMKVConfiguration>();\n if (\n lastConfiguration.current == null ||\n !isConfigurationEqual(lastConfiguration.current, configuration)\n ) {\n lastConfiguration.current = configuration;\n instance.current = new MMKV(configuration);\n }\n\n // @ts-expect-error it's not null, I promise.\n return instance;\n}\n\nfunction createMMKVHook<\n T extends boolean | number | (string | undefined),\n TSet extends T | undefined,\n TSetAction extends TSet | ((current: T) => TSet)\n>(getter: (instance: MMKV, key: string) => T) {\n return (\n key: string,\n instance?: MMKV\n ): [value: T, setValue: (value: TSetAction) => void] => {\n const mmkv = instance ?? getDefaultInstance();\n const [value, setValue] = useState(() => getter(mmkv, key));\n const valueRef = useRef<T>(value);\n valueRef.current = value;\n\n const set = useCallback(\n (v: TSetAction) => {\n const newValue = typeof v === 'function' ? v(valueRef.current) : v;\n switch (typeof newValue) {\n case 'number':\n case 'string':\n case 'boolean':\n mmkv.set(key, newValue);\n break;\n case 'undefined':\n mmkv.delete(key);\n break;\n default:\n throw new Error(`MMKV: Type ${typeof newValue} is not supported!`);\n }\n },\n [key, mmkv]\n );\n\n useEffect(() => {\n const listener = mmkv.addOnValueChangedListener((changedKey) => {\n if (changedKey === key) {\n setValue(getter(mmkv, key));\n }\n });\n return () => listener.remove();\n }, [key, mmkv]);\n\n return useMemo(() => [value, set], [value, set]);\n };\n}\n\n/**\n * Use the string value of the given `key` from the given MMKV storage instance.\n *\n * If no instance is provided, a shared default instance will be used.\n *\n * @example\n * ```ts\n * const [username, setUsername] = useMMKVString(\"user.name\")\n * ```\n */\nexport const useMMKVString = createMMKVHook((instance, key) =>\n instance.getString(key)\n);\n\n/**\n * Use the number value of the given `key` from the given MMKV storage instance.\n *\n * If no instance is provided, a shared default instance will be used.\n *\n * @example\n * ```ts\n * const [age, setAge] = useMMKVNumber(\"user.age\")\n * ```\n */\nexport const useMMKVNumber = createMMKVHook((instance, key) =>\n instance.getNumber(key)\n);\n/**\n * Use the boolean value of the given `key` from the given MMKV storage instance.\n *\n * If no instance is provided, a shared default instance will be used.\n *\n * @example\n * ```ts\n * const [isPremiumAccount, setIsPremiumAccount] = useMMKVBoolean(\"user.isPremium\")\n * ```\n */\nexport const useMMKVBoolean = createMMKVHook((instance, key) =>\n instance.getBoolean(key)\n);\n/**\n * Use an object value of the given `key` from the given MMKV storage instance.\n *\n * If no instance is provided, a shared default instance will be used.\n *\n * The object will be serialized using `JSON`.\n *\n * @example\n * ```ts\n * const [user, setUser] = useMMKVObject<User>(\"user\")\n * ```\n */\nexport function useMMKVObject<T>(\n key: string,\n instance?: MMKV\n): [value: T | undefined, setValue: (value: T) => void] {\n const [string, setString] = useMMKVString(key, instance);\n\n const value = useMemo(() => {\n if (string == null) return undefined;\n return JSON.parse(string) as T;\n }, [string]);\n const setValue = useCallback(\n (v: T) => {\n setString(JSON.stringify(v));\n },\n [setString]\n );\n\n return [value, setValue];\n}\n"]}
@@ -1,3 +0,0 @@
1
- export * from './MMKV';
2
- export * from './hooks';
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAd;AACA,cAAc,SAAd","sourcesContent":["export * from './MMKV';\nexport * from './hooks';\n"]}
@@ -1,114 +0,0 @@
1
- interface Listener {
2
- remove: () => void;
3
- }
4
- /**
5
- * Used for configuration of a single MMKV instance.
6
- */
7
- export interface MMKVConfiguration {
8
- /**
9
- * The MMKV instance's ID. If you want to use multiple instances, make sure to use different IDs!
10
- *
11
- * @example
12
- * ```ts
13
- * const userStorage = new MMKV({ id: `user-${userId}-storage` })
14
- * const globalStorage = new MMKV({ id: 'global-app-storage' })
15
- * ```
16
- *
17
- * @default 'mmkv.default'
18
- */
19
- id: string;
20
- /**
21
- * The MMKV instance's root path. By default, MMKV stores file inside `$(Documents)/mmkv/`. You can customize MMKV's root directory on MMKV initialization:
22
- *
23
- * @example
24
- * ```ts
25
- * const temporaryStorage = new MMKV({ path: '/tmp/' })
26
- * ```
27
- */
28
- path?: string;
29
- /**
30
- * The MMKV instance's encryption/decryption key. By default, MMKV stores all key-values in plain text on file, relying on iOS's sandbox to make sure the file is encrypted. Should you worry about information leaking, you can choose to encrypt MMKV.
31
- *
32
- * @example
33
- * ```ts
34
- * const secureStorage = new MMKV({ encryptionKey: 'my-encryption-key!' })
35
- * ```
36
- */
37
- encryptionKey?: string;
38
- }
39
- /**
40
- * Represents a single MMKV instance.
41
- */
42
- interface MMKVInterface {
43
- /**
44
- * Set a value for the given `key`.
45
- */
46
- set: (key: string, value: boolean | string | number) => void;
47
- /**
48
- * Get a boolean value for the given `key`.
49
- *
50
- * @default false
51
- */
52
- getBoolean: (key: string) => boolean;
53
- /**
54
- * Get a string value for the given `key`.
55
- *
56
- * @default undefined
57
- */
58
- getString: (key: string) => string | undefined;
59
- /**
60
- * Get a number value for the given `key`.
61
- *
62
- * @default 0
63
- */
64
- getNumber: (key: string) => number;
65
- /**
66
- * Checks whether the given `key` is being stored in this MMKV instance.
67
- */
68
- contains: (key: string) => boolean;
69
- /**
70
- * Delete the given `key`.
71
- */
72
- delete: (key: string) => void;
73
- /**
74
- * Get all keys.
75
- *
76
- * @default []
77
- */
78
- getAllKeys: () => string[];
79
- /**
80
- * Delete all keys.
81
- */
82
- clearAll: () => void;
83
- /**
84
- * Adds a value changed listener.
85
- */
86
- addOnValueChangedListener: (onValueChanged: (key: string) => void) => Listener;
87
- }
88
- export declare type NativeMMKV = Pick<MMKVInterface, 'clearAll' | 'contains' | 'delete' | 'getAllKeys' | 'getBoolean' | 'getNumber' | 'getString' | 'set'>;
89
- /**
90
- * A single MMKV instance.
91
- */
92
- export declare class MMKV implements MMKVInterface {
93
- private nativeInstance;
94
- private functionCache;
95
- private id;
96
- /**
97
- * Creates a new MMKV instance with the given Configuration.
98
- * If no custom `id` is supplied, `'default'` will be used.
99
- */
100
- constructor(configuration?: MMKVConfiguration);
101
- private get onValueChangedListeners();
102
- private getFunctionFromCache;
103
- private onValuesAboutToChange;
104
- set(key: string, value: boolean | string | number): void;
105
- getBoolean(key: string): boolean;
106
- getString(key: string): string | undefined;
107
- getNumber(key: string): number;
108
- contains(key: string): boolean;
109
- delete(key: string): void;
110
- getAllKeys(): string[];
111
- clearAll(): void;
112
- addOnValueChangedListener(onValueChanged: (key: string) => void): Listener;
113
- }
114
- export {};
@@ -1,5 +0,0 @@
1
- import type { MMKVConfiguration, NativeMMKV } from 'react-native-mmkv';
2
- declare global {
3
- function mmkvCreateNewInstance(configuration: MMKVConfiguration): NativeMMKV;
4
- }
5
- export declare const createMMKV: (config: MMKVConfiguration) => NativeMMKV;
@@ -1,2 +0,0 @@
1
- import type { MMKVConfiguration, NativeMMKV } from 'react-native-mmkv';
2
- export declare const createMMKV: (config: MMKVConfiguration) => NativeMMKV;
@@ -1,49 +0,0 @@
1
- import React from 'react';
2
- import { MMKV, MMKVConfiguration } from './MMKV';
3
- export declare function useMMKV(configuration: MMKVConfiguration): React.RefObject<MMKV>;
4
- /**
5
- * Use the string value of the given `key` from the given MMKV storage instance.
6
- *
7
- * If no instance is provided, a shared default instance will be used.
8
- *
9
- * @example
10
- * ```ts
11
- * const [username, setUsername] = useMMKVString("user.name")
12
- * ```
13
- */
14
- export declare const useMMKVString: (key: string, instance?: MMKV | undefined) => [value: string | undefined, setValue: (value: string | ((current: string | undefined) => string | undefined) | undefined) => void];
15
- /**
16
- * Use the number value of the given `key` from the given MMKV storage instance.
17
- *
18
- * If no instance is provided, a shared default instance will be used.
19
- *
20
- * @example
21
- * ```ts
22
- * const [age, setAge] = useMMKVNumber("user.age")
23
- * ```
24
- */
25
- export declare const useMMKVNumber: (key: string, instance?: MMKV | undefined) => [value: number, setValue: (value: number | ((current: number) => number | undefined) | undefined) => void];
26
- /**
27
- * Use the boolean value of the given `key` from the given MMKV storage instance.
28
- *
29
- * If no instance is provided, a shared default instance will be used.
30
- *
31
- * @example
32
- * ```ts
33
- * const [isPremiumAccount, setIsPremiumAccount] = useMMKVBoolean("user.isPremium")
34
- * ```
35
- */
36
- export declare const useMMKVBoolean: (key: string, instance?: MMKV | undefined) => [value: boolean, setValue: (value: boolean | ((current: boolean) => boolean | undefined) | undefined) => void];
37
- /**
38
- * Use an object value of the given `key` from the given MMKV storage instance.
39
- *
40
- * If no instance is provided, a shared default instance will be used.
41
- *
42
- * The object will be serialized using `JSON`.
43
- *
44
- * @example
45
- * ```ts
46
- * const [user, setUser] = useMMKVObject<User>("user")
47
- * ```
48
- */
49
- export declare function useMMKVObject<T>(key: string, instance?: MMKV): [value: T | undefined, setValue: (value: T) => void];
@@ -1,2 +0,0 @@
1
- export * from './MMKV';
2
- export * from './hooks';