LocalDatastoreController.react-native.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  3. var _stringify = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/json/stringify"));
  4. var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
  5. var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
  6. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
  7. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
  8. var _LocalDatastoreUtils = require("./LocalDatastoreUtils");
  9. /**
  10. * Copyright (c) 2015-present, Parse, LLC.
  11. * All rights reserved.
  12. *
  13. * This source code is licensed under the BSD-style license found in the
  14. * LICENSE file in the root directory of this source tree. An additional grant
  15. * of patent rights can be found in the PATENTS file in the same directory.
  16. *
  17. * @flow
  18. * @private
  19. */
  20. var RNStorage = require('./StorageController.react-native');
  21. var LocalDatastoreController = {
  22. fromPinWithName: function (name
  23. /*: string*/
  24. )
  25. /*: Promise<Array<Object>>*/
  26. {
  27. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
  28. var values, objects;
  29. return _regenerator.default.wrap(function (_context) {
  30. while (1) {
  31. switch (_context.prev = _context.next) {
  32. case 0:
  33. _context.next = 2;
  34. return RNStorage.getItemAsync(name);
  35. case 2:
  36. values = _context.sent;
  37. if (values) {
  38. _context.next = 5;
  39. break;
  40. }
  41. return _context.abrupt("return", []);
  42. case 5:
  43. objects = JSON.parse(values);
  44. return _context.abrupt("return", objects);
  45. case 7:
  46. case "end":
  47. return _context.stop();
  48. }
  49. }
  50. }, _callee);
  51. }))();
  52. },
  53. pinWithName: function (name
  54. /*: string*/
  55. , value
  56. /*: any*/
  57. )
  58. /*: Promise<void>*/
  59. {
  60. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
  61. var values;
  62. return _regenerator.default.wrap(function (_context2) {
  63. while (1) {
  64. switch (_context2.prev = _context2.next) {
  65. case 0:
  66. _context2.prev = 0;
  67. values = (0, _stringify.default)(value);
  68. _context2.next = 4;
  69. return RNStorage.setItemAsync(name, values);
  70. case 4:
  71. _context2.next = 9;
  72. break;
  73. case 6:
  74. _context2.prev = 6;
  75. _context2.t0 = _context2["catch"](0); // Quota exceeded, possibly due to Safari Private Browsing mode
  76. // eslint-disable-next-line no-console
  77. console.error(_context2.t0.message);
  78. case 9:
  79. case "end":
  80. return _context2.stop();
  81. }
  82. }
  83. }, _callee2, null, [[0, 6]]);
  84. }))();
  85. },
  86. unPinWithName: function (name
  87. /*: string*/
  88. )
  89. /*: Promise<void>*/
  90. {
  91. return RNStorage.removeItemAsync(name);
  92. },
  93. getAllContents: function ()
  94. /*: Promise<Object>*/
  95. {
  96. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
  97. var keys, batch, i, key, LDS, results;
  98. return _regenerator.default.wrap(function (_context3) {
  99. while (1) {
  100. switch (_context3.prev = _context3.next) {
  101. case 0:
  102. _context3.next = 2;
  103. return RNStorage.getAllKeysAsync();
  104. case 2:
  105. keys = _context3.sent;
  106. batch = [];
  107. for (i = 0; i < keys.length; i += 1) {
  108. key = keys[i];
  109. if ((0, _LocalDatastoreUtils.isLocalDatastoreKey)(key)) {
  110. batch.push(key);
  111. }
  112. }
  113. LDS = {};
  114. results = [];
  115. _context3.prev = 7;
  116. _context3.next = 10;
  117. return RNStorage.multiGet(batch);
  118. case 10:
  119. results = _context3.sent;
  120. _context3.next = 17;
  121. break;
  122. case 13:
  123. _context3.prev = 13;
  124. _context3.t0 = _context3["catch"](7); // eslint-disable-next-line no-console
  125. console.error('Error getAllContents: ', _context3.t0);
  126. return _context3.abrupt("return", {});
  127. case 17:
  128. (0, _forEach.default)(results).call(results, function (pair) {
  129. var _pair = (0, _slicedToArray2.default)(pair, 2),
  130. key = _pair[0],
  131. value = _pair[1];
  132. try {
  133. LDS[key] = JSON.parse(value);
  134. } catch (error) {
  135. LDS[key] = null;
  136. }
  137. });
  138. return _context3.abrupt("return", LDS);
  139. case 19:
  140. case "end":
  141. return _context3.stop();
  142. }
  143. }
  144. }, _callee3, null, [[7, 13]]);
  145. }))();
  146. },
  147. // Used for testing
  148. getRawStorage: function ()
  149. /*: Promise<Object>*/
  150. {
  151. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
  152. var keys, storage, results;
  153. return _regenerator.default.wrap(function (_context4) {
  154. while (1) {
  155. switch (_context4.prev = _context4.next) {
  156. case 0:
  157. _context4.next = 2;
  158. return RNStorage.getAllKeysAsync();
  159. case 2:
  160. keys = _context4.sent;
  161. storage = {};
  162. _context4.next = 6;
  163. return RNStorage.multiGet(keys);
  164. case 6:
  165. results = _context4.sent;
  166. (0, _forEach.default)(results).call(results, function (pair) {
  167. var _pair2 = (0, _slicedToArray2.default)(pair, 2),
  168. key = _pair2[0],
  169. value = _pair2[1];
  170. storage[key] = value;
  171. });
  172. return _context4.abrupt("return", storage);
  173. case 9:
  174. case "end":
  175. return _context4.stop();
  176. }
  177. }
  178. }, _callee4);
  179. }))();
  180. },
  181. clear: function ()
  182. /*: Promise<void>*/
  183. {
  184. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
  185. var keys, batch, i, key;
  186. return _regenerator.default.wrap(function (_context5) {
  187. while (1) {
  188. switch (_context5.prev = _context5.next) {
  189. case 0:
  190. _context5.next = 2;
  191. return RNStorage.getAllKeysAsync();
  192. case 2:
  193. keys = _context5.sent;
  194. batch = [];
  195. for (i = 0; i < keys.length; i += 1) {
  196. key = keys[i];
  197. if ((0, _LocalDatastoreUtils.isLocalDatastoreKey)(key)) {
  198. batch.push(key);
  199. }
  200. }
  201. return _context5.abrupt("return", RNStorage.multiRemove(batch).catch(function (error) {
  202. return (// eslint-disable-next-line no-console
  203. console.error('Error clearing local datastore: ', error)
  204. );
  205. }));
  206. case 6:
  207. case "end":
  208. return _context5.stop();
  209. }
  210. }
  211. }, _callee5);
  212. }))();
  213. }
  214. };
  215. module.exports = LocalDatastoreController;