LocalDatastoreController.react-native.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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 _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
  6. var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
  7. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
  8. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
  9. var _LocalDatastoreUtils = require("./LocalDatastoreUtils");
  10. /**
  11. * @flow
  12. * @private
  13. */
  14. var RNStorage = require('./StorageController.react-native');
  15. var LocalDatastoreController = {
  16. fromPinWithName: function (name /*: string*/) /*: Promise<Array<Object>>*/{
  17. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
  18. var values, objects;
  19. return _regenerator.default.wrap(function (_context) {
  20. while (1) switch (_context.prev = _context.next) {
  21. case 0:
  22. _context.next = 2;
  23. return RNStorage.getItemAsync(name);
  24. case 2:
  25. values = _context.sent;
  26. if (values) {
  27. _context.next = 5;
  28. break;
  29. }
  30. return _context.abrupt("return", []);
  31. case 5:
  32. objects = JSON.parse(values);
  33. return _context.abrupt("return", objects);
  34. case 7:
  35. case "end":
  36. return _context.stop();
  37. }
  38. }, _callee);
  39. }))();
  40. },
  41. pinWithName: function (name /*: string*/, value /*: any*/) /*: Promise<void>*/{
  42. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
  43. var values;
  44. return _regenerator.default.wrap(function (_context2) {
  45. while (1) switch (_context2.prev = _context2.next) {
  46. case 0:
  47. _context2.prev = 0;
  48. values = (0, _stringify.default)(value);
  49. _context2.next = 4;
  50. return RNStorage.setItemAsync(name, values);
  51. case 4:
  52. _context2.next = 9;
  53. break;
  54. case 6:
  55. _context2.prev = 6;
  56. _context2.t0 = _context2["catch"](0);
  57. // Quota exceeded, possibly due to Safari Private Browsing mode
  58. console.error(_context2.t0.message);
  59. case 9:
  60. case "end":
  61. return _context2.stop();
  62. }
  63. }, _callee2, null, [[0, 6]]);
  64. }))();
  65. },
  66. unPinWithName: function (name /*: string*/) /*: Promise<void>*/{
  67. return RNStorage.removeItemAsync(name);
  68. },
  69. getAllContents: function () /*: Promise<Object>*/{
  70. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
  71. var keys, batch, i, key, LDS, results;
  72. return _regenerator.default.wrap(function (_context3) {
  73. while (1) switch (_context3.prev = _context3.next) {
  74. case 0:
  75. _context3.next = 2;
  76. return RNStorage.getAllKeysAsync();
  77. case 2:
  78. keys = _context3.sent;
  79. batch = [];
  80. for (i = 0; i < keys.length; i += 1) {
  81. key = keys[i];
  82. if ((0, _LocalDatastoreUtils.isLocalDatastoreKey)(key)) {
  83. batch.push(key);
  84. }
  85. }
  86. LDS = {};
  87. results = [];
  88. _context3.prev = 7;
  89. _context3.next = 10;
  90. return RNStorage.multiGet(batch);
  91. case 10:
  92. results = _context3.sent;
  93. _context3.next = 17;
  94. break;
  95. case 13:
  96. _context3.prev = 13;
  97. _context3.t0 = _context3["catch"](7);
  98. console.error('Error getAllContents: ', _context3.t0);
  99. return _context3.abrupt("return", {});
  100. case 17:
  101. (0, _forEach.default)(results).call(results, function (pair) {
  102. var _pair = (0, _slicedToArray2.default)(pair, 2),
  103. key = _pair[0],
  104. value = _pair[1];
  105. try {
  106. LDS[key] = JSON.parse(value);
  107. } catch (error) {
  108. LDS[key] = null;
  109. }
  110. });
  111. return _context3.abrupt("return", LDS);
  112. case 19:
  113. case "end":
  114. return _context3.stop();
  115. }
  116. }, _callee3, null, [[7, 13]]);
  117. }))();
  118. },
  119. // Used for testing
  120. getRawStorage: function () /*: Promise<Object>*/{
  121. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
  122. var keys, storage, results;
  123. return _regenerator.default.wrap(function (_context4) {
  124. while (1) switch (_context4.prev = _context4.next) {
  125. case 0:
  126. _context4.next = 2;
  127. return RNStorage.getAllKeysAsync();
  128. case 2:
  129. keys = _context4.sent;
  130. storage = {};
  131. _context4.next = 6;
  132. return RNStorage.multiGet(keys);
  133. case 6:
  134. results = _context4.sent;
  135. (0, _map.default)(results).call(results, function (pair) {
  136. var _pair2 = (0, _slicedToArray2.default)(pair, 2),
  137. key = _pair2[0],
  138. value = _pair2[1];
  139. storage[key] = value;
  140. });
  141. return _context4.abrupt("return", storage);
  142. case 9:
  143. case "end":
  144. return _context4.stop();
  145. }
  146. }, _callee4);
  147. }))();
  148. },
  149. clear: function () /*: Promise<void>*/{
  150. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
  151. var keys, batch, i, key;
  152. return _regenerator.default.wrap(function (_context5) {
  153. while (1) switch (_context5.prev = _context5.next) {
  154. case 0:
  155. _context5.next = 2;
  156. return RNStorage.getAllKeysAsync();
  157. case 2:
  158. keys = _context5.sent;
  159. batch = [];
  160. for (i = 0; i < keys.length; i += 1) {
  161. key = keys[i];
  162. if ((0, _LocalDatastoreUtils.isLocalDatastoreKey)(key)) {
  163. batch.push(key);
  164. }
  165. }
  166. return _context5.abrupt("return", RNStorage.multiRemove(batch).catch(function (error) {
  167. return console.error('Error clearing local datastore: ', error);
  168. }));
  169. case 6:
  170. case "end":
  171. return _context5.stop();
  172. }
  173. }, _callee5);
  174. }))();
  175. }
  176. };
  177. module.exports = LocalDatastoreController;