UNPKG

@yoroi/common

Version:

The Common package of Yoroi SDK

136 lines (135 loc) 4.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mountMMKVStorage = exports.mountMMKVMultiStorage = void 0; var _reactNativeMmkv = require("react-native-mmkv"); var _parsers = require("../../utils/parsers"); var _isFolderKey = require("../helpers/is-folder-key"); var _isFileKey = require("../helpers/is-file-key"); const mountMMKVStorage = function (_ref) { let { path, id = 'default.mmkv' } = _ref; let { instance } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; // think of the id as the filename and the path as filter const storage = instance ?? new _reactNativeMmkv.MMKV({ id }); const withPath = key => `${path}${key}`; const withoutPath = absolutePath => absolutePath.slice(path.length); function join(folderToJoin) { return mountMMKVStorage({ path: `${path}${folderToJoin}`, id }, { instance: storage }); } function getItem(key) { let deserializer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _parsers.parseSafe; const item = storage.getString(withPath(key)) ?? null; return deserializer(item); } function multiGet(keys) { let deserializer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _parsers.parseSafe; const absolutePaths = keys.map(key => withPath(key)); return Object.freeze(absolutePaths.map(key => [withoutPath(key), deserializer(storage.getString(key) ?? null)])); } function setItem(key, value) { let serializer = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : JSON.stringify; const item = serializer(value); storage.set(withPath(key), item); } function multiSet(tuples) { let serializer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : JSON.stringify; tuples.forEach(_ref2 => { let [key, value] = _ref2; return storage.set(withPath(key), serializer(value)); }); } function removeItem(key) { storage.delete(withPath(key)); } function removeFolder(folderName) { const keys = storage.getAllKeys(); const filteredKeys = keys.filter(key => key.startsWith(path) && withoutPath(key).startsWith(folderName) && (0, _isFolderKey.isFolderKey)({ key, path })); filteredKeys.forEach(key => storage.delete(key)); } function multiRemove(keys) { const absolutePaths = keys.map(key => withPath(key)); absolutePaths.forEach(key => storage.delete(key)); } function getAllKeys() { return Object.freeze(storage.getAllKeys().filter(key => key.startsWith(path) && (0, _isFileKey.isFileKey)({ key, path })).map(withoutPath)); } function clear() { const keys = storage.getAllKeys(); const filteredKeys = keys.filter(key => key.startsWith(path)); filteredKeys.forEach(key => storage.delete(key)); } return { join, getItem, multiGet, setItem, multiSet, removeItem, removeFolder, multiRemove, getAllKeys, clear }; }; exports.mountMMKVStorage = mountMMKVStorage; const mountMMKVMultiStorage = options => { const { storage, dataFolder, keyExtractor, serializer = JSON.stringify, deserializer = _parsers.parseSafe } = options; const dataStorage = storage.join(dataFolder); const { getAllKeys, multiSet, multiGet } = dataStorage; const clear = () => storage.removeFolder(dataFolder); const saveMany = items => { const entries = items.map(item => { if (typeof keyExtractor === 'function') { return [keyExtractor(item), item]; } return [String(item[keyExtractor]), item]; }); const entriesWithKeys = entries.filter(_ref3 => { let [key] = _ref3; return key != null && key !== ''; }); return multiSet(entriesWithKeys, serializer); }; const readAll = () => multiGet(getAllKeys(), deserializer); const readMany = keys => multiGet(keys, deserializer); const removeMany = keys => dataStorage.multiRemove(keys); return { getAllKeys, clear, readAll, saveMany, readMany, removeMany }; }; exports.mountMMKVMultiStorage = mountMMKVMultiStorage; //# sourceMappingURL=mmkv-storage.js.map