Skip to content

Commit 1de4853

Browse files
amhinsonAshish-Nandaiartemiev
authored
chore!: Upgrade to @react-native-async-storage/async-storage (#8250)
BREAKING CHANGE: Upgrade from React Native AsyncStorage to @react-native-async-storage/async-storage Co-authored-by: Ashish Nanda <ashish.nanda.5591@gmail.com> Co-authored-by: Ivan Artemiev <29709626+iartemiev@users.noreply.github.com>
1 parent e2740f0 commit 1de4853

File tree

13 files changed

+89
-71
lines changed

13 files changed

+89
-71
lines changed

.circleci/config.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1072,9 +1072,9 @@ workflows:
10721072
- integ_vue_auth
10731073
- integ_rn_ios_storage
10741074
- integ_rn_ios_storage_multipart_progress
1075+
- integ_rn_android_storage_multipart_progress
10751076
- integ_rn_ios_push_notifications
10761077
- integ_rn_android_storage
1077-
- integ_rn_android_storage_multipart_progress
10781078
- integ_datastore_auth
10791079
- integ_duplicate_packages
10801080
- post_release:

README.md

+14-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,20 @@ Our default implementation works with Amazon Web Services (AWS), but AWS Amplify
3131

3232
## Notice:
3333

34-
### Amplify@3.x.x has breaking changes. Please see the breaking changes below:
34+
### Amplify 4.x.x has breaking changes for React Native. Please see the breaking changes below:
35+
36+
- If you are using React Native or Expo, you will need add `@react-native-async-storage/async-storage` as a dependency to your application, in addition to the other React Native dependencies:
37+
38+
```
39+
// React Native
40+
yarn add aws-amplify amazon-cognito-identity-js @react-native-community/netinfo @react-native-async-storage/async-storage
41+
npx pod-install
42+
43+
// Expo
44+
yarn add aws-amplify @react-native-community/netinfo @react-native-async-storage/async-storage
45+
```
46+
47+
### Amplify 3.x.x has breaking changes. Please see the breaking changes below:
3548

3649
- `AWS.credentials` and `AWS.config` don’t exist anymore anywhere in Amplify JavaScript.
3750
- Both options will not be available to use in version 3. You will not be able to use and set your own credentials.

packages/amazon-cognito-identity-js/__tests__/StorageHelperRN.test.js

+47-55
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,23 @@ describe('React native storage helper unit tests', () => {
55
});
66

77
var items = {};
8-
jest.mock('react-native', () => ({
9-
AsyncStorage: {
10-
setItem: jest.fn((item, value) => {
11-
return new Promise((resolve, reject) => {
12-
items[item] = value;
13-
resolve(value);
14-
});
15-
}),
16-
getItem: jest.fn((item, value) => {
17-
return new Promise((resolve, reject) => {
18-
resolve(items[item]);
19-
});
20-
}),
21-
removeItem: jest.fn(item => {
22-
return new Promise((resolve, reject) => {
23-
resolve(delete items[item]);
24-
});
25-
}),
26-
},
8+
jest.mock('@react-native-async-storage/async-storage', () => ({
9+
setItem: jest.fn((item, value) => {
10+
return new Promise((resolve, reject) => {
11+
items[item] = value;
12+
resolve(value);
13+
});
14+
}),
15+
getItem: jest.fn((item, value) => {
16+
return new Promise((resolve, reject) => {
17+
resolve(items[item]);
18+
});
19+
}),
20+
removeItem: jest.fn(item => {
21+
return new Promise((resolve, reject) => {
22+
resolve(delete items[item]);
23+
});
24+
}),
2725
}));
2826

2927
const StorageHelper = require('../src/StorageHelper-rn.js').default;
@@ -55,24 +53,22 @@ describe('React native storage helper unit tests', () => {
5553
const items = {
5654
'@MemoryStorage:key': 'value1',
5755
};
58-
jest.mock('react-native', () => ({
59-
AsyncStorage: {
60-
setItem: jest.fn((item, value) => {
61-
return new Promise((resolve, reject) => {
62-
items[item] = value;
63-
resolve(value);
64-
});
65-
}),
66-
getAllKeys: jest.fn(callback => {
67-
callback(null, Object.keys(items));
68-
}),
69-
multiGet: jest.fn((keys, callback) => {
70-
const values = keys.map(key => [key, items[key] || null]);
71-
callback && callback(null, values);
56+
jest.mock('@react-native-async-storage/async-storage', () => ({
57+
setItem: jest.fn((item, value) => {
58+
return new Promise((resolve, reject) => {
59+
items[item] = value;
60+
resolve(value);
61+
});
62+
}),
63+
getAllKeys: jest.fn(callback => {
64+
callback(null, Object.keys(items));
65+
}),
66+
multiGet: jest.fn((keys, callback) => {
67+
const values = keys.map(key => [key, items[key] || null]);
68+
callback && callback(null, values);
7269

73-
return values;
74-
}),
75-
},
70+
return values;
71+
}),
7672
}));
7773

7874
const StorageHelper = require('../src/StorageHelper-rn.js').default;
@@ -86,13 +82,11 @@ describe('React native storage helper unit tests', () => {
8682
});
8783

8884
test('Get all keys throws errors', () => {
89-
jest.mock('react-native', () => ({
90-
AsyncStorage: {
91-
getAllKeys: jest.fn(callback => {
92-
const err = ['errKey'];
93-
callback(err, null);
94-
}),
95-
},
85+
jest.mock('@react-native-async-storage/async-storage', () => ({
86+
getAllKeys: jest.fn(callback => {
87+
const err = ['errKey'];
88+
callback(err, null);
89+
}),
9690
}));
9791

9892
const StorageHelper = require('../src/StorageHelper-rn.js').default;
@@ -103,19 +97,17 @@ describe('React native storage helper unit tests', () => {
10397
});
10498
test('Multiget throws errors', () => {
10599
var items = {};
106-
jest.mock('react-native', () => ({
107-
AsyncStorage: {
108-
getAllKeys: jest.fn(callback => {
109-
callback(null, Object.keys(items));
110-
}),
111-
multiGet: jest.fn((keys, callback) => {
112-
const values = keys.map(key => [key, items[key] || null]);
113-
const err = new Error('Storage Error');
114-
callback && callback(err, null);
100+
jest.mock('@react-native-async-storage/async-storage', () => ({
101+
getAllKeys: jest.fn(callback => {
102+
callback(null, Object.keys(items));
103+
}),
104+
multiGet: jest.fn((keys, callback) => {
105+
const values = keys.map(key => [key, items[key] || null]);
106+
const err = new Error('Storage Error');
107+
callback && callback(err, null);
115108

116-
return values;
117-
}),
118-
},
109+
return values;
110+
}),
119111
}));
120112

121113
const StorageHelper = require('../src/StorageHelper-rn.js').default;

packages/amazon-cognito-identity-js/package.json

+6-2
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
"@babel/core": "^7.7.4",
7979
"@babel/preset-env": "^7.7.4",
8080
"@babel/preset-react": "^7.0.0",
81+
"@react-native-async-storage/async-storage": "^1.13.0",
8182
"babel-loader": "^8.0.6",
8283
"cross-env": "^3.1.4",
8384
"eslint": "^3.19.0",
@@ -90,8 +91,11 @@
9091
"eslint-plugin-standard": "^3.0.1",
9192
"jsdoc": "^3.4.0",
9293
"react": "^16.0.0",
93-
"react-native": "^0.44.0",
94+
"react-native": "^0.59.0",
9495
"rimraf": "^2.5.4",
9596
"webpack": "^3.5.5"
96-
}
97+
},
98+
"peerDependencies": {
99+
"@react-native-async-storage/async-storage": "^1.13.0"
100+
}
97101
}

packages/amazon-cognito-identity-js/src/StorageHelper-rn.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* limitations under the License.
1616
*/
1717

18-
import { AsyncStorage } from 'react-native';
18+
import AsyncStorage from '@react-native-async-storage/async-storage';
1919

2020
const MEMORY_KEY_PREFIX = '@MemoryStorage:';
2121
let dataMemory = {};

packages/cache/__mocks__/AsyncStorage.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
const AsyncStorage = jest.genMockFromModule('react-native');
1+
const AsyncStorage = jest.genMockFromModule(
2+
'@react-native-async-storage/async-storage'
3+
);
24

35
var store = {};
46
var curSize = 0;

packages/cache/src/AsyncStorageCache.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import { StorageCache } from './StorageCache';
1515
import { defaultConfig, getCurrTime } from './Utils';
16-
import { AsyncStorage } from 'react-native';
16+
import AsyncStorage from '@react-native-async-storage/async-storage';
1717
import { ICache } from './types';
1818
import { ConsoleLogger as Logger } from '@aws-amplify/core';
1919

packages/core/package.json

+4
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
},
4949
"homepage": "https://aws-amplify.github.io/",
5050
"devDependencies": {
51+
"@react-native-async-storage/async-storage": "^1.13.0",
5152
"find": "^0.2.7",
5253
"genversion": "^2.2.0",
5354
"prepend-file": "^1.3.1",
@@ -62,6 +63,9 @@
6263
"universal-cookie": "^4.0.4",
6364
"zen-observable-ts": "0.8.19"
6465
},
66+
"peerDependencies": {
67+
"@react-native-async-storage/async-storage": "^1.13.0"
68+
},
6569
"jest": {
6670
"globals": {
6771
"ts-jest": {

packages/core/src/RNComponents/reactnative.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@
1111
* and limitations under the License.
1212
*/
1313

14-
export { Linking, AppState, AsyncStorage } from 'react-native';
14+
import { Linking, AppState } from 'react-native';
15+
import AsyncStorage from '@react-native-async-storage/async-storage';
16+
export { Linking, AppState, AsyncStorage };

packages/core/src/StorageHelper/reactnative.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
1111
* and limitations under the License.
1212
*/
13-
import { AsyncStorage } from 'react-native';
13+
import AsyncStorage from '@react-native-async-storage/async-storage';
1414

1515
const MEMORY_KEY_PREFIX = '@MemoryStorage:';
1616
let dataMemory = {};
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { AsyncStorage } from 'react-native';
1+
import AsyncStorage from '@react-native-async-storage/async-storage';
22

3-
// See: https://reactnative.dev/docs/asyncstorage
3+
// See: https://react-native-async-storage.github.io/async-storage/
44
export function createInMemoryStore() {
55
return AsyncStorage;
66
}

packages/pushnotification/__tests__/PushNotification-test.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@ jest.mock('react-native', () => ({
1111
currentState: 'active',
1212
addEventListener: (event, callback) => callback('active'),
1313
},
14-
AsyncStorage: {
15-
getItem: () => new Promise(res => res('item')),
16-
setItem: jest.fn(),
17-
},
1814
DeviceEventEmitter: {
1915
addListener: jest.fn(),
2016
},
@@ -29,6 +25,11 @@ jest.mock('react-native', () => ({
2925
},
3026
}));
3127

28+
jest.mock('@react-native-async-storage/async-storage', () => ({
29+
getItem: () => new Promise(res => res('item')),
30+
setItem: jest.fn(),
31+
}));
32+
3233
jest.mock('@react-native-community/push-notification-ios', () => ({
3334
requestPermissions: () => {},
3435
getInitialNotification: new Promise(res => res('notification')),

packages/pushnotification/src/PushNotification.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
import {
1515
NativeModules,
1616
DeviceEventEmitter,
17-
AsyncStorage,
1817
Platform,
1918
AppState,
2019
} from 'react-native';
2120
import PushNotificationIOS from '@react-native-community/push-notification-ios';
21+
import AsyncStorage from '@react-native-async-storage/async-storage';
2222
import { Amplify, ConsoleLogger as Logger, JS } from '@aws-amplify/core';
2323

2424
const logger = new Logger('Notification');

0 commit comments

Comments
 (0)