@yoroi/common
Version:
The Common package of Yoroi SDK
136 lines (135 loc) • 4.24 kB
JavaScript
;
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