LocalDatastoreController.react-native.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. * @private
  13. */
  14. const RNStorage = require('./StorageController.react-native');
  15. const LocalDatastoreController = {
  16. async fromPinWithName(name
  17. /*: string*/
  18. )
  19. /*: Promise<Array<Object>>*/
  20. {
  21. const values = await RNStorage.getItemAsync(name);
  22. if (!values) {
  23. return [];
  24. }
  25. const objects = JSON.parse(values);
  26. return objects;
  27. },
  28. async pinWithName(name
  29. /*: string*/
  30. , value
  31. /*: any*/
  32. )
  33. /*: Promise<void>*/
  34. {
  35. try {
  36. const values = JSON.stringify(value);
  37. await RNStorage.setItemAsync(name, values);
  38. } catch (e) {
  39. // Quota exceeded, possibly due to Safari Private Browsing mode
  40. console.error(e.message);
  41. }
  42. },
  43. unPinWithName(name
  44. /*: string*/
  45. )
  46. /*: Promise<void>*/
  47. {
  48. return RNStorage.removeItemAsync(name);
  49. },
  50. async getAllContents()
  51. /*: Promise<Object>*/
  52. {
  53. const keys = await RNStorage.getAllKeysAsync();
  54. const batch = [];
  55. for (let i = 0; i < keys.length; i += 1) {
  56. const key = keys[i];
  57. if ((0, _LocalDatastoreUtils.isLocalDatastoreKey)(key)) {
  58. batch.push(key);
  59. }
  60. }
  61. const LDS = {};
  62. let results = [];
  63. try {
  64. results = await RNStorage.multiGet(batch);
  65. } catch (error) {
  66. console.error('Error getAllContents: ', error);
  67. return {};
  68. }
  69. results.forEach(pair => {
  70. const [key, value] = pair;
  71. try {
  72. LDS[key] = JSON.parse(value);
  73. } catch (error) {
  74. LDS[key] = null;
  75. }
  76. });
  77. return LDS;
  78. },
  79. // Used for testing
  80. async getRawStorage()
  81. /*: Promise<Object>*/
  82. {
  83. const keys = await RNStorage.getAllKeysAsync();
  84. const storage = {};
  85. const results = await RNStorage.multiGet(keys);
  86. results.map(pair => {
  87. const [key, value] = pair;
  88. storage[key] = value;
  89. });
  90. return storage;
  91. },
  92. async clear()
  93. /*: Promise<void>*/
  94. {
  95. const keys = await RNStorage.getAllKeysAsync();
  96. const batch = [];
  97. for (let i = 0; i < keys.length; i += 1) {
  98. const key = keys[i];
  99. if ((0, _LocalDatastoreUtils.isLocalDatastoreKey)(key)) {
  100. batch.push(key);
  101. }
  102. }
  103. return RNStorage.multiRemove(batch).catch(error => console.error('Error clearing local datastore: ', error));
  104. }
  105. };
  106. module.exports = LocalDatastoreController;