UNPKG

@stainless-code/persist

Version:

Hydration-aware persistence for any reactive store — zero-dep persistSource core; codecs, backends, cross-tab transport, source + framework hydration adapters ship as opt-in recipes

53 lines (52 loc) • 1.7 kB
import { n as createJSONStorage } from "../persist-core-B5VikEft.mjs"; import { createMMKV } from "react-native-mmkv"; //#region src/adapters/backends/mmkv.ts /** * `StateStorage` over a `react-native-mmkv` `MMKV` instance — synchronous, * string-wire. Pass an instance from `createMMKV({ id, encryptionKey?, path? })`. * * @example * ```ts * import { createMMKV } from "react-native-mmkv"; * import { mmkvStateStorage } from "@stainless-code/persist/backends/mmkv"; * * const instance = createMMKV({ id: "app-prefs" }); * const storage = mmkvStateStorage(instance); * ``` */ function mmkvStateStorage(instance) { return { getItem: (name) => instance.getString(name) ?? null, setItem: (name, value) => { instance.set(name, value); }, removeItem: (name) => { instance.remove(name); } }; } /** * Build a JSON-encoded `PersistStorage` over a fresh `react-native-mmkv` * instance. Synchronous backend → hydration settles before first render → * no `useHydrated` gate required (unlike IndexedDB / AsyncStorage). MMKV is * the fastest RN KV store; pair `encryptionKey` for secrets-at-rest. * * @example * ```ts * import { createMmkvStorage } from "@stainless-code/persist/backends/mmkv"; * import { persistStore } from "@stainless-code/persist/sources/tanstack-store"; * * const storage = createMmkvStorage<Prefs>({ id: "app-prefs" })!; * persistStore(store, { name: "app:prefs:v1", storage }); * ``` */ function createMmkvStorage(options) { const instance = createMMKV({ id: options.id, path: options.path, encryptionKey: options.encryptionKey }); return createJSONStorage(() => mmkvStateStorage(instance)); } //#endregion export { createMmkvStorage, mmkvStateStorage };