@amabeth/repeating-wheel-picker 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +57 -57
- package/example/index.ts +8 -0
- package/example/node_modules/@expo/cli/static/template/+html.tsx +28 -0
- package/example/node_modules/@expo/cli/static/template/+native-intent.ts +9 -0
- package/example/node_modules/@expo/cli/static/template/[...rsc]+api.ts +16 -0
- package/example/node_modules/ansi-styles/index.d.ts +345 -0
- package/example/node_modules/chalk/index.d.ts +415 -0
- package/example/node_modules/commander/typings/index.d.ts +627 -0
- package/example/node_modules/expo/Expo.podspec +108 -0
- package/example/node_modules/expo/build/Expo.d.ts +8 -0
- package/example/node_modules/expo/build/Expo.fx.d.ts +4 -0
- package/example/node_modules/expo/build/Expo.fx.web.d.ts +3 -0
- package/example/node_modules/expo/build/devtools/DevToolsPluginClient.d.ts +72 -0
- package/example/node_modules/expo/build/devtools/DevToolsPluginClientFactory.d.ts +16 -0
- package/example/node_modules/expo/build/devtools/DevToolsPluginClientImplApp.d.ts +15 -0
- package/example/node_modules/expo/build/devtools/DevToolsPluginClientImplBrowser.d.ts +14 -0
- package/example/node_modules/expo/build/devtools/MessageFramePacker.d.ts +50 -0
- package/example/node_modules/expo/build/devtools/ProtocolVersion.d.ts +7 -0
- package/example/node_modules/expo/build/devtools/WebSocketBackingStore.d.ts +10 -0
- package/example/node_modules/expo/build/devtools/WebSocketWithReconnect.d.ts +81 -0
- package/example/node_modules/expo/build/devtools/devtools.types.d.ts +42 -0
- package/example/node_modules/expo/build/devtools/getConnectionInfo.d.ts +6 -0
- package/example/node_modules/expo/build/devtools/getConnectionInfo.native.d.ts +6 -0
- package/example/node_modules/expo/build/devtools/index.d.ts +12 -0
- package/example/node_modules/expo/build/devtools/logger.d.ts +6 -0
- package/example/node_modules/expo/build/dom/base.d.ts +5 -0
- package/example/node_modules/expo/build/dom/dom-entry.d.ts +3 -0
- package/example/node_modules/expo/build/dom/dom-hooks.d.ts +8 -0
- package/example/node_modules/expo/build/dom/dom.d.ts +5 -0
- package/example/node_modules/expo/build/dom/dom.types.d.ts +34 -0
- package/example/node_modules/expo/build/dom/dom.web.d.ts +3 -0
- package/example/node_modules/expo/build/dom/global-events.d.ts +4 -0
- package/example/node_modules/expo/build/dom/injection.d.ts +9 -0
- package/example/node_modules/expo/build/dom/internal.d.ts +3 -0
- package/example/node_modules/expo/build/dom/internal.web.d.ts +2 -0
- package/example/node_modules/expo/build/dom/marshal.d.ts +4 -0
- package/example/node_modules/expo/build/dom/webview/ExpoDOMWebView.d.ts +6 -0
- package/example/node_modules/expo/build/dom/webview/RNWebView.d.ts +7 -0
- package/example/node_modules/expo/build/dom/webview/useDebugZeroHeight.d.ts +12 -0
- package/example/node_modules/expo/build/dom/webview-wrapper.d.ts +16 -0
- package/example/node_modules/expo/build/environment/DevLoadingView.d.ts +3 -0
- package/example/node_modules/expo/build/environment/DevLoadingView.web.d.ts +3 -0
- package/example/node_modules/expo/build/environment/DevLoadingViewNativeModule.d.ts +9 -0
- package/example/node_modules/expo/build/environment/DevLoadingViewNativeModule.native.d.ts +3 -0
- package/example/node_modules/expo/build/environment/ExpoGo.d.ts +31 -0
- package/example/node_modules/expo/build/environment/ExpoGo.web.d.ts +3 -0
- package/example/node_modules/expo/build/environment/getInitialSafeArea.d.ts +7 -0
- package/example/node_modules/expo/build/environment/getInitialSafeArea.native.d.ts +11 -0
- package/example/node_modules/expo/build/errors/AppEntryNotFound.d.ts +2 -0
- package/example/node_modules/expo/build/errors/ExpoErrorManager.d.ts +8 -0
- package/example/node_modules/expo/build/errors/ExpoErrorManager.native.d.ts +4 -0
- package/example/node_modules/expo/build/hooks/useEvent.d.ts +59 -0
- package/example/node_modules/expo/build/launch/registerRootComponent.d.ts +30 -0
- package/example/node_modules/expo/build/launch/withDevTools.d.ts +3 -0
- package/example/node_modules/expo/build/launch/withDevTools.ios.d.ts +7 -0
- package/example/node_modules/expo/build/launch/withDevTools.web.d.ts +3 -0
- package/example/node_modules/expo/build/timer/polyfillNextTick.d.ts +6 -0
- package/example/node_modules/expo/build/utils/blobUtils.d.ts +9 -0
- package/example/node_modules/expo/build/utils/getBundleUrl.d.ts +2 -0
- package/example/node_modules/expo/build/utils/getBundleUrl.native.d.ts +2 -0
- package/example/node_modules/expo/build/utils/getBundleUrl.web.d.ts +2 -0
- package/example/node_modules/expo/build/winter/FormData.d.ts +49 -0
- package/example/node_modules/expo/build/winter/ImportMetaRegistry.d.ts +9 -0
- package/example/node_modules/expo/build/winter/TextDecoder.d.ts +20 -0
- package/example/node_modules/expo/build/winter/fetch/ExpoFetchModule.d.ts +2 -0
- package/example/node_modules/expo/build/winter/fetch/ExpoFetchModule.web.d.ts +10 -0
- package/example/node_modules/expo/build/winter/fetch/FetchErrors.d.ts +8 -0
- package/example/node_modules/expo/build/winter/fetch/FetchResponse.d.ts +31 -0
- package/example/node_modules/expo/build/winter/fetch/NativeRequest.d.ts +30 -0
- package/example/node_modules/expo/build/winter/fetch/RequestUtils.d.ts +21 -0
- package/example/node_modules/expo/build/winter/fetch/convertFormData.d.ts +19 -0
- package/example/node_modules/expo/build/winter/fetch/fetch.d.ts +4 -0
- package/example/node_modules/expo/build/winter/fetch/fetch.types.d.ts +16 -0
- package/example/node_modules/expo/build/winter/fetch/fetch.web.d.ts +2 -0
- package/example/node_modules/expo/build/winter/fetch/index.d.ts +3 -0
- package/example/node_modules/expo/build/winter/index.d.ts +2 -0
- package/example/node_modules/expo/build/winter/runtime.d.ts +2 -0
- package/example/node_modules/expo/build/winter/runtime.native.d.ts +2 -0
- package/example/node_modules/expo/build/winter/url.d.ts +23 -0
- package/example/node_modules/expo/config-plugins.d.ts +1 -0
- package/example/node_modules/expo/config.d.ts +1 -0
- package/example/node_modules/expo/devtools.d.ts +1 -0
- package/example/node_modules/expo/dom/global.d.ts +1 -0
- package/example/node_modules/expo/dom/index.d.ts +1 -0
- package/example/node_modules/expo/dom/internal.d.ts +1 -0
- package/example/node_modules/expo/fetch.d.ts +1 -0
- package/example/node_modules/expo/fingerprint.d.ts +1 -0
- package/example/node_modules/expo/metro-config.d.ts +1 -0
- package/example/node_modules/expo/react-native.config.js +50 -0
- package/example/node_modules/expo/src/Expo.fx.tsx +53 -0
- package/example/node_modules/expo/src/Expo.fx.web.tsx +21 -0
- package/example/node_modules/expo/src/Expo.ts +30 -0
- package/example/node_modules/expo/src/devtools/DevToolsPluginClient.ts +240 -0
- package/example/node_modules/expo/src/devtools/DevToolsPluginClientFactory.ts +73 -0
- package/example/node_modules/expo/src/devtools/DevToolsPluginClientImplApp.ts +56 -0
- package/example/node_modules/expo/src/devtools/DevToolsPluginClientImplBrowser.ts +38 -0
- package/example/node_modules/expo/src/devtools/MessageFramePacker.ts +235 -0
- package/example/node_modules/expo/src/devtools/ProtocolVersion.ts +6 -0
- package/example/node_modules/expo/src/devtools/WebSocketBackingStore.ts +10 -0
- package/example/node_modules/expo/src/devtools/WebSocketWithReconnect.ts +318 -0
- package/example/node_modules/expo/src/devtools/devtools.types.ts +50 -0
- package/example/node_modules/expo/src/devtools/getConnectionInfo.native.ts +18 -0
- package/example/node_modules/expo/src/devtools/getConnectionInfo.ts +16 -0
- package/example/node_modules/expo/src/devtools/index.ts +53 -0
- package/example/node_modules/expo/src/devtools/logger.ts +29 -0
- package/example/node_modules/expo/src/dom/base.ts +62 -0
- package/example/node_modules/expo/src/dom/dom-entry.tsx +128 -0
- package/example/node_modules/expo/src/dom/dom-hooks.ts +46 -0
- package/example/node_modules/expo/src/dom/dom.ts +8 -0
- package/example/node_modules/expo/src/dom/dom.types.ts +39 -0
- package/example/node_modules/expo/src/dom/dom.web.ts +6 -0
- package/example/node_modules/expo/src/dom/global-events.ts +16 -0
- package/example/node_modules/expo/src/dom/injection.ts +42 -0
- package/example/node_modules/expo/src/dom/internal.ts +5 -0
- package/example/node_modules/expo/src/dom/internal.web.ts +1 -0
- package/example/node_modules/expo/src/dom/marshal.tsx +116 -0
- package/example/node_modules/expo/src/dom/webview/ExpoDOMWebView.ts +10 -0
- package/example/node_modules/expo/src/dom/webview/RNWebView.ts +12 -0
- package/example/node_modules/expo/src/dom/webview/useDebugZeroHeight.ts +62 -0
- package/example/node_modules/expo/src/dom/webview-wrapper.tsx +253 -0
- package/example/node_modules/expo/src/environment/DevLoadingView.tsx +123 -0
- package/example/node_modules/expo/src/environment/DevLoadingView.web.tsx +135 -0
- package/example/node_modules/expo/src/environment/DevLoadingViewNativeModule.native.ts +3 -0
- package/example/node_modules/expo/src/environment/DevLoadingViewNativeModule.ts +7 -0
- package/example/node_modules/expo/src/environment/ExpoGo.ts +53 -0
- package/example/node_modules/expo/src/environment/ExpoGo.web.ts +7 -0
- package/example/node_modules/expo/src/environment/getInitialSafeArea.native.ts +16 -0
- package/example/node_modules/expo/src/environment/getInitialSafeArea.ts +8 -0
- package/example/node_modules/expo/src/errors/AppEntryNotFound.tsx +35 -0
- package/example/node_modules/expo/src/errors/ExpoErrorManager.native.ts +51 -0
- package/example/node_modules/expo/src/errors/ExpoErrorManager.ts +11 -0
- package/example/node_modules/expo/src/hooks/useEvent.ts +112 -0
- package/example/node_modules/expo/src/launch/registerRootComponent.tsx +64 -0
- package/example/node_modules/expo/src/launch/withDevTools.ios.tsx +47 -0
- package/example/node_modules/expo/src/launch/withDevTools.tsx +30 -0
- package/example/node_modules/expo/src/launch/withDevTools.web.tsx +23 -0
- package/example/node_modules/expo/src/timer/polyfillNextTick.ts +10 -0
- package/example/node_modules/expo/src/ts-declarations/console.d.ts +47 -0
- package/example/node_modules/expo/src/ts-declarations/global.d.ts +12 -0
- package/example/node_modules/expo/src/ts-declarations/react-native.d.ts +34 -0
- package/example/node_modules/expo/src/ts-declarations/whatwg-url-without-unicode.d.ts +186 -0
- package/example/node_modules/expo/src/utils/blobUtils.ts +23 -0
- package/example/node_modules/expo/src/utils/getBundleUrl.native.ts +17 -0
- package/example/node_modules/expo/src/utils/getBundleUrl.ts +5 -0
- package/example/node_modules/expo/src/utils/getBundleUrl.web.ts +21 -0
- package/example/node_modules/expo/src/winter/FormData.ts +222 -0
- package/example/node_modules/expo/src/winter/ImportMetaRegistry.ts +14 -0
- package/example/node_modules/expo/src/winter/TextDecoder.ts +429 -0
- package/example/node_modules/expo/src/winter/fetch/ExpoFetchModule.ts +3 -0
- package/example/node_modules/expo/src/winter/fetch/ExpoFetchModule.web.ts +7 -0
- package/example/node_modules/expo/src/winter/fetch/FetchErrors.ts +11 -0
- package/example/node_modules/expo/src/winter/fetch/FetchResponse.ts +146 -0
- package/example/node_modules/expo/src/winter/fetch/NativeRequest.ts +38 -0
- package/example/node_modules/expo/src/winter/fetch/RequestUtils.ts +124 -0
- package/example/node_modules/expo/src/winter/fetch/convertFormData.ts +92 -0
- package/example/node_modules/expo/src/winter/fetch/fetch.ts +59 -0
- package/example/node_modules/expo/src/winter/fetch/fetch.types.ts +17 -0
- package/example/node_modules/expo/src/winter/fetch/fetch.web.ts +1 -0
- package/example/node_modules/expo/src/winter/fetch/index.ts +2 -0
- package/example/node_modules/expo/src/winter/index.ts +1 -0
- package/example/node_modules/expo/src/winter/runtime.native.ts +41 -0
- package/example/node_modules/expo/src/winter/runtime.ts +5 -0
- package/example/node_modules/expo/src/winter/url.ts +116 -0
- package/example/node_modules/expo/types/global.d.ts +38 -0
- package/example/node_modules/expo/types/index.d.ts +3 -0
- package/example/node_modules/expo/types/metro-require.d.ts +52 -0
- package/example/node_modules/expo/types/react-native-web.d.ts +291 -0
- package/example/node_modules/expo-modules-autolinking/build/ExpoModuleConfig.d.ts +85 -0
- package/example/node_modules/expo-modules-autolinking/build/autolinking/findModules.d.ts +5 -0
- package/example/node_modules/expo-modules-autolinking/build/autolinking/generatePackageList.d.ts +11 -0
- package/example/node_modules/expo-modules-autolinking/build/autolinking/getConfiguration.d.ts +2 -0
- package/example/node_modules/expo-modules-autolinking/build/autolinking/index.d.ts +17 -0
- package/example/node_modules/expo-modules-autolinking/build/autolinking/mergeLinkingOptions.d.ts +21 -0
- package/example/node_modules/expo-modules-autolinking/build/autolinking/resolveModules.d.ts +9 -0
- package/example/node_modules/expo-modules-autolinking/build/autolinking/utils.d.ts +6 -0
- package/example/node_modules/expo-modules-autolinking/build/autolinking/verifySearchResults.d.ts +5 -0
- package/example/node_modules/expo-modules-autolinking/build/fileUtils.d.ts +18 -0
- package/example/node_modules/expo-modules-autolinking/build/index.d.ts +1 -0
- package/example/node_modules/expo-modules-autolinking/build/platforms/android.d.ts +38 -0
- package/example/node_modules/expo-modules-autolinking/build/platforms/apple.d.ts +15 -0
- package/example/node_modules/expo-modules-autolinking/build/platforms/devtools.d.ts +3 -0
- package/example/node_modules/expo-modules-autolinking/build/reactNativeConfig/androidResolver.d.ts +20 -0
- package/example/node_modules/expo-modules-autolinking/build/reactNativeConfig/config.d.ts +5 -0
- package/example/node_modules/expo-modules-autolinking/build/reactNativeConfig/index.d.ts +2 -0
- package/example/node_modules/expo-modules-autolinking/build/reactNativeConfig/iosResolver.d.ts +2 -0
- package/example/node_modules/expo-modules-autolinking/build/reactNativeConfig/reactNativeConfig.d.ts +13 -0
- package/example/node_modules/expo-modules-autolinking/build/reactNativeConfig/reactNativeConfig.types.d.ts +95 -0
- package/example/node_modules/expo-modules-autolinking/build/types.d.ts +319 -0
- package/example/node_modules/expo-modules-autolinking/e2e/TestUtils.ts +53 -0
- package/example/node_modules/expo-modules-autolinking/exports.d.ts +1 -0
- package/example/node_modules/expo-modules-autolinking/src/ExpoModuleConfig.ts +181 -0
- package/example/node_modules/expo-modules-autolinking/src/autolinking/findModules.ts +259 -0
- package/example/node_modules/expo-modules-autolinking/src/autolinking/generatePackageList.ts +46 -0
- package/example/node_modules/expo-modules-autolinking/src/autolinking/getConfiguration.ts +7 -0
- package/example/node_modules/expo-modules-autolinking/src/autolinking/index.ts +45 -0
- package/example/node_modules/expo-modules-autolinking/src/autolinking/mergeLinkingOptions.ts +127 -0
- package/example/node_modules/expo-modules-autolinking/src/autolinking/resolveModules.ts +46 -0
- package/example/node_modules/expo-modules-autolinking/src/autolinking/utils.ts +37 -0
- package/example/node_modules/expo-modules-autolinking/src/autolinking/verifySearchResults.ts +33 -0
- package/example/node_modules/expo-modules-autolinking/src/fileUtils.ts +64 -0
- package/example/node_modules/expo-modules-autolinking/src/index.ts +262 -0
- package/example/node_modules/expo-modules-autolinking/src/platforms/android.ts +303 -0
- package/example/node_modules/expo-modules-autolinking/src/platforms/apple.ts +292 -0
- package/example/node_modules/expo-modules-autolinking/src/platforms/devtools.ts +25 -0
- package/example/node_modules/expo-modules-autolinking/src/reactNativeConfig/androidResolver.ts +264 -0
- package/example/node_modules/expo-modules-autolinking/src/reactNativeConfig/config.ts +67 -0
- package/example/node_modules/expo-modules-autolinking/src/reactNativeConfig/index.ts +2 -0
- package/example/node_modules/expo-modules-autolinking/src/reactNativeConfig/iosResolver.ts +37 -0
- package/example/node_modules/expo-modules-autolinking/src/reactNativeConfig/reactNativeConfig.ts +245 -0
- package/example/node_modules/expo-modules-autolinking/src/reactNativeConfig/reactNativeConfig.types.ts +107 -0
- package/example/node_modules/expo-modules-autolinking/src/types.ts +384 -0
- package/example/node_modules/find-up/index.d.ts +138 -0
- package/example/node_modules/glob/dist/commonjs/glob.d.ts +388 -0
- package/example/node_modules/glob/dist/commonjs/has-magic.d.ts +14 -0
- package/example/node_modules/glob/dist/commonjs/ignore.d.ts +24 -0
- package/example/node_modules/glob/dist/commonjs/index.d.ts +97 -0
- package/example/node_modules/glob/dist/commonjs/pattern.d.ts +76 -0
- package/example/node_modules/glob/dist/commonjs/processor.d.ts +59 -0
- package/example/node_modules/glob/dist/commonjs/walker.d.ts +97 -0
- package/example/node_modules/glob/dist/esm/glob.d.ts +388 -0
- package/example/node_modules/glob/dist/esm/has-magic.d.ts +14 -0
- package/example/node_modules/glob/dist/esm/ignore.d.ts +24 -0
- package/example/node_modules/glob/dist/esm/index.d.ts +97 -0
- package/example/node_modules/glob/dist/esm/pattern.d.ts +76 -0
- package/example/node_modules/glob/dist/esm/processor.d.ts +59 -0
- package/example/node_modules/glob/dist/esm/walker.d.ts +97 -0
- package/example/node_modules/locate-path/index.d.ts +83 -0
- package/example/node_modules/log-symbols/node_modules/chalk/types/index.d.ts +97 -0
- package/example/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +2 -0
- package/example/node_modules/minimatch/dist/commonjs/ast.d.ts +20 -0
- package/example/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +8 -0
- package/example/node_modules/minimatch/dist/commonjs/escape.d.ts +12 -0
- package/example/node_modules/minimatch/dist/commonjs/index.d.ts +94 -0
- package/example/node_modules/minimatch/dist/commonjs/unescape.d.ts +17 -0
- package/example/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +2 -0
- package/example/node_modules/minimatch/dist/esm/ast.d.ts +20 -0
- package/example/node_modules/minimatch/dist/esm/brace-expressions.d.ts +8 -0
- package/example/node_modules/minimatch/dist/esm/escape.d.ts +12 -0
- package/example/node_modules/minimatch/dist/esm/index.d.ts +94 -0
- package/example/node_modules/minimatch/dist/esm/unescape.d.ts +17 -0
- package/example/node_modules/ora/index.d.ts +257 -0
- package/example/node_modules/ora/node_modules/chalk/types/index.d.ts +97 -0
- package/example/node_modules/ora/node_modules/strip-ansi/index.d.ts +15 -0
- package/example/node_modules/p-locate/index.d.ts +53 -0
- package/example/node_modules/path-exists/index.d.ts +28 -0
- package/example/package.json +29 -0
- package/example/src/constants/styles.ts +43 -0
- package/example/src/hooks/useComponentHeight.ts +13 -0
- package/example/src/scenes/app.tsx +33 -0
- package/example/src/scenes/booleanPicker.tsx +60 -0
- package/example/src/scenes/customTypePicker.tsx +83 -0
- package/example/src/scenes/numberPicker.tsx +75 -0
- package/example/src/scenes/stringPicker.tsx +64 -0
- package/lib/module/index.js +6 -6
- package/lib/module/index.js.map +1 -1
- package/package.json +168 -183
- package/src/index.tsx +0 -507
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// load expo-asset immediately to set a custom `source` transformer in React Native
|
|
2
|
+
import './winter';
|
|
3
|
+
import 'expo-asset';
|
|
4
|
+
import 'expo/virtual/rsc';
|
|
5
|
+
|
|
6
|
+
import Constants from 'expo-constants';
|
|
7
|
+
import { AppRegistry, NativeModules, LogBox, Platform } from 'react-native';
|
|
8
|
+
|
|
9
|
+
import { isRunningInExpoGo } from './environment/ExpoGo';
|
|
10
|
+
import { AppEntryNotFound } from './errors/AppEntryNotFound';
|
|
11
|
+
import { createErrorHandler } from './errors/ExpoErrorManager';
|
|
12
|
+
|
|
13
|
+
if (isRunningInExpoGo()) {
|
|
14
|
+
// set up some improvements to commonly logged error messages stemming from react-native
|
|
15
|
+
const globalHandler = ErrorUtils.getGlobalHandler();
|
|
16
|
+
ErrorUtils.setGlobalHandler(createErrorHandler(globalHandler));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Warn if the New Architecture is not explicitly enabled in the app config and we are running in Expo Go.
|
|
20
|
+
// This could be problematic because you will be developing your app with the New Architecture enabled and
|
|
21
|
+
// but your builds will have the New Architecture disabled.
|
|
22
|
+
if (__DEV__ && isRunningInExpoGo() && process.env.NODE_ENV === 'development') {
|
|
23
|
+
(['android', 'ios'] as const).forEach((platform) => {
|
|
24
|
+
const newArchPlatformConfig = Constants.expoConfig?.[platform]?.newArchEnabled;
|
|
25
|
+
const newArchRootConfig = Constants.expoConfig?.newArchEnabled;
|
|
26
|
+
|
|
27
|
+
const isNewArchExplicitlyDisabled =
|
|
28
|
+
newArchPlatformConfig === false ||
|
|
29
|
+
(newArchPlatformConfig === undefined && newArchRootConfig === false);
|
|
30
|
+
|
|
31
|
+
if (Platform.OS === platform && isNewArchExplicitlyDisabled) {
|
|
32
|
+
// Wrap it in rAF to show the warning after the React Native DevTools message
|
|
33
|
+
requestAnimationFrame(() => {
|
|
34
|
+
console.warn(
|
|
35
|
+
`🚨 React Native's New Architecture is always enabled in Expo Go, but it is explicitly disabled in your project's app config. This may lead to unexpected behavior when creating a production or development build. Remove "newArchEnabled": false from your app.json.\nLearn more: https://docs.expo.dev/guides/new-architecture/`
|
|
36
|
+
);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Disable the "Open debugger to view warnings" React Native DevTools warning in
|
|
43
|
+
// Expo Go and expo-dev-client, because launching the debugger from there will not
|
|
44
|
+
// get the correct JS target.
|
|
45
|
+
const IS_RUNNING_IN_DEV_CLIENT = !!NativeModules.EXDevLauncher;
|
|
46
|
+
if (__DEV__ && LogBox?.ignoreLogs && (isRunningInExpoGo() || IS_RUNNING_IN_DEV_CLIENT)) {
|
|
47
|
+
LogBox.ignoreLogs([/Open debugger to view warnings/]);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
51
|
+
// Register a default component and expect `registerRootComponent` to be called later and update it.
|
|
52
|
+
AppRegistry.registerComponent('main', () => AppEntryNotFound);
|
|
53
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import './winter';
|
|
2
|
+
import 'expo/virtual/rsc';
|
|
3
|
+
|
|
4
|
+
// When users dangerously import a file inside of react-native, it breaks the web alias.
|
|
5
|
+
// This is one of the most common, and cryptic web errors that users encounter.
|
|
6
|
+
// This conditional side-effect provides a more helpful error message for debugging.
|
|
7
|
+
// Use a wrapper `__DEV__` to remove this entire block in production.
|
|
8
|
+
if (__DEV__) {
|
|
9
|
+
if (
|
|
10
|
+
// Skip mocking if someone is shimming this value out.
|
|
11
|
+
!('__fbBatchedBridgeConfig' in global)
|
|
12
|
+
) {
|
|
13
|
+
Object.defineProperty(global, '__fbBatchedBridgeConfig', {
|
|
14
|
+
get() {
|
|
15
|
+
throw new Error(
|
|
16
|
+
"Your web project is importing a module from 'react-native' instead of 'react-native-web'. Learn more: https://expo.fyi/fb-batched-bridge-config-web"
|
|
17
|
+
);
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import './Expo.fx';
|
|
2
|
+
|
|
3
|
+
export { disableErrorHandling } from './errors/ExpoErrorManager';
|
|
4
|
+
export { default as registerRootComponent } from './launch/registerRootComponent';
|
|
5
|
+
|
|
6
|
+
export { isRunningInExpoGo, getExpoGoProjectConfig } from './environment/ExpoGo';
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
// Core classes
|
|
10
|
+
EventEmitter,
|
|
11
|
+
SharedObject,
|
|
12
|
+
SharedRef,
|
|
13
|
+
NativeModule,
|
|
14
|
+
|
|
15
|
+
// Methods
|
|
16
|
+
requireNativeModule,
|
|
17
|
+
requireOptionalNativeModule,
|
|
18
|
+
requireNativeViewManager as requireNativeView,
|
|
19
|
+
registerWebModule,
|
|
20
|
+
reloadAppAsync,
|
|
21
|
+
} from 'expo-modules-core';
|
|
22
|
+
|
|
23
|
+
export type {
|
|
24
|
+
SharedRef as SharedRefType,
|
|
25
|
+
EventEmitter as EventEmitterType,
|
|
26
|
+
NativeModule as NativeModuleType,
|
|
27
|
+
SharedObject as SharedObjectType,
|
|
28
|
+
} from 'expo-modules-core/types';
|
|
29
|
+
|
|
30
|
+
export { useEvent, useEventListener } from './hooks/useEvent';
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { MessageFramePacker } from './MessageFramePacker';
|
|
2
|
+
import { WebSocketBackingStore } from './WebSocketBackingStore';
|
|
3
|
+
import { WebSocketWithReconnect } from './WebSocketWithReconnect';
|
|
4
|
+
import type {
|
|
5
|
+
ConnectionInfo,
|
|
6
|
+
DevToolsPluginClientOptions,
|
|
7
|
+
HandshakeMessageParams,
|
|
8
|
+
} from './devtools.types';
|
|
9
|
+
import * as logger from './logger';
|
|
10
|
+
import { blobToArrayBufferAsync } from '../utils/blobUtils';
|
|
11
|
+
|
|
12
|
+
interface MessageFramePackerMessageKey {
|
|
13
|
+
pluginName: string;
|
|
14
|
+
method: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface EventSubscription {
|
|
18
|
+
remove(): void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* This client is for the Expo DevTools Plugins to communicate between the app and the DevTools webpage hosted in a browser.
|
|
23
|
+
* All the code should be both compatible with browsers and React Native.
|
|
24
|
+
*/
|
|
25
|
+
export abstract class DevToolsPluginClient {
|
|
26
|
+
private listeners: Record<string, undefined | Set<(params: any) => void>>;
|
|
27
|
+
|
|
28
|
+
private static defaultWSStore: WebSocketBackingStore = new WebSocketBackingStore();
|
|
29
|
+
private readonly wsStore: WebSocketBackingStore = DevToolsPluginClient.defaultWSStore;
|
|
30
|
+
|
|
31
|
+
protected isClosed = false;
|
|
32
|
+
protected retries = 0;
|
|
33
|
+
private readonly messageFramePacker: MessageFramePacker<MessageFramePackerMessageKey> =
|
|
34
|
+
new MessageFramePacker();
|
|
35
|
+
|
|
36
|
+
public constructor(
|
|
37
|
+
public readonly connectionInfo: ConnectionInfo,
|
|
38
|
+
private readonly options?: DevToolsPluginClientOptions
|
|
39
|
+
) {
|
|
40
|
+
this.wsStore = connectionInfo.wsStore || DevToolsPluginClient.defaultWSStore;
|
|
41
|
+
this.listeners = Object.create(null);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Initialize the connection.
|
|
46
|
+
* @hidden
|
|
47
|
+
*/
|
|
48
|
+
public async initAsync(): Promise<void> {
|
|
49
|
+
if (this.wsStore.ws == null) {
|
|
50
|
+
this.wsStore.ws = await this.connectAsync();
|
|
51
|
+
}
|
|
52
|
+
this.wsStore.refCount += 1;
|
|
53
|
+
this.wsStore.ws.addEventListener('message', this.handleMessage);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Close the connection.
|
|
58
|
+
*/
|
|
59
|
+
public async closeAsync(): Promise<void> {
|
|
60
|
+
this.isClosed = true;
|
|
61
|
+
this.wsStore.ws?.removeEventListener('message', this.handleMessage);
|
|
62
|
+
this.wsStore.refCount -= 1;
|
|
63
|
+
if (this.wsStore.refCount < 1) {
|
|
64
|
+
this.wsStore.ws?.close();
|
|
65
|
+
this.wsStore.ws = null;
|
|
66
|
+
}
|
|
67
|
+
this.listeners = Object.create(null);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Send a message to the other end of DevTools.
|
|
72
|
+
* @param method A method name.
|
|
73
|
+
* @param params any extra payload.
|
|
74
|
+
*/
|
|
75
|
+
public sendMessage(method: string, params: any) {
|
|
76
|
+
if (this.wsStore.ws?.readyState === WebSocket.CLOSED) {
|
|
77
|
+
logger.warn('Unable to send message in a disconnected state.');
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const messageKey: MessageFramePackerMessageKey = {
|
|
81
|
+
pluginName: this.connectionInfo.pluginName,
|
|
82
|
+
method,
|
|
83
|
+
};
|
|
84
|
+
const packedData = this.messageFramePacker.pack({ messageKey, payload: params });
|
|
85
|
+
if (!(packedData instanceof Promise)) {
|
|
86
|
+
this.wsStore.ws?.send(packedData);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
packedData.then((data) => {
|
|
90
|
+
this.wsStore.ws?.send(data);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Subscribe to a message from the other end of DevTools.
|
|
96
|
+
* @param method Subscribe to a message with a method name.
|
|
97
|
+
* @param listener Listener to be called when a message is received.
|
|
98
|
+
*/
|
|
99
|
+
public addMessageListener(method: string, listener: (params: any) => void): EventSubscription {
|
|
100
|
+
const listenersForMethod = this.listeners[method] || (this.listeners[method] = new Set());
|
|
101
|
+
listenersForMethod.add(listener);
|
|
102
|
+
return {
|
|
103
|
+
remove: () => {
|
|
104
|
+
this.listeners[method]?.delete(listener);
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Subscribe to a message from the other end of DevTools just once.
|
|
111
|
+
* @param method Subscribe to a message with a method name.
|
|
112
|
+
* @param listener Listener to be called when a message is received.
|
|
113
|
+
*/
|
|
114
|
+
public addMessageListenerOnce(method: string, listener: (params: any) => void): void {
|
|
115
|
+
const wrappedListenerOnce = (params: any): void => {
|
|
116
|
+
listener(params);
|
|
117
|
+
this.listeners[method]?.delete(wrappedListenerOnce);
|
|
118
|
+
};
|
|
119
|
+
this.addMessageListener(method, wrappedListenerOnce);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Internal handshake message sender.
|
|
124
|
+
* @hidden
|
|
125
|
+
*/
|
|
126
|
+
protected sendHandshakeMessage(params: HandshakeMessageParams) {
|
|
127
|
+
if (this.wsStore.ws?.readyState === WebSocket.CLOSED) {
|
|
128
|
+
logger.warn('Unable to send message in a disconnected state.');
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
this.wsStore.ws?.send(JSON.stringify({ ...params, __isHandshakeMessages: true }));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Internal handshake message listener.
|
|
136
|
+
* @hidden
|
|
137
|
+
*/
|
|
138
|
+
protected addHandskakeMessageListener(
|
|
139
|
+
listener: (params: HandshakeMessageParams) => void
|
|
140
|
+
): EventSubscription {
|
|
141
|
+
const messageListener = (event: MessageEvent) => {
|
|
142
|
+
if (typeof event.data !== 'string') {
|
|
143
|
+
// binary data is not coming from the handshake messages.
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const data = JSON.parse(event.data);
|
|
148
|
+
if (!data.__isHandshakeMessages) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
delete data.__isHandshakeMessages;
|
|
152
|
+
const params = data as HandshakeMessageParams;
|
|
153
|
+
if (params.pluginName && params.pluginName !== this.connectionInfo.pluginName) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
listener(params);
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
this.wsStore.ws?.addEventListener('message', messageListener);
|
|
160
|
+
return {
|
|
161
|
+
remove: () => {
|
|
162
|
+
this.wsStore.ws?.removeEventListener('message', messageListener);
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Returns whether the client is connected to the server.
|
|
169
|
+
*/
|
|
170
|
+
public isConnected(): boolean {
|
|
171
|
+
return this.wsStore.ws?.readyState === WebSocket.OPEN;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* The method to create the WebSocket connection.
|
|
176
|
+
*/
|
|
177
|
+
protected connectAsync(): Promise<WebSocket> {
|
|
178
|
+
return new Promise((resolve, reject) => {
|
|
179
|
+
const endpoint = 'expo-dev-plugins/broadcast';
|
|
180
|
+
const ws = new WebSocketWithReconnect(`ws://${this.connectionInfo.devServer}/${endpoint}`, {
|
|
181
|
+
binaryType: this.options?.websocketBinaryType,
|
|
182
|
+
onError: (e: unknown) => {
|
|
183
|
+
if (e instanceof Error) {
|
|
184
|
+
console.warn(`Error happened from the WebSocket connection: ${e.message}\n${e.stack}`);
|
|
185
|
+
} else {
|
|
186
|
+
console.warn(`Error happened from the WebSocket connection: ${JSON.stringify(e)}`);
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
ws.addEventListener('open', () => {
|
|
191
|
+
resolve(ws);
|
|
192
|
+
});
|
|
193
|
+
ws.addEventListener('error', (e) => {
|
|
194
|
+
reject(e);
|
|
195
|
+
});
|
|
196
|
+
ws.addEventListener('close', (e: WebSocketCloseEvent) => {
|
|
197
|
+
logger.info('WebSocket closed', e.code, e.reason);
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
protected handleMessage = async (event: WebSocketMessageEvent) => {
|
|
203
|
+
let data: ArrayBuffer | string;
|
|
204
|
+
if (typeof event.data === 'string') {
|
|
205
|
+
data = event.data;
|
|
206
|
+
} else if (event.data instanceof ArrayBuffer) {
|
|
207
|
+
data = event.data;
|
|
208
|
+
} else if (ArrayBuffer.isView(event.data)) {
|
|
209
|
+
data = event.data.buffer as ArrayBuffer;
|
|
210
|
+
} else if (event.data instanceof Blob) {
|
|
211
|
+
data = await blobToArrayBufferAsync(event.data);
|
|
212
|
+
} else {
|
|
213
|
+
logger.warn('Unsupported received data type in handleMessageImpl');
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const { messageKey, payload, ...rest } = this.messageFramePacker.unpack(data);
|
|
217
|
+
// @ts-expect-error: `__isHandshakeMessages` is a private field that is not part of the MessageFramePacker type.
|
|
218
|
+
if (rest?.__isHandshakeMessages === true) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (messageKey.pluginName && messageKey.pluginName !== this.connectionInfo.pluginName) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const listenersForMethod = this.listeners[messageKey.method];
|
|
226
|
+
if (listenersForMethod) {
|
|
227
|
+
for (const listener of listenersForMethod) {
|
|
228
|
+
listener(payload);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Get the WebSocket backing store. Exposed for testing.
|
|
235
|
+
* @hidden
|
|
236
|
+
*/
|
|
237
|
+
public getWebSocketBackingStore(): WebSocketBackingStore {
|
|
238
|
+
return this.wsStore;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { DevToolsPluginClient } from './DevToolsPluginClient';
|
|
2
|
+
import { DevToolsPluginClientImplApp } from './DevToolsPluginClientImplApp';
|
|
3
|
+
import { DevToolsPluginClientImplBrowser } from './DevToolsPluginClientImplBrowser';
|
|
4
|
+
import type { ConnectionInfo, DevToolsPluginClientOptions } from './devtools.types';
|
|
5
|
+
import { getConnectionInfo } from './getConnectionInfo';
|
|
6
|
+
|
|
7
|
+
const instanceMap: Record<string, DevToolsPluginClient | Promise<DevToolsPluginClient>> = {};
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Factory of DevToolsPluginClient based on sender types.
|
|
11
|
+
* @hidden
|
|
12
|
+
*/
|
|
13
|
+
export async function createDevToolsPluginClient(
|
|
14
|
+
connectionInfo: ConnectionInfo,
|
|
15
|
+
options?: DevToolsPluginClientOptions
|
|
16
|
+
): Promise<DevToolsPluginClient> {
|
|
17
|
+
let client: DevToolsPluginClient;
|
|
18
|
+
if (connectionInfo.sender === 'app') {
|
|
19
|
+
client = new DevToolsPluginClientImplApp(connectionInfo, options);
|
|
20
|
+
} else {
|
|
21
|
+
client = new DevToolsPluginClientImplBrowser(connectionInfo, options);
|
|
22
|
+
}
|
|
23
|
+
await client.initAsync();
|
|
24
|
+
return client;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Public API to get the DevToolsPluginClient instance.
|
|
29
|
+
*/
|
|
30
|
+
export async function getDevToolsPluginClientAsync(
|
|
31
|
+
pluginName: string,
|
|
32
|
+
options?: DevToolsPluginClientOptions
|
|
33
|
+
): Promise<DevToolsPluginClient> {
|
|
34
|
+
const connectionInfo = getConnectionInfo();
|
|
35
|
+
|
|
36
|
+
let instance: DevToolsPluginClient | Promise<DevToolsPluginClient> | null =
|
|
37
|
+
instanceMap[pluginName];
|
|
38
|
+
if (instance != null) {
|
|
39
|
+
if (instance instanceof Promise) {
|
|
40
|
+
return instance;
|
|
41
|
+
}
|
|
42
|
+
if (
|
|
43
|
+
instance.isConnected() === false ||
|
|
44
|
+
instance.connectionInfo.devServer !== connectionInfo.devServer
|
|
45
|
+
) {
|
|
46
|
+
await instance.closeAsync();
|
|
47
|
+
delete instanceMap[pluginName];
|
|
48
|
+
instance = null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (instance == null) {
|
|
52
|
+
const instancePromise = createDevToolsPluginClient({ ...connectionInfo, pluginName }, options);
|
|
53
|
+
instanceMap[pluginName] = instancePromise;
|
|
54
|
+
instance = await instancePromise;
|
|
55
|
+
instanceMap[pluginName] = instance;
|
|
56
|
+
}
|
|
57
|
+
return instance;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Internal testing API to cleanup all DevToolsPluginClient instances.
|
|
62
|
+
*/
|
|
63
|
+
export function cleanupDevToolsPluginInstances() {
|
|
64
|
+
for (const pluginName of Object.keys(instanceMap)) {
|
|
65
|
+
const instance = instanceMap[pluginName];
|
|
66
|
+
delete instanceMap[pluginName];
|
|
67
|
+
if (instance instanceof Promise) {
|
|
68
|
+
instance.then((instance) => instance.closeAsync());
|
|
69
|
+
} else {
|
|
70
|
+
instance.closeAsync();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { DevToolsPluginClient } from './DevToolsPluginClient';
|
|
2
|
+
import * as logger from './logger';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The DevToolsPluginClient for the app -> browser communication.
|
|
6
|
+
*/
|
|
7
|
+
export class DevToolsPluginClientImplApp extends DevToolsPluginClient {
|
|
8
|
+
// Map of pluginName -> browserClientId
|
|
9
|
+
private browserClientMap: Record<string, string> = {};
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Initialize the connection.
|
|
13
|
+
* @hidden
|
|
14
|
+
*/
|
|
15
|
+
override async initAsync(): Promise<void> {
|
|
16
|
+
await super.initAsync();
|
|
17
|
+
this.addHandshakeHandler();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
private addHandshakeHandler() {
|
|
21
|
+
this.addHandskakeMessageListener((params) => {
|
|
22
|
+
if (params.method === 'handshake') {
|
|
23
|
+
const { pluginName, protocolVersion } = params;
|
|
24
|
+
|
|
25
|
+
// [0] Check protocol version
|
|
26
|
+
if (protocolVersion !== this.connectionInfo.protocolVersion) {
|
|
27
|
+
// Use console.warn than logger because we want to show the warning even logging is disabled.
|
|
28
|
+
console.warn(
|
|
29
|
+
`Received an incompatible devtools plugin handshake message - pluginName[${pluginName}]`
|
|
30
|
+
);
|
|
31
|
+
this.terminateBrowserClient(pluginName, params.browserClientId);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// [1] Terminate duplicated browser clients for the same plugin
|
|
36
|
+
const previousBrowserClientId = this.browserClientMap[pluginName];
|
|
37
|
+
if (previousBrowserClientId != null && previousBrowserClientId !== params.browserClientId) {
|
|
38
|
+
logger.info(
|
|
39
|
+
`Terminate the previous browser client connection - previousBrowserClientId[${previousBrowserClientId}]`
|
|
40
|
+
);
|
|
41
|
+
this.terminateBrowserClient(pluginName, previousBrowserClientId);
|
|
42
|
+
}
|
|
43
|
+
this.browserClientMap[pluginName] = params.browserClientId;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private terminateBrowserClient(pluginName: string, browserClientId: string) {
|
|
49
|
+
this.sendHandshakeMessage({
|
|
50
|
+
protocolVersion: this.connectionInfo.protocolVersion,
|
|
51
|
+
method: 'terminateBrowserClient',
|
|
52
|
+
browserClientId,
|
|
53
|
+
pluginName,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { DevToolsPluginClient } from './DevToolsPluginClient';
|
|
2
|
+
import * as logger from './logger';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The DevToolsPluginClient for the browser -> app communication.
|
|
6
|
+
*/
|
|
7
|
+
export class DevToolsPluginClientImplBrowser extends DevToolsPluginClient {
|
|
8
|
+
private browserClientId: string = Date.now().toString();
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Initialize the connection.
|
|
12
|
+
* @hidden
|
|
13
|
+
*/
|
|
14
|
+
override async initAsync(): Promise<void> {
|
|
15
|
+
await super.initAsync();
|
|
16
|
+
this.startHandshake();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
private startHandshake() {
|
|
20
|
+
this.addHandskakeMessageListener((params) => {
|
|
21
|
+
if (
|
|
22
|
+
params.method === 'terminateBrowserClient' &&
|
|
23
|
+
this.browserClientId === params.browserClientId
|
|
24
|
+
) {
|
|
25
|
+
logger.info(
|
|
26
|
+
'Received terminateBrowserClient messages and terminate the current connection'
|
|
27
|
+
);
|
|
28
|
+
this.closeAsync();
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
this.sendHandshakeMessage({
|
|
32
|
+
protocolVersion: this.connectionInfo.protocolVersion,
|
|
33
|
+
pluginName: this.connectionInfo.pluginName,
|
|
34
|
+
method: 'handshake',
|
|
35
|
+
browserClientId: this.browserClientId,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|