@exodus/react-native-webview 11.26.1-exodus.13 → 11.26.1-exodus.15
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/android/.gradle/7.1/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.1/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.1/executionHistory/executionHistory.bin +0 -0
- package/android/.gradle/7.1/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.1/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.1/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/7.1/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.1/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/checksums/checksums.lock +0 -0
- package/android/.gradle/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/.idea/compiler.xml +6 -0
- package/android/.idea/gradle.xml +17 -0
- package/android/.idea/jarRepositories.xml +30 -0
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_2_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_0_0.xml +11 -0
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_collection_collection_1_0_0.xml +11 -0
- package/android/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_core_core_1_1_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_0_0.xml +11 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_1_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_webkit_webkit_1_4_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_68_5_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_3.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_3.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_3_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +13 -0
- package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +13 -0
- package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_0.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_0.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_10.xml +13 -0
- package/android/.idea/misc.xml +9 -0
- package/android/.idea/modules/android.androidTest.iml +129 -0
- package/android/.idea/modules/android.iml +40 -0
- package/android/.idea/modules/android.main.iml +124 -0
- package/android/.idea/modules/android.unitTest.iml +124 -0
- package/android/.idea/modules.xml +11 -0
- package/android/.idea/vcs.xml +6 -0
- package/{example/android → android}/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/{example/android → android}/gradle/wrapper/gradle-wrapper.properties +1 -1
- package/android/gradlew +185 -0
- package/android/local.properties +8 -0
- package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java +16 -0
- package/android/src/main/java/com/reactnativecommunity/webview/events/TopNewWindowEvent.kt +25 -0
- package/lib/WebView.android.js +4 -3
- package/lib/WebViewShared.d.ts +4 -2
- package/lib/WebViewShared.js +7 -1
- package/lib/WebViewTypes.d.ts +13 -0
- package/package.json +1 -1
- package/.all-contributorsrc +0 -185
- package/.circleci/config.yml +0 -66
- package/.eslintignore +0 -2
- package/.eslintrc.js +0 -94
- package/.flowconfig +0 -88
- package/.flowconfig.android +0 -88
- package/.gitattributes +0 -12
- package/.github/CODEOWNERS +0 -1
- package/.github/ISSUE_TEMPLATE/bug-report.md +0 -42
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -30
- package/.github/workflows/android-ci.yml +0 -35
- package/.github/workflows/detox.yml +0 -20
- package/.github/workflows/ios-ci.yml +0 -31
- package/.github/workflows/scripts/install-vs-features.ps1 +0 -108
- package/.github/workflows/stale.yml +0 -17
- package/.gitignore +0 -62
- package/.prettierrc.js +0 -10
- package/.releaserc +0 -15
- package/.vscode/settings.json +0 -9
- package/babel.config.js +0 -11
- package/bin/setup +0 -26
- package/docs/Contributing.md +0 -102
- package/docs/Custom-Android.md +0 -222
- package/docs/Custom-iOS.md +0 -236
- package/docs/Debugging.md +0 -101
- package/docs/Getting-Started.md +0 -142
- package/docs/Guide.md +0 -613
- package/docs/Reference.md +0 -1639
- package/example/.gitignore +0 -14
- package/example/.watchmanconfig +0 -1
- package/example/App.tsx +0 -262
- package/example/android/build.gradle +0 -15
- package/example/android/gradle.properties +0 -34
- package/example/android/gradlew +0 -234
- package/example/android/settings.gradle +0 -12
- package/example/app.json +0 -20
- package/example/assets/test.html +0 -9
- package/example/babel.config.js +0 -3
- package/example/examples/Alerts.tsx +0 -72
- package/example/examples/ApplePay.tsx +0 -23
- package/example/examples/Background.tsx +0 -54
- package/example/examples/Downloads.tsx +0 -57
- package/example/examples/Injection.tsx +0 -161
- package/example/examples/LocalPageLoad.tsx +0 -16
- package/example/examples/Messaging.tsx +0 -63
- package/example/examples/NativeWebpage.tsx +0 -22
- package/example/examples/Scrolling.tsx +0 -68
- package/example/examples/Uploads.tsx +0 -69
- package/example/index.js +0 -9
- package/example/ios/Podfile +0 -8
- package/example/ios/Podfile.lock +0 -445
- package/jest-setups/jest.setup.js +0 -8
- package/jest.config.js +0 -184
- package/lib/WebView.android.d.ts.map +0 -1
- package/lib/WebView.d.ts.map +0 -1
- package/lib/WebView.ios.d.ts.map +0 -1
- package/lib/WebView.styles.d.ts.map +0 -1
- package/lib/WebViewNativeComponent.android.d.ts.map +0 -1
- package/lib/WebViewNativeComponent.ios.d.ts.map +0 -1
- package/lib/WebViewShared.d.ts.map +0 -1
- package/lib/WebViewTypes.d.ts.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/metro.config.js +0 -57
- package/src/WebView.android.tsx +0 -246
- package/src/WebView.ios.tsx +0 -221
- package/src/WebView.styles.ts +0 -44
- package/src/WebView.tsx +0 -18
- package/src/WebViewNativeComponent.android.ts +0 -8
- package/src/WebViewNativeComponent.ios.ts +0 -8
- package/src/WebViewShared.tsx +0 -257
- package/src/WebViewTypes.ts +0 -920
- package/src/__tests__/WebViewShared-test.js +0 -208
- package/src/__tests__/__snapshots__/WebViewShared-test.js.snap +0 -8
- package/src/index.ts +0 -4
- package/tsconfig.json +0 -24
- package/yarn.lock +0 -13397
- /package/{example/android → android}/gradlew.bat +0 -0
package/src/WebViewShared.tsx
DELETED
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
import escapeStringRegexp from 'escape-string-regexp';
|
|
2
|
-
import React, { useCallback, useMemo, useRef, useState } from 'react';
|
|
3
|
-
import { Linking, View, ActivityIndicator, Text, Platform } from 'react-native';
|
|
4
|
-
import {
|
|
5
|
-
OnShouldStartLoadWithRequest,
|
|
6
|
-
ShouldStartLoadRequestEvent,
|
|
7
|
-
WebViewError,
|
|
8
|
-
WebViewErrorEvent,
|
|
9
|
-
WebViewMessageEvent,
|
|
10
|
-
WebViewMessage,
|
|
11
|
-
WebViewNavigationEvent,
|
|
12
|
-
WebViewProgressEvent,
|
|
13
|
-
WebViewNativeEvent,
|
|
14
|
-
} from './WebViewTypes';
|
|
15
|
-
import styles from './WebView.styles';
|
|
16
|
-
|
|
17
|
-
const defaultOriginWhitelist = ['https://*'] as const;
|
|
18
|
-
|
|
19
|
-
const extractOrigin = (url: string): string => {
|
|
20
|
-
const result = /^[A-Za-z][A-Za-z0-9+\-.]+:(\/\/)?[^/]*/.exec(url);
|
|
21
|
-
return result === null ? '' : result[0];
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const originWhitelistToRegex = (originWhitelist: string): string =>
|
|
25
|
-
`^${escapeStringRegexp(originWhitelist).replace(/\\\*/g, '.*')}$`;
|
|
26
|
-
|
|
27
|
-
const _passesWhitelist = (
|
|
28
|
-
compiledWhitelist: readonly string[],
|
|
29
|
-
url: string,
|
|
30
|
-
) => {
|
|
31
|
-
const origin = extractOrigin(url);
|
|
32
|
-
if (!origin) return false;
|
|
33
|
-
if (origin !== new URL(url).origin) return null;
|
|
34
|
-
return compiledWhitelist.some(x => new RegExp(x).test(origin));
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
const compileWhitelist = (
|
|
38
|
-
originWhitelist: readonly string[],
|
|
39
|
-
): readonly string[] =>
|
|
40
|
-
['about:blank', ...(originWhitelist || [])].map(originWhitelistToRegex);
|
|
41
|
-
|
|
42
|
-
const createOnShouldStartLoadWithRequest = (
|
|
43
|
-
loadRequest: (
|
|
44
|
-
shouldStart: boolean,
|
|
45
|
-
url: string,
|
|
46
|
-
lockIdentifier: number,
|
|
47
|
-
) => void,
|
|
48
|
-
originWhitelist: readonly string[],
|
|
49
|
-
onShouldStartLoadWithRequest?: OnShouldStartLoadWithRequest,
|
|
50
|
-
) => {
|
|
51
|
-
return ({ nativeEvent }: ShouldStartLoadRequestEvent) => {
|
|
52
|
-
let shouldStart = true;
|
|
53
|
-
const { url, lockIdentifier, isTopFrame } = nativeEvent;
|
|
54
|
-
|
|
55
|
-
if (!_passesWhitelist(compileWhitelist(originWhitelist), url)) {
|
|
56
|
-
Linking.canOpenURL(url).then((supported) => {
|
|
57
|
-
if (supported && isTopFrame && /^https:\/\//.test(url)) {
|
|
58
|
-
return Linking.openURL(url);
|
|
59
|
-
}
|
|
60
|
-
console.warn(`Can't open url: ${url}`);
|
|
61
|
-
return undefined;
|
|
62
|
-
}).catch(e => {
|
|
63
|
-
console.warn('Error opening URL: ', e);
|
|
64
|
-
});
|
|
65
|
-
shouldStart = false;
|
|
66
|
-
} else if (onShouldStartLoadWithRequest) {
|
|
67
|
-
shouldStart = onShouldStartLoadWithRequest(nativeEvent);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
loadRequest(shouldStart, url, lockIdentifier);
|
|
71
|
-
};
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
const defaultRenderLoading = () => (
|
|
75
|
-
<View style={styles.loadingOrErrorView}>
|
|
76
|
-
<ActivityIndicator />
|
|
77
|
-
</View>
|
|
78
|
-
);
|
|
79
|
-
const defaultRenderError = (
|
|
80
|
-
errorDomain: string | undefined,
|
|
81
|
-
errorCode: number,
|
|
82
|
-
errorDesc: string,
|
|
83
|
-
) => (
|
|
84
|
-
<View style={styles.loadingOrErrorView}>
|
|
85
|
-
<Text style={styles.errorTextTitle}>Error loading page</Text>
|
|
86
|
-
<Text style={styles.errorText}>{`Domain: ${errorDomain}`}</Text>
|
|
87
|
-
<Text style={styles.errorText}>{`Error Code: ${errorCode}`}</Text>
|
|
88
|
-
<Text style={styles.errorText}>{`Description: ${errorDesc}`}</Text>
|
|
89
|
-
</View>
|
|
90
|
-
);
|
|
91
|
-
|
|
92
|
-
export {
|
|
93
|
-
defaultOriginWhitelist,
|
|
94
|
-
createOnShouldStartLoadWithRequest,
|
|
95
|
-
defaultRenderLoading,
|
|
96
|
-
defaultRenderError,
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
export const useWebWiewLogic = ({
|
|
101
|
-
startInLoadingState,
|
|
102
|
-
onLoadStart,
|
|
103
|
-
onLoad,
|
|
104
|
-
onLoadEnd,
|
|
105
|
-
onError,
|
|
106
|
-
onMessageProp,
|
|
107
|
-
originWhitelist,
|
|
108
|
-
onShouldStartLoadWithRequestProp,
|
|
109
|
-
onShouldStartLoadWithRequestCallback,
|
|
110
|
-
validateMeta,
|
|
111
|
-
validateData,
|
|
112
|
-
}: {
|
|
113
|
-
startInLoadingState?: boolean
|
|
114
|
-
onLoadStart?: (event: WebViewNavigationEvent) => void;
|
|
115
|
-
onLoad?: (event: WebViewNavigationEvent) => void;
|
|
116
|
-
onLoadEnd?: (event: WebViewNavigationEvent | WebViewErrorEvent) => void;
|
|
117
|
-
onError?: (event: WebViewErrorEvent) => void;
|
|
118
|
-
onMessageProp?: (event: WebViewMessage) => void;
|
|
119
|
-
originWhitelist: readonly string[];
|
|
120
|
-
onShouldStartLoadWithRequestProp?: OnShouldStartLoadWithRequest;
|
|
121
|
-
onShouldStartLoadWithRequestCallback: (shouldStart: boolean, url: string, lockIdentifier?: number | undefined) => void;
|
|
122
|
-
validateMeta: (event: WebViewNativeEvent) => WebViewNativeEvent;
|
|
123
|
-
validateData: (data: object) => object;
|
|
124
|
-
}) => {
|
|
125
|
-
|
|
126
|
-
const [viewState, setViewState] = useState<'IDLE' | 'LOADING' | 'ERROR'>(startInLoadingState ? "LOADING" : "IDLE");
|
|
127
|
-
const [lastErrorEvent, setLastErrorEvent] = useState<WebViewError | null>(null);
|
|
128
|
-
const startUrl = useRef<string | null>(null)
|
|
129
|
-
|
|
130
|
-
const passesWhitelist = (url: string) => {
|
|
131
|
-
if (!url || typeof url !== 'string') return false;
|
|
132
|
-
return _passesWhitelist(compileWhitelist(originWhitelist), url);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
const passesWhitelistUse = useCallback(passesWhitelist, [originWhitelist])
|
|
136
|
-
|
|
137
|
-
const extractMeta = (nativeEvent: WebViewNativeEvent): WebViewNativeEvent => ({
|
|
138
|
-
url: String(nativeEvent.url),
|
|
139
|
-
loading: Boolean(nativeEvent.loading),
|
|
140
|
-
title: String(nativeEvent.title),
|
|
141
|
-
canGoBack: Boolean(nativeEvent.canGoBack),
|
|
142
|
-
canGoForward: Boolean(nativeEvent.canGoForward),
|
|
143
|
-
lockIdentifier: Number(nativeEvent.lockIdentifier),
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
const onLoadingStart = useCallback((event: WebViewNavigationEvent) => {
|
|
147
|
-
// Needed for android
|
|
148
|
-
startUrl.current = event.nativeEvent.url;
|
|
149
|
-
// !Needed for android
|
|
150
|
-
|
|
151
|
-
onLoadStart?.(event);
|
|
152
|
-
}, [onLoadStart]);
|
|
153
|
-
|
|
154
|
-
const onLoadingError = useCallback((event: WebViewErrorEvent) => {
|
|
155
|
-
event.persist();
|
|
156
|
-
if (onError) {
|
|
157
|
-
onError(event);
|
|
158
|
-
} else {
|
|
159
|
-
console.warn('Encountered an error loading page', event.nativeEvent);
|
|
160
|
-
}
|
|
161
|
-
onLoadEnd?.(event);
|
|
162
|
-
if (event.isDefaultPrevented()) { return };
|
|
163
|
-
setViewState('ERROR');
|
|
164
|
-
setLastErrorEvent(event.nativeEvent);
|
|
165
|
-
}, [onError, onLoadEnd]);
|
|
166
|
-
|
|
167
|
-
const onLoadingFinish = useCallback((event: WebViewNavigationEvent) => {
|
|
168
|
-
onLoad?.(event);
|
|
169
|
-
onLoadEnd?.(event);
|
|
170
|
-
const { nativeEvent: { url } } = event;
|
|
171
|
-
if (!passesWhitelistUse(url)) return;
|
|
172
|
-
|
|
173
|
-
// on Android, only if url === startUrl
|
|
174
|
-
if (Platform.OS !== "android" || url === startUrl.current) {
|
|
175
|
-
setViewState('IDLE');
|
|
176
|
-
}
|
|
177
|
-
// !on Android, only if url === startUrl
|
|
178
|
-
// REMOVED: updateNavigationState(event);
|
|
179
|
-
}, [onLoad, onLoadEnd, passesWhitelistUse]);
|
|
180
|
-
|
|
181
|
-
const onMessage = useCallback((event: WebViewMessageEvent) => {
|
|
182
|
-
const { nativeEvent } = event;
|
|
183
|
-
if (!passesWhitelistUse(nativeEvent.url)) return;
|
|
184
|
-
|
|
185
|
-
// TODO: can/should we perform any other validation?
|
|
186
|
-
|
|
187
|
-
const data = JSON.stringify(validateData(JSON.parse(nativeEvent.data)));
|
|
188
|
-
const meta = validateMeta(extractMeta(nativeEvent));
|
|
189
|
-
|
|
190
|
-
onMessageProp?.({ ...meta, data });
|
|
191
|
-
}, [onMessageProp, passesWhitelistUse, validateData, validateMeta]);
|
|
192
|
-
|
|
193
|
-
const onLoadingProgress = useCallback((event: WebViewProgressEvent) => {
|
|
194
|
-
const { nativeEvent: { progress } } = event;
|
|
195
|
-
if (!passesWhitelistUse(event.nativeEvent.url)) return;
|
|
196
|
-
|
|
197
|
-
// patch for Android only
|
|
198
|
-
if (Platform.OS === "android" && progress === 1) {
|
|
199
|
-
setViewState(prevViewState => prevViewState === 'LOADING' ? 'IDLE' : prevViewState);
|
|
200
|
-
}
|
|
201
|
-
// !patch for Android only
|
|
202
|
-
// REMOVED: onLoadProgress?.(event);
|
|
203
|
-
}, [passesWhitelistUse]);
|
|
204
|
-
|
|
205
|
-
const onShouldStartLoadWithRequest = useMemo(() => createOnShouldStartLoadWithRequest(
|
|
206
|
-
onShouldStartLoadWithRequestCallback,
|
|
207
|
-
originWhitelist,
|
|
208
|
-
onShouldStartLoadWithRequestProp,
|
|
209
|
-
)
|
|
210
|
-
, [originWhitelist, onShouldStartLoadWithRequestProp, onShouldStartLoadWithRequestCallback])
|
|
211
|
-
|
|
212
|
-
return {
|
|
213
|
-
onShouldStartLoadWithRequest,
|
|
214
|
-
onLoadingStart,
|
|
215
|
-
onLoadingProgress,
|
|
216
|
-
onLoadingError,
|
|
217
|
-
onLoadingFinish,
|
|
218
|
-
onMessage,
|
|
219
|
-
passesWhitelist,
|
|
220
|
-
viewState,
|
|
221
|
-
setViewState,
|
|
222
|
-
lastErrorEvent,
|
|
223
|
-
}
|
|
224
|
-
};
|
|
225
|
-
|
|
226
|
-
export const versionPasses = (version: string | undefined, minimum: string | undefined): boolean => {
|
|
227
|
-
if (!version || !minimum) return false
|
|
228
|
-
if (typeof version !== 'string' || typeof minimum !== 'string') return false
|
|
229
|
-
|
|
230
|
-
if (minimum.includes(', ')) {
|
|
231
|
-
// We have a set of possible versions
|
|
232
|
-
const variants = minimum.split(', ')
|
|
233
|
-
// Every entry but the last one should be with an upper bound
|
|
234
|
-
if (!variants.slice(0, -1).every(x => x.includes(' <'))) return false
|
|
235
|
-
return variants.some(x => versionPasses(version, x)) // Any match passes
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
if (minimum.includes(' <')) {
|
|
239
|
-
const [min, max, ...rest] = minimum.split(' <')
|
|
240
|
-
if (rest.length > 0) return false
|
|
241
|
-
// Last check is required for correctness/formatting validation
|
|
242
|
-
return versionPasses(version, min) && !versionPasses(version, max) && versionPasses(max, version)
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
const versionRegex = /^[0-9]+(\.[0-9]+)*$/
|
|
246
|
-
if (!versionRegex.test(version) || !versionRegex.test(minimum)) return false
|
|
247
|
-
const versionParts = version.split('.').map(Number)
|
|
248
|
-
const minimumParts = minimum.split('.').map(Number)
|
|
249
|
-
const len = Math.max(versionParts.length, minimumParts.length)
|
|
250
|
-
for (let i = 0; i < len; i += 1) {
|
|
251
|
-
const ver = versionParts[i] || 0
|
|
252
|
-
const min = minimumParts[i] || 0
|
|
253
|
-
if (ver > min) return true
|
|
254
|
-
if (ver < min) return false
|
|
255
|
-
}
|
|
256
|
-
return true // equals
|
|
257
|
-
}
|