xref: /expo/home/kernel/MockKernel.ts (revision cb0e1ce3)
1import { AsyncStorage } from 'react-native';
2
3const STORAGE_PREFIX = '@@expo@@';
4
5/**
6 * A mock implementation of the native kernel module that can be used when loading Home as a regular
7 * project or when running it on web.
8 *
9 * Longer term, it may make sense to natively define a private, unprivileged implementation of the
10 * kernel module and use this implementation only on web.
11 */
12export default {
13  sdkVersions: [] as string[],
14
15  async doesCurrentTaskEnableDevtools(): Promise<boolean> {
16    return false;
17  },
18
19  addDevMenu(): void {},
20
21  async getDevMenuItemsToShowAsync(): Promise<unknown> {
22    return {};
23  },
24
25  selectDevMenuItemWithKey(_key: string): void {},
26  selectRefresh(): void {},
27  selectCloseMenu(): void {},
28  selectGoToHome(): void {},
29  selectQRReader(): void {},
30
31  async setIsLegacyMenuBehaviorEnabledAsync(_enabled: boolean): Promise<void> {},
32
33  async getIsNuxFinishedAsync(): Promise<boolean> {
34    const item = await AsyncStorage.getItem(`${STORAGE_PREFIX}:nux`);
35    return !!item;
36  },
37
38  async setIsNuxFinishedAsync(finished: boolean): Promise<void> {
39    if (finished) {
40      await AsyncStorage.setItem(`${STORAGE_PREFIX}:nux`, '1');
41    } else {
42      await AsyncStorage.removeItem(`${STORAGE_PREFIX}:nux`);
43    }
44  },
45
46  async getSessionAsync(): Promise<unknown> {
47    const json = await AsyncStorage.getItem(`${STORAGE_PREFIX}:session`);
48    return json ? JSON.parse(json) : null;
49  },
50
51  async setSessionAsync(session: object): Promise<void> {
52    const json = JSON.stringify(session);
53    await AsyncStorage.setItem(`${STORAGE_PREFIX}:session`, json);
54  },
55
56  async removeSessionAsync(): Promise<void> {
57    await AsyncStorage.removeItem(`${STORAGE_PREFIX}:session`);
58  },
59
60  onEventSuccess(_eventId: string, _result: object): void {},
61
62  onEventFailure(_eventId: string, _message: string): void {},
63};
64