LocalDatastoreController.react-native.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. "use strict";
  2. var _LocalDatastoreUtils = require("./LocalDatastoreUtils");
  3. /**
  4. * Copyright (c) 2015-present, Parse, LLC.
  5. * All rights reserved.
  6. *
  7. * This source code is licensed under the BSD-style license found in the
  8. * LICENSE file in the root directory of this source tree. An additional grant
  9. * of patent rights can be found in the PATENTS file in the same directory.
  10. *
  11. * @flow
  12. */
  13. const RNStorage = require('./StorageController.react-native');
  14. const LocalDatastoreController = {
  15. async fromPinWithName(name
  16. /*: string*/
  17. )
  18. /*: Promise<Array<Object>>*/
  19. {
  20. const values = await RNStorage.getItemAsync(name);
  21. if (!values) {
  22. return [];
  23. }
  24. const objects = JSON.parse(values);
  25. return objects;
  26. },
  27. async pinWithName(name
  28. /*: string*/
  29. , value
  30. /*: any*/
  31. )
  32. /*: Promise<void>*/
  33. {
  34. try {
  35. const values = JSON.stringify(value);
  36. await RNStorage.setItemAsync(name, values);
  37. } catch (e) {
  38. // Quota exceeded, possibly due to Safari Private Browsing mode
  39. console.error(e.message);
  40. }
  41. },
  42. unPinWithName(name
  43. /*: string*/
  44. )
  45. /*: Promise<void>*/
  46. {
  47. return RNStorage.removeItemAsync(name);
  48. },
  49. async getAllContents()
  50. /*: Promise<Object>*/
  51. {
  52. const keys = await RNStorage.getAllKeys();
  53. const batch = [];
  54. for (let i = 0; i < keys.length; i += 1) {
  55. const key = keys[i];
  56. if ((0, _LocalDatastoreUtils.isLocalDatastoreKey)(key)) {
  57. batch.push(key);
  58. }
  59. }
  60. const LDS = {};
  61. let results = [];
  62. try {
  63. results = await RNStorage.multiGet(batch);
  64. } catch (error) {
  65. console.error('Error getAllContents: ', error);
  66. return {};
  67. }
  68. results.forEach(pair => {
  69. const [key, value] = pair;
  70. try {
  71. LDS[key] = JSON.parse(value);
  72. } catch (error) {
  73. LDS[key] = null;
  74. }
  75. });
  76. return LDS;
  77. },
  78. async getRawStorage()
  79. /*: Promise<Object>*/
  80. {
  81. const keys = await RNStorage.getAllKeys();
  82. const storage = {};
  83. const results = await RNStorage.multiGet(keys);
  84. results.map(pair => {
  85. const [key, value] = pair;
  86. storage[key] = value;
  87. });
  88. return storage;
  89. },
  90. async clear()
  91. /*: Promise<void>*/
  92. {
  93. const keys = await RNStorage.getAllKeys();
  94. const batch = [];
  95. for (let i = 0; i < keys.length; i += 1) {
  96. const key = keys[i];
  97. if ((0, _LocalDatastoreUtils.isLocalDatastoreKey)(key)) {
  98. batch.push(key);
  99. }
  100. }
  101. return RNStorage.multiRemove(batch).catch(error => console.error('Error clearing local datastore: ', error));
  102. }
  103. };
  104. module.exports = LocalDatastoreController;