UNPKG

polyfill-react-native

Version:

Pollyfill react native apis to web

203 lines (161 loc) 6.64 kB
'use strict'; exports.__esModule = true; var _deepAssign = require('deep-assign'); var _deepAssign2 = _interopRequireDefault(_deepAssign); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Copyright (c) 2015-present, Nicolas Gallagher. * Copyright (c) 2015-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @providesModule AsyncStorage * */ var mergeLocalStorageItem = function mergeLocalStorageItem(key, value) { var oldValue = window.localStorage.getItem(key); var oldObject = JSON.parse(oldValue); var newObject = JSON.parse(value); var nextValue = JSON.stringify((0, _deepAssign2.default)({}, oldObject, newObject)); window.localStorage.setItem(key, nextValue); }; var createPromise = function createPromise(getValue, callback) { return new Promise(function (resolve, reject) { try { var value = getValue(); if (callback) { callback(null, value); } resolve(value); } catch (err) { if (callback) { callback(err); } reject(err); } }); }; var createPromiseAll = function createPromiseAll(promises, callback, processResult) { return Promise.all(promises).then(function (result) { var value = processResult ? processResult(result) : null; callback && callback(null, value); return Promise.resolve(value); }, function (errors) { callback && callback(errors); return Promise.reject(errors); }); }; var AsyncStorage = function () { function AsyncStorage() { _classCallCheck(this, AsyncStorage); } /** * Erases *all* AsyncStorage for the domain. */ AsyncStorage.clear = function clear(callback) { return createPromise(function () { window.localStorage.clear(); }, callback); }; /** * (stub) Flushes any pending requests using a single batch call to get the data. */ AsyncStorage.flushGetRequests = function flushGetRequests() {}; /** * Gets *all* keys known to the app, for all callers, libraries, etc. */ AsyncStorage.getAllKeys = function getAllKeys(callback) { return createPromise(function () { var numberOfKeys = window.localStorage.length; var keys = []; for (var i = 0; i < numberOfKeys; i += 1) { var key = window.localStorage.key(i); keys.push(key); } return keys; }, callback); }; /** * Fetches `key` value. */ AsyncStorage.getItem = function getItem(key, callback) { return createPromise(function () { return window.localStorage.getItem(key); }, callback); }; /** * multiGet resolves to an array of key-value pair arrays that matches the * input format of multiSet. * * multiGet(['k1', 'k2']) -> [['k1', 'val1'], ['k2', 'val2']] */ AsyncStorage.multiGet = function multiGet(keys, callback) { var promises = keys.map(function (key) { return AsyncStorage.getItem(key); }); var processResult = function processResult(result) { return result.map(function (value, i) { return [keys[i], value]; }); }; return createPromiseAll(promises, callback, processResult); }; /** * Sets `value` for `key`. */ AsyncStorage.setItem = function setItem(key, value, callback) { return createPromise(function () { window.localStorage.setItem(key, value); }, callback); }; /** * Takes an array of key-value array pairs. * multiSet([['k1', 'val1'], ['k2', 'val2']]) */ AsyncStorage.multiSet = function multiSet(keyValuePairs, callback) { var promises = keyValuePairs.map(function (item) { return AsyncStorage.setItem(item[0], item[1]); }); return createPromiseAll(promises, callback); }; /** * Merges existing value with input value, assuming they are stringified JSON. */ AsyncStorage.mergeItem = function mergeItem(key, value, callback) { return createPromise(function () { mergeLocalStorageItem(key, value); }, callback); }; /** * Takes an array of key-value array pairs and merges them with existing * values, assuming they are stringified JSON. * * multiMerge([['k1', 'val1'], ['k2', 'val2']]) */ AsyncStorage.multiMerge = function multiMerge(keyValuePairs, callback) { var promises = keyValuePairs.map(function (item) { return AsyncStorage.mergeItem(item[0], item[1]); }); return createPromiseAll(promises, callback); }; /** * Removes a `key` */ AsyncStorage.removeItem = function removeItem(key, callback) { return createPromise(function () { return window.localStorage.removeItem(key); }, callback); }; /** * Delete all the keys in the `keys` array. */ AsyncStorage.multiRemove = function multiRemove(keys, callback) { var promises = keys.map(function (key) { return AsyncStorage.removeItem(key); }); return createPromiseAll(promises, callback); }; return AsyncStorage; }(); exports.default = AsyncStorage;