From 80d03e0175c9a0f14e1a504f115cc7a0ab7bcdbc Mon Sep 17 00:00:00 2001 From: Alexander Sklar Date: Tue, 26 Apr 2022 12:19:12 -0700 Subject: [PATCH 001/104] chore(windows): fix noisy warning (#2460) --- windows/ReactNativeWebView/ReactWebViewManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/windows/ReactNativeWebView/ReactWebViewManager.cpp b/windows/ReactNativeWebView/ReactWebViewManager.cpp index 0f9e0a9cc7..b316d08df9 100644 --- a/windows/ReactNativeWebView/ReactWebViewManager.cpp +++ b/windows/ReactNativeWebView/ReactWebViewManager.cpp @@ -96,7 +96,7 @@ namespace winrt::ReactNativeWebView::implementation { if (isUrlEncodedForm) { auto formContent = winrt::single_threaded_observable_map(); - auto counter = 0u; + size_t counter = 0u; auto current = formBody.find_first_of("&"); while (counter <= formBody.find_last_of("&")) { From 603c751eef191ed62f811e54414eefb013f6e2ba Mon Sep 17 00:00:00 2001 From: Chiara Mooney <34109996+chiaramooney@users.noreply.github.com> Date: Wed, 27 Apr 2022 09:28:18 -0700 Subject: [PATCH 002/104] Fix Break From Pkg Ref Changes (#2459) --- windows/ExperimentalFeatures.props | 1 - windows/ReactNativeWebView/ReactNativeWebView.vcxproj | 2 -- windows/ReactNativeWebView/packages.config | 1 - 3 files changed, 4 deletions(-) diff --git a/windows/ExperimentalFeatures.props b/windows/ExperimentalFeatures.props index 92b367342d..3173a1669f 100644 --- a/windows/ExperimentalFeatures.props +++ b/windows/ExperimentalFeatures.props @@ -6,7 +6,6 @@ false false 2.8.0-prerelease.210927001 - 1.0.1020.30 \ No newline at end of file diff --git a/windows/ReactNativeWebView/ReactNativeWebView.vcxproj b/windows/ReactNativeWebView/ReactNativeWebView.vcxproj index 5213cc0116..685020961a 100644 --- a/windows/ReactNativeWebView/ReactNativeWebView.vcxproj +++ b/windows/ReactNativeWebView/ReactNativeWebView.vcxproj @@ -170,7 +170,6 @@ - @@ -182,7 +181,6 @@ - diff --git a/windows/ReactNativeWebView/packages.config b/windows/ReactNativeWebView/packages.config index e12c06ad3c..9e0978a7e4 100644 --- a/windows/ReactNativeWebView/packages.config +++ b/windows/ReactNativeWebView/packages.config @@ -1,6 +1,5 @@  - \ No newline at end of file From 92ba4faad259ae5105cecd86cd2d10f0f7d7395f Mon Sep 17 00:00:00 2001 From: Chiara Mooney <34109996+chiaramooney@users.noreply.github.com> Date: Wed, 27 Apr 2022 10:14:22 -0700 Subject: [PATCH 003/104] fix(windows): update Getting Started information for Windows --- docs/Getting-Started.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/docs/Getting-Started.md b/docs/Getting-Started.md index e64879c59d..1abf5a2840 100644 --- a/docs/Getting-Started.md +++ b/docs/Getting-Started.md @@ -85,13 +85,11 @@ Add `PackageProviders().Append(winrt::ReactNativeWebView::ReactPackageProvider() Note if you want to enable scroll with Touch for the WebView component you must disable perspective for your app using [ReactRootView.IsPerspectiveEnabled](https://microsoft.github.io/react-native-windows/docs/ReactRootView#isperspectiveenabled). -## 3. Decide if you want access to WebView2 -The WebView2 control is a [WinUI](https://docs.microsoft.com/windows/apps/winui/) control that renders web content using the Microsoft Edge (Chromium) rendering engine. We have added support for the WebView2 control to the react-native-webview community module. -If you want access to the WebView2 control in your app, follow these steps: +## 3. WebView2 Support +The WebView2 control is a [WinUI](https://docs.microsoft.com/windows/apps/winui/) control that renders web content using the Microsoft Edge (Chromium) rendering engine. We have added support for the WebView2 control to the react-native-webview community module in v11.18.0. +If your app is RNW v0.68 or higher, follow these steps: - i. Ensure your React Native Windows version is v0.68 or higher. - - ii. Let autolinking handle adding the `ReactNativeWebView2` project to your app. + i. Let autolinking handle adding the `ReactNativeWebView` project to your app. iii. Customize your app's WinUI 2.x version to version 2.8.0-prerelease.210927001 or higher. See [here](https://microsoft.github.io/react-native-windows/docs/customizing-sdk-versions) for instructions. The WinUI 2.x support for WebView2 is not yet available in "stable" releases, so for now you will need to use a prerelease version. From f7cd6c43fb90b2daabfcc14d245a1d8fcc23c3a5 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 27 Apr 2022 17:15:54 +0000 Subject: [PATCH 004/104] chore(release): 11.18.2 [skip ci] ## [11.18.2](https://github.com/react-native-webview/react-native-webview/compare/v11.18.1...v11.18.2) (2022-04-27) ### Bug Fixes * **windows:** update Getting Started information for Windows ([92ba4fa](https://github.com/react-native-webview/react-native-webview/commit/92ba4faad259ae5105cecd86cd2d10f0f7d7395f)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a043031f34..e2fbe91dd4 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.18.1", + "version": "11.18.2", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From a36394f598944c1ffe288f739b7441830249dc1e Mon Sep 17 00:00:00 2001 From: Hyunseung Lee <78584173+HyunseungLee-Travis@users.noreply.github.com> Date: Sat, 30 Apr 2022 10:34:07 +0900 Subject: [PATCH 005/104] chore(docs): fix ex, add js ex, add line, add closing backtick (#2444) --- docs/Reference.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/Reference.md b/docs/Reference.md index 6097b36603..6def8a795c 100644 --- a/docs/Reference.md +++ b/docs/Reference.md @@ -1478,6 +1478,7 @@ Example: ### `forceDarkOn` Configuring Dark Theme + *NOTE* : The force dark setting is not persistent. You must call the static method every time your app process is started. *NOTE* : The change from day<->night mode is a configuration change so by default the activity will be restarted and pickup the new values to apply the theme. Take care when overriding this default behavior to ensure this method is still called when changes are made. @@ -1538,7 +1539,8 @@ Use WinUI WebView2 control instead of WebView control as the native webview. The Example: ```javascript - + +``` ### `minimumFontSize` @@ -1629,7 +1631,7 @@ Removes the autocomplete popup from the currently focused form field, if present (android only) ```javascript - +clearCache(true) ``` Clears the resource cache. Note that the cache is per-application, so this will clear the cache for all WebViews used. [developer.android.com reference]() From c3f73fe2accbeeebe64ae7d0c89f9929f7031497 Mon Sep 17 00:00:00 2001 From: mmathewsTableau Date: Thu, 19 May 2022 15:02:48 -0700 Subject: [PATCH 006/104] feat(android): Adding downloadMessage as a prop for localization (#2489) --- .../webview/RNCWebViewManager.java | 27 +++++++++++- .../webview/RNCWebViewModule.java | 41 ++++++++++--------- docs/Reference.md | 18 ++++++++ src/WebViewTypes.ts | 16 ++++++++ 4 files changed, 80 insertions(+), 22 deletions(-) diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java index c575db7b1c..238e00b838 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java @@ -153,12 +153,17 @@ public class RNCWebViewManager extends SimpleViewManager { // state and release page resources (including any running JavaScript). protected static final String BLANK_URL = "about:blank"; protected static final int SHOULD_OVERRIDE_URL_LOADING_TIMEOUT = 250; + protected static final String DEFAULT_DOWNLOADING_MESSAGE = "Downloading"; + protected static final String DEFAULT_LACK_PERMISSION_TO_DOWNLOAD_MESSAGE = + "Cannot download files as permission was denied. Please provide permission to write to storage, in order to download files."; protected WebViewConfig mWebViewConfig; protected RNCWebChromeClient mWebChromeClient = null; protected boolean mAllowsFullscreenVideo = false; protected @Nullable String mUserAgent = null; protected @Nullable String mUserAgentWithApplicationName = null; + protected @Nullable String mDownloadingMessage = null; + protected @Nullable String mLackPermissionToDownloadMessage = null; public RNCWebViewManager() { mWebViewConfig = new WebViewConfig() { @@ -248,8 +253,8 @@ public void onDownloadStart(String url, String userAgent, String contentDisposit module.setDownloadRequest(request); - if (module.grantFileDownloaderPermissions()) { - module.downloadFile(); + if (module.grantFileDownloaderPermissions(getDownloadingMessage(), getLackPermissionToDownloadMessage())) { + module.downloadFile(getDownloadingMessage()); } } }); @@ -257,6 +262,14 @@ public void onDownloadStart(String url, String userAgent, String contentDisposit return webView; } + private String getDownloadingMessage() { + return mDownloadingMessage == null ? DEFAULT_DOWNLOADING_MESSAGE : mDownloadingMessage; + } + + private String getLackPermissionToDownloadMessage() { + return mDownloadingMessage == null ? DEFAULT_LACK_PERMISSION_TO_DOWNLOAD_MESSAGE : mLackPermissionToDownloadMessage; + } + @ReactProp(name = "javaScriptEnabled") public void setJavaScriptEnabled(WebView view, boolean enabled) { view.getSettings().setJavaScriptEnabled(enabled); @@ -287,6 +300,16 @@ public void setShowsVerticalScrollIndicator(WebView view, boolean enabled) { view.setVerticalScrollBarEnabled(enabled); } + @ReactProp(name = "downloadingMessage") + public void setDownloadingMessage(WebView view, String message) { + mDownloadingMessage = message; + } + + @ReactProp(name = "lackPermissionToDownloadMessage") + public void setLackPermissionToDownlaodMessage(WebView view, String message) { + mLackPermissionToDownloadMessage = message; + } + @ReactProp(name = "cacheEnabled") public void setCacheEnabled(WebView view, boolean enabled) { if (enabled) { diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModule.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModule.java index 34fd44b24c..a3bb67e96a 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModule.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModule.java @@ -95,25 +95,27 @@ private enum MimeType { } } - private PermissionListener webviewFileDownloaderPermissionListener = new PermissionListener() { - @Override - public boolean onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { - switch (requestCode) { - case FILE_DOWNLOAD_PERMISSION_REQUEST: { - // If request is cancelled, the result arrays are empty. - if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - if (downloadRequest != null) { - downloadFile(); + private PermissionListener getWebviewFileDownloaderPermissionListener(String downloadingMessage, String lackPermissionToDownloadMessage) { + return new PermissionListener() { + @Override + public boolean onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + switch (requestCode) { + case FILE_DOWNLOAD_PERMISSION_REQUEST: { + // If request is cancelled, the result arrays are empty. + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + if (downloadRequest != null) { + downloadFile(downloadingMessage); + } + } else { + Toast.makeText(getCurrentActivity().getApplicationContext(), lackPermissionToDownloadMessage, Toast.LENGTH_LONG).show(); } - } else { - Toast.makeText(getCurrentActivity().getApplicationContext(), "Cannot download files as permission was denied. Please provide permission to write to storage, in order to download files.", Toast.LENGTH_LONG).show(); + return true; } - return true; } + return false; } - return false; - } - }; + }; + } public RNCWebViewModule(ReactApplicationContext reactContext) { super(reactContext); @@ -306,16 +308,15 @@ public void setDownloadRequest(DownloadManager.Request request) { this.downloadRequest = request; } - public void downloadFile() { + public void downloadFile(String downloadingMessage) { DownloadManager dm = (DownloadManager) getCurrentActivity().getBaseContext().getSystemService(Context.DOWNLOAD_SERVICE); - String downloadMessage = "Downloading"; dm.enqueue(this.downloadRequest); - Toast.makeText(getCurrentActivity().getApplicationContext(), downloadMessage, Toast.LENGTH_LONG).show(); + Toast.makeText(getCurrentActivity().getApplicationContext(), downloadingMessage, Toast.LENGTH_LONG).show(); } - public boolean grantFileDownloaderPermissions() { + public boolean grantFileDownloaderPermissions(String downloadingMessage, String lackPermissionToDownloadMessage) { // Permission not required for Android Q and above if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) { return true; @@ -324,7 +325,7 @@ public boolean grantFileDownloaderPermissions() { boolean result = ContextCompat.checkSelfPermission(getCurrentActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED; if (!result && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { PermissionAwareActivity activity = getPermissionAwareActivity(); - activity.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, FILE_DOWNLOAD_PERMISSION_REQUEST, webviewFileDownloaderPermissionListener); + activity.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, FILE_DOWNLOAD_PERMISSION_REQUEST, getWebviewFileDownloaderPermissionListener(downloadingMessage, lackPermissionToDownloadMessage)); } return result; diff --git a/docs/Reference.md b/docs/Reference.md index 6def8a795c..ee36830c17 100644 --- a/docs/Reference.md +++ b/docs/Reference.md @@ -86,6 +86,8 @@ This document lays out the current public properties and methods for the React N - [`forceDarkOn`](Reference.md#forceDarkOn) - [`useWebView2`](Reference.md#useWebView2) - [`minimumFontSize`](Reference.md#minimumFontSize) +- [`downloadingMessage`](Reference.md#downloadingMessage) +- [`lackPermissionToDownloadMessage`](Reference.md#lackPermissionToDownloadMessage) ## Methods Index @@ -1556,6 +1558,22 @@ Example: ``` +### `downloadingMessage` + +This is the message that is shown in the Toast when downloading a file via WebView. Default message is "Downloading". + +| Type | Required | Platform | +| ------ | -------- | -------- | +| string | No | Android | + +### `lackPermissionToDownloadMessage` + +This is the message that is shown in the Toast when the webview is unable to download a file. Default message is "Cannot download files as permission was denied. Please provide permission to write to storage, in order to download files.". + +| Type | Required | Platform | +| ------ | -------- | -------- | +| string | No | Android | + ## Methods ### `goForward()`[⬆](#methods-index) diff --git a/src/WebViewTypes.ts b/src/WebViewTypes.ts index 786d98472c..c63e3a0321 100644 --- a/src/WebViewTypes.ts +++ b/src/WebViewTypes.ts @@ -332,6 +332,8 @@ export interface AndroidNativeWebViewProps extends CommonNativeWebViewProps { readonly urlPrefixesForDefaultIntent?: string[]; forceDarkOn?: boolean; minimumFontSize?: number; + downloadingMessage?: string; + lackPermissionToDownloadMessage?: string; } export declare type ContentInsetAdjustmentBehavior = 'automatic' | 'scrollableAxes' | 'never' | 'always'; @@ -1078,6 +1080,20 @@ export interface AndroidWebViewProps extends WebViewSharedProps { * @platform android */ minimumFontSize?: number; + + /** + * Sets the message to be shown in the toast when downloading via the webview. + * Default is 'Downloading'. + * @platform android + */ + downloadingMessage?: string; + + /** + * Sets the message to be shown in the toast when webview is unable to download due to permissions issue. + * Default is 'Cannot download files as permission was denied. Please provide permission to write to storage, in order to download files.'. + * @platform android + */ + lackPermissionToDownloadMessage?: string; } export interface WebViewSharedProps extends ViewProps { From 64d6821a142642a70f838952dd95dcfc49afe166 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 19 May 2022 22:05:10 +0000 Subject: [PATCH 007/104] chore(release): 11.19.0 [skip ci] # [11.19.0](https://github.com/react-native-webview/react-native-webview/compare/v11.18.2...v11.19.0) (2022-05-19) ### Features * **android:** Adding downloadMessage as a prop for localization ([#2489](https://github.com/react-native-webview/react-native-webview/issues/2489)) ([c3f73fe](https://github.com/react-native-webview/react-native-webview/commit/c3f73fe2accbeeebe64ae7d0c89f9929f7031497)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e2fbe91dd4..36d5035884 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.18.2", + "version": "11.19.0", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 4cf05fc3a47be71ccf90089411fac78eca753aab Mon Sep 17 00:00:00 2001 From: Hyunseung Lee <78584173+HyunseungLee-Travis@users.noreply.github.com> Date: Sat, 21 May 2022 02:52:00 +0900 Subject: [PATCH 008/104] chore(docs): Update Portuguese reference (add clearCache ex) (#2474) --- docs/Reference.portuguese.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/Reference.portuguese.md b/docs/Reference.portuguese.md index f47406574f..0bd4e4e0e3 100644 --- a/docs/Reference.portuguese.md +++ b/docs/Reference.portuguese.md @@ -1458,6 +1458,7 @@ Um valor booleano quando definido como `true`, a WebView será renderizado com s Isso vem com recursos como [`injectJavaScript`](Reference.portuguese.md#injectjavascriptstr), html5 histórico, [`sharedCookiesEnabled`](Reference.portuguese.md#sharedCookiesEnabled), [`injectedJavaScript`](Reference.portuguese.md#injectedjavascript), [`injectedJavaScriptBeforeContentLoaded`](Reference.portuguese.md#injectedjavascriptbeforecontentloaded) não funcionará veja na [Nota de lançamento do Apple Pay](https://developer.apple.com/documentation/safari-release-notes/safari-13-release-notes#Payment-Request-API). Se você for solicitado a enviar uma mensagem para App , a página da Web deve chamar explicitamente o manipulador de mensagens do webkit e recebê-lo no manipulador `onMessage` no lado nativo. + ```javascript window.webkit.messageHandlers.ReactNativeWebView.postMessage("hello apple pay") ``` @@ -1613,7 +1614,7 @@ Remove o pop-up de preenchimento automático do campo de formulário em foco no (somente Android) ```javascript - +clearCache(true) ``` Limpa o cache de recursos. Observe que o cache é por aplicativo, portanto, isso limpará o cache de todos os WebViews usados. [referência do desenvolvedor.android.com]() @@ -1636,4 +1637,4 @@ Confira também nosso [Guia de Introdução](Getting-Started.portuguese.md) e [G Esse arquivo está disponível em: -- [Inglês](Reference.md) \ No newline at end of file +- [Inglês](Reference.md) From eb4e923fb012f1dcb5c5389fb1901ee84e32fa8c Mon Sep 17 00:00:00 2001 From: Matin Zadeh Dolatabad Date: Tue, 24 May 2022 00:47:22 +0200 Subject: [PATCH 009/104] feat(ios): adds allowsAirPlayForMediaPlayback prop (#2410 by @matinzd) --- apple/RNCWebView.h | 1 + apple/RNCWebView.m | 4 + apple/RNCWebViewManager.m | 1 + docs/Reference.md | 10 +++ docs/Reference.portuguese.md | 9 +++ example/examples/NativeWebpage.tsx | 10 +-- src/WebView.ios.tsx | 1 + src/WebView.macos.tsx | 1 + src/WebViewTypes.ts | 122 +++++++++++++++++------------ 9 files changed, 103 insertions(+), 56 deletions(-) diff --git a/apple/RNCWebView.h b/apple/RNCWebView.h index 33a67ae0fa..317fc4cdf9 100644 --- a/apple/RNCWebView.h +++ b/apple/RNCWebView.h @@ -50,6 +50,7 @@ typedef enum RNCWebViewPermissionGrantType : NSUInteger { @property (nonatomic, assign) BOOL pagingEnabled; @property (nonatomic, assign) CGFloat decelerationRate; @property (nonatomic, assign) BOOL allowsInlineMediaPlayback; +@property (nonatomic, assign) BOOL allowsAirPlayForMediaPlayback; @property (nonatomic, assign) BOOL bounces; @property (nonatomic, assign) BOOL mediaPlaybackRequiresUserAction; #if WEBKIT_IOS_10_APIS_AVAILABLE diff --git a/apple/RNCWebView.m b/apple/RNCWebView.m index c9f4030944..b8e4f4de5e 100644 --- a/apple/RNCWebView.m +++ b/apple/RNCWebView.m @@ -379,6 +379,10 @@ - (WKWebViewConfiguration *)setUpWkWebViewConfig name:HistoryShimName]; [self resetupScripts:wkWebViewConfig]; + if(@available(macos 10.11, ios 9.0, *)) { + wkWebViewConfig.allowsAirPlayForMediaPlayback = _allowsAirPlayForMediaPlayback; + } + #if !TARGET_OS_OSX wkWebViewConfig.allowsInlineMediaPlayback = _allowsInlineMediaPlayback; #if WEBKIT_IOS_10_APIS_AVAILABLE diff --git a/apple/RNCWebViewManager.m b/apple/RNCWebViewManager.m index c44ab4b22a..31113fc34d 100644 --- a/apple/RNCWebViewManager.m +++ b/apple/RNCWebViewManager.m @@ -71,6 +71,7 @@ - (RCTUIView *)view RCT_EXPORT_VIEW_PROPERTY(allowFileAccessFromFileURLs, BOOL) RCT_EXPORT_VIEW_PROPERTY(allowUniversalAccessFromFileURLs, BOOL) RCT_EXPORT_VIEW_PROPERTY(allowsInlineMediaPlayback, BOOL) +RCT_EXPORT_VIEW_PROPERTY(allowsAirPlayForMediaPlayback, BOOL) RCT_EXPORT_VIEW_PROPERTY(mediaPlaybackRequiresUserAction, BOOL) #if WEBKIT_IOS_10_APIS_AVAILABLE RCT_EXPORT_VIEW_PROPERTY(dataDetectorTypes, WKDataDetectorTypes) diff --git a/docs/Reference.md b/docs/Reference.md index ee36830c17..b787a7265b 100644 --- a/docs/Reference.md +++ b/docs/Reference.md @@ -44,6 +44,7 @@ This document lays out the current public properties and methods for the React N - [`applicationNameForUserAgent`](Reference.md#applicationNameForUserAgent) - [`allowsFullscreenVideo`](Reference.md#allowsfullscreenvideo) - [`allowsInlineMediaPlayback`](Reference.md#allowsinlinemediaplayback) +- [`allowsAirPlayForMediaPlayback`](Reference.md#allowsAirPlayForMediaPlayback) - [`bounces`](Reference.md#bounces) - [`overScrollMode`](Reference.md#overscrollmode) - [`contentInset`](Reference.md#contentinset) @@ -949,6 +950,15 @@ Boolean that determines whether HTML5 videos play inline or use the native full- | ---- | -------- | -------- | | bool | No | iOS | +--- +### `allowsAirPlayForMediaPlayback`[⬆](#props-index) + +A Boolean value indicating whether AirPlay is allowed. The default value is `false`. + +| Type | Required | Platform | +| ------- | -------- | ------------- | +| boolean | No | iOS and macOS | + --- ### `bounces`[⬆](#props-index) diff --git a/docs/Reference.portuguese.md b/docs/Reference.portuguese.md index 0bd4e4e0e3..9abe64f9ae 100644 --- a/docs/Reference.portuguese.md +++ b/docs/Reference.portuguese.md @@ -44,6 +44,7 @@ Este documento apresenta as propriedades e métodos públicos para o React Nativ - [`applicationNameForUserAgent`](Reference.portuguese.md#applicationNameForUserAgent) - [`allowsFullscreenVideo`](Reference.portuguese.md#allowsfullscreenvideo) - [`allowsInlineMediaPlayback`](Reference.portuguese.md#allowsinlinemediaplayback) +- [`allowsAirPlayForMediaPlayback`](Reference.portuguese.md#allowsAirPlayForMediaPlayback) - [`bounces`](Reference.portuguese.md#bounces) - [`overScrollMode`](Reference.portuguese.md#overscrollmode) - [`contentInset`](Reference.portuguese.md#contentinset) @@ -945,7 +946,15 @@ Booleano que determina se os vídeos HTML5 são reproduzidos inline ou usam o co | bool | Não | iOS | --- +### `allowsAirPlayForMediaPlayback`[⬆](#props-index) +Um valor booleano que indica se o AirPlay é permitido. O valor padrão é `falso`. + +| Tipo | Requerido | Plataforma | +| ---- | --------- | --------------- | +| bool | Não | iOS e macOS | + +--- ### `bounces`[⬆](#props-index) Valor booleano que determina se a visualização da Web é rejeitada quando atinge a borda do conteúdo. O valor padrão é `true`. diff --git a/example/examples/NativeWebpage.tsx b/example/examples/NativeWebpage.tsx index bb3437b6c5..e992c782e4 100644 --- a/example/examples/NativeWebpage.tsx +++ b/example/examples/NativeWebpage.tsx @@ -1,5 +1,5 @@ -import React, {Component} from 'react'; -import {View} from 'react-native'; +import React, { Component } from 'react'; +import { View } from 'react-native'; import WebView from 'react-native-webview'; @@ -11,10 +11,10 @@ export default class NativeWebpage extends Component { render() { return ( - + ); diff --git a/src/WebView.ios.tsx b/src/WebView.ios.tsx index 632a3c0e3c..9525520130 100644 --- a/src/WebView.ios.tsx +++ b/src/WebView.ios.tsx @@ -266,6 +266,7 @@ class WebView extends React.Component { componentDidUpdate(prevProps: IOSWebViewProps) { this.showRedboxOnPropChanges(prevProps, 'allowsInlineMediaPlayback'); + this.showRedboxOnPropChanges(prevProps, 'allowsAirPlayForMediaPlayback'); this.showRedboxOnPropChanges(prevProps, 'incognito'); this.showRedboxOnPropChanges(prevProps, 'mediaPlaybackRequiresUserAction'); this.showRedboxOnPropChanges(prevProps, 'dataDetectorTypes'); diff --git a/src/WebView.macos.tsx b/src/WebView.macos.tsx index 5b6964b4c1..e7d0e81eb2 100644 --- a/src/WebView.macos.tsx +++ b/src/WebView.macos.tsx @@ -253,6 +253,7 @@ class WebView extends React.Component { componentDidUpdate(prevProps: MacOSWebViewProps) { this.showRedboxOnPropChanges(prevProps, 'allowsInlineMediaPlayback'); + this.showRedboxOnPropChanges(prevProps, 'allowsAirPlayForMediaPlayback'); this.showRedboxOnPropChanges(prevProps, 'incognito'); this.showRedboxOnPropChanges(prevProps, 'mediaPlaybackRequiresUserAction'); } diff --git a/src/WebViewTypes.ts b/src/WebViewTypes.ts index c63e3a0321..86cff227f1 100644 --- a/src/WebViewTypes.ts +++ b/src/WebViewTypes.ts @@ -12,25 +12,30 @@ import { NativeScrollEvent, } from 'react-native'; -type WebViewCommands = 'goForward' | 'goBack' | 'reload' | 'stopLoading' | 'postMessage' | 'injectJavaScript' | 'loadUrl' | 'requestFocus'; +type WebViewCommands = + | 'goForward' + | 'goBack' + | 'reload' + | 'stopLoading' + | 'postMessage' + | 'injectJavaScript' + | 'loadUrl' + | 'requestFocus'; type AndroidWebViewCommands = 'clearHistory' | 'clearCache' | 'clearFormData'; - - interface RNCWebViewUIManager extends UIManagerStatic { - getViewManagerConfig: ( - name: string, - ) => { - Commands: {[key in Commands]: number}; + getViewManagerConfig: (name: string) => { + Commands: { [key in Commands]: number }; }; } -export type RNCWebViewUIManagerAndroid = RNCWebViewUIManager -export type RNCWebViewUIManagerIOS = RNCWebViewUIManager -export type RNCWebViewUIManagerMacOS = RNCWebViewUIManager -export type RNCWebViewUIManagerWindows = RNCWebViewUIManager - +export type RNCWebViewUIManagerAndroid = RNCWebViewUIManager< + WebViewCommands | AndroidWebViewCommands +>; +export type RNCWebViewUIManagerIOS = RNCWebViewUIManager; +export type RNCWebViewUIManagerMacOS = RNCWebViewUIManager; +export type RNCWebViewUIManagerWindows = RNCWebViewUIManager; type WebViewState = 'IDLE' | 'LOADING' | 'ERROR'; @@ -51,33 +56,25 @@ interface ErrorState extends BaseState { export type State = NormalState | ErrorState; // eslint-disable-next-line react/prefer-stateless-function -declare class NativeWebViewIOSComponent extends Component< - IOSNativeWebViewProps -> {} +declare class NativeWebViewIOSComponent extends Component {} declare const NativeWebViewIOSBase: Constructor & typeof NativeWebViewIOSComponent; export class NativeWebViewIOS extends NativeWebViewIOSBase {} // eslint-disable-next-line react/prefer-stateless-function -declare class NativeWebViewMacOSComponent extends Component< - MacOSNativeWebViewProps -> {} +declare class NativeWebViewMacOSComponent extends Component {} declare const NativeWebViewMacOSBase: Constructor & typeof NativeWebViewMacOSComponent; export class NativeWebViewMacOS extends NativeWebViewMacOSBase {} // eslint-disable-next-line react/prefer-stateless-function -declare class NativeWebViewAndroidComponent extends Component< - AndroidNativeWebViewProps -> {} +declare class NativeWebViewAndroidComponent extends Component {} declare const NativeWebViewAndroidBase: Constructor & typeof NativeWebViewAndroidComponent; export class NativeWebViewAndroid extends NativeWebViewAndroidBase {} // eslint-disable-next-line react/prefer-stateless-function -declare class NativeWebViewWindowsComponent extends Component< - WindowsNativeWebViewProps -> {} +declare class NativeWebViewWindowsComponent extends Component {} declare const NativeWebViewWindowsBase: Constructor & typeof NativeWebViewWindowsComponent; export class NativeWebViewWindows extends NativeWebViewWindowsBase {} @@ -147,13 +144,13 @@ export interface WebViewRenderProcessGoneDetail { export type WebViewEvent = NativeSyntheticEvent; -export type WebViewProgressEvent = NativeSyntheticEvent< - WebViewNativeProgressEvent ->; +export type WebViewProgressEvent = + NativeSyntheticEvent; export type WebViewNavigationEvent = NativeSyntheticEvent; -export type ShouldStartLoadRequestEvent = NativeSyntheticEvent; +export type ShouldStartLoadRequestEvent = + NativeSyntheticEvent; export type FileDownloadEvent = NativeSyntheticEvent; @@ -165,7 +162,8 @@ export type WebViewTerminatedEvent = NativeSyntheticEvent; export type WebViewHttpErrorEvent = NativeSyntheticEvent; -export type WebViewRenderProcessGoneEvent = NativeSyntheticEvent; +export type WebViewRenderProcessGoneEvent = + NativeSyntheticEvent; export type WebViewScrollEvent = NativeSyntheticEvent; @@ -182,7 +180,11 @@ export type DataDetectorTypes = export type OverScrollModeType = 'always' | 'content' | 'never'; -export type CacheMode = 'LOAD_DEFAULT' | 'LOAD_CACHE_ONLY' | 'LOAD_CACHE_ELSE_NETWORK' | 'LOAD_NO_CACHE'; +export type CacheMode = + | 'LOAD_DEFAULT' + | 'LOAD_CACHE_ONLY' + | 'LOAD_CACHE_ELSE_NETWORK' + | 'LOAD_NO_CACHE'; export type AndroidLayerType = 'none' | 'software' | 'hardware'; @@ -246,7 +248,10 @@ export interface WebViewNativeConfig { /** * The native component used to render the WebView. */ - component?: typeof NativeWebViewIOS | typeof NativeWebViewMacOS | typeof NativeWebViewAndroid; + component?: + | typeof NativeWebViewIOS + | typeof NativeWebViewMacOS + | typeof NativeWebViewAndroid; /** * Set props directly on the native component WebView. Enables custom props which the * original WebView doesn't pass through. @@ -326,8 +331,8 @@ export interface AndroidNativeWebViewProps extends CommonNativeWebViewProps { textZoom?: number; thirdPartyCookiesEnabled?: boolean; messagingModuleName?: string; - setBuiltInZoomControls?: boolean, - setDisplayZoomControls?: boolean, + setBuiltInZoomControls?: boolean; + setDisplayZoomControls?: boolean; nestedScrollEnabled?: boolean; readonly urlPrefixesForDefaultIntent?: string[]; forceDarkOn?: boolean; @@ -336,7 +341,11 @@ export interface AndroidNativeWebViewProps extends CommonNativeWebViewProps { lackPermissionToDownloadMessage?: string; } -export declare type ContentInsetAdjustmentBehavior = 'automatic' | 'scrollableAxes' | 'never' | 'always'; +export declare type ContentInsetAdjustmentBehavior = + | 'automatic' + | 'scrollableAxes' + | 'never' + | 'always'; export declare type MediaCapturePermissionGrantType = | 'grantIfSameHostElsePrompt' @@ -351,6 +360,7 @@ export interface IOSNativeWebViewProps extends CommonNativeWebViewProps { allowingReadAccessToURL?: string; allowsBackForwardNavigationGestures?: boolean; allowsInlineMediaPlayback?: boolean; + allowsAirPlayForMediaPlayback?: boolean; allowsLinkPreview?: boolean; allowFileAccessFromFileURLs?: boolean; allowUniversalAccessFromFileURLs?: boolean; @@ -382,6 +392,7 @@ export interface MacOSNativeWebViewProps extends CommonNativeWebViewProps { allowUniversalAccessFromFileURLs?: boolean; allowsBackForwardNavigationGestures?: boolean; allowsInlineMediaPlayback?: boolean; + allowsAirPlayForMediaPlayback?: boolean; allowsLinkPreview?: boolean; automaticallyAdjustContentInsets?: boolean; bounces?: boolean; @@ -520,6 +531,11 @@ export interface IOSWebViewProps extends WebViewSharedProps { * @platform ios */ allowsInlineMediaPlayback?: boolean; + /** + * A Boolean value indicating whether AirPlay is allowed. The default value is `false`. + * @platform ios + */ + allowsAirPlayForMediaPlayback?: boolean; /** * Hide the accessory view when the keyboard is open. Default is false to be * backward compatible. @@ -631,14 +647,14 @@ export interface IOSWebViewProps extends WebViewSharedProps { * If `true` (default), loads the `injectedJavaScript` only into the main frame. * If `false`, loads it into all frames (e.g. iframes). * @platform ios - */ + */ injectedJavaScriptForMainFrameOnly?: boolean; /** * If `true` (default), loads the `injectedJavaScriptBeforeContentLoaded` only into the main frame. * If `false`, loads it into all frames (e.g. iframes). * @platform ios - */ + */ injectedJavaScriptBeforeContentLoadedForMainFrameOnly?: boolean; /** @@ -647,7 +663,7 @@ export interface IOSWebViewProps extends WebViewSharedProps { * If `true`, sets `bounces` automatically to `true` * @platform ios * - */ + */ pullToRefreshEnabled?: boolean; /** @@ -672,7 +688,7 @@ export interface IOSWebViewProps extends WebViewSharedProps { * A Boolean value which, when set to `true`, indicates to WebKit that a WKWebView * will only navigate to app-bound domains. Once set, any attempt to navigate away * from an app-bound domain will fail with the error “App-bound domain failure.” - * + * * Applications can specify up to 10 “app-bound” domains using a new * Info.plist key `WKAppBoundDomains`. * @platform ios @@ -682,7 +698,7 @@ export interface IOSWebViewProps extends WebViewSharedProps { /** * If false indicates to WebKit that a WKWebView will not interact with text, thus * not showing a text selection loop. Only applicable for iOS 14.5 or greater. - * + * * Defaults to true. * @platform ios */ @@ -710,10 +726,10 @@ export interface IOSWebViewProps extends WebViewSharedProps { */ enableApplePay?: boolean; - /** + /** * An array of objects which will be added to the UIMenu controller when selecting text. * These will appear after a long press to select text. - */ + */ menuItems?: WebViewCustomMenuItems[]; /** @@ -785,6 +801,11 @@ export interface MacOSWebViewProps extends WebViewSharedProps { * @platform macos */ allowsInlineMediaPlayback?: boolean; + /** + * A Boolean value indicating whether AirPlay is allowed. The default value is `false`. + * @platform macos + */ + allowsAirPlayForMediaPlayback?: boolean; /** * Hide the accessory view when the keyboard is open. Default is false to be * backward compatible. @@ -926,7 +947,6 @@ export interface AndroidWebViewProps extends WebViewSharedProps { */ geolocationEnabled?: boolean; - /** * Boolean that sets whether JavaScript running in the context of a file * scheme URL should be allowed to access content from other file scheme URLs. @@ -978,7 +998,7 @@ export interface AndroidWebViewProps extends WebViewSharedProps { */ androidHardwareAccelerationDisabled?: boolean; - /** + /** * https://developer.android.com/reference/android/webkit/WebView#setLayerType(int,%20android.graphics.Paint) * Sets the layerType. Possible values are: * @@ -1036,13 +1056,13 @@ export interface AndroidWebViewProps extends WebViewSharedProps { /** * Configuring Dark Theme - * + * * *NOTE* : The force dark setting is not persistent. You must call the static method every time your app process is started. - * + * * *NOTE* : The change from day<->night mode is a configuration change so by default the activity will be restarted - * and pickup the new values to apply the theme. + * and pickup the new values to apply the theme. * Take care when overriding this default behavior to ensure this method is still called when changes are made. - * + * * @platform android */ forceDarkOn?: boolean; @@ -1054,16 +1074,16 @@ export interface AndroidWebViewProps extends WebViewSharedProps { * @platform android */ setBuiltInZoomControls?: boolean; - + /** * Boolean value to control whether built-in zooms controls are displayed. Used only in Android. * Default to false * Controls will always be hidden if setBuiltInZoomControls is set to `false` - * + * * @platform android */ setDisplayZoomControls?: boolean; - + /** * Allows to scroll inside the webview when used inside a scrollview. * Behaviour already existing on iOS. @@ -1072,7 +1092,7 @@ export interface AndroidWebViewProps extends WebViewSharedProps { * @platform android */ nestedScrollEnabled?: boolean; - + /** * Sets the minimum font size. * A non-negative integer between 1 and 72. Any number outside the specified range will be pinned. From 218ae30057f60bdcf85d7fe9a70337b0b66bf1fc Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 23 May 2022 22:48:41 +0000 Subject: [PATCH 010/104] chore(release): 11.20.0 [skip ci] # [11.20.0](https://github.com/react-native-webview/react-native-webview/compare/v11.19.0...v11.20.0) (2022-05-23) ### Features * **ios:** adds allowsAirPlayForMediaPlayback prop ([#2410](https://github.com/react-native-webview/react-native-webview/issues/2410) by [@matinzd](https://github.com/matinzd)) ([eb4e923](https://github.com/react-native-webview/react-native-webview/commit/eb4e923fb012f1dcb5c5389fb1901ee84e32fa8c)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 36d5035884..5753174892 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.19.0", + "version": "11.20.0", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 41ae8965115b7a028d5409dd4dc36bd4544f8300 Mon Sep 17 00:00:00 2001 From: Penar Musaraj Date: Sat, 28 May 2022 04:24:06 -0400 Subject: [PATCH 011/104] fix(ios): support requestFocus (#2501) --- apple/RNCWebView.h | 1 + apple/RNCWebView.m | 15 +++++++++++---- apple/RNCWebViewManager.m | 12 ++++++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/apple/RNCWebView.h b/apple/RNCWebView.h index 317fc4cdf9..dfc5312fa1 100644 --- a/apple/RNCWebView.h +++ b/apple/RNCWebView.h @@ -109,6 +109,7 @@ typedef enum RNCWebViewPermissionGrantType : NSUInteger { - (void)goBack; - (void)reload; - (void)stopLoading; +- (void)requestFocus; #if !TARGET_OS_OSX - (void)addPullToRefreshControl; - (void)pullToRefresh:(UIRefreshControl *_Nonnull)refreshControl; diff --git a/apple/RNCWebView.m b/apple/RNCWebView.m index b8e4f4de5e..63b19ea44f 100644 --- a/apple/RNCWebView.m +++ b/apple/RNCWebView.m @@ -213,17 +213,17 @@ - (void)startLongPress:(UILongPressGestureRecognizer *)pressSender } UIMenuController *menuController = [UIMenuController sharedMenuController]; NSMutableArray *menuControllerItems = [NSMutableArray arrayWithCapacity:self.menuItems.count]; - + for(NSDictionary *menuItem in self.menuItems) { NSString *menuItemLabel = [RCTConvert NSString:menuItem[@"label"]]; NSString *menuItemKey = [RCTConvert NSString:menuItem[@"key"]]; NSString *sel = [NSString stringWithFormat:@"%@%@", CUSTOM_SELECTOR, menuItemKey]; UIMenuItem *item = [[UIMenuItem alloc] initWithTitle: menuItemLabel action: NSSelectorFromString(sel)]; - + [menuControllerItems addObject: item]; } - + menuController.menuItems = menuControllerItems; [menuController setMenuVisible:YES animated:YES]; } @@ -382,7 +382,7 @@ - (WKWebViewConfiguration *)setUpWkWebViewConfig if(@available(macos 10.11, ios 9.0, *)) { wkWebViewConfig.allowsAirPlayForMediaPlayback = _allowsAirPlayForMediaPlayback; } - + #if !TARGET_OS_OSX wkWebViewConfig.allowsInlineMediaPlayback = _allowsInlineMediaPlayback; #if WEBKIT_IOS_10_APIS_AVAILABLE @@ -1406,6 +1406,13 @@ - (void)stopLoading [_webView stopLoading]; } +- (void)requestFocus +{ + #if !TARGET_OS_OSX + [_webView becomeFirstResponder]; + #endif // !TARGET_OS_OSX +} + #if !TARGET_OS_OSX - (void)setBounces:(BOOL)bounces { diff --git a/apple/RNCWebViewManager.m b/apple/RNCWebViewManager.m index 31113fc34d..5d59912bf5 100644 --- a/apple/RNCWebViewManager.m +++ b/apple/RNCWebViewManager.m @@ -240,6 +240,18 @@ - (RCTUIView *)view }]; } +RCT_EXPORT_METHOD(requestFocus:(nonnull NSNumber *)reactTag) +{ + [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary *viewRegistry) { + RNCWebView *view = viewRegistry[reactTag]; + if (![view isKindOfClass:[RNCWebView class]]) { + RCTLogError(@"Invalid view returned from registry, expecting RNCWebView, got: %@", view); + } else { + [view requestFocus]; + } + }]; +} + #pragma mark - Exported synchronous methods - (BOOL) webView:(RNCWebView *)webView From 5ffa17fac183d158cedc9815689d97059186429d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 28 May 2022 08:25:21 +0000 Subject: [PATCH 012/104] chore(release): 11.20.1 [skip ci] ## [11.20.1](https://github.com/react-native-webview/react-native-webview/compare/v11.20.0...v11.20.1) (2022-05-28) ### Bug Fixes * **ios:** support requestFocus ([#2501](https://github.com/react-native-webview/react-native-webview/issues/2501)) ([41ae896](https://github.com/react-native-webview/react-native-webview/commit/41ae8965115b7a028d5409dd4dc36bd4544f8300)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5753174892..612873fef7 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.20.0", + "version": "11.20.1", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 5067dc215c12aca7a143b30e0b04c3603bb992ba Mon Sep 17 00:00:00 2001 From: Thibault Malbranche Date: Sun, 29 May 2022 17:20:36 +0200 Subject: [PATCH 013/104] chore(readme): update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3419b5eef0..bf1b64071b 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ _This project is maintained for free by these people using both their free time and their company work time._ -- [Thibault Malbranche](https://github.com/Titozzz) ([Twitter @titozzz](https://twitter.com/titozzz)) from [Brigad](https://brigad.co/about) +- [Thibault Malbranche](https://github.com/Titozzz) ([Twitter @titozzz](https://twitter.com/titozzz)) from [Brigad](https://www.brigad.co/en-gb/about-us) - [Jamon Holmgren](https://github.com/jamonholmgren) ([Twitter @jamonholmgren](https://twitter.com/jamonholmgren)) from [Infinite Red](https://infinite.red/react-native) - [Alexander Sklar](https://github.com/asklar) ([Twitter @alexsklar](https://twitter.com/alexsklar)) from [React Native Windows @ Microsoft](https://microsoft.github.io/react-native-windows/) - [Chiara Mooney](https://github.com/chiaramooney) from [React Native Windows @ Microsoft](https://microsoft.github.io/react-native-windows/) From 2e79a031c81a5d29784a3f57f9a9b44f91f92279 Mon Sep 17 00:00:00 2001 From: Bartosz Kaszubowski Date: Mon, 30 May 2022 00:12:30 +0200 Subject: [PATCH 014/104] feat: improve dummy WebView (#2509) * feat: improve dummy WebView * Update WebView.tsx Co-authored-by: Thibault Malbranche --- src/WebView.tsx | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/WebView.tsx b/src/WebView.tsx index 3d0f8aa135..37474b8db7 100644 --- a/src/WebView.tsx +++ b/src/WebView.tsx @@ -1,20 +1,18 @@ import React from 'react'; -import { View } from 'react-native'; +import { Text, View } from 'react-native'; import { IOSWebViewProps, AndroidWebViewProps, WindowsWebViewProps } from './WebViewTypes'; export type WebViewProps = IOSWebViewProps & AndroidWebViewProps & WindowsWebViewProps; // This "dummy" WebView is to render something for unsupported platforms, -// like for example Expo SDK "web" platform. It matches the previous react-native -// implementation which is produced by Expo SDK 37.0.0.1 implementation, with -// similar interface than the native ones have. +// like for example Expo SDK "web" platform. const WebView: React.FunctionComponent = () => ( - + + + React Native WebView does not support this platform. + + ); export { WebView }; -export default WebView; \ No newline at end of file +export default WebView; From 86112376067abdbdcb9aeed5150604099f80bc21 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 29 May 2022 22:13:49 +0000 Subject: [PATCH 015/104] chore(release): 11.21.0 [skip ci] # [11.21.0](https://github.com/react-native-webview/react-native-webview/compare/v11.20.1...v11.21.0) (2022-05-29) ### Features * improve dummy WebView ([#2509](https://github.com/react-native-webview/react-native-webview/issues/2509)) ([2e79a03](https://github.com/react-native-webview/react-native-webview/commit/2e79a031c81a5d29784a3f57f9a9b44f91f92279)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 612873fef7..ac234e3bb3 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.20.1", + "version": "11.21.0", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From dc050b5bd29c63e5544d827c5bce04118b362095 Mon Sep 17 00:00:00 2001 From: Bartosz Kaszubowski Date: Tue, 31 May 2022 02:04:15 +0200 Subject: [PATCH 016/104] chore: update Expo is supported platforms section (#2512) --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index bf1b64071b..76026776c5 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,7 @@ _This project is maintained for free by these people using both their free time - [x] Android - [x] macOS - [x] Windows - -_Note: Expo support for React Native WebView started with [Expo SDK v33.0.0](https://blog.expo.io/expo-sdk-v33-0-0-is-now-available-52d1c99dfe4c)._ +- [x] Expo (Android, iOS) ## Getting Started From 05710628128815fc5fb2f1c48e467a78d1b5a1e7 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen <4123478+tido64@users.noreply.github.com> Date: Tue, 31 May 2022 17:29:44 +0200 Subject: [PATCH 017/104] fix(windows): don't build WebView2 unless on WinUI 3 (#2517) --- windows/ReactNativeWebView/ReactPackageProvider.cpp | 3 ++- windows/ReactNativeWebView/ReactWebView.idl | 2 +- windows/ReactNativeWebView/ReactWebView2.cpp | 8 +++++--- windows/ReactNativeWebView/ReactWebView2.h | 13 +++++++++++-- windows/ReactNativeWebView/ReactWebView2Manager.cpp | 6 ++++-- windows/ReactNativeWebView/ReactWebView2Manager.h | 9 ++++++--- 6 files changed, 29 insertions(+), 12 deletions(-) diff --git a/windows/ReactNativeWebView/ReactPackageProvider.cpp b/windows/ReactNativeWebView/ReactPackageProvider.cpp index c6dbf516c5..fb95b861e1 100644 --- a/windows/ReactNativeWebView/ReactPackageProvider.cpp +++ b/windows/ReactNativeWebView/ReactPackageProvider.cpp @@ -13,7 +13,8 @@ namespace winrt::ReactNativeWebView::implementation { void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept { packageBuilder.AddViewManager(L"ReactWebViewManager", []() { return winrt::make(); }); -#if RNW_VERSION_AT_LEAST(0,68,0) + +#if USE_WEBVIEW2 packageBuilder.AddViewManager(L"ReactWebView2Manager", []() { return winrt::make(); }); #endif } diff --git a/windows/ReactNativeWebView/ReactWebView.idl b/windows/ReactNativeWebView/ReactWebView.idl index 3d437881aa..bb000f4a54 100644 --- a/windows/ReactNativeWebView/ReactWebView.idl +++ b/windows/ReactNativeWebView/ReactWebView.idl @@ -9,7 +9,7 @@ namespace ReactNativeWebView{ #else #define RNW_VERSION_AT_LEAST(x,y,z) false #endif -#if RNW_VERSION_AT_LEAST(0,68,0) +#if defined(USE_WINUI3) && RNW_VERSION_AT_LEAST(0,68,0) [default_interface] runtimeclass ReactWebView2 : Windows.UI.Xaml.Controls.ContentPresenter{ ReactWebView2(Microsoft.ReactNative.IReactContext context); diff --git a/windows/ReactNativeWebView/ReactWebView2.cpp b/windows/ReactNativeWebView/ReactWebView2.cpp index 1a36ed257a..f04593a08a 100644 --- a/windows/ReactNativeWebView/ReactWebView2.cpp +++ b/windows/ReactNativeWebView/ReactWebView2.cpp @@ -2,9 +2,10 @@ // Licensed under the MIT License. #include "pch.h" -#if RNW_VERSION_AT_LEAST(0,68,0) -#include "JSValueXaml.h" #include "ReactWebView2.h" + +#if USE_WEBVIEW2 +#include "JSValueXaml.h" #include "ReactWebView2.g.cpp" #include #include @@ -116,4 +117,5 @@ namespace winrt::ReactNativeWebView::implementation { } } // namespace winrt::ReactNativeWebView::implementation -#endif \ No newline at end of file + +#endif // USE_WEBVIEW2 diff --git a/windows/ReactNativeWebView/ReactWebView2.h b/windows/ReactNativeWebView/ReactWebView2.h index e5b018addf..494f8be7b2 100644 --- a/windows/ReactNativeWebView/ReactWebView2.h +++ b/windows/ReactNativeWebView/ReactWebView2.h @@ -1,8 +1,16 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -#if RNW_VERSION_AT_LEAST(0,68,0) + #pragma once +#if defined(USE_WINUI3) && RNW_VERSION_AT_LEAST(0,68,0) +#define USE_WEBVIEW2 1 +#else +#define USE_WEBVIEW2 0 +#endif + +#if USE_WEBVIEW2 + #include "winrt/Microsoft.ReactNative.h" #include "NativeModules.h" #include "ReactWebView2.g.h" @@ -40,4 +48,5 @@ namespace winrt::ReactNativeWebView::implementation { namespace winrt::ReactNativeWebView::factory_implementation { struct ReactWebView2 : ReactWebView2T {}; } // namespace winrt::ReactNativeWebView2::factory_implementation -#endif \ No newline at end of file + +#endif // USE_WEBVIEW2 diff --git a/windows/ReactNativeWebView/ReactWebView2Manager.cpp b/windows/ReactNativeWebView/ReactWebView2Manager.cpp index 556097c223..cd15275185 100644 --- a/windows/ReactNativeWebView/ReactWebView2Manager.cpp +++ b/windows/ReactNativeWebView/ReactWebView2Manager.cpp @@ -1,6 +1,7 @@ #include "pch.h" -#if RNW_VERSION_AT_LEAST(0,68,0) #include "ReactWebView2Manager.h" + +#if USE_WEBVIEW2 #include "NativeModules.h" #include "ReactWebView2.h" #include "JSValueXaml.h" @@ -144,4 +145,5 @@ namespace winrt::ReactNativeWebView::implementation { } } // namespace winrt::ReactNativeWebView::implementation -#endif \ No newline at end of file + +#endif // USE_WEBVIEW2 diff --git a/windows/ReactNativeWebView/ReactWebView2Manager.h b/windows/ReactNativeWebView/ReactWebView2Manager.h index 29a7ea597c..c7102cfc2a 100644 --- a/windows/ReactNativeWebView/ReactWebView2Manager.h +++ b/windows/ReactNativeWebView/ReactWebView2Manager.h @@ -1,10 +1,13 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -#if RNW_VERSION_AT_LEAST(0,68,0) + #pragma once + +#include "ReactWebView2.h" + +#if USE_WEBVIEW2 #include "winrt/Microsoft.ReactNative.h" #include "NativeModules.h" -#include "ReactWebView2.h" namespace winrt::ReactNativeWebView::implementation { @@ -51,4 +54,4 @@ namespace winrt::ReactNativeWebView::implementation { }; } // namespace winrt::ReactNativeWebView::implementation -#endif \ No newline at end of file +#endif // USE_WEBVIEW2 From a1cb1322083fbb994c5f1e67b720d63e365993d3 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 31 May 2022 15:31:04 +0000 Subject: [PATCH 018/104] chore(release): 11.21.1 [skip ci] ## [11.21.1](https://github.com/react-native-webview/react-native-webview/compare/v11.21.0...v11.21.1) (2022-05-31) ### Bug Fixes * **windows:** don't build WebView2 unless on WinUI 3 ([#2517](https://github.com/react-native-webview/react-native-webview/issues/2517)) ([0571062](https://github.com/react-native-webview/react-native-webview/commit/05710628128815fc5fb2f1c48e467a78d1b5a1e7)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ac234e3bb3..102c2fbb92 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.21.0", + "version": "11.21.1", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From ed3d6ede93c2896c9b0fe7223bec826d8316732a Mon Sep 17 00:00:00 2001 From: Tommy Nguyen <4123478+tido64@users.noreply.github.com> Date: Tue, 7 Jun 2022 21:29:00 +0200 Subject: [PATCH 019/104] Revert "fix(windows): don't build WebView2 unless on WinUI 3" (#2531) * Revert "fix(windows): don't build WebView2 unless on WinUI 3 (#2517)" This reverts commit 05710628128815fc5fb2f1c48e467a78d1b5a1e7. * just remove the USE_WINUI3 check --- windows/ReactNativeWebView/ReactWebView.idl | 4 ++-- windows/ReactNativeWebView/ReactWebView2.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/windows/ReactNativeWebView/ReactWebView.idl b/windows/ReactNativeWebView/ReactWebView.idl index bb000f4a54..f021e1615e 100644 --- a/windows/ReactNativeWebView/ReactWebView.idl +++ b/windows/ReactNativeWebView/ReactWebView.idl @@ -9,11 +9,11 @@ namespace ReactNativeWebView{ #else #define RNW_VERSION_AT_LEAST(x,y,z) false #endif -#if defined(USE_WINUI3) && RNW_VERSION_AT_LEAST(0,68,0) +#if RNW_VERSION_AT_LEAST(0,68,0) [default_interface] runtimeclass ReactWebView2 : Windows.UI.Xaml.Controls.ContentPresenter{ ReactWebView2(Microsoft.ReactNative.IReactContext context); void NavigateToHtml(String html); }; #endif -} // namespace ReactNativeWebView \ No newline at end of file +} // namespace ReactNativeWebView diff --git a/windows/ReactNativeWebView/ReactWebView2.h b/windows/ReactNativeWebView/ReactWebView2.h index 494f8be7b2..ffd40d9fa2 100644 --- a/windows/ReactNativeWebView/ReactWebView2.h +++ b/windows/ReactNativeWebView/ReactWebView2.h @@ -3,7 +3,7 @@ #pragma once -#if defined(USE_WINUI3) && RNW_VERSION_AT_LEAST(0,68,0) +#if RNW_VERSION_AT_LEAST(0,68,0) #define USE_WEBVIEW2 1 #else #define USE_WEBVIEW2 0 From ef76edf99a4ef59580830c22f403ed9694095716 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 7 Jun 2022 19:31:26 +0000 Subject: [PATCH 020/104] chore(release): 11.21.2 [skip ci] ## [11.21.2](https://github.com/react-native-webview/react-native-webview/compare/v11.21.1...v11.21.2) (2022-06-07) ### Reverts * Revert "fix(windows): don't build WebView2 unless on WinUI 3" (#2531) ([ed3d6ed](https://github.com/react-native-webview/react-native-webview/commit/ed3d6ede93c2896c9b0fe7223bec826d8316732a)), closes [#2531](https://github.com/react-native-webview/react-native-webview/issues/2531) [#2517](https://github.com/react-native-webview/react-native-webview/issues/2517) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 102c2fbb92..b0c73c9e7d 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.21.1", + "version": "11.21.2", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 6b8e4f3f5f3cc006ebca8cb3c7ab692805824685 Mon Sep 17 00:00:00 2001 From: Thibault Malbranche Date: Thu, 9 Jun 2022 22:00:54 +0200 Subject: [PATCH 021/104] feat(refactor): remove findnodehandle, use function components & codegenNativeCommands (#2508) * wip * wip * Update RNCWebViewManager.java * Shared stuff with iOS * bump stuff * wip * fix(windows): don't build WebView2 unless on WinUI 3 (#2518) Co-authored-by: Tommy Nguyen <4123478+tido64@users.noreply.github.com> * wip * Revert 2517 tido/fix webview2 build (#2532) * Revert "fix(windows): don't build WebView2 unless on WinUI 3 (#2517)" This reverts commit 05710628128815fc5fb2f1c48e467a78d1b5a1e7. * just remove the USE_WINUI3 check Co-authored-by: Tommy Nguyen <4123478+tido64@users.noreply.github.com> * Create ExperimentalFeatures.props Co-authored-by: Tommy Nguyen <4123478+tido64@users.noreply.github.com> Co-authored-by: Jamon Holmgren --- .eslintrc.js | 2 +- .../webview/RNCWebViewManager.java | 33 +- example/ios/Podfile.lock | 439 +++--- example/windows/ExperimentalFeatures.props | 38 + package.json | 16 +- src/WebView.android.tsx | 509 +++---- src/WebView.ios.tsx | 483 ++---- src/WebView.macos.tsx | 458 ++---- src/WebViewShared.tsx | 143 +- src/WebViewTypes.ts | 3 + yarn.lock | 1304 ++++++++++++++--- 11 files changed, 1972 insertions(+), 1456 deletions(-) create mode 100644 example/windows/ExperimentalFeatures.props diff --git a/.eslintrc.js b/.eslintrc.js index adb8160dae..5142f7fe69 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,6 +1,6 @@ module.exports = { // Airbnb is the base, prettier is here so that eslint doesn't conflict with prettier - extends: ['airbnb', 'prettier', 'prettier/react'], + extends: ['airbnb', 'prettier', 'prettier/react', 'plugin:react-hooks/recommended'], parser: '@typescript-eslint/parser', plugins: ['react', 'react-native', 'import', '@typescript-eslint'], rules: { diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java index 238e00b838..e87f805076 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java @@ -43,6 +43,7 @@ import android.webkit.WebViewClient; import android.widget.FrameLayout; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.core.content.ContextCompat; @@ -692,6 +693,13 @@ public Map getExportedCustomDirectEventTypeConstants() { if (export == null) { export = MapBuilder.newHashMap(); } + // Default events but adding them here explicitly for clarity + export.put(TopLoadingStartEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingStart")); + export.put(TopLoadingFinishEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingFinish")); + export.put(TopLoadingErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingError")); + export.put(TopMessageEvent.EVENT_NAME, MapBuilder.of("registrationName", "onMessage")); + // !Default events but adding them here explicitly for clarity + export.put(TopLoadingProgressEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingProgress")); export.put(TopShouldStartLoadWithRequestEvent.EVENT_NAME, MapBuilder.of("registrationName", "onShouldStartLoadWithRequest")); export.put(ScrollEventType.getJSEventName(ScrollEventType.SCROLL), MapBuilder.of("registrationName", "onScroll")); @@ -719,21 +727,21 @@ Map getCommandsMap() { } @Override - public void receiveCommand(WebView root, int commandId, @Nullable ReadableArray args) { + public void receiveCommand(@NonNull WebView root, String commandId, @Nullable ReadableArray args) { switch (commandId) { - case COMMAND_GO_BACK: + case "goBack": root.goBack(); break; - case COMMAND_GO_FORWARD: + case "goForward": root.goForward(); break; - case COMMAND_RELOAD: + case "reload": root.reload(); break; - case COMMAND_STOP_LOADING: + case "stopLoading": root.stopLoading(); break; - case COMMAND_POST_MESSAGE: + case "postMessage": try { RNCWebView reactWebView = (RNCWebView) root; JSONObject eventInitDict = new JSONObject(); @@ -753,31 +761,32 @@ public void receiveCommand(WebView root, int commandId, @Nullable ReadableArray throw new RuntimeException(e); } break; - case COMMAND_INJECT_JAVASCRIPT: + case "injectJavaScript": RNCWebView reactWebView = (RNCWebView) root; reactWebView.evaluateJavascriptWithFallback(args.getString(0)); break; - case COMMAND_LOAD_URL: + case "loadUrl": if (args == null) { throw new RuntimeException("Arguments for loading an url are null!"); } ((RNCWebView) root).progressChangedFilter.setWaitingForCommandLoadUrl(false); root.loadUrl(args.getString(0)); break; - case COMMAND_FOCUS: + case "requestFocus": root.requestFocus(); break; - case COMMAND_CLEAR_FORM_DATA: + case "clearFormData": root.clearFormData(); break; - case COMMAND_CLEAR_CACHE: + case "clearCache": boolean includeDiskFiles = args != null && args.getBoolean(0); root.clearCache(includeDiskFiles); break; - case COMMAND_CLEAR_HISTORY: + case "clearHistory": root.clearHistory(); break; } + super.receiveCommand(root, commandId, args); } @Override diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index f02793f2f4..42a7655638 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1,14 +1,14 @@ PODS: - boost (1.76.0) - DoubleConversion (1.1.6) - - FBLazyVector (0.66.4) - - FBReactNativeSpec (0.66.4): + - FBLazyVector (0.68.2) + - FBReactNativeSpec (0.68.2): - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.66.4) - - RCTTypeSafety (= 0.66.4) - - React-Core (= 0.66.4) - - React-jsi (= 0.66.4) - - ReactCommon/turbomodule/core (= 0.66.4) + - RCTRequired (= 0.68.2) + - RCTTypeSafety (= 0.68.2) + - React-Core (= 0.68.2) + - React-jsi (= 0.68.2) + - ReactCommon/turbomodule/core (= 0.68.2) - fmt (6.2.1) - glog (0.3.5) - RCT-Folly (2021.06.28.00-v2): @@ -22,261 +22,270 @@ PODS: - DoubleConversion - fmt (~> 6.2.1) - glog - - RCTRequired (0.66.4) - - RCTTypeSafety (0.66.4): - - FBLazyVector (= 0.66.4) + - RCTRequired (0.68.2) + - RCTTypeSafety (0.68.2): + - FBLazyVector (= 0.68.2) - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.66.4) - - React-Core (= 0.66.4) - - React (0.66.4): - - React-Core (= 0.66.4) - - React-Core/DevSupport (= 0.66.4) - - React-Core/RCTWebSocket (= 0.66.4) - - React-RCTActionSheet (= 0.66.4) - - React-RCTAnimation (= 0.66.4) - - React-RCTBlob (= 0.66.4) - - React-RCTImage (= 0.66.4) - - React-RCTLinking (= 0.66.4) - - React-RCTNetwork (= 0.66.4) - - React-RCTSettings (= 0.66.4) - - React-RCTText (= 0.66.4) - - React-RCTVibration (= 0.66.4) - - React-callinvoker (0.66.4) - - React-Core (0.66.4): + - RCTRequired (= 0.68.2) + - React-Core (= 0.68.2) + - React (0.68.2): + - React-Core (= 0.68.2) + - React-Core/DevSupport (= 0.68.2) + - React-Core/RCTWebSocket (= 0.68.2) + - React-RCTActionSheet (= 0.68.2) + - React-RCTAnimation (= 0.68.2) + - React-RCTBlob (= 0.68.2) + - React-RCTImage (= 0.68.2) + - React-RCTLinking (= 0.68.2) + - React-RCTNetwork (= 0.68.2) + - React-RCTSettings (= 0.68.2) + - React-RCTText (= 0.68.2) + - React-RCTVibration (= 0.68.2) + - React-callinvoker (0.68.2) + - React-Codegen (0.68.2): + - FBReactNativeSpec (= 0.68.2) + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.2) + - RCTTypeSafety (= 0.68.2) + - React-Core (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - ReactCommon/turbomodule/core (= 0.68.2) + - React-Core (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.66.4) - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-Core/Default (= 0.68.2) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/CoreModulesHeaders (0.66.4): + - React-Core/CoreModulesHeaders (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/Default (0.66.4): + - React-Core/Default (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/DevSupport (0.66.4): + - React-Core/DevSupport (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.66.4) - - React-Core/RCTWebSocket (= 0.66.4) - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-jsinspector (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-Core/Default (= 0.68.2) + - React-Core/RCTWebSocket (= 0.68.2) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-jsinspector (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/RCTActionSheetHeaders (0.66.4): + - React-Core/RCTActionSheetHeaders (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/RCTAnimationHeaders (0.66.4): + - React-Core/RCTAnimationHeaders (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/RCTBlobHeaders (0.66.4): + - React-Core/RCTBlobHeaders (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/RCTImageHeaders (0.66.4): + - React-Core/RCTImageHeaders (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/RCTLinkingHeaders (0.66.4): + - React-Core/RCTLinkingHeaders (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/RCTNetworkHeaders (0.66.4): + - React-Core/RCTNetworkHeaders (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/RCTSettingsHeaders (0.66.4): + - React-Core/RCTSettingsHeaders (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/RCTTextHeaders (0.66.4): + - React-Core/RCTTextHeaders (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/RCTVibrationHeaders (0.66.4): + - React-Core/RCTVibrationHeaders (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-Core/RCTWebSocket (0.66.4): + - React-Core/RCTWebSocket (0.68.2): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.66.4) - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsiexecutor (= 0.66.4) - - React-perflogger (= 0.66.4) + - React-Core/Default (= 0.68.2) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsiexecutor (= 0.68.2) + - React-perflogger (= 0.68.2) - Yoga - - React-CoreModules (0.66.4): - - FBReactNativeSpec (= 0.66.4) + - React-CoreModules (0.68.2): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.66.4) - - React-Core/CoreModulesHeaders (= 0.66.4) - - React-jsi (= 0.66.4) - - React-RCTImage (= 0.66.4) - - ReactCommon/turbomodule/core (= 0.66.4) - - React-cxxreact (0.66.4): + - RCTTypeSafety (= 0.68.2) + - React-Codegen (= 0.68.2) + - React-Core/CoreModulesHeaders (= 0.68.2) + - React-jsi (= 0.68.2) + - React-RCTImage (= 0.68.2) + - ReactCommon/turbomodule/core (= 0.68.2) + - React-cxxreact (0.68.2): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.66.4) - - React-jsi (= 0.66.4) - - React-jsinspector (= 0.66.4) - - React-logger (= 0.66.4) - - React-perflogger (= 0.66.4) - - React-runtimeexecutor (= 0.66.4) - - React-jsi (0.66.4): + - React-callinvoker (= 0.68.2) + - React-jsi (= 0.68.2) + - React-jsinspector (= 0.68.2) + - React-logger (= 0.68.2) + - React-perflogger (= 0.68.2) + - React-runtimeexecutor (= 0.68.2) + - React-jsi (0.68.2): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi/Default (= 0.66.4) - - React-jsi/Default (0.66.4): + - React-jsi/Default (= 0.68.2) + - React-jsi/Default (0.68.2): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsiexecutor (0.66.4): + - React-jsiexecutor (0.68.2): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-perflogger (= 0.66.4) - - React-jsinspector (0.66.4) - - React-logger (0.66.4): + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-perflogger (= 0.68.2) + - React-jsinspector (0.68.2) + - React-logger (0.68.2): - glog - - react-native-webview (11.17.2): + - react-native-webview (11.20.1): - React-Core - - React-perflogger (0.66.4) - - React-RCTActionSheet (0.66.4): - - React-Core/RCTActionSheetHeaders (= 0.66.4) - - React-RCTAnimation (0.66.4): - - FBReactNativeSpec (= 0.66.4) + - React-perflogger (0.68.2) + - React-RCTActionSheet (0.68.2): + - React-Core/RCTActionSheetHeaders (= 0.68.2) + - React-RCTAnimation (0.68.2): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.66.4) - - React-Core/RCTAnimationHeaders (= 0.66.4) - - React-jsi (= 0.66.4) - - ReactCommon/turbomodule/core (= 0.66.4) - - React-RCTBlob (0.66.4): - - FBReactNativeSpec (= 0.66.4) + - RCTTypeSafety (= 0.68.2) + - React-Codegen (= 0.68.2) + - React-Core/RCTAnimationHeaders (= 0.68.2) + - React-jsi (= 0.68.2) + - ReactCommon/turbomodule/core (= 0.68.2) + - React-RCTBlob (0.68.2): - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/RCTBlobHeaders (= 0.66.4) - - React-Core/RCTWebSocket (= 0.66.4) - - React-jsi (= 0.66.4) - - React-RCTNetwork (= 0.66.4) - - ReactCommon/turbomodule/core (= 0.66.4) - - React-RCTImage (0.66.4): - - FBReactNativeSpec (= 0.66.4) + - React-Codegen (= 0.68.2) + - React-Core/RCTBlobHeaders (= 0.68.2) + - React-Core/RCTWebSocket (= 0.68.2) + - React-jsi (= 0.68.2) + - React-RCTNetwork (= 0.68.2) + - ReactCommon/turbomodule/core (= 0.68.2) + - React-RCTImage (0.68.2): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.66.4) - - React-Core/RCTImageHeaders (= 0.66.4) - - React-jsi (= 0.66.4) - - React-RCTNetwork (= 0.66.4) - - ReactCommon/turbomodule/core (= 0.66.4) - - React-RCTLinking (0.66.4): - - FBReactNativeSpec (= 0.66.4) - - React-Core/RCTLinkingHeaders (= 0.66.4) - - React-jsi (= 0.66.4) - - ReactCommon/turbomodule/core (= 0.66.4) - - React-RCTNetwork (0.66.4): - - FBReactNativeSpec (= 0.66.4) + - RCTTypeSafety (= 0.68.2) + - React-Codegen (= 0.68.2) + - React-Core/RCTImageHeaders (= 0.68.2) + - React-jsi (= 0.68.2) + - React-RCTNetwork (= 0.68.2) + - ReactCommon/turbomodule/core (= 0.68.2) + - React-RCTLinking (0.68.2): + - React-Codegen (= 0.68.2) + - React-Core/RCTLinkingHeaders (= 0.68.2) + - React-jsi (= 0.68.2) + - ReactCommon/turbomodule/core (= 0.68.2) + - React-RCTNetwork (0.68.2): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.66.4) - - React-Core/RCTNetworkHeaders (= 0.66.4) - - React-jsi (= 0.66.4) - - ReactCommon/turbomodule/core (= 0.66.4) - - React-RCTSettings (0.66.4): - - FBReactNativeSpec (= 0.66.4) + - RCTTypeSafety (= 0.68.2) + - React-Codegen (= 0.68.2) + - React-Core/RCTNetworkHeaders (= 0.68.2) + - React-jsi (= 0.68.2) + - ReactCommon/turbomodule/core (= 0.68.2) + - React-RCTSettings (0.68.2): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.66.4) - - React-Core/RCTSettingsHeaders (= 0.66.4) - - React-jsi (= 0.66.4) - - ReactCommon/turbomodule/core (= 0.66.4) - - React-RCTText (0.66.4): - - React-Core/RCTTextHeaders (= 0.66.4) - - React-RCTVibration (0.66.4): - - FBReactNativeSpec (= 0.66.4) + - RCTTypeSafety (= 0.68.2) + - React-Codegen (= 0.68.2) + - React-Core/RCTSettingsHeaders (= 0.68.2) + - React-jsi (= 0.68.2) + - ReactCommon/turbomodule/core (= 0.68.2) + - React-RCTText (0.68.2): + - React-Core/RCTTextHeaders (= 0.68.2) + - React-RCTVibration (0.68.2): - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/RCTVibrationHeaders (= 0.66.4) - - React-jsi (= 0.66.4) - - ReactCommon/turbomodule/core (= 0.66.4) - - React-runtimeexecutor (0.66.4): - - React-jsi (= 0.66.4) - - ReactCommon/turbomodule/core (0.66.4): + - React-Codegen (= 0.68.2) + - React-Core/RCTVibrationHeaders (= 0.68.2) + - React-jsi (= 0.68.2) + - ReactCommon/turbomodule/core (= 0.68.2) + - React-runtimeexecutor (0.68.2): + - React-jsi (= 0.68.2) + - ReactCommon/turbomodule/core (0.68.2): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.66.4) - - React-Core (= 0.66.4) - - React-cxxreact (= 0.66.4) - - React-jsi (= 0.66.4) - - React-logger (= 0.66.4) - - React-perflogger (= 0.66.4) - - ReactTestApp-DevSupport (1.1.2): + - React-callinvoker (= 0.68.2) + - React-Core (= 0.68.2) + - React-cxxreact (= 0.68.2) + - React-jsi (= 0.68.2) + - React-logger (= 0.68.2) + - React-perflogger (= 0.68.2) + - ReactTestApp-DevSupport (1.3.8): - React-Core - React-jsi - ReactTestApp-Resources (1.0.0-dev) @@ -294,6 +303,7 @@ DEPENDENCIES: - RCTTypeSafety (from `../../node_modules/react-native/Libraries/TypeSafety`) - React (from `../../node_modules/react-native/`) - React-callinvoker (from `../../node_modules/react-native/ReactCommon/callinvoker`) + - React-Codegen (from `build/generated/ios`) - React-Core (from `../../node_modules/react-native/`) - React-Core/DevSupport (from `../../node_modules/react-native/`) - React-Core/RCTWebSocket (from `../../node_modules/react-native/`) @@ -347,6 +357,8 @@ EXTERNAL SOURCES: :path: "../../node_modules/react-native/" React-callinvoker: :path: "../../node_modules/react-native/ReactCommon/callinvoker" + React-Codegen: + :path: build/generated/ios React-Core: :path: "../../node_modules/react-native/" React-CoreModules: @@ -397,40 +409,41 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: a7c83b31436843459a1961bfd74b96033dc77234 DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 - FBLazyVector: e5569e42a1c79ca00521846c223173a57aca1fe1 - FBReactNativeSpec: fe08c1cd7e2e205718d77ad14b34957cce949b58 + FBLazyVector: a7a655862f6b09625d11c772296b01cd5164b648 + FBReactNativeSpec: 88f95b9c87f17bcfdddff9e41263526740029f50 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 - glog: 5337263514dd6f09803962437687240c5dc39aa4 - RCT-Folly: a21c126816d8025b547704b777a2ba552f3d9fa9 - RCTRequired: 4bf86c70714490bca4bf2696148638284622644b - RCTTypeSafety: c475a7059eb77935fa53d2c17db299893f057d5d - React: f64af14e3f2c50f6f2c91a5fd250e4ff1b3c3459 - React-callinvoker: b74e4ae80287780dcdf0cab262bcb581eeef56e7 - React-Core: 3eb7432bad96ff1d25aebc1defbae013fee2fd0e - React-CoreModules: ad9e1fd5650e16666c57a08328df86fd7e480cb9 - React-cxxreact: 02633ff398cf7e91a2c1e12590d323c4a4b8668a - React-jsi: 805c41a927d6499fb811772acb971467d9204633 - React-jsiexecutor: 94ce921e1d8ce7023366873ec371f3441383b396 - React-jsinspector: d0374f7509d407d2264168b6d0fad0b54e300b85 - React-logger: 933f80c97c633ee8965d609876848148e3fef438 - react-native-webview: 380c1a03ec94b7ed764dac8db1e7c9952d08c93a - React-perflogger: 93075d8931c32cd1fce8a98c15d2d5ccc4d891bd - React-RCTActionSheet: 7d3041e6761b4f3044a37079ddcb156575fb6d89 - React-RCTAnimation: 743e88b55ac62511ae5c2e22803d4f503f2a3a13 - React-RCTBlob: bee3a2f98fa7fc25c957c8643494244f74bea0a0 - React-RCTImage: 19fc9e29b06cc38611c553494f8d3040bf78c24e - React-RCTLinking: dc799503979c8c711126d66328e7ce8f25c2848f - React-RCTNetwork: 417e4e34cf3c19eaa5fd4e9eb20180d662a799ce - React-RCTSettings: 4df89417265af26501a7e0e9192a34d3d9848dff - React-RCTText: f8a21c3499ab322326290fa9b701ae29aa093aa5 - React-RCTVibration: e3ffca672dd3772536cb844274094b0e2c31b187 - React-runtimeexecutor: dec32ee6f2e2a26e13e58152271535fadff5455a - ReactCommon: 57b69f6383eafcbd7da625bfa6003810332313c4 - ReactTestApp-DevSupport: d838d01f9bd91eacfd5822cc78007429a7b72b38 + glog: 476ee3e89abb49e07f822b48323c51c57124b572 + RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8 + RCTRequired: 3e917ea5377751094f38145fdece525aa90545a0 + RCTTypeSafety: c43c072a4bd60feb49a9570b0517892b4305c45e + React: 176dd882de001854ced260fad41bb68a31aa4bd0 + React-callinvoker: c2864d1818d6e64928d2faf774a3800dfc38fe1f + React-Codegen: 98b6f97f0a7abf7d67e4ce435c77c05b7a95cf05 + React-Core: fdaa2916b1c893f39f02cff0476d1fb0cab1e352 + React-CoreModules: fd8705b80699ec36c2cdd635c2ce9d874b9cfdfc + React-cxxreact: 1832d971f7b0cb2c7b943dc0ec962762c90c906e + React-jsi: 72af715135abe8c3f0dcf3b2548b71d048b69a7e + React-jsiexecutor: b7b553412f2ec768fe6c8f27cd6bafdb9d8719e6 + React-jsinspector: c5989c77cb89ae6a69561095a61cce56a44ae8e8 + React-logger: a0833912d93b36b791b7a521672d8ee89107aff1 + react-native-webview: 1e7013e1f3e4e48255efcaadbca557b729c878d9 + React-perflogger: a18b4f0bd933b8b24ecf9f3c54f9bf65180f3fe6 + React-RCTActionSheet: 547fe42fdb4b6089598d79f8e1d855d7c23e2162 + React-RCTAnimation: bc9440a1c37b06ae9ebbb532d244f607805c6034 + React-RCTBlob: a1295c8e183756d7ef30ba6e8f8144dfe8a19215 + React-RCTImage: a30d1ee09b1334067fbb6f30789aae2d7ac150c9 + React-RCTLinking: ffc6d5b88d1cb9aca13c54c2ec6507fbf07f2ac4 + React-RCTNetwork: f807a2facab6cf5cf36d592e634611de9cf12d81 + React-RCTSettings: 861806819226ed8332e6a8f90df2951a34bb3e7f + React-RCTText: f3fb464cc41a50fc7a1aba4deeb76a9ad8282cb9 + React-RCTVibration: 79040b92bfa9c3c2d2cb4f57e981164ec7ab9374 + React-runtimeexecutor: b960b687d2dfef0d3761fbb187e01812ebab8b23 + ReactCommon: 095366164a276d91ea704ce53cb03825c487a3f2 + ReactTestApp-DevSupport: 1075d13c9f78457e4e7365dffb30f131e5b16a5b ReactTestApp-Resources: 74a1cf509f4e7962b16361ea4e73cba3648fff5d SwiftLint: 6bc52a21f0fd44cab9aa2dc8e534fb9f5e3ec507 - Yoga: e7dc4e71caba6472ff48ad7d234389b91dadc280 + Yoga: 99652481fcd320aefa4a7ef90095b95acd181952 PODFILE CHECKSUM: 8344c021910ed9b6a9bb9985ff8f7f05a68b19c1 -COCOAPODS: 1.11.2 +COCOAPODS: 1.11.3 diff --git a/example/windows/ExperimentalFeatures.props b/example/windows/ExperimentalFeatures.props new file mode 100644 index 0000000000..23bfb0bc61 --- /dev/null +++ b/example/windows/ExperimentalFeatures.props @@ -0,0 +1,38 @@ + + + + + + + + false + + + false + + + false + 2.8.0-prerelease.210927001 + + + diff --git a/package.json b/package.json index b0c73c9e7d..cbe060dc5e 100644 --- a/package.json +++ b/package.json @@ -40,14 +40,11 @@ "devDependencies": { "@babel/core": "^7.0.0", "@babel/runtime": "^7.0.0", - "@react-native-community/cli": "^6.0.0", - "@react-native-community/cli-platform-android": "^6.0.0", - "@react-native-community/cli-platform-ios": "^6.0.0", "@semantic-release/git": "7.0.16", "@types/invariant": "^2.2.30", "@types/jest": "^26.0.0", "@types/react": "^17.0.0", - "@types/react-native": "^0.64.0", + "@types/react-native": "^0.67.3", "@types/selenium-webdriver": "4.0.9", "@typescript-eslint/eslint-plugin": "2.1.0", "@typescript-eslint/parser": "2.1.0", @@ -58,14 +55,15 @@ "eslint-plugin-import": "2.18.2", "eslint-plugin-jsx-a11y": "6.2.3", "eslint-plugin-react": "7.14.3", + "eslint-plugin-react-hooks": "^4.5.0", "eslint-plugin-react-native": "3.7.0", "jest": "^26.6.3", - "metro-react-native-babel-preset": "^0.66.2", + "metro-react-native-babel-preset": "^0.67.0", "react": "17.0.2", - "react-native": "^0.66.0-0", - "react-native-macos": "^0.66.0-0", - "react-native-test-app": "^1.3.2", - "react-native-windows": "^0.66.0-0", + "react-native": "0.68.2", + "react-native-macos": "0.66.57", + "react-native-test-app": "1.3.8", + "react-native-windows": "0.68.4", "selenium-appium": "1.0.2", "selenium-webdriver": "4.0.0-alpha.7", "semantic-release": "15.13.24", diff --git a/src/WebView.android.tsx b/src/WebView.android.tsx index 2495a5ca2b..e5a82c51c0 100644 --- a/src/WebView.android.tsx +++ b/src/WebView.android.tsx @@ -1,41 +1,37 @@ -import React from 'react'; +import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react'; import { Image, - UIManager as NotTypedUIManager, View, NativeModules, ImageSourcePropType, - findNodeHandle, } from 'react-native'; import BatchedBridge from 'react-native/Libraries/BatchedBridge/BatchedBridge'; +// @ts-expect-error react-native doesn't have this type +import codegenNativeCommandsUntyped from 'react-native/Libraries/Utilities/codegenNativeCommands'; import invariant from 'invariant'; import RNCWebView from "./WebViewNativeComponent.android"; import { defaultOriginWhitelist, - createOnShouldStartLoadWithRequest, defaultRenderError, defaultRenderLoading, + useWebWiewLogic, } from './WebViewShared'; import { - WebViewRenderProcessGoneEvent, - WebViewErrorEvent, - WebViewHttpErrorEvent, - WebViewMessageEvent, - WebViewNavigationEvent, - WebViewProgressEvent, AndroidWebViewProps, NativeWebViewAndroid, - State, - RNCWebViewUIManagerAndroid, } from './WebViewTypes'; import styles from './WebView.styles'; -const UIManager = NotTypedUIManager as RNCWebViewUIManagerAndroid; +const codegenNativeCommands = codegenNativeCommandsUntyped as (options: { supportedCommands: (keyof T)[] }) => T; + +const Commands = codegenNativeCommands({ + supportedCommands: ['goBack', 'goForward', 'reload', 'stopLoading', 'injectJavaScript', 'requestFocus', 'postMessage', 'clearFormData', 'clearCache', 'clearHistory', 'loadUrl'], +}); const { resolveAssetSource } = Image; @@ -44,344 +40,175 @@ const { resolveAssetSource } = Image; */ let uniqueRef = 0; -/** - * Renders a native WebView. - */ -class WebView extends React.Component { - static defaultProps = { - overScrollMode: 'always', - javaScriptEnabled: true, - thirdPartyCookiesEnabled: true, - scalesPageToFit: true, - allowsFullscreenVideo: false, - allowFileAccess: false, - saveFormDataDisabled: false, - cacheEnabled: true, - androidHardwareAccelerationDisabled: false, - androidLayerType: 'none', - originWhitelist: defaultOriginWhitelist, - setSupportMultipleWindows: true, - setBuiltInZoomControls: true, - setDisplayZoomControls: false, - nestedScrollEnabled: false, - }; - - static isFileUploadSupported = async () => { - // native implementation should return "true" only for Android 5+ - return NativeModules.RNCWebView.isFileUploadSupported(); - }; - - startUrl: string | null = null; - - state: State = { - viewState: this.props.startInLoadingState ? 'LOADING' : 'IDLE', - lastErrorEvent: null, - }; - - onShouldStartLoadWithRequest: ReturnType | null = null; - - webViewRef = React.createRef(); - - messagingModuleName = `WebViewMessageHandler${uniqueRef+=1}`; - - componentDidMount = () => { - BatchedBridge.registerCallableModule(this.messagingModuleName, this); - }; - - getCommands = () => UIManager.getViewManagerConfig('RNCWebView').Commands; - - goForward = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().goForward, - undefined - ); - }; - - goBack = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().goBack, - undefined - ); - }; - - reload = () => { - this.setState({ - viewState: 'LOADING', - }); - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().reload, - undefined - ); - }; - - stopLoading = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().stopLoading, - undefined - ); - }; - - requestFocus = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().requestFocus, - undefined - ); - }; - - postMessage = (data: string) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().postMessage, - [String(data)], - ); - }; - - clearFormData = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().clearFormData, - undefined, - ); - } - - clearCache = (includeDiskFiles: boolean) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().clearCache, - [includeDiskFiles], - ); - }; - - clearHistory = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().clearHistory, - undefined, - ); - }; - - /** - * Injects a javascript string into the referenced WebView. Deliberately does not - * return a response because using eval() to return a response breaks this method - * on pages with a Content Security Policy that disallows eval(). If you need that - * functionality, look into postMessage/onMessage. - */ - injectJavaScript = (data: string) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().injectJavaScript, - [data], - ); - }; - - /** - * We return an event with a bunch of fields including: - * url, title, loading, canGoBack, canGoForward - */ - updateNavigationState = (event: WebViewNavigationEvent) => { - if (this.props.onNavigationStateChange) { - this.props.onNavigationStateChange(event.nativeEvent); - } - }; - - /** - * Returns the native `WebView` node. - */ - getWebViewHandle = () => { - const nodeHandle = findNodeHandle(this.webViewRef.current); - invariant(nodeHandle != null, 'nodeHandle expected to be non-null'); - return nodeHandle as number; - }; - - onLoadingStart = (event: WebViewNavigationEvent) => { - const { onLoadStart } = this.props; - const { nativeEvent: { url } } = event; - this.startUrl = url; - if (onLoadStart) { - onLoadStart(event); - } - this.updateNavigationState(event); - }; - - onLoadingError = (event: WebViewErrorEvent) => { - event.persist(); // persist this event because we need to store it - const { onError, onLoadEnd } = this.props; - if (onError) { - onError(event); - } else { - console.warn('Encountered an error loading page', event.nativeEvent); - } - - if (onLoadEnd) { - onLoadEnd(event); - } - if (event.isDefaultPrevented()) return; - - this.setState({ - lastErrorEvent: event.nativeEvent, - viewState: 'ERROR', - }); - }; - - onHttpError = (event: WebViewHttpErrorEvent) => { - const { onHttpError } = this.props; - if (onHttpError) { - onHttpError(event); - } - } - - onRenderProcessGone = (event: WebViewRenderProcessGoneEvent) => { - const { onRenderProcessGone } = this.props; - if (onRenderProcessGone) { - onRenderProcessGone(event); - } - } - - onLoadingFinish = (event: WebViewNavigationEvent) => { - const { onLoad, onLoadEnd } = this.props; - const { nativeEvent: { url } } = event; - if (onLoad) { - onLoad(event); - } - if (onLoadEnd) { - onLoadEnd(event); - } - if (url === this.startUrl) { - this.setState({ - viewState: 'IDLE', - }); - } - this.updateNavigationState(event); - }; - - onMessage = (event: WebViewMessageEvent) => { - const { onMessage } = this.props; - if (onMessage) { - onMessage(event); - } - }; - - onLoadingProgress = (event: WebViewProgressEvent) => { - const { onLoadProgress } = this.props; - const { nativeEvent: { progress } } = event; - if (progress === 1) { - this.setState((state) => { - if (state.viewState === 'LOADING') { - return { viewState: 'IDLE' }; - } - return null; - }); - } - if (onLoadProgress) { - onLoadProgress(event); - } - }; - - onShouldStartLoadWithRequestCallback = ( - shouldStart: boolean, +const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({ + overScrollMode = 'always', + javaScriptEnabled = true, + thirdPartyCookiesEnabled = true, + scalesPageToFit = true, + allowsFullscreenVideo = false, + allowFileAccess = false, + saveFormDataDisabled = false, + cacheEnabled = true, + androidHardwareAccelerationDisabled = false, + androidLayerType = "none", + originWhitelist = defaultOriginWhitelist, + setSupportMultipleWindows = true, + setBuiltInZoomControls = true, + setDisplayZoomControls = false, + nestedScrollEnabled = false, + startInLoadingState, + onNavigationStateChange, + onLoadStart, + onError, + onLoad, + onLoadEnd, + onLoadProgress, + onHttpError: onHttpErrorProp, + onRenderProcessGone: onRenderProcessGoneProp, + onMessage: onMessageProp, + renderLoading, + renderError, + style, + containerStyle, + source, + nativeConfig, + onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp, + ...otherProps +}, ref) => { + const messagingModuleName = useRef(`WebViewMessageHandler${uniqueRef += 1}`).current; + const webViewRef = useRef(null); + + const onShouldStartLoadWithRequestCallback = useCallback((shouldStart: boolean, url: string, - lockIdentifier?: number, - ) => { + lockIdentifier?: number) => { if (lockIdentifier) { NativeModules.RNCWebView.onShouldStartLoadWithRequestCallback(shouldStart, lockIdentifier); } else if (shouldStart) { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().loadUrl, - [String(url)], - ); + Commands.loadUrl(webViewRef, url); } - }; - - render() { - const { - onMessage, - onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp, - originWhitelist, - renderError, - renderLoading, - source, - style, - containerStyle, - nativeConfig = {}, - ...otherProps - } = this.props; + }, []); + + const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onRenderProcessGone } = useWebWiewLogic({ + onNavigationStateChange, + onLoad, + onError, + onHttpErrorProp, + onLoadEnd, + onLoadProgress, + onLoadStart, + onRenderProcessGoneProp, + onMessageProp, + startInLoadingState, + originWhitelist, + onShouldStartLoadWithRequestProp, + onShouldStartLoadWithRequestCallback, + }) + + useImperativeHandle(ref, () => ({ + goForward: () => Commands.goForward(webViewRef.current), + goBack: () => Commands.goBack(webViewRef.current), + reload: () => { + setViewState( + 'LOADING', + ); Commands.reload(webViewRef.current) + }, + stopLoading: () => Commands.stopLoading(webViewRef.current), + postMessage: (data: string) => Commands.postMessage(webViewRef.current, data), + injectJavaScript: (data: string) => Commands.injectJavaScript(webViewRef.current, data), + requestFocus: () => Commands.requestFocus(webViewRef.current), + clearFormData: () => Commands.clearFormData(webViewRef.current), + clearCache: (includeDiskFiles: boolean) => Commands.clearCache(webViewRef.current, includeDiskFiles), + clearHistory: () => Commands.clearHistory(webViewRef.current), + }), [setViewState, webViewRef]); + + const directEventCallbacks = useMemo(() => ({ + onShouldStartLoadWithRequest, + onMessage, + }), [onMessage, onShouldStartLoadWithRequest]); + + useEffect(() => { + BatchedBridge.registerCallableModule(messagingModuleName, directEventCallbacks); + }, [messagingModuleName, directEventCallbacks]) + + let otherView = null; + if (viewState === 'LOADING') { + otherView = (renderLoading || defaultRenderLoading)(); + } else if (viewState === 'ERROR') { + invariant(lastErrorEvent != null, 'lastErrorEvent expected to be non-null'); + otherView = (renderError || defaultRenderError)( + lastErrorEvent.domain, + lastErrorEvent.code, + lastErrorEvent.description, + ); + } else if (viewState !== 'IDLE') { + console.error(`RNCWebView invalid state encountered: ${viewState}`); + } - let otherView = null; + const webViewStyles = [styles.container, styles.webView, style]; + const webViewContainerStyle = [styles.container, containerStyle]; - if (this.state.viewState === 'LOADING') { - otherView = (renderLoading || defaultRenderLoading)(); - } else if (this.state.viewState === 'ERROR') { - const errorEvent = this.state.lastErrorEvent; - invariant(errorEvent != null, 'lastErrorEvent expected to be non-null'); - otherView = (renderError || defaultRenderError)( - errorEvent.domain, - errorEvent.code, - errorEvent.description, + if (typeof source !== "number" && source && 'method' in source) { + if (source.method === 'POST' && source.headers) { + console.warn( + 'WebView: `source.headers` is not supported when using POST.', ); - } else if (this.state.viewState !== 'IDLE') { - console.error( - `RNCWebView invalid state encountered: ${this.state.viewState}`, - ); - } - - const webViewStyles = [styles.container, styles.webView, style]; - const webViewContainerStyle = [styles.container, containerStyle]; - - if (typeof source !== "number" && source && 'method' in source) { - if (source.method === 'POST' && source.headers) { - console.warn( - 'WebView: `source.headers` is not supported when using POST.', - ); - } else if (source.method === 'GET' && source.body) { - console.warn('WebView: `source.body` is not supported when using GET.'); - } + } else if (source.method === 'GET' && source.body) { + console.warn('WebView: `source.body` is not supported when using GET.'); } + } - const NativeWebView - = (nativeConfig.component as typeof NativeWebViewAndroid) || RNCWebView; - - this.onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest( - this.onShouldStartLoadWithRequestCallback, - // casting cause it's in the default props - originWhitelist as readonly string[], - onShouldStartLoadWithRequestProp, - ); - - const webView = ( - - ); - return ( - - {webView} - {otherView} - - ); - } -} + const NativeWebView + = (nativeConfig?.component as (typeof NativeWebViewAndroid | undefined)) || RNCWebView; + + const webView = + + return ( + + {webView} + {otherView} + + ); +}); + +// native implementation should return "true" only for Android 5+ +const isFileUploadSupported: () => Promise + = NativeModules.RNCWebView.isFileUploadSupported(); + +const WebView = Object.assign(WebViewComponent, {isFileUploadSupported}); export default WebView; diff --git a/src/WebView.ios.tsx b/src/WebView.ios.tsx index 9525520130..acae79c537 100644 --- a/src/WebView.ios.tsx +++ b/src/WebView.ios.tsx @@ -1,39 +1,36 @@ -import React from 'react'; +import React, { forwardRef, useCallback, useImperativeHandle, useRef } from 'react'; import { - UIManager as NotTypedUIManager, + Image, View, NativeModules, - Image, - findNodeHandle, ImageSourcePropType, } from 'react-native'; import invariant from 'invariant'; +// @ts-expect-error react-native doesn't have this type +import codegenNativeCommandsUntyped from 'react-native/Libraries/Utilities/codegenNativeCommands'; import RNCWebView from "./WebViewNativeComponent.ios"; import { defaultOriginWhitelist, - createOnShouldStartLoadWithRequest, defaultRenderError, defaultRenderLoading, + useWebWiewLogic, } from './WebViewShared'; import { - WebViewErrorEvent, - WebViewHttpErrorEvent, - WebViewMessageEvent, - WebViewNavigationEvent, - WebViewProgressEvent, - WebViewTerminatedEvent, IOSWebViewProps, DecelerationRateConstant, NativeWebViewIOS, ViewManager, - State, - RNCWebViewUIManagerIOS, } from './WebViewTypes'; import styles from './WebView.styles'; -const UIManager = NotTypedUIManager as RNCWebViewUIManagerIOS; + +const codegenNativeCommands = codegenNativeCommandsUntyped as (options: { supportedCommands: (keyof T)[] }) => T; + +const Commands = codegenNativeCommands({ + supportedCommands: ['goBack', 'goForward', 'reload', 'stopLoading', 'injectJavaScript', 'requestFocus', 'postMessage', 'loadUrl'], +}); const { resolveAssetSource } = Image; const processDecelerationRate = ( @@ -50,324 +47,164 @@ const processDecelerationRate = ( const RNCWebViewManager = NativeModules.RNCWebViewManager as ViewManager; -class WebView extends React.Component { - static defaultProps = { - javaScriptEnabled: true, - cacheEnabled: true, - originWhitelist: defaultOriginWhitelist, - useSharedProcessPool: true, - textInteractionEnabled: true, - }; - - static isFileUploadSupported = async () => { - // no native implementation for iOS, depends only on permissions - return true; - }; - - state: State = { - viewState: this.props.startInLoadingState ? 'LOADING' : 'IDLE', - lastErrorEvent: null, - }; - - webViewRef = React.createRef(); - - // eslint-disable-next-line react/sort-comp - getCommands = () => UIManager.getViewManagerConfig('RNCWebView').Commands; - - /** - * Go forward one page in the web view's history. - */ - goForward = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().goForward, - undefined, - ); - }; - - /** - * Go back one page in the web view's history. - */ - goBack = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().goBack, - undefined, - ); - }; - - /** - * Reloads the current page. - */ - reload = () => { - this.setState({ viewState: 'LOADING' }); - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().reload, - undefined, - ); - }; - - /** - * Stop loading the current page. - */ - stopLoading = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().stopLoading, - undefined, - ); - }; - - /** - * Request focus on WebView rendered page. - */ - requestFocus = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().requestFocus, - undefined, - ); - }; - - /** - * Posts a message to the web view, which will emit a `message` event. - * Accepts one argument, `data`, which must be a string. - * - * In your webview, you'll need to something like the following. - * - * ```js - * document.addEventListener('message', e => { document.title = e.data; }); - * ``` - */ - postMessage = (data: string) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().postMessage, - [String(data)], - ); - }; - - /** - * Injects a javascript string into the referenced WebView. Deliberately does not - * return a response because using eval() to return a response breaks this method - * on pages with a Content Security Policy that disallows eval(). If you need that - * functionality, look into postMessage/onMessage. - */ - injectJavaScript = (data: string) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().injectJavaScript, - [data], - ); - }; - - /** - * We return an event with a bunch of fields including: - * url, title, loading, canGoBack, canGoForward - */ - updateNavigationState = (event: WebViewNavigationEvent) => { - if (this.props.onNavigationStateChange) { - this.props.onNavigationStateChange(event.nativeEvent); - } - }; - - /** - * Returns the native `WebView` node. - */ - getWebViewHandle = () => { - const nodeHandle = findNodeHandle(this.webViewRef.current); - invariant(nodeHandle != null, 'nodeHandle expected to be non-null'); - return nodeHandle as number; - }; - - onLoadingStart = (event: WebViewNavigationEvent) => { - const { onLoadStart } = this.props; - if (onLoadStart) { - onLoadStart(event); - } - this.updateNavigationState(event); - }; - - onLoadingError = (event: WebViewErrorEvent) => { - event.persist(); // persist this event because we need to store it - const { onError, onLoadEnd } = this.props; - - if (onError) { - onError(event); - } else { - console.warn('Encountered an error loading page', event.nativeEvent); - } - - if (onLoadEnd) { - onLoadEnd(event); - } - if (event.isDefaultPrevented()) return; - - this.setState({ - lastErrorEvent: event.nativeEvent, - viewState: 'ERROR', - }); - }; - - onHttpError = (event: WebViewHttpErrorEvent) => { - const { onHttpError } = this.props; - if (onHttpError) { - onHttpError(event); - } +const useWarnIfChanges = (value: T, name: string) => { + const ref = useRef(value); + if (ref.current !== value) { + console.warn(`Changes to property ${name} do nothing after the initial render.`); + ref.current = value; } +} - onLoadingFinish = (event: WebViewNavigationEvent) => { - const { onLoad, onLoadEnd } = this.props; - if (onLoad) { - onLoad(event); - } - if (onLoadEnd) { - onLoadEnd(event); - } - this.setState({ - viewState: 'IDLE', - }); - this.updateNavigationState(event); - }; - - onMessage = (event: WebViewMessageEvent) => { - const { onMessage } = this.props; - if (onMessage) { - onMessage(event); - } - }; - - onLoadingProgress = (event: WebViewProgressEvent) => { - const { onLoadProgress } = this.props; - if (onLoadProgress) { - onLoadProgress(event); - } - }; - - onShouldStartLoadWithRequestCallback = ( +const WebViewComponent = forwardRef<{}, IOSWebViewProps>(({ + javaScriptEnabled = true, + cacheEnabled = true, + originWhitelist = defaultOriginWhitelist, + useSharedProcessPool= true, + textInteractionEnabled= true, + injectedJavaScript, + injectedJavaScriptBeforeContentLoaded, + injectedJavaScriptForMainFrameOnly = true, + injectedJavaScriptBeforeContentLoadedForMainFrameOnly = true, + startInLoadingState, + onNavigationStateChange, + onLoadStart, + onError, + onLoad, + onLoadEnd, + onLoadProgress, + onFileDownload, + onHttpError: onHttpErrorProp, + onMessage: onMessageProp, + renderLoading, + renderError, + style, + containerStyle, + source, + nativeConfig, + allowsInlineMediaPlayback, + allowsAirPlayForMediaPlayback, + mediaPlaybackRequiresUserAction, + dataDetectorTypes, + incognito, + decelerationRate: decelerationRateProp, + onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp, + ...otherProps +}, ref) => { + const webViewRef = useRef(null); + + const onShouldStartLoadWithRequestCallback = useCallback(( shouldStart: boolean, _url: string, - lockIdentifier: number, + lockIdentifier = 0, ) => { const viewManager - = (this.props.nativeConfig && this.props.nativeConfig.viewManager) + = (nativeConfig?.viewManager) || RNCWebViewManager; viewManager.startLoadWithResult(!!shouldStart, lockIdentifier); - }; - - onContentProcessDidTerminate = (event: WebViewTerminatedEvent) => { - const { onContentProcessDidTerminate } = this.props; - if (onContentProcessDidTerminate) { - onContentProcessDidTerminate(event); - } - }; - - componentDidUpdate(prevProps: IOSWebViewProps) { - this.showRedboxOnPropChanges(prevProps, 'allowsInlineMediaPlayback'); - this.showRedboxOnPropChanges(prevProps, 'allowsAirPlayForMediaPlayback'); - this.showRedboxOnPropChanges(prevProps, 'incognito'); - this.showRedboxOnPropChanges(prevProps, 'mediaPlaybackRequiresUserAction'); - this.showRedboxOnPropChanges(prevProps, 'dataDetectorTypes'); - } - - showRedboxOnPropChanges( - prevProps: IOSWebViewProps, - propName: keyof IOSWebViewProps, - ) { - if (this.props[propName] !== prevProps[propName]) { - console.error( - `Changes to property ${propName} do nothing after the initial render.`, - ); - } - } - - render() { - const { - decelerationRate: decelerationRateProp, - nativeConfig = {}, - onMessage, - onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp, - originWhitelist, - renderError, - renderLoading, - injectedJavaScriptForMainFrameOnly = true, - injectedJavaScriptBeforeContentLoadedForMainFrameOnly = true, - style, - containerStyle, - ...otherProps - } = this.props; - - let otherView = null; - - if (this.state.viewState === 'LOADING') { - otherView = (renderLoading || defaultRenderLoading)(); - } else if (this.state.viewState === 'ERROR') { - const errorEvent = this.state.lastErrorEvent; - invariant(errorEvent != null, 'lastErrorEvent expected to be non-null'); - otherView = (renderError || defaultRenderError)( - errorEvent.domain, - errorEvent.code, - errorEvent.description, - ); - } else if (this.state.viewState !== 'IDLE') { - console.error( - `RNCWebView invalid state encountered: ${this.state.viewState}`, - ); - } - - const webViewStyles = [styles.container, styles.webView, style]; - const webViewContainerStyle = [styles.container, containerStyle]; - - const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest( - this.onShouldStartLoadWithRequestCallback, - // casting cause it's in the default props - originWhitelist as readonly string[], - onShouldStartLoadWithRequestProp, - ); - - const decelerationRate = processDecelerationRate(decelerationRateProp); - - const NativeWebView - = (nativeConfig.component as typeof NativeWebViewIOS | undefined) - || RNCWebView; - - const webView = ( - - ); - - return ( - - {webView} - {otherView} - + }, [nativeConfig?.viewManager]); + + const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onContentProcessDidTerminate } = useWebWiewLogic({ + onNavigationStateChange, + onLoad, + onError, + onHttpErrorProp, + onLoadEnd, + onLoadProgress, + onLoadStart, + onMessageProp, + startInLoadingState, + originWhitelist, + onShouldStartLoadWithRequestProp, + onShouldStartLoadWithRequestCallback, + }); + + useImperativeHandle(ref, () => ({ + goForward: () => Commands.goForward(webViewRef.current), + goBack: () => Commands.goBack(webViewRef.current), + reload: () => { + setViewState( + 'LOADING', + ); Commands.reload(webViewRef.current) + }, + stopLoading: () => Commands.stopLoading(webViewRef.current), + postMessage: (data: string) => Commands.postMessage(webViewRef.current, data), + injectJavaScript: (data: string) => Commands.injectJavaScript(webViewRef.current, data), + requestFocus: () => Commands.requestFocus(webViewRef.current), + }), [setViewState, webViewRef]); + + + useWarnIfChanges(allowsInlineMediaPlayback, 'allowsInlineMediaPlayback'); + useWarnIfChanges(allowsAirPlayForMediaPlayback, 'allowsAirPlayForMediaPlayback'); + useWarnIfChanges(incognito, 'incognito'); + useWarnIfChanges(mediaPlaybackRequiresUserAction, 'mediaPlaybackRequiresUserAction'); + useWarnIfChanges(dataDetectorTypes, 'dataDetectorTypes'); + + let otherView = null; + if (viewState === 'LOADING') { + otherView = (renderLoading || defaultRenderLoading)(); + } else if (viewState === 'ERROR') { + invariant(lastErrorEvent != null, 'lastErrorEvent expected to be non-null'); + otherView = (renderError || defaultRenderError)( + lastErrorEvent.domain, + lastErrorEvent.code, + lastErrorEvent.description, ); + } else if (viewState !== 'IDLE') { + console.error(`RNCWebView invalid state encountered: ${viewState}`); } -} -export default WebView; + const webViewStyles = [styles.container, styles.webView, style]; + const webViewContainerStyle = [styles.container, containerStyle]; + + const decelerationRate = processDecelerationRate(decelerationRateProp); + + const NativeWebView + = (nativeConfig?.component as typeof NativeWebViewIOS | undefined) + || RNCWebView; + + const webView = ( + + ); + + return ( + + {webView} + {otherView} + + );}) + +// no native implementation for iOS, depends only on permissions +const isFileUploadSupported: () => Promise + = async () => true; + +const WebView = Object.assign(WebViewComponent, {isFileUploadSupported}); + +export default WebView; \ No newline at end of file diff --git a/src/WebView.macos.tsx b/src/WebView.macos.tsx index e7d0e81eb2..f6a79912a5 100644 --- a/src/WebView.macos.tsx +++ b/src/WebView.macos.tsx @@ -1,348 +1,184 @@ -import React from 'react'; +import React, { forwardRef, useCallback, useImperativeHandle, useRef } from 'react'; import { - UIManager as NotTypedUIManager, + Image, View, NativeModules, - Image, - findNodeHandle, ImageSourcePropType, } from 'react-native'; import invariant from 'invariant'; -import RNCWebView from "./WebViewNativeComponent.ios"; +// @ts-expect-error react-native doesn't have this type +import codegenNativeCommandsUntyped from 'react-native/Libraries/Utilities/codegenNativeCommands'; +import RNCWebView from "./WebViewNativeComponent.macos"; import { defaultOriginWhitelist, - createOnShouldStartLoadWithRequest, defaultRenderError, defaultRenderLoading, + useWebWiewLogic, } from './WebViewShared'; import { - WebViewErrorEvent, - WebViewHttpErrorEvent, - WebViewMessageEvent, - WebViewNavigationEvent, - WebViewProgressEvent, - WebViewTerminatedEvent, MacOSWebViewProps, NativeWebViewMacOS, ViewManager, - State, - RNCWebViewUIManagerMacOS, } from './WebViewTypes'; import styles from './WebView.styles'; -const UIManager = NotTypedUIManager as RNCWebViewUIManagerMacOS; - -const { resolveAssetSource } = Image; - -const RNCWebViewManager = NativeModules.RNCWebViewManager as ViewManager; - -class WebView extends React.Component { - static defaultProps = { - javaScriptEnabled: true, - cacheEnabled: true, - originWhitelist: defaultOriginWhitelist, - useSharedProcessPool: true, - }; - - static isFileUploadSupported = async () => { - // no native implementation for macOS, depends only on permissions - return true; - }; - - state: State = { - viewState: this.props.startInLoadingState ? 'LOADING' : 'IDLE', - lastErrorEvent: null, - }; - - webViewRef = React.createRef(); - - // eslint-disable-next-line react/sort-comp - getCommands = () => UIManager.getViewManagerConfig('RNCWebView').Commands; - - /** - * Go forward one page in the web view's history. - */ - goForward = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().goForward, - undefined, - ); - }; - - /** - * Go back one page in the web view's history. - */ - goBack = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().goBack, - undefined, - ); - }; - - /** - * Reloads the current page. - */ - reload = () => { - this.setState({ viewState: 'LOADING' }); - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().reload, - undefined, - ); - }; - - /** - * Stop loading the current page. - */ - stopLoading = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().stopLoading, - undefined, - ); - }; - - /** - * Request focus on WebView rendered page. - */ - requestFocus = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().requestFocus, - undefined, - ); - }; - - /** - * Posts a message to the web view, which will emit a `message` event. - * Accepts one argument, `data`, which must be a string. - * - * In your webview, you'll need to something like the following. - * - * ```js - * document.addEventListener('message', e => { document.title = e.data; }); - * ``` - */ - postMessage = (data: string) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().postMessage, - [String(data)], - ); - }; - - /** - * Injects a javascript string into the referenced WebView. Deliberately does not - * return a response because using eval() to return a response breaks this method - * on pages with a Content Security Policy that disallows eval(). If you need that - * functionality, look into postMessage/onMessage. - */ - injectJavaScript = (data: string) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - this.getCommands().injectJavaScript, - [data], - ); - }; - - /** - * We return an event with a bunch of fields including: - * url, title, loading, canGoBack, canGoForward - */ - updateNavigationState = (event: WebViewNavigationEvent) => { - if (this.props.onNavigationStateChange) { - this.props.onNavigationStateChange(event.nativeEvent); - } - }; - - /** - * Returns the native `WebView` node. - */ - getWebViewHandle = () => { - const nodeHandle = findNodeHandle(this.webViewRef.current); - invariant(nodeHandle != null, 'nodeHandle expected to be non-null'); - return nodeHandle as number; - }; - onLoadingStart = (event: WebViewNavigationEvent) => { - const { onLoadStart } = this.props; - if (onLoadStart) { - onLoadStart(event); - } - this.updateNavigationState(event); - }; +const codegenNativeCommands = codegenNativeCommandsUntyped as (options: { supportedCommands: (keyof T)[] }) => T; - onLoadingError = (event: WebViewErrorEvent) => { - event.persist(); // persist this event because we need to store it - const { onError, onLoadEnd } = this.props; +const Commands = codegenNativeCommands({ + supportedCommands: ['goBack', 'goForward', 'reload', 'stopLoading', 'injectJavaScript', 'requestFocus', 'postMessage', 'loadUrl'], +}); - if (onError) { - onError(event); - } else { - console.warn('Encountered an error loading page', event.nativeEvent); - } - - if (onLoadEnd) { - onLoadEnd(event); - } - if (event.isDefaultPrevented()) return; +const { resolveAssetSource } = Image; - this.setState({ - lastErrorEvent: event.nativeEvent, - viewState: 'ERROR', - }); - }; +const RNCWebViewManager = NativeModules.RNCWebViewManager as ViewManager; - onHttpError = (event: WebViewHttpErrorEvent) => { - const { onHttpError } = this.props; - if (onHttpError) { - onHttpError(event); - } +const useWarnIfChanges = (value: T, name: string) => { + const ref = useRef(value); + if (ref.current !== value) { + console.warn(`Changes to property ${name} do nothing after the initial render.`); + ref.current = value; } +} - onLoadingFinish = (event: WebViewNavigationEvent) => { - const { onLoad, onLoadEnd } = this.props; - if (onLoad) { - onLoad(event); - } - if (onLoadEnd) { - onLoadEnd(event); - } - this.setState({ - viewState: 'IDLE', - }); - this.updateNavigationState(event); - }; - - onMessage = (event: WebViewMessageEvent) => { - const { onMessage } = this.props; - if (onMessage) { - onMessage(event); - } - }; - - onLoadingProgress = (event: WebViewProgressEvent) => { - const { onLoadProgress } = this.props; - if (onLoadProgress) { - onLoadProgress(event); - } - }; - - onShouldStartLoadWithRequestCallback = ( +const WebViewComponent = forwardRef<{}, MacOSWebViewProps>(({ + javaScriptEnabled = true, + cacheEnabled = true, + originWhitelist = defaultOriginWhitelist, + useSharedProcessPool= true, + injectedJavaScript, + injectedJavaScriptBeforeContentLoaded, + startInLoadingState, + onNavigationStateChange, + onLoadStart, + onError, + onLoad, + onLoadEnd, + onLoadProgress, + onHttpError: onHttpErrorProp, + onMessage: onMessageProp, + renderLoading, + renderError, + style, + containerStyle, + source, + nativeConfig, + allowsInlineMediaPlayback, + allowsAirPlayForMediaPlayback, + mediaPlaybackRequiresUserAction, + incognito, + onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp, + ...otherProps +}, ref) => { + const webViewRef = useRef(null); + + const onShouldStartLoadWithRequestCallback = useCallback(( shouldStart: boolean, _url: string, - lockIdentifier: number, + lockIdentifier = 0, ) => { const viewManager - = (this.props.nativeConfig && this.props.nativeConfig.viewManager) + = (nativeConfig?.viewManager) || RNCWebViewManager; viewManager.startLoadWithResult(!!shouldStart, lockIdentifier); - }; - - onContentProcessDidTerminate = (event: WebViewTerminatedEvent) => { - const { onContentProcessDidTerminate } = this.props; - if (onContentProcessDidTerminate) { - onContentProcessDidTerminate(event); - } - }; - - componentDidUpdate(prevProps: MacOSWebViewProps) { - this.showRedboxOnPropChanges(prevProps, 'allowsInlineMediaPlayback'); - this.showRedboxOnPropChanges(prevProps, 'allowsAirPlayForMediaPlayback'); - this.showRedboxOnPropChanges(prevProps, 'incognito'); - this.showRedboxOnPropChanges(prevProps, 'mediaPlaybackRequiresUserAction'); - } - - showRedboxOnPropChanges( - prevProps: MacOSWebViewProps, - propName: keyof MacOSWebViewProps, - ) { - if (this.props[propName] !== prevProps[propName]) { - console.error( - `Changes to property ${propName} do nothing after the initial render.`, - ); - } - } - - render() { - const { - nativeConfig = {}, - onMessage, - onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp, - originWhitelist, - renderError, - renderLoading, - style, - containerStyle, - ...otherProps - } = this.props; - - let otherView = null; - - if (this.state.viewState === 'LOADING') { - otherView = (renderLoading || defaultRenderLoading)(); - } else if (this.state.viewState === 'ERROR') { - const errorEvent = this.state.lastErrorEvent; - invariant(errorEvent != null, 'lastErrorEvent expected to be non-null'); - otherView = (renderError || defaultRenderError)( - errorEvent.domain, - errorEvent.code, - errorEvent.description, - ); - } else if (this.state.viewState !== 'IDLE') { - console.error( - `RNCWebView invalid state encountered: ${this.state.viewState}`, - ); - } - - const webViewStyles = [styles.container, styles.webView, style]; - const webViewContainerStyle = [styles.container, containerStyle]; - - const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest( - this.onShouldStartLoadWithRequestCallback, - // casting cause it's in the default props - originWhitelist as readonly string[], - onShouldStartLoadWithRequestProp, - ); - - const NativeWebView - = (nativeConfig.component as typeof NativeWebViewMacOS | undefined) - || RNCWebView; - - const webView = ( - - ); - - return ( - - {webView} - {otherView} - + }, [nativeConfig?.viewManager]); + + const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onContentProcessDidTerminate } = useWebWiewLogic({ + onNavigationStateChange, + onLoad, + onError, + onHttpErrorProp, + onLoadEnd, + onLoadProgress, + onLoadStart, + onMessageProp, + startInLoadingState, + originWhitelist, + onShouldStartLoadWithRequestProp, + onShouldStartLoadWithRequestCallback, + }); + + useImperativeHandle(ref, () => ({ + goForward: () => Commands.goForward(webViewRef.current), + goBack: () => Commands.goBack(webViewRef.current), + reload: () => { + setViewState( + 'LOADING', + ); Commands.reload(webViewRef.current) + }, + stopLoading: () => Commands.stopLoading(webViewRef.current), + postMessage: (data: string) => Commands.postMessage(webViewRef.current, data), + injectJavaScript: (data: string) => Commands.injectJavaScript(webViewRef.current, data), + requestFocus: () => Commands.requestFocus(webViewRef.current), + }), [setViewState, webViewRef]); + + + useWarnIfChanges(allowsInlineMediaPlayback, 'allowsInlineMediaPlayback'); + useWarnIfChanges(allowsAirPlayForMediaPlayback, 'allowsAirPlayForMediaPlayback'); + useWarnIfChanges(incognito, 'incognito'); + useWarnIfChanges(mediaPlaybackRequiresUserAction, 'mediaPlaybackRequiresUserAction'); + + let otherView = null; + if (viewState === 'LOADING') { + otherView = (renderLoading || defaultRenderLoading)(); + } else if (viewState === 'ERROR') { + invariant(lastErrorEvent != null, 'lastErrorEvent expected to be non-null'); + otherView = (renderError || defaultRenderError)( + lastErrorEvent.domain, + lastErrorEvent.code, + lastErrorEvent.description, ); + } else if (viewState !== 'IDLE') { + console.error(`RNCWebView invalid state encountered: ${viewState}`); } -} -export default WebView; + const webViewStyles = [styles.container, styles.webView, style]; + const webViewContainerStyle = [styles.container, containerStyle]; + + const NativeWebView + = (nativeConfig?.component as typeof NativeWebViewMacOS | undefined) + || RNCWebView; + + const webView = ( + + ); + + return ( + + {webView} + {otherView} + + );}) + +// no native implementation for macOS, depends only on permissions +const isFileUploadSupported: () => Promise + = async () => true; + +const WebView = Object.assign(WebViewComponent, {isFileUploadSupported}); + +export default WebView; \ No newline at end of file diff --git a/src/WebViewShared.tsx b/src/WebViewShared.tsx index 23e5c091b6..f10476ecde 100644 --- a/src/WebViewShared.tsx +++ b/src/WebViewShared.tsx @@ -1,13 +1,22 @@ import escapeStringRegexp from 'escape-string-regexp'; -import React from 'react'; -import { Linking, View, ActivityIndicator, Text } from 'react-native'; +import React, { useCallback, useMemo, useRef, useState } from 'react'; +import { Linking, View, ActivityIndicator, Text, Platform } from 'react-native'; import { OnShouldStartLoadWithRequest, ShouldStartLoadRequestEvent, + WebViewError, + WebViewErrorEvent, + WebViewHttpErrorEvent, + WebViewMessageEvent, + WebViewNavigation, + WebViewNavigationEvent, + WebViewProgressEvent, + WebViewRenderProcessGoneEvent, + WebViewTerminatedEvent, } from './WebViewTypes'; import styles from './WebView.styles'; -const defaultOriginWhitelist = ['http://*', 'https://*']; +const defaultOriginWhitelist = ['http://*', 'https://*'] as const; const extractOrigin = (url: string): string => { const result = /^[A-Za-z][A-Za-z0-9+\-.]+:(\/\/)?[^/]*/.exec(url); @@ -86,3 +95,131 @@ export { defaultRenderLoading, defaultRenderError, }; + +export const useWebWiewLogic = ({ + startInLoadingState, + onNavigationStateChange, + onLoadStart, + onLoad, + onLoadProgress, + onLoadEnd, + onError, + onHttpErrorProp, + onMessageProp, + onRenderProcessGoneProp, + onContentProcessDidTerminateProp, + originWhitelist, + onShouldStartLoadWithRequestProp, + onShouldStartLoadWithRequestCallback, +}: { + startInLoadingState?: boolean + onNavigationStateChange?: (event: WebViewNavigation) => void; + onLoadStart?: (event: WebViewNavigationEvent) => void; + onLoad?: (event: WebViewNavigationEvent) => void; + onLoadProgress?: (event: WebViewProgressEvent) => void; + onLoadEnd?: (event: WebViewNavigationEvent | WebViewErrorEvent) => void; + onError?: (event: WebViewErrorEvent) => void; + onHttpErrorProp?: (event: WebViewHttpErrorEvent) => void; + onMessageProp?: (event: WebViewMessageEvent) => void; + onRenderProcessGoneProp?: (event: WebViewRenderProcessGoneEvent) => void; + onContentProcessDidTerminateProp?: (event: WebViewTerminatedEvent) => void; + originWhitelist: readonly string[]; + onShouldStartLoadWithRequestProp?: OnShouldStartLoadWithRequest; + onShouldStartLoadWithRequestCallback: (shouldStart: boolean, url: string, lockIdentifier?: number | undefined) => void; +}) => { + + const [viewState, setViewState] = useState<'IDLE' | 'LOADING' | 'ERROR'>(startInLoadingState ? "LOADING" : "IDLE"); + const [lastErrorEvent, setLastErrorEvent] = useState(null); + const startUrl = useRef(null) + + + const updateNavigationState = useCallback((event: WebViewNavigationEvent) => { + onNavigationStateChange?.(event.nativeEvent); + }, [onNavigationStateChange]); + + const onLoadingStart = useCallback((event: WebViewNavigationEvent) => { + // Needed for android + startUrl.current = event.nativeEvent.url; + // !Needed for android + + onLoadStart?.(event); + updateNavigationState(event); + }, [onLoadStart, updateNavigationState]); + + const onLoadingError = useCallback((event: WebViewErrorEvent) => { + event.persist(); + if (onError) { + onError(event); + } else { + console.warn('Encountered an error loading page', event.nativeEvent); + } + onLoadEnd?.(event); + if (event.isDefaultPrevented()) { return }; + setViewState('ERROR'); + setLastErrorEvent(event.nativeEvent); + }, [onError, onLoadEnd]); + + const onHttpError = useCallback((event: WebViewHttpErrorEvent) => { + onHttpErrorProp?.(event); + }, [onHttpErrorProp]); + + // Android Only + const onRenderProcessGone = useCallback((event: WebViewRenderProcessGoneEvent) => { + onRenderProcessGoneProp?.(event); + }, [onRenderProcessGoneProp]); + // !Android Only + + // iOS Only + const onContentProcessDidTerminate = useCallback((event: WebViewTerminatedEvent) => { + onContentProcessDidTerminateProp?.(event); + }, [onContentProcessDidTerminateProp]); + // !iOS Only + + const onLoadingFinish = useCallback((event: WebViewNavigationEvent) => { + onLoad?.(event); + onLoadEnd?.(event); + const { nativeEvent: { url } } = event; + // on Android, only if url === startUrl + if (Platform.OS !== "android" || url === startUrl.current) { + setViewState('IDLE'); + } + // !on Android, only if url === startUrl + updateNavigationState(event); + }, [onLoad, onLoadEnd, updateNavigationState]); + + const onMessage = useCallback((event: WebViewMessageEvent) => { + onMessageProp?.(event); + }, [onMessageProp]); + + const onLoadingProgress = useCallback((event: WebViewProgressEvent) => { + const { nativeEvent: { progress } } = event; + // patch for Android only + if (Platform.OS === "android" && progress === 1) { + setViewState(prevViewState => prevViewState === 'LOADING' ? 'IDLE' : prevViewState); + } + // !patch for Android only + onLoadProgress?.(event); + }, [onLoadProgress]); + + const onShouldStartLoadWithRequest = useMemo(() => createOnShouldStartLoadWithRequest( + onShouldStartLoadWithRequestCallback, + originWhitelist, + onShouldStartLoadWithRequestProp, + ) + , [originWhitelist, onShouldStartLoadWithRequestProp, onShouldStartLoadWithRequestCallback]) + + return { + onShouldStartLoadWithRequest, + onLoadingStart, + onLoadingProgress, + onLoadingError, + onLoadingFinish, + onHttpError, + onRenderProcessGone, + onContentProcessDidTerminate, + onMessage, + viewState, + setViewState, + lastErrorEvent, + } +}; \ No newline at end of file diff --git a/src/WebViewTypes.ts b/src/WebViewTypes.ts index 86cff227f1..2423200e8a 100644 --- a/src/WebViewTypes.ts +++ b/src/WebViewTypes.ts @@ -316,6 +316,7 @@ export interface AndroidNativeWebViewProps extends CommonNativeWebViewProps { allowFileAccess?: boolean; scalesPageToFit?: boolean; allowFileAccessFromFileURLs?: boolean; + allowsFullscreenVideo?: boolean; allowUniversalAccessFromFileURLs?: boolean; androidHardwareAccelerationDisabled?: boolean; androidLayerType?: AndroidLayerType; @@ -374,6 +375,7 @@ export interface IOSNativeWebViewProps extends CommonNativeWebViewProps { decelerationRate?: number; directionalLockEnabled?: boolean; hideKeyboardAccessoryView?: boolean; + javaScriptEnabled?: boolean; pagingEnabled?: boolean; scrollEnabled?: boolean; useSharedProcessPool?: boolean; @@ -400,6 +402,7 @@ export interface MacOSNativeWebViewProps extends CommonNativeWebViewProps { contentInsetAdjustmentBehavior?: ContentInsetAdjustmentBehavior; directionalLockEnabled?: boolean; hideKeyboardAccessoryView?: boolean; + javaScriptEnabled?: boolean; pagingEnabled?: boolean; scrollEnabled?: boolean; useSharedProcessPool?: boolean; diff --git a/yarn.lock b/yarn.lock index 9dcfbac4ed..78ea0d1623 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18,6 +18,56 @@ dependencies: "@jridgewell/trace-mapping" "^0.3.0" +"@azure/abort-controller@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.1.0.tgz#788ee78457a55af8a1ad342acb182383d2119249" + integrity sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw== + dependencies: + tslib "^2.2.0" + +"@azure/core-auth@^1.3.0": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.3.2.tgz#6a2c248576c26df365f6c7881ca04b7f6d08e3d0" + integrity sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA== + dependencies: + "@azure/abort-controller" "^1.0.0" + tslib "^2.2.0" + +"@azure/core-http@^2.2.3": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@azure/core-http/-/core-http-2.2.5.tgz#e8cf8345d4a7f0ee7c8304a300c43d2df992ddbe" + integrity sha512-kctMqSQ6zfnlFpuYzfUKadeTyOQYbIQ+3Rj7dzVC3Dk1dOnHroTwR9hLYKX8/n85iJpkyaksaXpuh5L7GJRYuQ== + dependencies: + "@azure/abort-controller" "^1.0.0" + "@azure/core-auth" "^1.3.0" + "@azure/core-tracing" "1.0.0-preview.13" + "@azure/logger" "^1.0.0" + "@types/node-fetch" "^2.5.0" + "@types/tunnel" "^0.0.3" + form-data "^4.0.0" + node-fetch "^2.6.7" + process "^0.11.10" + tough-cookie "^4.0.0" + tslib "^2.2.0" + tunnel "^0.0.6" + uuid "^8.3.0" + xml2js "^0.4.19" + +"@azure/core-tracing@1.0.0-preview.13": + version "1.0.0-preview.13" + resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644" + integrity sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ== + dependencies: + "@opentelemetry/api" "^1.0.1" + tslib "^2.2.0" + +"@azure/logger@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.0.3.tgz#6e36704aa51be7d4a1bae24731ea580836293c96" + integrity sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g== + dependencies: + tslib "^2.2.0" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" @@ -25,23 +75,23 @@ dependencies: "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.16.4": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" - integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== +"@babel/compat-data@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" + integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== -"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.7.5": - version "7.17.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.4.tgz#a22f1ae8999122873b3d18865e98c7a3936b8c8b" - integrity sha512-R9x5r4t4+hBqZTmioSnkrW+I6NmbojwjGT8p4G2Gw1thWbXIHGDnmGdLdFw0/7ljucdIrNRp7Npgb4CyBYzzJg== +"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.14.0", "@babel/core@^7.7.5": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.8.tgz#3dac27c190ebc3a4381110d46c80e77efe172e1a" + integrity sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.17.2" - "@babel/parser" "^7.17.3" + "@babel/generator" "^7.17.7" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helpers" "^7.17.8" + "@babel/parser" "^7.17.8" "@babel/template" "^7.16.7" "@babel/traverse" "^7.17.3" "@babel/types" "^7.17.0" @@ -51,10 +101,10 @@ json5 "^2.1.2" semver "^6.3.0" -"@babel/generator@^7.14.0", "@babel/generator@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200" - integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg== +"@babel/generator@^7.14.0", "@babel/generator@^7.17.3", "@babel/generator@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" + integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== dependencies: "@babel/types" "^7.17.0" jsesc "^2.5.1" @@ -92,12 +142,12 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-compilation-targets@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== +"@babel/helper-compilation-targets@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" + integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== dependencies: - "@babel/compat-data" "^7.16.4" + "@babel/compat-data" "^7.17.7" "@babel/helper-validator-option" "^7.16.7" browserslist "^4.17.5" semver "^6.3.0" @@ -184,19 +234,19 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" - integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== +"@babel/helper-module-transforms@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" + integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== dependencies: "@babel/helper-environment-visitor" "^7.16.7" "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" "@babel/helper-split-export-declaration" "^7.16.7" "@babel/helper-validator-identifier" "^7.16.7" "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" "@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" @@ -237,12 +287,12 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== +"@babel/helper-simple-access@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" + integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.17.0" "@babel/helper-skip-transparent-expression-wrappers@^7.11.0", "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" @@ -278,13 +328,13 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helpers@^7.17.2": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" - integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== +"@babel/helpers@^7.17.8": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.8.tgz#288450be8c6ac7e4e44df37bcc53d345e07bc106" + integrity sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw== dependencies: "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.0" + "@babel/traverse" "^7.17.3" "@babel/types" "^7.17.0" "@babel/highlight@^7.16.7": @@ -296,12 +346,12 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" - integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== +"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.13.16", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.8": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" + integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== -"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.1.0": +"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.13.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== @@ -317,7 +367,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-export-default-from" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== @@ -342,7 +392,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.1.0": +"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.1.0", "@babel/plugin-proposal-optional-chaining@^7.13.12": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== @@ -573,14 +623,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.1.0": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" - integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.13.8": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz#d86b217c8e45bb5f2dbc11eefc8eab62cf980d19" + integrity sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA== dependencies: - "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.7" "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-object-assign@^7.0.0": @@ -719,7 +769,7 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-flow@^7.0.0": +"@babel/preset-flow@^7.0.0", "@babel/preset-flow@^7.13.13": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.16.7.tgz#7fd831323ab25eeba6e4b77a589f680e30581cbd" integrity sha512-6ceP7IyZdUYQ3wUVqyRSQXztd1YmFHWI4Xv11MIqAlE4WqxBSd/FZ61V9k+TS5Gd4mkHOtQtPp9ymRpxH4y1Ug== @@ -728,7 +778,7 @@ "@babel/helper-validator-option" "^7.16.7" "@babel/plugin-transform-flow-strip-types" "^7.16.7" -"@babel/preset-typescript@^7.1.0": +"@babel/preset-typescript@^7.1.0", "@babel/preset-typescript@^7.13.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== @@ -737,15 +787,15 @@ "@babel/helper-validator-option" "^7.16.7" "@babel/plugin-transform-typescript" "^7.16.7" -"@babel/register@^7.0.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.5.tgz#354f3574895f1307f79efe37a51525e52fd38d89" - integrity sha512-eYHdLv43nyvmPn9bfNfrcC4+iYNwdQ8Pxk1MFJuU/U5LpSYl/PH4dFMazCYZDFVi8ueG3shvO+AQfLrxpYulQw== +"@babel/register@^7.0.0", "@babel/register@^7.13.16": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.17.7.tgz#5eef3e0f4afc07e25e847720e7b987ae33f08d0b" + integrity sha512-fg56SwvXRifootQEDQAu1mKdjh5uthPzdO0N6t358FktfL4XjAVXuH58ULoiW8mesxiOgNIrxiImqEwv0+hRRA== dependencies: + clone-deep "^4.0.1" find-cache-dir "^2.0.0" - lodash "^4.17.19" make-dir "^2.1.0" - pirates "^4.0.0" + pirates "^4.0.5" source-map-support "^0.5.16" "@babel/runtime@^7.0.0", "@babel/runtime@^7.4.3", "@babel/runtime@^7.4.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": @@ -764,7 +814,7 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3": version "7.17.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== @@ -1751,6 +1801,40 @@ dependencies: "@types/node" ">= 8" +"@opentelemetry/api@^1.0.1", "@opentelemetry/api@^1.0.4": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.1.0.tgz#563539048255bbe1a5f4f586a4a10a1bb737f44a" + integrity sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ== + +"@opentelemetry/core@1.3.0", "@opentelemetry/core@^1.0.1": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.3.0.tgz#3a7cdf1d95ae26147d141a7fd58cc60759486aa9" + integrity sha512-g/YNvUhSPn+9PBOnDZtFmvGZR3fDFzzLVSHLAnAQfOLrJwVlZovSZpAXNOv8OGhn+JA3j1gY93gfjbgBZtoR7Q== + dependencies: + "@opentelemetry/semantic-conventions" "1.3.0" + +"@opentelemetry/resources@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.3.0.tgz#260043d32acc82c14a7766e4f8b88a76c6cb5d4a" + integrity sha512-vSj4YIS8yHx8AEwYFV4l1mcCtDogSOhOymAMEg93LTWcnrhfz8hJ4Q7H21fVUKJx/6h+6cnfTYygzyqBjlilJw== + dependencies: + "@opentelemetry/core" "1.3.0" + "@opentelemetry/semantic-conventions" "1.3.0" + +"@opentelemetry/sdk-trace-base@^1.0.1": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.3.0.tgz#eebf6f553e49ceb309d346b8de7c9257686bbec3" + integrity sha512-BkJEVdx46Boumgy0u6v+pm7spjOq7wCmClDFnHvQs8BS3xjmfwdiReoJFcSjo0cSlxkTJh6el8Or2l2nE3kArw== + dependencies: + "@opentelemetry/core" "1.3.0" + "@opentelemetry/resources" "1.3.0" + "@opentelemetry/semantic-conventions" "1.3.0" + +"@opentelemetry/semantic-conventions@1.3.0", "@opentelemetry/semantic-conventions@^1.0.1": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.3.0.tgz#0d740709fd65845c9cab215d5581e9fa80c59520" + integrity sha512-7lmGpLL/7EHQcLVBxxOesgQQS7JSxzF/Xqx7VNMxAQbo14dzJEX6Ks0hb4LHqEMpCrKpErWXi4JxYCGrRJgx9A== + "@react-native-community/cli-debugger-ui@^6.0.0-rc.0": version "6.0.0-rc.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-6.0.0-rc.0.tgz#774378626e4b70f5e1e2e54910472dcbaffa1536" @@ -1758,6 +1842,13 @@ dependencies: serve-static "^1.13.1" +"@react-native-community/cli-debugger-ui@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-7.0.3.tgz#3eeeacc5a43513cbcae56e5e965d77726361bcb4" + integrity sha512-G4SA6jFI0j22o+j+kYP8/7sxzbCDqSp2QiHA/X5E0lsGEd2o9qN2zbIjiFr8b8k+VVAYSUONhoC0+uKuINvmkA== + dependencies: + serve-static "^1.13.1" + "@react-native-community/cli-hermes@^6.3.0": version "6.3.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-6.3.0.tgz#92b2f07d08626a60f6893c3e3d57c1538c8fb5a7" @@ -1785,6 +1876,22 @@ slash "^3.0.0" xmldoc "^1.1.2" +"@react-native-community/cli-platform-android@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-7.0.1.tgz#d165897edf401f9bceff1f361ef446528133cb52" + integrity sha512-nOr0aMkxAymCnbtsQwXBlyoRN2Y+IzC7Qz5T+/zyWwEbTY8SKQI8uV+8+qttUvzSvuXa2PeXsTWluuliOS8KCw== + dependencies: + "@react-native-community/cli-tools" "^7.0.1" + chalk "^4.1.2" + execa "^1.0.0" + fs-extra "^8.1.0" + glob "^7.1.3" + jetifier "^1.6.2" + lodash "^4.17.15" + logkitty "^0.7.1" + slash "^3.0.0" + xmldoc "^1.1.2" + "@react-native-community/cli-platform-ios@^6.0.0": version "6.2.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-6.2.0.tgz#ceaa23995511a8e400b506632ac7e6a66a17ec2a" @@ -1799,6 +1906,21 @@ plist "^3.0.2" xcode "^2.0.0" +"@react-native-community/cli-platform-ios@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-7.0.1.tgz#1c27af85229246b7a528e97f093e38859896cc93" + integrity sha512-PLRIbzrCzSedmpjuFtQqcqUD45G8q7sEciI1lf5zUbVMXqjIBwJWS7iz8235PyWwj8J4MNHohLC+oyRueFtbGg== + dependencies: + "@react-native-community/cli-tools" "^7.0.1" + chalk "^4.1.2" + execa "^1.0.0" + glob "^7.1.3" + js-yaml "^3.13.1" + lodash "^4.17.15" + ora "^5.4.1" + plist "^3.0.2" + xcode "^3.0.0" + "@react-native-community/cli-plugin-metro@^6.4.0": version "6.4.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-6.4.0.tgz#70b7908d6b548481f37ed58167f9460d325ae21c" @@ -1815,6 +1937,22 @@ metro-runtime "^0.66.1" readline "^1.3.0" +"@react-native-community/cli-plugin-metro@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-7.0.3.tgz#b381ed2f68a0b126e4fa238f1956a44846e1ef8a" + integrity sha512-HJrEkFbxv9DNixsGwO+Q0zCcZMghDltyzeB9yQ//D5ZR4ZUEuAIPrRDdEp9xVw0WkBxAIZs6KXLux2/yPMwLhA== + dependencies: + "@react-native-community/cli-server-api" "^7.0.3" + "@react-native-community/cli-tools" "^6.2.0" + chalk "^4.1.2" + metro "^0.67.0" + metro-config "^0.67.0" + metro-core "^0.67.0" + metro-react-native-babel-transformer "^0.67.0" + metro-resolver "^0.67.0" + metro-runtime "^0.67.0" + readline "^1.3.0" + "@react-native-community/cli-server-api@^6.4.0": version "6.4.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-6.4.0.tgz#aa547839e54f9910d3671808e009489d2c2db0d9" @@ -1830,6 +1968,21 @@ serve-static "^1.13.1" ws "^1.1.0" +"@react-native-community/cli-server-api@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-7.0.3.tgz#ba9695a2fdfef22750d141153efd94baf641129b" + integrity sha512-JDrLsrkBgNxbG2u3fouoVGL9tKrXUrTsaNwr+oCV+3XyMwbVe42r/OaQ681/iW/7mHXjuVkDnMcp7BMg7e2yJg== + dependencies: + "@react-native-community/cli-debugger-ui" "^7.0.3" + "@react-native-community/cli-tools" "^6.2.0" + compression "^1.7.1" + connect "^3.6.5" + errorhandler "^1.5.0" + nocache "^2.1.0" + pretty-format "^26.6.2" + serve-static "^1.13.1" + ws "^7.5.1" + "@react-native-community/cli-tools@^6.2.0": version "6.2.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-6.2.0.tgz#8f4adc2d83ab96e5654348533c8fa602742c4fce" @@ -1844,6 +1997,21 @@ semver "^6.3.0" shell-quote "1.6.1" +"@react-native-community/cli-tools@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-7.0.1.tgz#73790d6ca2825e42a70a770c1b403a6777e690d6" + integrity sha512-0xra4hKNA5PR2zYVXsDMNiXMGaDNoNRYMY6eTP2aVIxQbqIcVMDWSyCA8wMWX5iOpMWg0cZGaQ6a77f3Rlb34g== + dependencies: + appdirsjs "^1.2.4" + chalk "^4.1.2" + lodash "^4.17.15" + mime "^2.4.1" + node-fetch "^2.6.0" + open "^6.2.0" + ora "^5.4.1" + semver "^6.3.0" + shell-quote "^1.7.3" + "@react-native-community/cli-types@^6.0.0": version "6.0.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-6.0.0.tgz#90269fbdc7229d5e3b8f2f3e029a94083551040d" @@ -1888,13 +2056,51 @@ sudo-prompt "^9.0.0" wcwidth "^1.0.1" -"@react-native-windows/cli@0.66.2": - version "0.66.2" - resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.66.2.tgz#8c088200ca1f036f8328ec7fc3c6b571c43e78fc" - integrity sha512-2BryCC0+SqY/ZZph2hzlY4v9GKt5x3Mvk4TqQoBu2ru0D0QkXeadNk+o8T5srYAvldmHPVnaAEMj9wW1Et8//Q== +"@react-native-community/cli@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-7.0.3.tgz#1addb462d71786fcbbd266fbceb41819b8cf7839" + integrity sha512-WyJOA829KAhU1pw2MDQt0YhOS9kyR2KqyqgJyTuQhzFVCBPX4F5aDEkZYYn4jdldaDHCPrLJ3ho3gxYTXy+x7w== dependencies: - "@react-native-windows/package-utils" "0.66.1" - "@react-native-windows/telemetry" "0.66.1" + "@react-native-community/cli-debugger-ui" "^7.0.3" + "@react-native-community/cli-hermes" "^6.3.0" + "@react-native-community/cli-plugin-metro" "^7.0.3" + "@react-native-community/cli-server-api" "^7.0.3" + "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-types" "^6.0.0" + appdirsjs "^1.2.4" + chalk "^4.1.2" + command-exists "^1.2.8" + commander "^2.19.0" + cosmiconfig "^5.1.0" + deepmerge "^3.2.0" + envinfo "^7.7.2" + execa "^1.0.0" + find-up "^4.1.0" + fs-extra "^8.1.0" + glob "^7.1.3" + graceful-fs "^4.1.3" + joi "^17.2.1" + leven "^3.1.0" + lodash "^4.17.15" + minimist "^1.2.0" + node-stream-zip "^1.9.1" + ora "^3.4.0" + pretty-format "^26.6.2" + prompts "^2.4.0" + semver "^6.3.0" + serve-static "^1.13.1" + strip-ansi "^5.2.0" + sudo-prompt "^9.0.0" + wcwidth "^1.0.1" + +"@react-native-windows/cli@0.68.2": + version "0.68.2" + resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.68.2.tgz#6c47f9e5c43a4132892a9bf1df5f58ead09b851e" + integrity sha512-hbWUy4EiWapkLfP5rouMb7yRiVvltOAJex1WlwfEfbVLWPg0WAf1mtMfc10VViorFk6xNL9JjVPzbaUO4tO58A== + dependencies: + "@react-native-windows/fs" "0.68.0" + "@react-native-windows/package-utils" "0.68.0" + "@react-native-windows/telemetry" "0.68.2" "@xmldom/xmldom" "^0.7.5" chalk "^4.1.0" cli-spinners "^2.2.0" @@ -1913,33 +2119,49 @@ xml-parser "^1.2.1" xpath "^0.0.27" -"@react-native-windows/find-repo-root@0.66.1": - version "0.66.1" - resolved "https://registry.yarnpkg.com/@react-native-windows/find-repo-root/-/find-repo-root-0.66.1.tgz#221e3abae0a698de2a244095b6c16bfae94d2080" - integrity sha512-oStJBtcKUldi5mZClxvNZHs0QsjglLUDmQclpDRGyvQkMsU4BWayAECx02yyptWNJ1B/fXEHbnaWQ/mo1+WRsQ== +"@react-native-windows/find-repo-root@0.68.0": + version "0.68.0" + resolved "https://registry.yarnpkg.com/@react-native-windows/find-repo-root/-/find-repo-root-0.68.0.tgz#efbc5af3a4952a7e7712f8d6bd73b8de858f3d7d" + integrity sha512-YuSUlrRdr6SNPapf4b77yi3U/rfTeYhetBpSwm1L/jq3UT8Wm4Z/JSBZg2UioYIeQV6xrNRjlLQHKjDBzmxOkQ== dependencies: find-up "^4.1.0" -"@react-native-windows/package-utils@0.66.1": - version "0.66.1" - resolved "https://registry.yarnpkg.com/@react-native-windows/package-utils/-/package-utils-0.66.1.tgz#1037a512184fc19240580772728f0a1e5e7859d3" - integrity sha512-SQuHGsvLdiqXWGQgkzFXvE5DBtGQwRhsuVvSc/4WokcNlQKdflDly/njh7IZnBoB8LIBelO4cguH0zBWiP6QOw== +"@react-native-windows/fs@0.68.0": + version "0.68.0" + resolved "https://registry.yarnpkg.com/@react-native-windows/fs/-/fs-0.68.0.tgz#bdf722b9c7475e66de9a580b37cdb7136af797a4" + integrity sha512-2ZnL0NVs6zJQgXypyX1Arh7Xyo8mG1yKw1ephbOX5U6J7HLlnsx3X1sANGIz+JcAjA9jEJ08r9DHbH93NvzFWA== dependencies: - "@react-native-windows/find-repo-root" "0.66.1" + graceful-fs "^4.2.8" + +"@react-native-windows/package-utils@0.68.0": + version "0.68.0" + resolved "https://registry.yarnpkg.com/@react-native-windows/package-utils/-/package-utils-0.68.0.tgz#072b838fd106aedaff746ae6fab5173b6c61880a" + integrity sha512-IgcZib3Ydhosk8HoN/9l/im/EzeualqQPku/aRUyLehKjYEi7YksUDEM3un9bWyAwCeT9gpIjbEnEFwODQdvZg== + dependencies: + "@react-native-windows/find-repo-root" "0.68.0" + "@react-native-windows/fs" "0.68.0" get-monorepo-packages "^1.2.0" lodash "^4.17.15" -"@react-native-windows/telemetry@0.66.1": - version "0.66.1" - resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.66.1.tgz#833951080b307cc8c5ce6bcab065d7154c5e79dd" - integrity sha512-11Dfll0emyOpnW21yiQmUwOQEa4jiJbBjYTU9/9KbCHIKePHAGZCvSsASlQ7L2rZHHwRc9dyxJC0dacSgx1Ygw== +"@react-native-windows/telemetry@0.68.2": + version "0.68.2" + resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.68.2.tgz#c693f66e9e4032cce6256ef777c0033b7e5fb262" + integrity sha512-tkd7eJM3Jhs6aenL0Iz8msRbK22GGgYvaSViCLBkenlwOdF0AE/r0+NAGGXzOxHz89GIDYUhj5rtpln83NtWXA== dependencies: - applicationinsights "^1.8.8" + "@react-native-windows/fs" "0.68.0" + "@xmldom/xmldom" "^0.7.5" + applicationinsights "^2.3.1" + ci-info "^3.2.0" + envinfo "^7.8.1" + lodash "^4.17.21" + node-machine-id "^1.1.12" + os-locale "^5.0.0" + xpath "^0.0.27" -"@react-native-windows/virtualized-list@0.66.1": - version "0.66.1" - resolved "https://registry.yarnpkg.com/@react-native-windows/virtualized-list/-/virtualized-list-0.66.1.tgz#6dc7e2389b19b22bdf38e743451478162c1f8e81" - integrity sha512-B1pIjbUC/JrA6KP9rDogtoIPaOxAXyHqzDTa/IGyvVy7eOsqD1BeugxxXwfVmLNhwGdBBExQbf7uKzSsBP09FQ== +"@react-native-windows/virtualized-list@0.68.0": + version "0.68.0" + resolved "https://registry.yarnpkg.com/@react-native-windows/virtualized-list/-/virtualized-list-0.68.0.tgz#06b63d21bad896c2bd37d6b5544f90f0f4fa838b" + integrity sha512-XKqwn7FWDUVanr42sNT+547je2YwCq38I3YR+iq1WcmH5TiQ5E+KF5jXvPv7oOFuWJzzXzjiRZUfEwMv2qqoMg== dependencies: invariant "^2.2.4" @@ -1948,6 +2170,11 @@ resolved "https://registry.yarnpkg.com/@react-native/assets/-/assets-1.0.0.tgz#c6f9bf63d274bafc8e970628de24986b30a55c8e" integrity sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ== +"@react-native/normalize-color@*", "@react-native/normalize-color@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.0.0.tgz#da955909432474a9a0fe1cbffc66576a0447f567" + integrity sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw== + "@react-native/normalize-color@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-1.0.0.tgz#c52a99d4fe01049102d47dc45d40cbde4f720ab6" @@ -2227,6 +2454,14 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= +"@types/node-fetch@^2.5.0": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.1.tgz#8f127c50481db65886800ef496f20bbf15518975" + integrity sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + "@types/node@*", "@types/node@>= 8": version "14.6.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.0.tgz#7d4411bf5157339337d7cff864d9ff45f177b499" @@ -2254,10 +2489,10 @@ dependencies: "@types/node" "*" -"@types/react-native@^0.64.0": - version "0.64.23" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.64.23.tgz#5a0cd846efcfc7c6ad28550172d1041df7b5d7b0" - integrity sha512-glxMEAmG1PKeTA6ZvPb81oYg4Q+sgCsCJKnkeoGSqBIR2z38XispNb1+Sar+0I7E4dJXg+NC9pZhWl9HnxOG1A== +"@types/react-native@^0.67.3": + version "0.67.3" + resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.67.3.tgz#baba111c8ce1a45a6034c15f6f0ad98826239780" + integrity sha512-hF4uOZFl2PPQtGWOtLoafrlCJeU815X3PgfVePM+7EhOIZhYXKH7+p3R3cZSnwVnrU5Ep/JfiHimMDliY3o8oQ== dependencies: "@types/react" "*" @@ -2312,6 +2547,13 @@ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.0.tgz#fef1904e4668b6e5ecee60c52cc6a078ffa6697d" integrity sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A== +"@types/tunnel@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/tunnel/-/tunnel-0.0.3.tgz#f109e730b072b3136347561fc558c9358bb8c6e9" + integrity sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": version "15.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" @@ -3289,15 +3531,20 @@ appium@1.17.0: optionalDependencies: fsevents "2.x" -applicationinsights@^1.8.8: - version "1.8.10" - resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.8.10.tgz#fffa482cd1519880fb888536a87081ac05130667" - integrity sha512-ZLDA7mShh4mP2Z/HlFolmvhBPX1LfnbIWXrselyYVA7EKjHhri1fZzpu2EiWAmfbRxNBY6fRjoPJWbx5giKy4A== - dependencies: +applicationinsights@^2.3.1: + version "2.3.3" + resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-2.3.3.tgz#2c92aaccf85cc75c7212be1764cc51c55f10501c" + integrity sha512-Q4o6gexNhzukgmzzWYzXLa2gdJ6DhM+c35tw0lRNNjc/qldWxGHVxV65DMRYrQIp4vetLdCK7Pyd/dmEsGO4qA== + dependencies: + "@azure/core-http" "^2.2.3" + "@opentelemetry/api" "^1.0.4" + "@opentelemetry/core" "^1.0.1" + "@opentelemetry/sdk-trace-base" "^1.0.1" + "@opentelemetry/semantic-conventions" "^1.0.1" cls-hooked "^4.2.2" continuation-local-storage "^3.2.1" - diagnostic-channel "0.3.1" - diagnostic-channel-publishers "0.4.4" + diagnostic-channel "1.1.0" + diagnostic-channel-publishers "1.0.5" aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: version "1.2.0" @@ -3780,10 +4027,10 @@ before-after-hook@^2.0.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== -big-integer@^1.6.44: - version "1.6.48" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" - integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== +big-integer@1.6.x, big-integer@^1.6.44: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== bin-links@^1.1.2, bin-links@^1.1.8: version "1.1.8" @@ -3797,10 +4044,10 @@ bin-links@^1.1.2, bin-links@^1.1.8: npm-normalize-package-bin "^1.0.0" write-file-atomic "^2.3.0" -bl@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" - integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== +bl@^4.0.1, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" inherits "^2.0.4" @@ -3850,14 +4097,21 @@ boxen@^1.2.1: term-size "^1.2.0" widest-line "^2.0.0" -bplist-creator@0.0.8, bplist-creator@^0: - version "0.0.8" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" - integrity sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA== +bplist-creator@0.1.0, bplist-creator@^0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e" + integrity sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg== dependencies: - stream-buffers "~2.2.0" + stream-buffers "2.2.x" -bplist-parser@0.2.0, bplist-parser@^0.2: +bplist-parser@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.1.tgz#e1c90b2ca2a9f9474cc72f6862bbf3fee8341fd1" + integrity sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA== + dependencies: + big-integer "1.6.x" + +bplist-parser@^0.2: version "0.2.0" resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== @@ -3888,7 +4142,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1: +braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -4180,6 +4434,11 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +ci-info@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + cidr-regex@^2.0.10: version "2.0.10" resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" @@ -4232,10 +4491,17 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-spinners@^2.0.0, cli-spinners@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.4.0.tgz#c6256db216b878cfba4720e719cec7cf72685d7f" - integrity sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA== +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.0.0, cli-spinners@^2.2.0, cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== cli-table3@^0.5.0, cli-table3@^0.5.1: version "0.5.1" @@ -4304,6 +4570,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -5004,6 +5279,15 @@ depd@~2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +deprecated-react-native-prop-types@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-2.3.0.tgz#c10c6ee75ff2b6de94bb127f142b814e6e08d9ab" + integrity sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA== + dependencies: + "@react-native/normalize-color" "*" + invariant "*" + prop-types "*" + deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" @@ -5056,15 +5340,15 @@ dezalgo@^1.0.0, dezalgo@~1.0.3: asap "^2.0.0" wrappy "1" -diagnostic-channel-publishers@0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.4.4.tgz#57c3b80b7e7f576f95be3a257d5e94550f0082d6" - integrity sha512-l126t01d2ZS9EreskvEtZPrcgstuvH3rbKy82oUhUrVmBaGx4hO9wECdl3cvZbKDYjMF3QJDB5z5dL9yWAjvZQ== +diagnostic-channel-publishers@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-1.0.5.tgz#df8c317086c50f5727fdfb5d2fce214d2e4130ae" + integrity sha512-dJwUS0915pkjjimPJVDnS/QQHsH0aOYhnZsLJdnZIMOrB+csj8RnZhWTuwnm8R5v3Z7OZs+ksv5luC14DGB7eg== -diagnostic-channel@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-0.3.1.tgz#7faa143e107f861be3046539eb4908faab3f53fd" - integrity sha512-6eb9YRrimz8oTr5+JDzGmSYnXy5V7YnK5y/hd8AUDK1MssHjQKm9LlD6NSrHx4vMDF3+e/spI2hmWTviElgWZA== +diagnostic-channel@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-1.1.0.tgz#6985e9dfedfbc072d91dc4388477e4087147756e" + integrity sha512-fwujyMe1gj6rk6dYi9hMZm0c8Mz8NDMVl2LB4iaYh3+LIAThZC8RKFGXWG0IML2OxAit/ZFRgZhMkhQ3d/bobQ== dependencies: semver "^5.3.0" @@ -5249,10 +5533,10 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== -envinfo@^7.5.0, envinfo@^7.7.2: - version "7.7.3" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" - integrity sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA== +envinfo@^7.5.0, envinfo@^7.7.2, envinfo@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== err-code@^1.0.0: version "1.1.2" @@ -5448,6 +5732,11 @@ eslint-plugin-jsx-a11y@6.2.3: has "^1.0.3" jsx-ast-utils "^2.2.1" +eslint-plugin-react-hooks@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz#5f762dfedf8b2cf431c689f533c9d3fa5dcf25ad" + integrity sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw== + eslint-plugin-react-native-globals@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2" @@ -6081,6 +6370,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -6177,7 +6475,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@2.x, fsevents@^2.1.2: +fsevents@2.x, fsevents@^2.1.2, fsevents@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -6431,10 +6729,10 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.8, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== grapheme-splitter@^1.0.2: version "1.0.4" @@ -6539,16 +6837,33 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hermes-engine@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.11.0.tgz#bb224730d230a02a5af02c4e090d1f52d57dd3db" + integrity sha512-7aMUlZja2IyLYAcZ69NBnwJAR5ZOYlSllj0oMpx08a8HzxHOys0eKCzfphrf6D0vX1JGO1QQvVsQKe6TkYherw== + hermes-engine@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.9.0.tgz#84d9cfe84e8f6b1b2020d6e71b350cec84ed982f" integrity sha512-r7U+Y4P2Qg/igFVZN+DpT7JFfXUn1MM4dFne8aW+cCrF6RRymof+VqrUHs1kl07j8h8V2CNesU19RKgWbr3qPw== +hermes-estree@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.5.0.tgz#36432a2b12f01b217244da098924efdfdfc12327" + integrity sha512-1h8rvG23HhIR5K6Kt0e5C7BC72J1Ath/8MmSta49vxXp/j6wl7IMHvIRFYBQr35tWnQY97dSGR2uoAJ5pHUQkg== + hermes-parser@0.4.7: version "0.4.7" resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.4.7.tgz#410f5129d57183784d205a0538e6fbdcf614c9ea" integrity sha512-jc+zCtXbtwTiXoMAoXOHepxAaGVFIp89wwE9qcdwnMd/uGVEtPoY8FaFSsx0ThPvyKirdR2EsIIDVrpbSXz1Ag== +hermes-parser@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.5.0.tgz#8b678dd8b29a08b57cbaf60adba4896494c59a53" + integrity sha512-ARnJBScKAkkq8j3BHrNGBUv/4cSpZNbKDsVizEtzmsFeqC67Dopa5s4XRe+e3wN52Dh5Mj2kDB5wJvhcxwDkPg== + dependencies: + hermes-estree "0.5.0" + hermes-profile-transformer@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz#bd0f5ecceda80dd0ddaae443469ab26fb38fc27b" @@ -6881,7 +7196,7 @@ into-stream@^5.0.0: from2 "^2.3.0" p-is-promise "^3.0.0" -invariant@2.2.4, invariant@^2.2.4: +invariant@*, invariant@2.2.4, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -6898,6 +7213,11 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== +invert-kv@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-3.0.1.tgz#a93c7a3d4386a1dc8325b97da9bb1620c0282523" + integrity sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw== + io.appium.settings@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/io.appium.settings/-/io.appium.settings-3.2.0.tgz#6580c1ea6d74e1bac2c0f1a1bb612e93eda23df3" @@ -7096,6 +7416,11 @@ is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -7210,6 +7535,11 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -7458,6 +7788,26 @@ jest-haste-map@^26.5.2, jest-haste-map@^26.6.2: optionalDependencies: fsevents "^2.1.2" +jest-haste-map@^27.3.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== + dependencies: + "@jest/types" "^27.5.1" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + jest-jasmine2@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" @@ -7533,6 +7883,11 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + jest-resolve-dependencies@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" @@ -7623,6 +7978,14 @@ jest-serializer@^26.6.2: "@types/node" "*" graceful-fs "^4.2.4" +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.9" + jest-snapshot@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" @@ -7657,6 +8020,18 @@ jest-util@^26.6.2: is-ci "^2.0.0" micromatch "^4.0.2" +jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^26.5.2, jest-validate@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" @@ -7691,6 +8066,15 @@ jest-worker@^26.0.0, jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" +jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" @@ -7797,6 +8181,31 @@ jscodeshift@^0.11.0: temp "^0.8.1" write-file-atomic "^2.3.0" +jscodeshift@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.13.1.tgz#69bfe51e54c831296380585c6d9e733512aecdef" + integrity sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ== + dependencies: + "@babel/core" "^7.13.16" + "@babel/parser" "^7.13.16" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/preset-flow" "^7.13.13" + "@babel/preset-typescript" "^7.13.0" + "@babel/register" "^7.13.16" + babel-core "^7.0.0-bridge.0" + chalk "^4.1.2" + flow-parser "0.*" + graceful-fs "^4.2.4" + micromatch "^3.1.10" + neo-async "^2.5.0" + node-dir "^0.1.17" + recast "^0.20.4" + temp "^0.8.4" + write-file-atomic "^2.3.0" + jsdom@^16.4.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" @@ -8046,6 +8455,13 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" +lcid@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-3.1.1.tgz#9030ec479a058fc36b5e8243ebaac8b6ac582fd0" + integrity sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg== + dependencies: + invert-kv "^3.0.0" + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -8414,7 +8830,7 @@ lodash.zip@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.17.9, lodash@^4.2.1, lodash@^4.6.1, lodash@^4.7.0: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.9, lodash@^4.2.1, lodash@^4.6.1, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -8426,6 +8842,14 @@ log-symbols@^2.2.0: dependencies: chalk "^2.0.1" +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + logform@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/logform/-/logform-2.2.0.tgz#40f036d19161fc76b68ab50fdc7fe495544492f2" @@ -8553,7 +8977,7 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -map-age-cleaner@^0.1.1: +map-age-cleaner@^0.1.1, map-age-cleaner@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== @@ -8639,6 +9063,15 @@ mem@^4.0.0, mem@^4.3.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" +mem@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/mem/-/mem-5.1.1.tgz#7059b67bf9ac2c924c9f1cff7155a064394adfb3" + integrity sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw== + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^2.1.0" + p-is-promise "^2.1.0" + meow@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.0.tgz#50ecbcdafa16f8b58fb7eb9675b933f6473b3a59" @@ -8710,11 +9143,26 @@ metro-babel-transformer@0.66.2: metro-source-map "0.66.2" nullthrows "^1.1.1" +metro-babel-transformer@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.67.0.tgz#42fe82af9953e5c62d9a8d7d544eb7be9020dd18" + integrity sha512-SBqc4nq/dgsPNFm+mpWcQQzJaXnh0nrfz2pSnZC4i6zMtIakrTWb8SQ78jOU1FZVEZ3nu9xCYVHS9Tbr/LoEuw== + dependencies: + "@babel/core" "^7.14.0" + hermes-parser "0.5.0" + metro-source-map "0.67.0" + nullthrows "^1.1.1" + metro-cache-key@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.66.2.tgz#d6463d2a53e887a38419d523962cc24ea0e780b4" integrity sha512-WtkNmRt41qOpHh1MkNA4nLiQ/m7iGL90ysSKD+fcLqlUnOBKJptPQm0ZUv8Kfqk18ddWX2KmsSbq+Sf3I6XohQ== +metro-cache-key@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.67.0.tgz#4df6a73cced199e1bddd0f3454bb931a27141eeb" + integrity sha512-FNJe5Rcb2uzY6G6tsqCf0RV4t2rCeX6vSHBxmP7k+4aI4NqX4evtPI0K82r221nBzm5DqNWCURZ0RYUT6jZMGA== + metro-cache@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.66.2.tgz#e0af4e0a319898f7d42a980f7ee5da153fcfd019" @@ -8724,6 +9172,15 @@ metro-cache@0.66.2: mkdirp "^0.5.1" rimraf "^2.5.4" +metro-cache@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.67.0.tgz#928db5742542719677468c4d22ea29b71c7ec8fc" + integrity sha512-IY5dXiR76L75b2ue/mv+9vW8g5hdQJU6YEe81lj6gTSoUrhcONT0rzY+Gh5QOS2Kk6z9utZQMvd9PRKL9/635A== + dependencies: + metro-core "0.67.0" + mkdirp "^0.5.1" + rimraf "^2.5.4" + metro-config@0.66.2, metro-config@^0.66.1: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.66.2.tgz#e365acdb66ad0cda0182b9c9910760a97ee4293b" @@ -8736,6 +9193,18 @@ metro-config@0.66.2, metro-config@^0.66.1: metro-core "0.66.2" metro-runtime "0.66.2" +metro-config@0.67.0, metro-config@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.67.0.tgz#5507d3b295bd10c87bd13dbe5a3033a357418786" + integrity sha512-ThAwUmzZwTbKyyrIn2bKIcJDPDBS0LKAbqJZQioflvBGfcgA21h3fdL3IxRmvCEl6OnkEWI0Tn1Z9w2GLAjf2g== + dependencies: + cosmiconfig "^5.0.5" + jest-validate "^26.5.2" + metro "0.67.0" + metro-cache "0.67.0" + metro-core "0.67.0" + metro-runtime "0.67.0" + metro-core@0.66.2, metro-core@^0.66.1: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.66.2.tgz#ead776a17b3e5a307e6dc22259db30bf5c7e8490" @@ -8745,11 +9214,25 @@ metro-core@0.66.2, metro-core@^0.66.1: lodash.throttle "^4.1.1" metro-resolver "0.66.2" +metro-core@0.67.0, metro-core@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.67.0.tgz#75066e11b4df220992abf9cd6200279dd87876c8" + integrity sha512-TOa/ShE1bUq83fGNfV6rFwyfZ288M8ydmWN3g9C2OW8emOHLhJslYD/SIU4DhDkP/99yaJluIALdZ2g0+pCrvQ== + dependencies: + jest-haste-map "^27.3.1" + lodash.throttle "^4.1.1" + metro-resolver "0.67.0" + metro-hermes-compiler@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.66.2.tgz#30290748f83805faa601aa487632444915795823" integrity sha512-nCVL1g9uR6vrw5+X1wjwZruRyMkndnzGRMqjqoljf+nGEqBTD607CR7elXw4fMWn/EM+1y0Vdq5altUu9LdgCA== +metro-hermes-compiler@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.67.0.tgz#9c1340f1882fbf535145868d0d28211ca15b0477" + integrity sha512-X5Pr1jC8/kO6d1EBDJ6yhtuc5euHX89UDNv8qdPJHAET03xfFnlojRPwOw6il2udAH20WLBv+F5M9VY+58zspQ== + metro-inspector-proxy@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.66.2.tgz#a83c76bd2f2fd7b9240be92acf9a8b1d1404547a" @@ -8760,6 +9243,16 @@ metro-inspector-proxy@0.66.2: ws "^1.1.5" yargs "^15.3.1" +metro-inspector-proxy@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.67.0.tgz#22b360a837b07e9e2bc87a71af6154dd8fcc02a5" + integrity sha512-5Ubjk94qpNaU3OT2IZa4/dec09bauic1hzWms4czorBzDenkp4kYXG9/aWTmgQLtCk92H3Q8jKl1PQRxUSkrOQ== + dependencies: + connect "^3.6.5" + debug "^2.2.0" + ws "^7.5.1" + yargs "^15.3.1" + metro-minify-uglify@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.66.2.tgz#6061dbee4f61e6d5bb3c100e4379ff6f2e16e42b" @@ -8767,7 +9260,14 @@ metro-minify-uglify@0.66.2: dependencies: uglify-es "^3.1.9" -metro-react-native-babel-preset@0.66.2, metro-react-native-babel-preset@^0.66.2: +metro-minify-uglify@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.67.0.tgz#28a77dbd78d9e558dba8c2f31c2b9c6f939df966" + integrity sha512-4CmM5b3MTAmQ/yFEfsHOhD2SuBObB2YF6PKzXZc4agUsQVVtkrrNElaiWa8w26vrTzA9emwcyurxMf4Nl3lYPQ== + dependencies: + uglify-es "^3.1.9" + +metro-react-native-babel-preset@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.66.2.tgz#fddebcf413ad4ea617d4f47f7c1da401052de734" integrity sha512-H/nLBAz0MgfDloSe1FjyH4EnbokHFdncyERvLPXDACY3ROVRCeUyFNo70ywRGXW2NMbrV4H7KUyU4zkfWhC2HQ== @@ -8813,6 +9313,52 @@ metro-react-native-babel-preset@0.66.2, metro-react-native-babel-preset@^0.66.2: "@babel/template" "^7.0.0" react-refresh "^0.4.0" +metro-react-native-babel-preset@0.67.0, metro-react-native-babel-preset@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.67.0.tgz#53aec093f53a09b56236a9bb534d76658efcbec7" + integrity sha512-tgTG4j0SKwLHbLRELMmgkgkjV1biYkWlGGKOmM484/fJC6bpDikdaFhfjsyE+W+qt7I5szbCPCickMTNQ+zwig== + dependencies: + "@babel/core" "^7.14.0" + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + react-refresh "^0.4.0" + metro-react-native-babel-transformer@0.66.2, metro-react-native-babel-transformer@^0.66.1: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.66.2.tgz#768f341e7c3d3d1c38189799c9884b90d1c32eb7" @@ -8826,6 +9372,19 @@ metro-react-native-babel-transformer@0.66.2, metro-react-native-babel-transforme metro-source-map "0.66.2" nullthrows "^1.1.1" +metro-react-native-babel-transformer@0.67.0, metro-react-native-babel-transformer@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.67.0.tgz#756d32eb3c05cab3d72fcb1700f8fd09322bb07f" + integrity sha512-P0JT09n7T01epUtgL9mH6BPat3xn4JjBakl4lWHdL61cvEGcrxuIom1eoFFKkgU/K5AVLU4aCAttHS7nSFCcEQ== + dependencies: + "@babel/core" "^7.14.0" + babel-preset-fbjs "^3.4.0" + hermes-parser "0.5.0" + metro-babel-transformer "0.67.0" + metro-react-native-babel-preset "0.67.0" + metro-source-map "0.67.0" + nullthrows "^1.1.1" + metro-resolver@0.66.2, metro-resolver@^0.66.1: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.66.2.tgz#f743ddbe7a12dd137d1f7a555732cafcaea421f8" @@ -8833,11 +9392,23 @@ metro-resolver@0.66.2, metro-resolver@^0.66.1: dependencies: absolute-path "^0.0.0" +metro-resolver@0.67.0, metro-resolver@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.67.0.tgz#8143c716f77e468d1d42eca805243706eb349959" + integrity sha512-d2KS/zAyOA/z/q4/ff41rAp+1txF4H6qItwpsls/RHStV2j6PqgRHUzq/3ga+VIeoUJntYJ8nGW3+3qSrhFlig== + dependencies: + absolute-path "^0.0.0" + metro-runtime@0.66.2, metro-runtime@^0.66.1: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.66.2.tgz#3409ee957b949b6c7b72ef6ed2b9af9a4f4a910e" integrity sha512-vFhKBk2ot9FS4b+2v0OTa/guCF/QDAOJubY0CNg7PzCS5+w4y3IvZIcPX4SSS1t8pYEZBLvtdtTDarlDl81xmg== +metro-runtime@0.67.0, metro-runtime@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.67.0.tgz#a8888dfd06bcebbac3c99dcac7cd622510dd8ee0" + integrity sha512-IFtSL0JUt1xK3t9IoLflTDft82bjieSzdIJWLzrRzBMlesz8ox5bVmnpQbVQEwfYUpEOxbM3VOZauVbdCmXA7g== + metro-source-map@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.66.2.tgz#b5304a282a5d55fa67b599265e9cf3217175cdd7" @@ -8852,6 +9423,20 @@ metro-source-map@0.66.2: source-map "^0.5.6" vlq "^1.0.0" +metro-source-map@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.67.0.tgz#e28db7253b9ca688e60d5710ebdccba60b45b2df" + integrity sha512-yxypInsRo3SfS00IgTuL6a2W2tfwLY//vA2E+GeqGBF5zTbJZAhwNGIEl8S87XXZhwzJcxf5/8LjJC1YDzabww== + dependencies: + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.0.0" + invariant "^2.2.4" + metro-symbolicate "0.67.0" + nullthrows "^1.1.1" + ob1 "0.67.0" + source-map "^0.5.6" + vlq "^1.0.0" + metro-symbolicate@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.66.2.tgz#addd095ce5f77e73ca21ddb5dfb396ff5d4fa041" @@ -8864,6 +9449,18 @@ metro-symbolicate@0.66.2: through2 "^2.0.1" vlq "^1.0.0" +metro-symbolicate@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.67.0.tgz#16729d05663d28176895244b3d932a898fca2b45" + integrity sha512-ZqVVcfa0xSz40eFzA5P8pCF3V6Tna9RU1prFzAJTa3j9dCGqwh0HTXC8AIkMtgX7hNdZrCJI1YipzUBlwkT0/A== + dependencies: + invariant "^2.2.4" + metro-source-map "0.67.0" + nullthrows "^1.1.1" + source-map "^0.5.6" + through2 "^2.0.1" + vlq "^1.0.0" + metro-transform-plugins@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.66.2.tgz#39dd044a23b1343e4f2d2ec34d08128cdf255ed4" @@ -8875,6 +9472,17 @@ metro-transform-plugins@0.66.2: "@babel/traverse" "^7.14.0" nullthrows "^1.1.1" +metro-transform-plugins@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.67.0.tgz#6122aa4e5e5f9a767cebcc5af6fd1695666683ce" + integrity sha512-DQFoSDIJdTMPDTUlKaCNJjEXiHGwFNneAF9wDSJ3luO5gigM7t7MuSaPzF4hpjmfmcfPnRhP6AEn9jcza2Sh8Q== + dependencies: + "@babel/core" "^7.14.0" + "@babel/generator" "^7.14.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.14.0" + nullthrows "^1.1.1" + metro-transform-worker@0.66.2: version "0.66.2" resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.66.2.tgz#0a8455992132c479721accd52c9bd47deb77769e" @@ -8894,6 +9502,25 @@ metro-transform-worker@0.66.2: metro-transform-plugins "0.66.2" nullthrows "^1.1.1" +metro-transform-worker@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.67.0.tgz#5689553c25b0657aadefdf4ea2cd8dd06e18882a" + integrity sha512-29n+JdTb80ROiv/wDiBVlY/xRAF/nrjhp/Udv/XJl1DZb+x7JEiPxpbpthPhwwl+AYxVrostGB0W06WJ61hfiw== + dependencies: + "@babel/core" "^7.14.0" + "@babel/generator" "^7.14.0" + "@babel/parser" "^7.14.0" + "@babel/types" "^7.0.0" + babel-preset-fbjs "^3.4.0" + metro "0.67.0" + metro-babel-transformer "0.67.0" + metro-cache "0.67.0" + metro-cache-key "0.67.0" + metro-hermes-compiler "0.67.0" + metro-source-map "0.67.0" + metro-transform-plugins "0.67.0" + nullthrows "^1.1.1" + metro@0.66.2, metro@^0.66.1: version "0.66.2" resolved "https://registry.yarnpkg.com/metro/-/metro-0.66.2.tgz#f21759bf00995470e7577b5b88a5277963f24492" @@ -8952,6 +9579,63 @@ metro@0.66.2, metro@^0.66.1: ws "^1.1.5" yargs "^15.3.1" +metro@0.67.0, metro@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.67.0.tgz#8007a041d22de1cdb05184431c67eb7989eef6e0" + integrity sha512-DwuBGAFcAivoac/swz8Lp7Y5Bcge1tzT7T6K0nf1ubqJP8YzBUtyR4pkjEYVUzVu/NZf7O54kHSPVu1ibYzOBQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/core" "^7.14.0" + "@babel/generator" "^7.14.0" + "@babel/parser" "^7.14.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.0.0" + absolute-path "^0.0.0" + accepts "^1.3.7" + async "^2.4.0" + chalk "^4.0.0" + ci-info "^2.0.0" + connect "^3.6.5" + debug "^2.2.0" + denodeify "^1.2.1" + error-stack-parser "^2.0.6" + fs-extra "^1.0.0" + graceful-fs "^4.1.3" + hermes-parser "0.5.0" + image-size "^0.6.0" + invariant "^2.2.4" + jest-haste-map "^27.3.1" + jest-worker "^26.0.0" + lodash.throttle "^4.1.1" + metro-babel-transformer "0.67.0" + metro-cache "0.67.0" + metro-cache-key "0.67.0" + metro-config "0.67.0" + metro-core "0.67.0" + metro-hermes-compiler "0.67.0" + metro-inspector-proxy "0.67.0" + metro-minify-uglify "0.67.0" + metro-react-native-babel-preset "0.67.0" + metro-resolver "0.67.0" + metro-runtime "0.67.0" + metro-source-map "0.67.0" + metro-symbolicate "0.67.0" + metro-transform-plugins "0.67.0" + metro-transform-worker "0.67.0" + mime-types "^2.1.27" + mkdirp "^0.5.1" + node-fetch "^2.2.0" + nullthrows "^1.1.1" + rimraf "^2.5.4" + serialize-error "^2.1.0" + source-map "^0.5.6" + strip-ansi "^6.0.0" + temp "0.8.3" + throat "^5.0.0" + ws "^7.5.1" + yargs "^15.3.1" + micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -8971,13 +9655,13 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0, micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - braces "^3.0.1" - picomatch "^2.0.5" + braces "^3.0.2" + picomatch "^2.3.1" mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": version "1.51.0" @@ -9288,10 +9972,12 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" -node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== +node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.6.0, node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" node-gyp@^5.0.2, node-gyp@^5.1.0: version "5.1.1" @@ -9320,10 +10006,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= +node-machine-id@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" + integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== node-notifier@^8.0.0: version "8.0.2" @@ -9689,6 +10375,11 @@ ob1@0.66.2: resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.66.2.tgz#8caf548202cf2688944bae47db405a08bca17a61" integrity sha512-RFewnL/RjE0qQBOuM+2bbY96zmJPIge/aDtsiDbLSb+MOiK8CReAhBHDgL+zrA3F1hQk00lMWpUwYcep750plA== +ob1@0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.67.0.tgz#91f104c90641b1af8c364fc82a4b2c7d0801072d" + integrity sha512-YvZtX8HKYackQ5PwdFIuuNFVsMChRPHvnARRRT0Vk59xsBvL5t9U1Ock3M1sYrKj+Gp73+0q9xcHLAxI+xLi5g== + object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -9870,6 +10561,21 @@ ora@^3.4.0: strip-ansi "^5.2.0" wcwidth "^1.0.1" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -9893,6 +10599,15 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" +os-locale@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-5.0.0.tgz#6d26c1d95b6597c5d5317bf5fba37eccec3672e0" + integrity sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA== + dependencies: + execa "^4.0.0" + lcid "^3.0.0" + mem "^5.0.0" + os-name@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" @@ -9946,7 +10661,7 @@ p-finally@^2.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== -p-is-promise@^2.0.0: +p-is-promise@^2.0.0, p-is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== @@ -10248,7 +10963,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -10275,12 +10990,10 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.0, pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" +pirates@^4.0.1, pirates@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pixelmatch@^4.0.2: version "4.0.2" @@ -10318,10 +11031,10 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -plist@^3.0.1, plist@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.4.tgz#a62df837e3aed2bb3b735899d510c4f186019cbe" - integrity sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg== +plist@^3.0.1, plist@^3.0.2, plist@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987" + integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA== dependencies: base64-js "^1.5.1" xmlbuilder "^9.0.7" @@ -10395,6 +11108,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + process@~0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" @@ -10440,14 +11158,14 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== +prop-types@*, prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" object-assign "^4.1.1" - react-is "^16.8.1" + react-is "^16.13.1" proto-list@~1.2.1: version "1.2.4" @@ -10616,23 +11334,43 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-devtools-core@^4.13.0: - version "4.23.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.23.0.tgz#dff9d12202a472ef62632203d6de3877dc6e58be" - integrity sha512-KkzneT1LczFtebbTJlvRphIRvzuHLhI9ghfrseVv9ktBs+l2cXy8Svw5U16lzQnwU9okVEcURmGPgH79WWrlaw== +react-devtools-core@^4.13.0, react-devtools-core@^4.23.0: + version "4.24.3" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.24.3.tgz#371fef3f5c639db0dc59eeef334dd5e10ac61661" + integrity sha512-+htKZxLxDN14jhRG3+IXRiJqNSGHUiPYrMtv9e7qlZxcbKeJjVs+C/hd8kZF5rydp3faBwFN6ZpTaZnLA3/ZGA== dependencies: shell-quote "^1.6.1" ws "^7" -react-is@^16.8.1: +"react-is@^16.12.0 || ^17.0.0", react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-native-codegen@*, react-native-codegen@^0.0.17: + version "0.0.17" + resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.17.tgz#83fb814d94061cbd46667f510d2ddba35ffb50ac" + integrity sha512-7GIEUmAemH9uWwB6iYXNNsPoPgH06pxzGRmdBzK98TgFBdYJZ7CBuZFPMe4jmHQTPOkQazKZ/w5O6/71JBixmw== + dependencies: + "@babel/parser" "^7.14.0" + flow-parser "^0.121.0" + jscodeshift "^0.13.1" + nullthrows "^1.1.1" + +react-native-codegen@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.13.tgz#4cc94546fc75a5dbe9350d59c10108f2efe6bc17" + integrity sha512-rCh1P+s0Q4N6vNgS97ckafbhJRztz22+0l0VZoyQC06F07J98kI5cUByH0ATypPRIdpkMbAZc59DoPdDFc01bg== + dependencies: + "@babel/parser" "^7.14.0" + flow-parser "^0.121.0" + jscodeshift "^0.13.1" + nullthrows "^1.1.1" react-native-codegen@^0.0.7: version "0.0.7" @@ -10643,10 +11381,22 @@ react-native-codegen@^0.0.7: jscodeshift "^0.11.0" nullthrows "^1.1.1" -react-native-macos@^0.66.0-0: - version "0.66.12" - resolved "https://registry.yarnpkg.com/react-native-macos/-/react-native-macos-0.66.12.tgz#405eb7147aa9cff7874c87be2ff00214cdf9d5e7" - integrity sha512-JjWgnxb4mW1EKZal6cuxQvjOqxAiVkGlMaJt59hV+UZvdbytZQLwcc0KBs2ligGr07v3yiRyQDc/akv6oIp6Sw== +react-native-gradle-plugin@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.5.tgz#1f20d437b140eda65b6e3bdf6eb102bbab1a5a10" + integrity sha512-kGupXo+pD2mB6Z+Oyowor3qlCroiS32FNGoiGQdwU19u8o+NNhEZKwoKfC5Qt03bMZSmFlcAlTyf79vrS2BZKQ== + dependencies: + react-native-codegen "*" + +react-native-gradle-plugin@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.6.tgz#b61a9234ad2f61430937911003cddd7e15c72b45" + integrity sha512-eIlgtsmDp1jLC24dRn43hB3kEcZVqx6DUQbR0N1ABXGnMEafm9I3V3dUUeD1vh+Dy5WqijSoEwLNUPLgu5zDMg== + +react-native-macos@0.66.57: + version "0.66.57" + resolved "https://registry.yarnpkg.com/react-native-macos/-/react-native-macos-0.66.57.tgz#236a59866a33ae56280344cceb1a049209077f15" + integrity sha512-ZWMWszoOadyMzoTwgidnKtYHJkM13zNrQTwgDzZx5LbQ1x58E5itY84V1k+Zcy3Ikie3cHVSWxB22LNw+/BI6A== dependencies: "@jest/create-cache-key-function" "^27.0.1" "@react-native-community/cli" "^6.0.0" @@ -10680,10 +11430,10 @@ react-native-macos@^0.66.0-0: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-native-test-app@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/react-native-test-app/-/react-native-test-app-1.3.2.tgz#9b01389712aff0b0568a0cae6beaeb5323052351" - integrity sha512-bRfe3vzH2LilfPgpDC1BZy6GRUWHfJOjRlDYu/B3J1acUCjxxnBle8f/anrNbu4TRL2au7/5zqIkUWXTjqTuYA== +react-native-test-app@1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/react-native-test-app/-/react-native-test-app-1.3.8.tgz#a25c3729a9e6b2a3beb37653d05265a39b5df5ef" + integrity sha512-JxPgJ2FsYT9lUMo9bRGpNtTkMZIKpEkXskpdLEk6CliZvO0z5n8z7tlVDDP4AVjJrOlss/OGvfenU88YbLzDfg== dependencies: ajv "^8.0.0" chalk "^4.1.0" @@ -10693,39 +11443,40 @@ react-native-test-app@^1.3.2: uuid "^8.3.2" yargs "^16.0.0" -react-native-windows@^0.66.0-0: - version "0.66.11" - resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.66.11.tgz#93d6c5525c27747df610a1e8d2e185c1c17e32a0" - integrity sha512-gdomfTGrcJ7jAtNFOQlAiThaJIH1PPilvOqvlQRb4MLr40km7qG5v8Lw669MuG9thAlsHyjhS/cXu5sCdRvxyw== +react-native-windows@0.68.4: + version "0.68.4" + resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.68.4.tgz#8619b002c05d33e52c3aa0b871ad55789016d8d5" + integrity sha512-i4PMiFbbuKmCcYaMQs0YKpsxl9mn2m8Ij4BnOYtJji4eS108O3/bB/qLd3povWq5qu96D2anpw/KleVozvMBjw== dependencies: "@babel/runtime" "^7.0.0" "@jest/create-cache-key-function" "^27.0.1" - "@react-native-community/cli" "^6.0.0" - "@react-native-community/cli-platform-android" "^6.0.0" - "@react-native-community/cli-platform-ios" "^6.0.0" - "@react-native-windows/cli" "0.66.2" - "@react-native-windows/virtualized-list" "0.66.1" + "@react-native-community/cli" "^7.0.3" + "@react-native-community/cli-platform-android" "^7.0.1" + "@react-native-community/cli-platform-ios" "^7.0.1" + "@react-native-windows/cli" "0.68.2" + "@react-native-windows/virtualized-list" "0.68.0" "@react-native/assets" "1.0.0" - "@react-native/normalize-color" "1.0.0" + "@react-native/normalize-color" "2.0.0" "@react-native/polyfills" "2.0.0" abort-controller "^3.0.0" anser "^1.4.9" base64-js "^1.1.2" + deprecated-react-native-prop-types "^2.3.0" event-target-shim "^5.0.1" - hermes-engine "~0.9.0" + hermes-engine "~0.11.0" invariant "^2.2.4" jsc-android "^250230.2.1" - metro-babel-register "0.66.2" - metro-react-native-babel-transformer "0.66.2" - metro-runtime "0.66.2" - metro-source-map "0.66.2" + metro-react-native-babel-transformer "0.67.0" + metro-runtime "0.67.0" + metro-source-map "0.67.0" nullthrows "^1.1.1" pretty-format "^26.5.2" promise "^8.0.3" - prop-types "^15.7.2" - react-devtools-core "^4.13.0" - react-native-codegen "^0.0.7" + react-devtools-core "^4.23.0" + react-native-codegen "^0.0.13" + react-native-gradle-plugin "^0.0.5" react-refresh "^0.4.0" + react-shallow-renderer "16.14.1" regenerator-runtime "^0.13.2" scheduler "^0.20.2" source-map-support "^0.5.19" @@ -10734,40 +11485,41 @@ react-native-windows@^0.66.0-0: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-native@^0.66.0-0: - version "0.66.4" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.66.4.tgz#bf89a5fb18bd23046d889fb4de4ea2822a4d7805" - integrity sha512-9vx5dlSfQlKbbDtr8+xMon6qsmSu7jvjdXWZpEKh3XVKpUidbbODv7048gwVKX8YAel1egeR7hN8vzSeI6ssTw== +react-native@0.68.2: + version "0.68.2" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.68.2.tgz#07547cd31bb9335a7fa4135cfbdc24e067142585" + integrity sha512-qNMz+mdIirCEmlrhapAtAG+SWVx6MAiSfCbFNhfHqiqu1xw1OKXdzIrjaBEPihRC2pcORCoCHduHGQe/Pz9Yuw== dependencies: "@jest/create-cache-key-function" "^27.0.1" - "@react-native-community/cli" "^6.0.0" - "@react-native-community/cli-platform-android" "^6.0.0" - "@react-native-community/cli-platform-ios" "^6.0.0" + "@react-native-community/cli" "^7.0.3" + "@react-native-community/cli-platform-android" "^7.0.1" + "@react-native-community/cli-platform-ios" "^7.0.1" "@react-native/assets" "1.0.0" - "@react-native/normalize-color" "1.0.0" + "@react-native/normalize-color" "2.0.0" "@react-native/polyfills" "2.0.0" abort-controller "^3.0.0" anser "^1.4.9" base64-js "^1.1.2" + deprecated-react-native-prop-types "^2.3.0" event-target-shim "^5.0.1" - hermes-engine "~0.9.0" + hermes-engine "~0.11.0" invariant "^2.2.4" jsc-android "^250230.2.1" - metro-babel-register "0.66.2" - metro-react-native-babel-transformer "0.66.2" - metro-runtime "0.66.2" - metro-source-map "0.66.2" + metro-react-native-babel-transformer "0.67.0" + metro-runtime "0.67.0" + metro-source-map "0.67.0" nullthrows "^1.1.1" pretty-format "^26.5.2" promise "^8.0.3" - prop-types "^15.7.2" - react-devtools-core "^4.13.0" - react-native-codegen "^0.0.7" + react-devtools-core "^4.23.0" + react-native-codegen "^0.0.17" + react-native-gradle-plugin "^0.0.6" react-refresh "^0.4.0" + react-shallow-renderer "16.14.1" regenerator-runtime "^0.13.2" scheduler "^0.20.2" stacktrace-parser "^0.1.3" - use-subscription "^1.0.0" + use-subscription ">=1.0.0 <1.6.0" whatwg-fetch "^3.0.0" ws "^6.1.4" @@ -10776,6 +11528,14 @@ react-refresh@^0.4.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA== +react-shallow-renderer@16.14.1: + version "16.14.1" + resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz#bf0d02df8a519a558fd9b8215442efa5c840e124" + integrity sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg== + dependencies: + object-assign "^4.1.1" + react-is "^16.12.0 || ^17.0.0" + react@17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" @@ -10930,7 +11690,7 @@ readline@^1.3.0: resolved "https://registry.yarnpkg.com/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c" integrity sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw= -recast@^0.20.3: +recast@^0.20.3, recast@^0.20.4: version "0.20.5" resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.5.tgz#8e2c6c96827a1b339c634dd232957d230553ceae" integrity sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ== @@ -11191,6 +11951,14 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -11551,6 +12319,13 @@ sha@^3.0.0: dependencies: graceful-fs "^4.1.2" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shared-preferences-builder@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/shared-preferences-builder/-/shared-preferences-builder-0.0.4.tgz#842316ed07704f921dc19dad0aaf0c9f5c37eb9c" @@ -11593,10 +12368,10 @@ shell-quote@1.6.1: array-reduce "~0.0.0" jsonify "~0.0.0" -shell-quote@^1.4.3, shell-quote@^1.6.1, shell-quote@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +shell-quote@^1.4.3, shell-quote@^1.6.1, shell-quote@^1.7.2, shell-quote@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== shelljs@0.8.x, shelljs@^0.8.4: version "0.8.5" @@ -11631,14 +12406,14 @@ signale@^1.2.1: figures "^2.0.0" pkg-conf "^2.1.0" -simple-plist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.1.0.tgz#8354ab63eb3922a054c78ce96c209c532e907a23" - integrity sha512-2i5Tc0BYAqppM7jVzmNrI+aEUntPolIq4fDgji6WuNNn1D/qYdn2KwoLhZdzQkE04lu9L5tUoeJsjuJAvd+lFg== +simple-plist@^1.0.0, simple-plist@^1.1.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017" + integrity sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw== dependencies: - bplist-creator "0.0.8" - bplist-parser "0.2.0" - plist "^3.0.1" + bplist-creator "0.1.0" + bplist-parser "0.3.1" + plist "^3.0.5" simple-swizzle@^0.2.2: version "0.2.2" @@ -11917,7 +12692,7 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -stream-buffers@~2.2.0: +stream-buffers@2.2.x: version "2.2.0" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= @@ -12131,6 +12906,13 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-hyperlinks@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" @@ -12233,7 +13015,7 @@ temp@0.8.3: os-tmpdir "^1.0.0" rimraf "~2.2.6" -temp@^0.8.1: +temp@^0.8.1, temp@^0.8.4: version "0.8.4" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== @@ -12424,6 +13206,11 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + traverse@~0.6.6: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" @@ -12456,10 +13243,10 @@ tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== -tslib@^2.0.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.0.1, tslib@^2.2.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== tsutils@^3.14.0: version "3.17.1" @@ -12475,6 +13262,11 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +tunnel@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" + integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -12732,10 +13524,10 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" -use-subscription@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.4.1.tgz#edcbcc220f1adb2dd4fa0b2f61b6cc308e620069" - integrity sha512-7+IIwDG/4JICrWHL/Q/ZPK5yozEnvRm6vHImu0LKwQlmWGKeiF7mbAenLlK/cTNXrTtXHU/SFASQHzB6+oSJMQ== +"use-subscription@>=1.0.0 <1.6.0", use-subscription@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" + integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA== dependencies: object-assign "^4.1.1" @@ -12803,6 +13595,11 @@ uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + uuid@^8.0.0, uuid@^8.3.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -12962,6 +13759,11 @@ webdriverio@^6.0.2: serialize-error "^7.0.0" webdriver "6.4.2" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -12989,6 +13791,14 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whatwg-url@^8.0.0, whatwg-url@^8.5.0: version "8.7.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" @@ -13171,7 +13981,7 @@ ws@^6.1.4: dependencies: async-limiter "~1.0.0" -ws@^7, ws@^7.0.0, ws@^7.2.3, ws@^7.4.6: +ws@^7, ws@^7.0.0, ws@^7.2.3, ws@^7.4.6, ws@^7.5.1: version "7.5.7" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== @@ -13184,6 +13994,14 @@ xcode@^2.0.0: simple-plist "^1.0.0" uuid "^3.3.2" +xcode@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" + integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA== + dependencies: + simple-plist "^1.1.0" + uuid "^7.0.3" + xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" @@ -13228,7 +14046,7 @@ xml-parser@^1.2.1: dependencies: debug "^2.2.0" -xml2js@^0.4.17, xml2js@^0.4.5: +xml2js@^0.4.17, xml2js@^0.4.19, xml2js@^0.4.5: version "0.4.23" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== From e0f79b46778cd82f319f6f3895282b439f51f1de Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 9 Jun 2022 20:02:22 +0000 Subject: [PATCH 022/104] chore(release): 11.22.0 [skip ci] # [11.22.0](https://github.com/react-native-webview/react-native-webview/compare/v11.21.2...v11.22.0) (2022-06-09) ### Features * **refactor:** remove findnodehandle, use function components & codegenNativeCommands ([#2508](https://github.com/react-native-webview/react-native-webview/issues/2508)) ([6b8e4f3](https://github.com/react-native-webview/react-native-webview/commit/6b8e4f3f5f3cc006ebca8cb3c7ab692805824685)), closes [#2518](https://github.com/react-native-webview/react-native-webview/issues/2518) [#2532](https://github.com/react-native-webview/react-native-webview/issues/2532) [#2517](https://github.com/react-native-webview/react-native-webview/issues/2517) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cbe060dc5e..c4246eefb2 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.21.2", + "version": "11.22.0", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From a68df8526527a8fa5a21f62eea1d60e956a833db Mon Sep 17 00:00:00 2001 From: Matias Korhonen Date: Fri, 10 Jun 2022 22:34:02 +0300 Subject: [PATCH 023/104] chore(formatting): Re-indent the Objective-C code to 2 spaces (#2534) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Xcode: Editor → Structure → Re-indent --- apple/RNCWKProcessPoolManager.m | 22 +- apple/RNCWebView.h | 12 +- apple/RNCWebView.m | 1046 +++++++++++----------- apple/RNCWebViewManager.h | 4 +- apple/RNCWebViewManager.m | 24 +- ios/RNCWebView.xcodeproj/project.pbxproj | 2 + 6 files changed, 556 insertions(+), 554 deletions(-) diff --git a/apple/RNCWKProcessPoolManager.m b/apple/RNCWKProcessPoolManager.m index 27952b86c0..2b38ffe22b 100644 --- a/apple/RNCWKProcessPoolManager.m +++ b/apple/RNCWKProcessPoolManager.m @@ -9,27 +9,27 @@ #import "RNCWKProcessPoolManager.h" @interface RNCWKProcessPoolManager() { - WKProcessPool *_sharedProcessPool; + WKProcessPool *_sharedProcessPool; } @end @implementation RNCWKProcessPoolManager + (id) sharedManager { - static RNCWKProcessPoolManager *_sharedManager = nil; - @synchronized(self) { - if(_sharedManager == nil) { - _sharedManager = [[super alloc] init]; - } - return _sharedManager; + static RNCWKProcessPoolManager *_sharedManager = nil; + @synchronized(self) { + if(_sharedManager == nil) { + _sharedManager = [[super alloc] init]; } + return _sharedManager; + } } - (WKProcessPool *)sharedProcessPool { - if (!_sharedProcessPool) { - _sharedProcessPool = [[WKProcessPool alloc] init]; - } - return _sharedProcessPool; + if (!_sharedProcessPool) { + _sharedProcessPool = [[WKProcessPool alloc] init]; + } + return _sharedProcessPool; } @end diff --git a/apple/RNCWebView.h b/apple/RNCWebView.h index dfc5312fa1..90c9d62abd 100644 --- a/apple/RNCWebView.h +++ b/apple/RNCWebView.h @@ -10,11 +10,11 @@ #import typedef enum RNCWebViewPermissionGrantType : NSUInteger { - RNCWebViewPermissionGrantType_GrantIfSameHost_ElsePrompt, - RNCWebViewPermissionGrantType_GrantIfSameHost_ElseDeny, - RNCWebViewPermissionGrantType_Deny, - RNCWebViewPermissionGrantType_Grant, - RNCWebViewPermissionGrantType_Prompt + RNCWebViewPermissionGrantType_GrantIfSameHost_ElsePrompt, + RNCWebViewPermissionGrantType_GrantIfSameHost_ElseDeny, + RNCWebViewPermissionGrantType_Deny, + RNCWebViewPermissionGrantType_Grant, + RNCWebViewPermissionGrantType_Prompt } RNCWebViewPermissionGrantType; @class RNCWebView; @@ -22,7 +22,7 @@ typedef enum RNCWebViewPermissionGrantType : NSUInteger { @protocol RNCWebViewDelegate - (BOOL)webView:(RNCWebView *_Nonnull)webView - shouldStartLoadForRequest:(NSMutableDictionary *_Nonnull)request +shouldStartLoadForRequest:(NSMutableDictionary *_Nonnull)request withCallback:(RCTDirectEventBlock _Nonnull)callback; @end diff --git a/apple/RNCWebView.m b/apple/RNCWebView.m index 63b19ea44f..97b2a5d052 100644 --- a/apple/RNCWebView.m +++ b/apple/RNCWebView.m @@ -34,16 +34,16 @@ @interface _SwizzleHelperWK : UIView @implementation _SwizzleHelperWK -(id)inputAccessoryView { - if (_webView == nil) { - return nil; - } - - if ([_webView respondsToSelector:@selector(inputAssistantItem)]) { - UITextInputAssistantItem *inputAssistantItem = [_webView inputAssistantItem]; - inputAssistantItem.leadingBarButtonGroups = @[]; - inputAssistantItem.trailingBarButtonGroups = @[]; - } + if (_webView == nil) { return nil; + } + + if ([_webView respondsToSelector:@selector(inputAssistantItem)]) { + UITextInputAssistantItem *inputAssistantItem = [_webView inputAssistantItem]; + inputAssistantItem.leadingBarButtonGroups = @[]; + inputAssistantItem.trailingBarButtonGroups = @[]; + } + return nil; } @end #endif // !TARGET_OS_OSX @@ -66,9 +66,9 @@ - (void)scrollWheel:(NSEvent *)theEvent { @interface RNCWebView () +RCTAutoInsetsProtocol> @property (nonatomic, copy) RCTDirectEventBlock onFileDownload; @property (nonatomic, copy) RCTDirectEventBlock onLoadingStart; @@ -99,7 +99,7 @@ @implementation RNCWebView #endif // !TARGET_OS_OSX BOOL _savedHideKeyboardAccessoryView; BOOL _savedKeyboardDisplayRequiresUserAction; - + // Workaround for StatusBar appearance bug for iOS 12 // https://github.com/react-native-webview/react-native-webview/issues/62 BOOL _isFullScreenVideoOpen; @@ -107,7 +107,7 @@ @implementation RNCWebView UIStatusBarStyle _savedStatusBarStyle; #endif // !TARGET_OS_OSX BOOL _savedStatusBarHidden; - + #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 /* __IPHONE_11_0 */ UIScrollViewContentInsetAdjustmentBehavior _savedContentInsetAdjustmentBehavior; #endif @@ -119,11 +119,11 @@ @implementation RNCWebView - (instancetype)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { - #if !TARGET_OS_OSX +#if !TARGET_OS_OSX super.backgroundColor = [UIColor clearColor]; - #else +#else super.backgroundColor = [RCTUIColor clearColor]; - #endif // !TARGET_OS_OSX +#endif // !TARGET_OS_OSX _bounces = YES; _scrollEnabled = YES; _showsHorizontalScrollIndicator = YES; @@ -133,15 +133,15 @@ - (instancetype)initWithFrame:(CGRect)frame _autoManageStatusBarEnabled = YES; _contentInset = UIEdgeInsetsZero; _savedKeyboardDisplayRequiresUserAction = YES; - #if !TARGET_OS_OSX +#if !TARGET_OS_OSX _savedStatusBarStyle = RCTSharedApplication().statusBarStyle; _savedStatusBarHidden = RCTSharedApplication().statusBarHidden; - #endif // !TARGET_OS_OSX +#endif // !TARGET_OS_OSX _injectedJavaScript = nil; _injectedJavaScriptForMainFrameOnly = YES; _injectedJavaScriptBeforeContentLoaded = nil; _injectedJavaScriptBeforeContentLoadedForMainFrameOnly = YES; - + #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 /* __IPHONE_11_0 */ _savedContentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; #endif @@ -153,41 +153,41 @@ - (instancetype)initWithFrame:(CGRect)frame _mediaCapturePermissionGrantType = RNCWebViewPermissionGrantType_Prompt; #endif } - + #if !TARGET_OS_OSX - [[NSNotificationCenter defaultCenter]addObserver:self - selector:@selector(appDidBecomeActive) - name:UIApplicationDidBecomeActiveNotification - object:nil]; - - [[NSNotificationCenter defaultCenter]addObserver:self - selector:@selector(appWillResignActive) - name:UIApplicationWillResignActiveNotification - object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self + selector:@selector(appDidBecomeActive) + name:UIApplicationDidBecomeActiveNotification + object:nil]; + + [[NSNotificationCenter defaultCenter]addObserver:self + selector:@selector(appWillResignActive) + name:UIApplicationWillResignActiveNotification + object:nil]; if (@available(iOS 12.0, *)) { // Workaround for a keyboard dismissal bug present in iOS 12 // https://openradar.appspot.com/radar?id=5018321736957952 [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(keyboardWillHide) - name:UIKeyboardWillHideNotification object:nil]; + addObserver:self + selector:@selector(keyboardWillHide) + name:UIKeyboardWillHideNotification object:nil]; [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(keyboardWillShow) - name:UIKeyboardWillShowNotification object:nil]; - + addObserver:self + selector:@selector(keyboardWillShow) + name:UIKeyboardWillShowNotification object:nil]; + // Workaround for StatusBar appearance bug for iOS 12 // https://github.com/react-native-webview/react-native-webview/issues/62 - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(showFullScreenVideoStatusBars) - name:UIWindowDidBecomeVisibleNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(hideFullScreenVideoStatusBars) - name:UIWindowDidBecomeHiddenNotification - object:nil]; - + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(showFullScreenVideoStatusBars) + name:UIWindowDidBecomeVisibleNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(hideFullScreenVideoStatusBars) + name:UIWindowDidBecomeHiddenNotification + object:nil]; + } #endif // !TARGET_OS_OSX return self; @@ -195,38 +195,38 @@ - (instancetype)initWithFrame:(CGRect)frame #if !TARGET_OS_OSX - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { - // Only allow long press gesture - if ([otherGestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) { - return YES; - }else{ - return NO; - } + // Only allow long press gesture + if ([otherGestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) { + return YES; + }else{ + return NO; + } } // Listener for long presses - (void)startLongPress:(UILongPressGestureRecognizer *)pressSender { - // When a long press ends, bring up our custom UIMenu - if(pressSender.state == UIGestureRecognizerStateEnded) { - if (!self.menuItems || self.menuItems.count == 0) { - return; - } - UIMenuController *menuController = [UIMenuController sharedMenuController]; - NSMutableArray *menuControllerItems = [NSMutableArray arrayWithCapacity:self.menuItems.count]; - - for(NSDictionary *menuItem in self.menuItems) { - NSString *menuItemLabel = [RCTConvert NSString:menuItem[@"label"]]; - NSString *menuItemKey = [RCTConvert NSString:menuItem[@"key"]]; - NSString *sel = [NSString stringWithFormat:@"%@%@", CUSTOM_SELECTOR, menuItemKey]; - UIMenuItem *item = [[UIMenuItem alloc] initWithTitle: menuItemLabel - action: NSSelectorFromString(sel)]; - - [menuControllerItems addObject: item]; - } - - menuController.menuItems = menuControllerItems; - [menuController setMenuVisible:YES animated:YES]; + // When a long press ends, bring up our custom UIMenu + if(pressSender.state == UIGestureRecognizerStateEnded) { + if (!self.menuItems || self.menuItems.count == 0) { + return; + } + UIMenuController *menuController = [UIMenuController sharedMenuController]; + NSMutableArray *menuControllerItems = [NSMutableArray arrayWithCapacity:self.menuItems.count]; + + for(NSDictionary *menuItem in self.menuItems) { + NSString *menuItemLabel = [RCTConvert NSString:menuItem[@"label"]]; + NSString *menuItemKey = [RCTConvert NSString:menuItem[@"key"]]; + NSString *sel = [NSString stringWithFormat:@"%@%@", CUSTOM_SELECTOR, menuItemKey]; + UIMenuItem *item = [[UIMenuItem alloc] initWithTitle: menuItemLabel + action: NSSelectorFromString(sel)]; + + [menuControllerItems addObject: item]; } + + menuController.menuItems = menuControllerItems; + [menuController setMenuVisible:YES animated:YES]; + } } #endif // !TARGET_OS_OSX @@ -238,9 +238,9 @@ - (void)dealloc - (void)tappedMenuItem:(NSString *)eventType { - // Get the selected text - // NOTE: selecting text in an iframe or shadow DOM will not work - [self.webView evaluateJavaScript: @"window.getSelection().toString()" completionHandler: ^(id result, NSError *error) { + // Get the selected text + // NOTE: selecting text in an iframe or shadow DOM will not work + [self.webView evaluateJavaScript: @"window.getSelection().toString()" completionHandler: ^(id result, NSError *error) { if (error != nil) { RCTLogWarn(@"%@", [NSString stringWithFormat:@"Error evaluating injectedJavaScript: This is possibly due to an unsupported return type. Try adding true to the end of your injectedJavaScript string. %@", error]); } else { @@ -250,9 +250,9 @@ - (void)tappedMenuItem:(NSString *)eventType NSDictionary *selectedMenuItem = filteredMenuItems[0]; NSString *label = [RCTConvert NSString:selectedMenuItem[@"label"]]; self.onCustomMenuSelection(@{ - @"key": eventType, - @"label": label, - @"selectedText": result + @"key": eventType, + @"label": label, + @"selectedText": result }); } else { RCTLogWarn(@"Error evaluating onCustomMenuSelection: You must implement an `onCustomMenuSelection` callback when using custom menu items"); @@ -265,43 +265,43 @@ - (void)tappedMenuItem:(NSString *)eventType // https://developer.apple.com/documentation/objectivec/nsobject/1571960-methodsignatureforselector - (NSMethodSignature *)methodSignatureForSelector:(SEL)sel { - NSMethodSignature *existingSelector = [super methodSignatureForSelector:sel]; - if (existingSelector) { - return existingSelector; - } - return [super methodSignatureForSelector:@selector(tappedMenuItem:)]; + NSMethodSignature *existingSelector = [super methodSignatureForSelector:sel]; + if (existingSelector) { + return existingSelector; + } + return [super methodSignatureForSelector:@selector(tappedMenuItem:)]; } // Needed to forward messages to other objects // https://developer.apple.com/documentation/objectivec/nsobject/1571955-forwardinvocation - (void)forwardInvocation:(NSInvocation *)invocation { - NSString *sel = NSStringFromSelector([invocation selector]); - NSRange match = [sel rangeOfString:CUSTOM_SELECTOR]; - if (match.location == 0) { - [self tappedMenuItem:[sel substringFromIndex:17]]; - } else { - [super forwardInvocation:invocation]; - } + NSString *sel = NSStringFromSelector([invocation selector]); + NSRange match = [sel rangeOfString:CUSTOM_SELECTOR]; + if (match.location == 0) { + [self tappedMenuItem:[sel substringFromIndex:17]]; + } else { + [super forwardInvocation:invocation]; + } } // Allows the instance to respond to UIMenuController Actions - (BOOL)canBecomeFirstResponder { - return YES; + return YES; } // Control which items show up on the UIMenuController - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { - NSString *sel = NSStringFromSelector(action); - // Do any of them have our custom keys? - NSRange match = [sel rangeOfString:CUSTOM_SELECTOR]; - - if (match.location == 0) { - return YES; - } - return NO; + NSString *sel = NSStringFromSelector(action); + // Do any of them have our custom keys? + NSRange match = [sel rangeOfString:CUSTOM_SELECTOR]; + + if (match.location == 0) { + return YES; + } + return NO; } /** @@ -355,7 +355,7 @@ - (WKWebViewConfiguration *)setUpWkWebViewConfig wkWebViewConfig.processPool = [[RNCWKProcessPoolManager sharedManager] sharedProcessPool]; } wkWebViewConfig.userContentController = [WKUserContentController new]; - + #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 /* iOS 13 */ if (@available(iOS 13.0, *)) { WKWebpagePreferences *pagePrefs = [[WKWebpagePreferences alloc]init]; @@ -363,7 +363,7 @@ - (WKWebViewConfiguration *)setUpWkWebViewConfig wkWebViewConfig.defaultWebpagePreferences = pagePrefs; } #endif - + #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000 /* iOS 14 */ if (@available(iOS 14.0, *)) { if ([wkWebViewConfig respondsToSelector:@selector(limitsNavigationsToAppBoundDomains)]) { @@ -373,32 +373,32 @@ - (WKWebViewConfiguration *)setUpWkWebViewConfig } } #endif - + // Shim the HTML5 history API: [wkWebViewConfig.userContentController addScriptMessageHandler:[[RNCWeakScriptMessageDelegate alloc] initWithDelegate:self] name:HistoryShimName]; [self resetupScripts:wkWebViewConfig]; - + if(@available(macos 10.11, ios 9.0, *)) { wkWebViewConfig.allowsAirPlayForMediaPlayback = _allowsAirPlayForMediaPlayback; } - + #if !TARGET_OS_OSX wkWebViewConfig.allowsInlineMediaPlayback = _allowsInlineMediaPlayback; #if WEBKIT_IOS_10_APIS_AVAILABLE wkWebViewConfig.mediaTypesRequiringUserActionForPlayback = _mediaPlaybackRequiresUserAction - ? WKAudiovisualMediaTypeAll - : WKAudiovisualMediaTypeNone; + ? WKAudiovisualMediaTypeAll + : WKAudiovisualMediaTypeNone; wkWebViewConfig.dataDetectorTypes = _dataDetectorTypes; #else wkWebViewConfig.mediaPlaybackRequiresUserAction = _mediaPlaybackRequiresUserAction; #endif #endif // !TARGET_OS_OSX - + if (_applicationNameForUserAgent) { - wkWebViewConfig.applicationNameForUserAgent = [NSString stringWithFormat:@"%@ %@", wkWebViewConfig.applicationNameForUserAgent, _applicationNameForUserAgent]; + wkWebViewConfig.applicationNameForUserAgent = [NSString stringWithFormat:@"%@ %@", wkWebViewConfig.applicationNameForUserAgent, _applicationNameForUserAgent]; } - + return wkWebViewConfig; } @@ -411,7 +411,7 @@ - (void)didMoveToWindow #else _webView = [[RNCWKWebView alloc] initWithFrame:self.bounds configuration: wkWebViewConfig]; #endif // !TARGET_OS_OSX - + [self setBackgroundColor: _savedBackgroundColor]; #if !TARGET_OS_OSX _webView.scrollView.delegate = self; @@ -420,11 +420,11 @@ - (void)didMoveToWindow _webView.navigationDelegate = self; #if !TARGET_OS_OSX if (_pullToRefreshEnabled) { - [self addPullToRefreshControl]; + [self addPullToRefreshControl]; } _webView.scrollView.scrollEnabled = _scrollEnabled; _webView.scrollView.pagingEnabled = _pagingEnabled; - //For UIRefreshControl to work correctly, the bounces should always be true + //For UIRefreshControl to work correctly, the bounces should always be true _webView.scrollView.bounces = _pullToRefreshEnabled || _bounces; _webView.scrollView.showsHorizontalScrollIndicator = _showsHorizontalScrollIndicator; _webView.scrollView.showsVerticalScrollIndicator = _showsVerticalScrollIndicator; @@ -433,7 +433,7 @@ - (void)didMoveToWindow _webView.allowsLinkPreview = _allowsLinkPreview; [_webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil]; _webView.allowsBackForwardNavigationGestures = _allowsBackForwardNavigationGestures; - + _webView.customUserAgent = _userAgent; #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 /* __IPHONE_11_0 */ if ([_webView.scrollView respondsToSelector:@selector(setContentInsetAdjustmentBehavior:)]) { @@ -445,7 +445,7 @@ - (void)didMoveToWindow _webView.scrollView.automaticallyAdjustsScrollIndicatorInsets = _savedAutomaticallyAdjustsScrollIndicatorInsets; } #endif - + [self addSubview:_webView]; [self setHideKeyboardAccessoryView: _savedHideKeyboardAccessoryView]; [self setKeyboardDisplayRequiresUserAction: _savedKeyboardDisplayRequiresUserAction]; @@ -456,7 +456,7 @@ - (void)didMoveToWindow if (self.menuItems != nil) { UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(startLongPress:)]; longPress.delegate = self; - + longPress.minimumPressDuration = 0.4f; longPress.numberOfTouchesRequired = 1; longPress.cancelsTouchesInView = YES; @@ -473,92 +473,92 @@ - (void)setAllowsBackForwardNavigationGestures:(BOOL)allowsBackForwardNavigation - (void)removeFromSuperview { - if (_webView) { - [_webView.configuration.userContentController removeScriptMessageHandlerForName:HistoryShimName]; - [_webView.configuration.userContentController removeScriptMessageHandlerForName:MessageHandlerName]; - [_webView removeObserver:self forKeyPath:@"estimatedProgress"]; - [_webView removeFromSuperview]; + if (_webView) { + [_webView.configuration.userContentController removeScriptMessageHandlerForName:HistoryShimName]; + [_webView.configuration.userContentController removeScriptMessageHandlerForName:MessageHandlerName]; + [_webView removeObserver:self forKeyPath:@"estimatedProgress"]; + [_webView removeFromSuperview]; #if !TARGET_OS_OSX - _webView.scrollView.delegate = nil; + _webView.scrollView.delegate = nil; #endif // !TARGET_OS_OSX - _webView = nil; - if (_onContentProcessDidTerminate) { - NSMutableDictionary *event = [self baseEvent]; - _onContentProcessDidTerminate(event); - } + _webView = nil; + if (_onContentProcessDidTerminate) { + NSMutableDictionary *event = [self baseEvent]; + _onContentProcessDidTerminate(event); } - - [super removeFromSuperview]; + } + + [super removeFromSuperview]; } #if !TARGET_OS_OSX -(void)showFullScreenVideoStatusBars { #pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (!_autoManageStatusBarEnabled) { - return; - } - - _isFullScreenVideoOpen = YES; - RCTUnsafeExecuteOnMainQueueSync(^{ - [RCTSharedApplication() setStatusBarStyle:self->_savedStatusBarStyle animated:YES]; - }); + if (!_autoManageStatusBarEnabled) { + return; + } + + _isFullScreenVideoOpen = YES; + RCTUnsafeExecuteOnMainQueueSync(^{ + [RCTSharedApplication() setStatusBarStyle:self->_savedStatusBarStyle animated:YES]; + }); #pragma clang diagnostic pop } -(void)hideFullScreenVideoStatusBars { #pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (!_autoManageStatusBarEnabled) { - return; - } - - _isFullScreenVideoOpen = NO; - RCTUnsafeExecuteOnMainQueueSync(^{ - [RCTSharedApplication() setStatusBarHidden:self->_savedStatusBarHidden animated:YES]; - [RCTSharedApplication() setStatusBarStyle:self->_savedStatusBarStyle animated:YES]; - }); + if (!_autoManageStatusBarEnabled) { + return; + } + + _isFullScreenVideoOpen = NO; + RCTUnsafeExecuteOnMainQueueSync(^{ + [RCTSharedApplication() setStatusBarHidden:self->_savedStatusBarHidden animated:YES]; + [RCTSharedApplication() setStatusBarStyle:self->_savedStatusBarStyle animated:YES]; + }); #pragma clang diagnostic pop } -(void)keyboardWillHide { - keyboardTimer = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(keyboardDisplacementFix) userInfo:nil repeats:false]; - [[NSRunLoop mainRunLoop] addTimer:keyboardTimer forMode:NSRunLoopCommonModes]; + keyboardTimer = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(keyboardDisplacementFix) userInfo:nil repeats:false]; + [[NSRunLoop mainRunLoop] addTimer:keyboardTimer forMode:NSRunLoopCommonModes]; } -(void)keyboardWillShow { - if (keyboardTimer != nil) { - [keyboardTimer invalidate]; - } + if (keyboardTimer != nil) { + [keyboardTimer invalidate]; + } } -(void)keyboardDisplacementFix { - // Additional viewport checks to prevent unintentional scrolls - UIScrollView *scrollView = self.webView.scrollView; - double maxContentOffset = scrollView.contentSize.height - scrollView.frame.size.height; - if (maxContentOffset < 0) { - maxContentOffset = 0; - } - if (scrollView.contentOffset.y > maxContentOffset) { - // https://stackoverflow.com/a/9637807/824966 - [UIView animateWithDuration:.25 animations:^{ - scrollView.contentOffset = CGPointMake(0, maxContentOffset); - }]; - } + // Additional viewport checks to prevent unintentional scrolls + UIScrollView *scrollView = self.webView.scrollView; + double maxContentOffset = scrollView.contentSize.height - scrollView.frame.size.height; + if (maxContentOffset < 0) { + maxContentOffset = 0; + } + if (scrollView.contentOffset.y > maxContentOffset) { + // https://stackoverflow.com/a/9637807/824966 + [UIView animateWithDuration:.25 animations:^{ + scrollView.contentOffset = CGPointMake(0, maxContentOffset); + }]; + } } #endif // !TARGET_OS_OSX - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ - if ([keyPath isEqual:@"estimatedProgress"] && object == self.webView) { - if(_onLoadingProgress){ - NSMutableDictionary *event = [self baseEvent]; - [event addEntriesFromDictionary:@{@"progress":[NSNumber numberWithDouble:self.webView.estimatedProgress]}]; - _onLoadingProgress(event); - } - }else{ - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + if ([keyPath isEqual:@"estimatedProgress"] && object == self.webView) { + if(_onLoadingProgress){ + NSMutableDictionary *event = [self baseEvent]; + [event addEntriesFromDictionary:@{@"progress":[NSNumber numberWithDouble:self.webView.estimatedProgress]}]; + _onLoadingProgress(event); } + }else{ + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } } #if !TARGET_OS_OSX @@ -571,7 +571,7 @@ - (void)setBackgroundColor:(RCTUIColor *)backgroundColor if (_webView == nil) { return; } - + CGFloat alpha = CGColorGetAlpha(backgroundColor.CGColor); BOOL opaque = (alpha == 1.0); #if !TARGET_OS_OSX @@ -592,27 +592,27 @@ - (void)setBackgroundColor:(RCTUIColor *)backgroundColor #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 /* __IPHONE_11_0 */ - (void)setContentInsetAdjustmentBehavior:(UIScrollViewContentInsetAdjustmentBehavior)behavior { - _savedContentInsetAdjustmentBehavior = behavior; - if (_webView == nil) { - return; - } - - if ([_webView.scrollView respondsToSelector:@selector(setContentInsetAdjustmentBehavior:)]) { - CGPoint contentOffset = _webView.scrollView.contentOffset; - _webView.scrollView.contentInsetAdjustmentBehavior = behavior; - _webView.scrollView.contentOffset = contentOffset; - } + _savedContentInsetAdjustmentBehavior = behavior; + if (_webView == nil) { + return; + } + + if ([_webView.scrollView respondsToSelector:@selector(setContentInsetAdjustmentBehavior:)]) { + CGPoint contentOffset = _webView.scrollView.contentOffset; + _webView.scrollView.contentInsetAdjustmentBehavior = behavior; + _webView.scrollView.contentOffset = contentOffset; + } } #endif #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 /* __IPHONE_13_0 */ - (void)setAutomaticallyAdjustsScrollIndicatorInsets:(BOOL)automaticallyAdjustsScrollIndicatorInsets{ - _savedAutomaticallyAdjustsScrollIndicatorInsets = automaticallyAdjustsScrollIndicatorInsets; - if (_webView == nil) { - return; - } - if ([_webView.scrollView respondsToSelector:@selector(setAutomaticallyAdjustsScrollIndicatorInsets:)]) { - _webView.scrollView.automaticallyAdjustsScrollIndicatorInsets = automaticallyAdjustsScrollIndicatorInsets; - } + _savedAutomaticallyAdjustsScrollIndicatorInsets = automaticallyAdjustsScrollIndicatorInsets; + if (_webView == nil) { + return; + } + if ([_webView.scrollView respondsToSelector:@selector(setAutomaticallyAdjustsScrollIndicatorInsets:)]) { + _webView.scrollView.automaticallyAdjustsScrollIndicatorInsets = automaticallyAdjustsScrollIndicatorInsets; + } } #endif /** @@ -620,7 +620,7 @@ - (void)setAutomaticallyAdjustsScrollIndicatorInsets:(BOOL)automaticallyAdjustsS * - window.webkit.messageHandlers[MessageHandlerName].postMessage */ - (void)userContentController:(WKUserContentController *)userContentController - didReceiveScriptMessage:(WKScriptMessage *)message + didReceiveScriptMessage:(WKScriptMessage *)message { if ([message.name isEqualToString:HistoryShimName]) { if (_onLoadingFinish) { @@ -641,7 +641,7 @@ - (void)setSource:(NSDictionary *)source { if (![_source isEqualToDictionary:source]) { _source = [source copy]; - + if (_webView != nil) { [self visitSource]; } @@ -652,7 +652,7 @@ - (void)setAllowingReadAccessToURL:(NSString *)allowingReadAccessToURL { if (![_allowingReadAccessToURL isEqualToString:allowingReadAccessToURL]) { _allowingReadAccessToURL = [allowingReadAccessToURL copy]; - + if (_webView != nil) { [self visitSource]; } @@ -678,154 +678,154 @@ - (void)refreshContentInset - (void)visitSource { - // Check for a static html source first - NSString *html = [RCTConvert NSString:_source[@"html"]]; - if (html) { - NSURL *baseURL = [RCTConvert NSURL:_source[@"baseUrl"]]; - if (!baseURL) { - baseURL = [NSURL URLWithString:@"about:blank"]; - } - [_webView loadHTMLString:html baseURL:baseURL]; - return; + // Check for a static html source first + NSString *html = [RCTConvert NSString:_source[@"html"]]; + if (html) { + NSURL *baseURL = [RCTConvert NSURL:_source[@"baseUrl"]]; + if (!baseURL) { + baseURL = [NSURL URLWithString:@"about:blank"]; } - // Add cookie for subsequent resource requests sent by page itself, if cookie was set in headers on WebView - NSString *headerCookie = [RCTConvert NSString:_source[@"headers"][@"cookie"]]; - if(headerCookie) { - NSDictionary *headers = [NSDictionary dictionaryWithObjectsAndKeys:headerCookie,@"Set-Cookie",nil]; - NSURL *urlString = [NSURL URLWithString:_source[@"uri"]]; - NSArray *httpCookies = [NSHTTPCookie cookiesWithResponseHeaderFields:headers forURL:urlString]; - [self writeCookiesToWebView:httpCookies completion:nil]; + [_webView loadHTMLString:html baseURL:baseURL]; + return; + } + // Add cookie for subsequent resource requests sent by page itself, if cookie was set in headers on WebView + NSString *headerCookie = [RCTConvert NSString:_source[@"headers"][@"cookie"]]; + if(headerCookie) { + NSDictionary *headers = [NSDictionary dictionaryWithObjectsAndKeys:headerCookie,@"Set-Cookie",nil]; + NSURL *urlString = [NSURL URLWithString:_source[@"uri"]]; + NSArray *httpCookies = [NSHTTPCookie cookiesWithResponseHeaderFields:headers forURL:urlString]; + [self writeCookiesToWebView:httpCookies completion:nil]; + } + + NSURLRequest *request = [self requestForSource:_source]; + + [self syncCookiesToWebView:^{ + // Because of the way React works, as pages redirect, we actually end up + // passing the redirect urls back here, so we ignore them if trying to load + // the same url. We'll expose a call to 'reload' to allow a user to load + // the existing page. + if ([request.URL isEqual:_webView.URL]) { + return; } - - NSURLRequest *request = [self requestForSource:_source]; - - [self syncCookiesToWebView:^{ - // Because of the way React works, as pages redirect, we actually end up - // passing the redirect urls back here, so we ignore them if trying to load - // the same url. We'll expose a call to 'reload' to allow a user to load - // the existing page. - if ([request.URL isEqual:_webView.URL]) { - return; - } - if (!request.URL) { - // Clear the webview - [_webView loadHTMLString:@"" baseURL:nil]; - return; - } - if (request.URL.host) { - [_webView loadRequest:request]; - } - else { - NSURL* readAccessUrl = _allowingReadAccessToURL ? [RCTConvert NSURL:_allowingReadAccessToURL] : request.URL; - [_webView loadFileURL:request.URL allowingReadAccessToURL:readAccessUrl]; - } - }]; + if (!request.URL) { + // Clear the webview + [_webView loadHTMLString:@"" baseURL:nil]; + return; + } + if (request.URL.host) { + [_webView loadRequest:request]; + } + else { + NSURL* readAccessUrl = _allowingReadAccessToURL ? [RCTConvert NSURL:_allowingReadAccessToURL] : request.URL; + [_webView loadFileURL:request.URL allowingReadAccessToURL:readAccessUrl]; + } + }]; } #if !TARGET_OS_OSX -(void)setKeyboardDisplayRequiresUserAction:(BOOL)keyboardDisplayRequiresUserAction { - if (_webView == nil) { - _savedKeyboardDisplayRequiresUserAction = keyboardDisplayRequiresUserAction; - return; - } - - if (_savedKeyboardDisplayRequiresUserAction == true) { - return; - } - - UIView* subview; - - for (UIView* view in _webView.scrollView.subviews) { - if([[view.class description] hasPrefix:@"WK"]) - subview = view; - } - - if(subview == nil) return; - - Class class = subview.class; - - NSOperatingSystemVersion iOS_11_3_0 = (NSOperatingSystemVersion){11, 3, 0}; - NSOperatingSystemVersion iOS_12_2_0 = (NSOperatingSystemVersion){12, 2, 0}; - NSOperatingSystemVersion iOS_13_0_0 = (NSOperatingSystemVersion){13, 0, 0}; - - Method method; - IMP override; - - if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion: iOS_13_0_0]) { - // iOS 13.0.0 - Future - SEL selector = sel_getUid("_elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:"); - method = class_getInstanceMethod(class, selector); - IMP original = method_getImplementation(method); - override = imp_implementationWithBlock(^void(id me, void* arg0, BOOL arg1, BOOL arg2, BOOL arg3, id arg4) { - ((void (*)(id, SEL, void*, BOOL, BOOL, BOOL, id))original)(me, selector, arg0, TRUE, arg2, arg3, arg4); - }); - } - else if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion: iOS_12_2_0]) { - // iOS 12.2.0 - iOS 13.0.0 - SEL selector = sel_getUid("_elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:"); - method = class_getInstanceMethod(class, selector); - IMP original = method_getImplementation(method); - override = imp_implementationWithBlock(^void(id me, void* arg0, BOOL arg1, BOOL arg2, BOOL arg3, id arg4) { - ((void (*)(id, SEL, void*, BOOL, BOOL, BOOL, id))original)(me, selector, arg0, TRUE, arg2, arg3, arg4); - }); - } - else if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion: iOS_11_3_0]) { - // iOS 11.3.0 - 12.2.0 - SEL selector = sel_getUid("_startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:"); - method = class_getInstanceMethod(class, selector); - IMP original = method_getImplementation(method); - override = imp_implementationWithBlock(^void(id me, void* arg0, BOOL arg1, BOOL arg2, BOOL arg3, id arg4) { - ((void (*)(id, SEL, void*, BOOL, BOOL, BOOL, id))original)(me, selector, arg0, TRUE, arg2, arg3, arg4); - }); - } else { - // iOS 9.0 - 11.3.0 - SEL selector = sel_getUid("_startAssistingNode:userIsInteracting:blurPreviousNode:userObject:"); - method = class_getInstanceMethod(class, selector); - IMP original = method_getImplementation(method); - override = imp_implementationWithBlock(^void(id me, void* arg0, BOOL arg1, BOOL arg2, id arg3) { - ((void (*)(id, SEL, void*, BOOL, BOOL, id))original)(me, selector, arg0, TRUE, arg2, arg3); - }); - } - - method_setImplementation(method, override); + if (_webView == nil) { + _savedKeyboardDisplayRequiresUserAction = keyboardDisplayRequiresUserAction; + return; + } + + if (_savedKeyboardDisplayRequiresUserAction == true) { + return; + } + + UIView* subview; + + for (UIView* view in _webView.scrollView.subviews) { + if([[view.class description] hasPrefix:@"WK"]) + subview = view; + } + + if(subview == nil) return; + + Class class = subview.class; + + NSOperatingSystemVersion iOS_11_3_0 = (NSOperatingSystemVersion){11, 3, 0}; + NSOperatingSystemVersion iOS_12_2_0 = (NSOperatingSystemVersion){12, 2, 0}; + NSOperatingSystemVersion iOS_13_0_0 = (NSOperatingSystemVersion){13, 0, 0}; + + Method method; + IMP override; + + if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion: iOS_13_0_0]) { + // iOS 13.0.0 - Future + SEL selector = sel_getUid("_elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:"); + method = class_getInstanceMethod(class, selector); + IMP original = method_getImplementation(method); + override = imp_implementationWithBlock(^void(id me, void* arg0, BOOL arg1, BOOL arg2, BOOL arg3, id arg4) { + ((void (*)(id, SEL, void*, BOOL, BOOL, BOOL, id))original)(me, selector, arg0, TRUE, arg2, arg3, arg4); + }); + } + else if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion: iOS_12_2_0]) { + // iOS 12.2.0 - iOS 13.0.0 + SEL selector = sel_getUid("_elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:"); + method = class_getInstanceMethod(class, selector); + IMP original = method_getImplementation(method); + override = imp_implementationWithBlock(^void(id me, void* arg0, BOOL arg1, BOOL arg2, BOOL arg3, id arg4) { + ((void (*)(id, SEL, void*, BOOL, BOOL, BOOL, id))original)(me, selector, arg0, TRUE, arg2, arg3, arg4); + }); + } + else if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion: iOS_11_3_0]) { + // iOS 11.3.0 - 12.2.0 + SEL selector = sel_getUid("_startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:"); + method = class_getInstanceMethod(class, selector); + IMP original = method_getImplementation(method); + override = imp_implementationWithBlock(^void(id me, void* arg0, BOOL arg1, BOOL arg2, BOOL arg3, id arg4) { + ((void (*)(id, SEL, void*, BOOL, BOOL, BOOL, id))original)(me, selector, arg0, TRUE, arg2, arg3, arg4); + }); + } else { + // iOS 9.0 - 11.3.0 + SEL selector = sel_getUid("_startAssistingNode:userIsInteracting:blurPreviousNode:userObject:"); + method = class_getInstanceMethod(class, selector); + IMP original = method_getImplementation(method); + override = imp_implementationWithBlock(^void(id me, void* arg0, BOOL arg1, BOOL arg2, id arg3) { + ((void (*)(id, SEL, void*, BOOL, BOOL, id))original)(me, selector, arg0, TRUE, arg2, arg3); + }); + } + + method_setImplementation(method, override); } -(void)setHideKeyboardAccessoryView:(BOOL)hideKeyboardAccessoryView { - if (_webView == nil) { - _savedHideKeyboardAccessoryView = hideKeyboardAccessoryView; - return; - } - - if (_savedHideKeyboardAccessoryView == false) { - return; - } - - UIView* subview; - - for (UIView* view in _webView.scrollView.subviews) { - if([[view.class description] hasPrefix:@"WK"]) - subview = view; - } - - if(subview == nil) return; - - NSString* name = [NSString stringWithFormat:@"%@_SwizzleHelperWK", subview.class.superclass]; - Class newClass = NSClassFromString(name); - - if(newClass == nil) - { - newClass = objc_allocateClassPair(subview.class, [name cStringUsingEncoding:NSASCIIStringEncoding], 0); - if(!newClass) return; - - Method method = class_getInstanceMethod([_SwizzleHelperWK class], @selector(inputAccessoryView)); - class_addMethod(newClass, @selector(inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method)); - - objc_registerClassPair(newClass); - } - - object_setClass(subview, newClass); + if (_webView == nil) { + _savedHideKeyboardAccessoryView = hideKeyboardAccessoryView; + return; + } + + if (_savedHideKeyboardAccessoryView == false) { + return; + } + + UIView* subview; + + for (UIView* view in _webView.scrollView.subviews) { + if([[view.class description] hasPrefix:@"WK"]) + subview = view; + } + + if(subview == nil) return; + + NSString* name = [NSString stringWithFormat:@"%@_SwizzleHelperWK", subview.class.superclass]; + Class newClass = NSClassFromString(name); + + if(newClass == nil) + { + newClass = objc_allocateClassPair(subview.class, [name cStringUsingEncoding:NSASCIIStringEncoding], 0); + if(!newClass) return; + + Method method = class_getInstanceMethod([_SwizzleHelperWK class], @selector(inputAccessoryView)); + class_addMethod(newClass, @selector(inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method)); + + objc_registerClassPair(newClass); + } + + object_setClass(subview, newClass); } // UIScrollViewDelegate method @@ -860,45 +860,45 @@ - (void)scrollViewDidScroll:(UIScrollView *)scrollView else if (_onScroll != nil) { NSDictionary *event = @{ @"contentOffset": @{ - @"x": @(scrollView.contentOffset.x), - @"y": @(scrollView.contentOffset.y) - }, + @"x": @(scrollView.contentOffset.x), + @"y": @(scrollView.contentOffset.y) + }, @"contentInset": @{ - @"top": @(scrollView.contentInset.top), - @"left": @(scrollView.contentInset.left), - @"bottom": @(scrollView.contentInset.bottom), - @"right": @(scrollView.contentInset.right) - }, + @"top": @(scrollView.contentInset.top), + @"left": @(scrollView.contentInset.left), + @"bottom": @(scrollView.contentInset.bottom), + @"right": @(scrollView.contentInset.right) + }, @"contentSize": @{ - @"width": @(scrollView.contentSize.width), - @"height": @(scrollView.contentSize.height) - }, + @"width": @(scrollView.contentSize.width), + @"height": @(scrollView.contentSize.height) + }, @"layoutMeasurement": @{ - @"width": @(scrollView.frame.size.width), - @"height": @(scrollView.frame.size.height) - }, + @"width": @(scrollView.frame.size.width), + @"height": @(scrollView.frame.size.height) + }, @"zoomScale": @(scrollView.zoomScale ?: 1), - }; + }; _onScroll(event); } } - (void)setDirectionalLockEnabled:(BOOL)directionalLockEnabled { - _directionalLockEnabled = directionalLockEnabled; - _webView.scrollView.directionalLockEnabled = directionalLockEnabled; + _directionalLockEnabled = directionalLockEnabled; + _webView.scrollView.directionalLockEnabled = directionalLockEnabled; } - (void)setShowsHorizontalScrollIndicator:(BOOL)showsHorizontalScrollIndicator { - _showsHorizontalScrollIndicator = showsHorizontalScrollIndicator; - _webView.scrollView.showsHorizontalScrollIndicator = showsHorizontalScrollIndicator; + _showsHorizontalScrollIndicator = showsHorizontalScrollIndicator; + _webView.scrollView.showsHorizontalScrollIndicator = showsHorizontalScrollIndicator; } - (void)setShowsVerticalScrollIndicator:(BOOL)showsVerticalScrollIndicator { - _showsVerticalScrollIndicator = showsVerticalScrollIndicator; - _webView.scrollView.showsVerticalScrollIndicator = showsVerticalScrollIndicator; + _showsVerticalScrollIndicator = showsVerticalScrollIndicator; + _webView.scrollView.showsVerticalScrollIndicator = showsVerticalScrollIndicator; } #endif // !TARGET_OS_OSX @@ -906,8 +906,8 @@ - (void)postMessage:(NSString *)message { NSDictionary *eventInitDict = @{@"data": message}; NSString *source = [NSString - stringWithFormat:@"window.dispatchEvent(new MessageEvent('message', %@));", - RCTJSONStringify(eventInitDict, NULL) + stringWithFormat:@"window.dispatchEvent(new MessageEvent('message', %@));", + RCTJSONStringify(eventInitDict, NULL) ]; [self injectJavaScript: source]; } @@ -915,7 +915,7 @@ - (void)postMessage:(NSString *)message - (void)layoutSubviews { [super layoutSubviews]; - + // Ensure webview takes the position and dimensions of RNCWebView _webView.frame = self.bounds; #if !TARGET_OS_OSX @@ -940,52 +940,52 @@ + (void)setClientAuthenticationCredential:(nullable NSURLCredential*)credential } + (void)setCustomCertificatesForHost:(nullable NSDictionary*)certificates { - customCertificatesForHost = certificates; + customCertificatesForHost = certificates; } - (void) webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable))completionHandler { - NSString* host = nil; - if (webView.URL != nil) { - host = webView.URL.host; - } - if ([[challenge protectionSpace] authenticationMethod] == NSURLAuthenticationMethodClientCertificate) { - completionHandler(NSURLSessionAuthChallengeUseCredential, clientAuthenticationCredential); - return; - } - if ([[challenge protectionSpace] serverTrust] != nil && customCertificatesForHost != nil && host != nil) { - SecCertificateRef localCertificate = (__bridge SecCertificateRef)([customCertificatesForHost objectForKey:host]); - if (localCertificate != nil) { - NSData *localCertificateData = (NSData*) CFBridgingRelease(SecCertificateCopyData(localCertificate)); - SecTrustRef trust = [[challenge protectionSpace] serverTrust]; - long count = SecTrustGetCertificateCount(trust); - for (long i = 0; i < count; i++) { - SecCertificateRef serverCertificate = SecTrustGetCertificateAtIndex(trust, i); - if (serverCertificate == nil) { continue; } - NSData *serverCertificateData = (NSData *) CFBridgingRelease(SecCertificateCopyData(serverCertificate)); - if ([serverCertificateData isEqualToData:localCertificateData]) { - NSURLCredential *useCredential = [NSURLCredential credentialForTrust:trust]; - if (challenge.sender != nil) { - [challenge.sender useCredential:useCredential forAuthenticationChallenge:challenge]; - } - completionHandler(NSURLSessionAuthChallengeUseCredential, useCredential); - return; - } - } + NSString* host = nil; + if (webView.URL != nil) { + host = webView.URL.host; + } + if ([[challenge protectionSpace] authenticationMethod] == NSURLAuthenticationMethodClientCertificate) { + completionHandler(NSURLSessionAuthChallengeUseCredential, clientAuthenticationCredential); + return; + } + if ([[challenge protectionSpace] serverTrust] != nil && customCertificatesForHost != nil && host != nil) { + SecCertificateRef localCertificate = (__bridge SecCertificateRef)([customCertificatesForHost objectForKey:host]); + if (localCertificate != nil) { + NSData *localCertificateData = (NSData*) CFBridgingRelease(SecCertificateCopyData(localCertificate)); + SecTrustRef trust = [[challenge protectionSpace] serverTrust]; + long count = SecTrustGetCertificateCount(trust); + for (long i = 0; i < count; i++) { + SecCertificateRef serverCertificate = SecTrustGetCertificateAtIndex(trust, i); + if (serverCertificate == nil) { continue; } + NSData *serverCertificateData = (NSData *) CFBridgingRelease(SecCertificateCopyData(serverCertificate)); + if ([serverCertificateData isEqualToData:localCertificateData]) { + NSURLCredential *useCredential = [NSURLCredential credentialForTrust:trust]; + if (challenge.sender != nil) { + [challenge.sender useCredential:useCredential forAuthenticationChallenge:challenge]; + } + completionHandler(NSURLSessionAuthChallengeUseCredential, useCredential); + return; } + } } - if ([[challenge protectionSpace] authenticationMethod] == NSURLAuthenticationMethodHTTPBasic) { - NSString *username = [_basicAuthCredential valueForKey:@"username"]; - NSString *password = [_basicAuthCredential valueForKey:@"password"]; - if (username && password) { - NSURLCredential *credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistenceNone]; - completionHandler(NSURLSessionAuthChallengeUseCredential, credential); - return; - } + } + if ([[challenge protectionSpace] authenticationMethod] == NSURLAuthenticationMethodHTTPBasic) { + NSString *username = [_basicAuthCredential valueForKey:@"username"]; + NSString *password = [_basicAuthCredential valueForKey:@"password"]; + if (username && password) { + NSURLCredential *credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistenceNone]; + completionHandler(NSURLSessionAuthChallengeUseCredential, credential); + return; } - completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil); + } + completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil); } #pragma mark - WKNavigationDelegate methods @@ -1057,7 +1057,7 @@ - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSSt #else NSAlert *alert = [[NSAlert alloc] init]; [alert setMessageText:prompt]; - + const NSRect RCTSingleTextFieldFrame = NSMakeRect(0.0, 0.0, 275.0, 22.0); NSTextField *textField = [[NSTextField alloc] initWithFrame:RCTSingleTextFieldFrame]; textField.cell.scrollable = YES; @@ -1066,7 +1066,7 @@ - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSSt } textField.stringValue = defaultText; [alert setAccessoryView:textField]; - + [alert addButtonWithTitle:NSLocalizedString(@"OK", @"OK button")]; [alert addButtonWithTitle:NSLocalizedString(@"Cancel", @"Cancel button")]; [alert beginSheetModalForWindow:[NSApp keyWindow] completionHandler:^(NSModalResponse response) { @@ -1088,20 +1088,20 @@ - (void) webView:(WKWebView *)webView initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler { - if (_mediaCapturePermissionGrantType == RNCWebViewPermissionGrantType_GrantIfSameHost_ElsePrompt || _mediaCapturePermissionGrantType == RNCWebViewPermissionGrantType_GrantIfSameHost_ElseDeny) { - if ([origin.host isEqualToString:webView.URL.host]) { - decisionHandler(WKPermissionDecisionGrant); - } else { - WKPermissionDecision decision = _mediaCapturePermissionGrantType == RNCWebViewPermissionGrantType_GrantIfSameHost_ElsePrompt ? WKPermissionDecisionPrompt : WKPermissionDecisionDeny; - decisionHandler(decision); - } - } else if (_mediaCapturePermissionGrantType == RNCWebViewPermissionGrantType_Deny) { - decisionHandler(WKPermissionDecisionDeny); - } else if (_mediaCapturePermissionGrantType == RNCWebViewPermissionGrantType_Grant) { - decisionHandler(WKPermissionDecisionGrant); + if (_mediaCapturePermissionGrantType == RNCWebViewPermissionGrantType_GrantIfSameHost_ElsePrompt || _mediaCapturePermissionGrantType == RNCWebViewPermissionGrantType_GrantIfSameHost_ElseDeny) { + if ([origin.host isEqualToString:webView.URL.host]) { + decisionHandler(WKPermissionDecisionGrant); } else { - decisionHandler(WKPermissionDecisionPrompt); + WKPermissionDecision decision = _mediaCapturePermissionGrantType == RNCWebViewPermissionGrantType_GrantIfSameHost_ElsePrompt ? WKPermissionDecisionPrompt : WKPermissionDecisionDeny; + decisionHandler(decision); } + } else if (_mediaCapturePermissionGrantType == RNCWebViewPermissionGrantType_Deny) { + decisionHandler(WKPermissionDecisionDeny); + } else if (_mediaCapturePermissionGrantType == RNCWebViewPermissionGrantType_Grant) { + decisionHandler(WKPermissionDecisionGrant); + } else { + decisionHandler(WKPermissionDecisionPrompt); + } } #endif @@ -1110,7 +1110,7 @@ - (void) webView:(WKWebView *)webView * topViewController */ -(UIViewController *)topViewController{ - return RCTPresentedViewController(); + return RCTPresentedViewController(); } #endif // !TARGET_OS_OSX @@ -1125,7 +1125,7 @@ - (void) webView:(WKWebView *)webView { static NSDictionary *navigationTypes; static dispatch_once_t onceToken; - + dispatch_once(&onceToken, ^{ navigationTypes = @{ @(WKNavigationTypeLinkActivated): @"click", @@ -1136,11 +1136,11 @@ - (void) webView:(WKWebView *)webView @(WKNavigationTypeOther): @"other", }; }); - + WKNavigationType navigationType = navigationAction.navigationType; NSURLRequest *request = navigationAction.request; BOOL isTopFrame = [request.URL isEqual:request.mainDocumentURL]; - + if (_onShouldStartLoadWithRequest) { NSMutableDictionary *event = [self baseEvent]; [event addEntriesFromDictionary: @{ @@ -1156,7 +1156,7 @@ - (void) webView:(WKWebView *)webView return; } } - + if (_onLoadingStart) { // We have this check to filter out iframe requests and whatnot if (isTopFrame) { @@ -1168,7 +1168,7 @@ - (void) webView:(WKWebView *)webView _onLoadingStart(event); } } - + // Allow all navigation by default decisionHandler(WKNavigationActionPolicyAllow); } @@ -1199,17 +1199,17 @@ - (void) webView:(WKWebView *)webView if ([navigationResponse.response isKindOfClass:[NSHTTPURLResponse class]]) { NSHTTPURLResponse *response = (NSHTTPURLResponse *)navigationResponse.response; NSInteger statusCode = response.statusCode; - + if (statusCode >= 400) { NSMutableDictionary *httpErrorEvent = [self baseEvent]; [httpErrorEvent addEntriesFromDictionary: @{ @"url": response.URL.absoluteString, @"statusCode": @(statusCode) }]; - + _onHttpError(httpErrorEvent); } - + NSString *disposition = nil; if (@available(iOS 13, *)) { disposition = [response valueForHTTPHeaderField:@"Content-Disposition"]; @@ -1218,7 +1218,7 @@ - (void) webView:(WKWebView *)webView if (isAttachment || !navigationResponse.canShowMIMEType) { if (_onFileDownload) { policy = WKNavigationResponsePolicyCancel; - + NSMutableDictionary *downloadEvent = [self baseEvent]; [downloadEvent addEntriesFromDictionary: @{ @"downloadUrl": (response.URL).absoluteString, @@ -1228,7 +1228,7 @@ - (void) webView:(WKWebView *)webView } } } - + decisionHandler(policy); } @@ -1248,7 +1248,7 @@ - (void) webView:(WKWebView *)webView // http://stackoverflow.com/questions/1024748/how-do-i-fix-nsurlerrordomain-error-999-in-iphone-3-0-os return; } - + if ([error.domain isEqualToString:@"WebKitErrorDomain"] && (error.code == 102 || error.code == 101)) { // Error code 102 "Frame load interrupted" is raised by the WKWebView @@ -1256,7 +1256,7 @@ - (void) webView:(WKWebView *)webView // implementing OAuth with a WebView. return; } - + NSMutableDictionary *event = [self baseEvent]; [event addEntriesFromDictionary:@{ @"didFailProvisionalNavigation": @YES, @@ -1287,26 +1287,26 @@ - (void)evaluateJS:(NSString *)js -(void)forceIgnoreSilentHardwareSwitch:(BOOL)initialSetup { - NSString *mp3Str = @"data:audio/mp3;base64,//tAxAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAFAAAESAAzMzMzMzMzMzMzMzMzMzMzMzMzZmZmZmZmZmZmZmZmZmZmZmZmZmaZmZmZmZmZmZmZmZmZmZmZmZmZmczMzMzMzMzMzMzMzMzMzMzMzMzM//////////////////////////8AAAA5TEFNRTMuMTAwAZYAAAAAAAAAABQ4JAMGQgAAOAAABEhNIZS0AAAAAAD/+0DEAAPH3Yz0AAR8CPqyIEABp6AxjG/4x/XiInE4lfQDFwIIRE+uBgZoW4RL0OLMDFn6E5v+/u5ehf76bu7/6bu5+gAiIQGAABQIUJ0QolFghEn/9PhZQpcUTpXMjo0OGzRCZXyKxoIQzB2KhCtGobpT9TRVj/3Pmfp+f8X7Pu1B04sTnc3s0XhOlXoGVCMNo9X//9/r6a10TZEY5DsxqvO7mO5qFvpFCmKIjhpSItGsUYcRO//7QsQRgEiljQIAgLFJAbIhNBCa+JmorCbOi5q9nVd2dKnusTMQg4MFUlD6DQ4OFijwGAijRMfLbHG4nLVTjydyPlJTj8pfPflf9/5GD950A5e+jsrmNZSjSirjs1R7hnkia8vr//l/7Nb+crvr9Ok5ZJOylUKRxf/P9Zn0j2P4pJYXyKkeuy5wUYtdmOu6uobEtFqhIJViLEKIjGxchGev/L3Y0O3bwrIOszTBAZ7Ih28EUaSOZf/7QsQfg8fpjQIADN0JHbGgQBAZ8T//y//t/7d/2+f5m7MdCeo/9tdkMtGLbt1tqnabRroO1Qfvh20yEbei8nfDXP7btW7f9/uO9tbe5IvHQbLlxpf3DkAk0ojYcv///5/u3/7PTfGjPEPUvt5D6f+/3Lea4lz4tc4TnM/mFPrmalWbboeNiNyeyr+vufttZuvrVrt/WYv3T74JFo8qEDiJqJrmDTs///v99xDku2xG02jjunrICP/7QsQtA8kpkQAAgNMA/7FgQAGnobgfghgqA+uXwWQ3XFmGimSbe2X3ksY//KzK1a2k6cnNWOPJnPWUsYbKqkh8RJzrVf///P///////4vyhLKHLrCb5nIrYIUss4cthigL1lQ1wwNAc6C1pf1TIKRSkt+a//z+yLVcwlXKSqeSuCVQFLng2h4AFAFgTkH+Z/8jTX/zr//zsJV/5f//5UX/0ZNCNCCaf5lTCTRkaEdhNP//n/KUjf/7QsQ5AEhdiwAAjN7I6jGddBCO+WGTQ1mXrYatSAgaykxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg=="; - NSString *scr; - if (initialSetup) { - scr = [NSString stringWithFormat:@"var s=new Audio('%@');s.id='wkwebviewAudio';s.controls=false;s.loop=true;s.play();document.body.appendChild(s);true", mp3Str]; - } else { - scr = [NSString stringWithFormat:@"var s=document.getElementById('wkwebviewAudio');s.src=null;s.parentNode.removeChild(s);s=null;s=new Audio('%@');s.id='wkwebviewAudio';s.controls=false;s.loop=true;s.play();document.body.appendChild(s);true", mp3Str]; - } - [self evaluateJS: scr thenCall: nil]; + NSString *mp3Str = @"data:audio/mp3;base64,//tAxAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAFAAAESAAzMzMzMzMzMzMzMzMzMzMzMzMzZmZmZmZmZmZmZmZmZmZmZmZmZmaZmZmZmZmZmZmZmZmZmZmZmZmZmczMzMzMzMzMzMzMzMzMzMzMzMzM//////////////////////////8AAAA5TEFNRTMuMTAwAZYAAAAAAAAAABQ4JAMGQgAAOAAABEhNIZS0AAAAAAD/+0DEAAPH3Yz0AAR8CPqyIEABp6AxjG/4x/XiInE4lfQDFwIIRE+uBgZoW4RL0OLMDFn6E5v+/u5ehf76bu7/6bu5+gAiIQGAABQIUJ0QolFghEn/9PhZQpcUTpXMjo0OGzRCZXyKxoIQzB2KhCtGobpT9TRVj/3Pmfp+f8X7Pu1B04sTnc3s0XhOlXoGVCMNo9X//9/r6a10TZEY5DsxqvO7mO5qFvpFCmKIjhpSItGsUYcRO//7QsQRgEiljQIAgLFJAbIhNBCa+JmorCbOi5q9nVd2dKnusTMQg4MFUlD6DQ4OFijwGAijRMfLbHG4nLVTjydyPlJTj8pfPflf9/5GD950A5e+jsrmNZSjSirjs1R7hnkia8vr//l/7Nb+crvr9Ok5ZJOylUKRxf/P9Zn0j2P4pJYXyKkeuy5wUYtdmOu6uobEtFqhIJViLEKIjGxchGev/L3Y0O3bwrIOszTBAZ7Ih28EUaSOZf/7QsQfg8fpjQIADN0JHbGgQBAZ8T//y//t/7d/2+f5m7MdCeo/9tdkMtGLbt1tqnabRroO1Qfvh20yEbei8nfDXP7btW7f9/uO9tbe5IvHQbLlxpf3DkAk0ojYcv///5/u3/7PTfGjPEPUvt5D6f+/3Lea4lz4tc4TnM/mFPrmalWbboeNiNyeyr+vufttZuvrVrt/WYv3T74JFo8qEDiJqJrmDTs///v99xDku2xG02jjunrICP/7QsQtA8kpkQAAgNMA/7FgQAGnobgfghgqA+uXwWQ3XFmGimSbe2X3ksY//KzK1a2k6cnNWOPJnPWUsYbKqkh8RJzrVf///P///////4vyhLKHLrCb5nIrYIUss4cthigL1lQ1wwNAc6C1pf1TIKRSkt+a//z+yLVcwlXKSqeSuCVQFLng2h4AFAFgTkH+Z/8jTX/zr//zsJV/5f//5UX/0ZNCNCCaf5lTCTRkaEdhNP//n/KUjf/7QsQ5AEhdiwAAjN7I6jGddBCO+WGTQ1mXrYatSAgaykxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg=="; + NSString *scr; + if (initialSetup) { + scr = [NSString stringWithFormat:@"var s=new Audio('%@');s.id='wkwebviewAudio';s.controls=false;s.loop=true;s.play();document.body.appendChild(s);true", mp3Str]; + } else { + scr = [NSString stringWithFormat:@"var s=document.getElementById('wkwebviewAudio');s.src=null;s.parentNode.removeChild(s);s=null;s=new Audio('%@');s.id='wkwebviewAudio';s.controls=false;s.loop=true;s.play();document.body.appendChild(s);true", mp3Str]; + } + [self evaluateJS: scr thenCall: nil]; } -(void)disableIgnoreSilentSwitch { - [self evaluateJS: @"document.getElementById('wkwebviewAudio').src=null;true" thenCall: nil]; + [self evaluateJS: @"document.getElementById('wkwebviewAudio').src=null;true" thenCall: nil]; } -(void)appDidBecomeActive { - if (_ignoreSilentHardwareSwitch) { - [self forceIgnoreSilentHardwareSwitch:false]; - } + if (_ignoreSilentHardwareSwitch) { + [self forceIgnoreSilentHardwareSwitch:false]; + } } -(void)appWillResignActive @@ -1321,7 +1321,7 @@ -(void)appWillResignActive * @see https://fburl.com/rtys6jlb */ - (void)webView:(WKWebView *)webView - didFinishNavigation:(WKNavigation *)navigation +didFinishNavigation:(WKNavigation *)navigation { if(_sharedCookiesEnabled && @available(iOS 11.0, *)) { // Write all cookies from WKWebView back to sharedHTTPCookieStorage @@ -1331,11 +1331,11 @@ - (void)webView:(WKWebView *)webView } }]; } - + if (_ignoreSilentHardwareSwitch) { [self forceIgnoreSilentHardwareSwitch:true]; } - + if (_onLoadingFinish) { _onLoadingFinish([self baseEvent]); } @@ -1364,7 +1364,7 @@ - (void)reload * manually call [_webView loadRequest:request]. */ NSURLRequest *request = [self requestForSource:self.source]; - + if (request.URL && !_webView.URL.absoluteString.length) { [_webView loadRequest:request]; } else { @@ -1374,30 +1374,30 @@ - (void)reload #if !TARGET_OS_OSX - (void)addPullToRefreshControl { - UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; - _refreshControl = refreshControl; - [_webView.scrollView addSubview: refreshControl]; - [refreshControl addTarget:self action:@selector(pullToRefresh:) forControlEvents: UIControlEventValueChanged]; + UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; + _refreshControl = refreshControl; + [_webView.scrollView addSubview: refreshControl]; + [refreshControl addTarget:self action:@selector(pullToRefresh:) forControlEvents: UIControlEventValueChanged]; } - (void)pullToRefresh:(UIRefreshControl *)refreshControl { - [self reload]; - [refreshControl endRefreshing]; + [self reload]; + [refreshControl endRefreshing]; } - (void)setPullToRefreshEnabled:(BOOL)pullToRefreshEnabled { - _pullToRefreshEnabled = pullToRefreshEnabled; - - if (pullToRefreshEnabled) { - [self addPullToRefreshControl]; - } else { - [_refreshControl removeFromSuperview]; - } - - [self setBounces:_bounces]; + _pullToRefreshEnabled = pullToRefreshEnabled; + + if (pullToRefreshEnabled) { + [self addPullToRefreshControl]; + } else { + [_refreshControl removeFromSuperview]; + } + + [self setBounces:_bounces]; } #endif // !TARGET_OS_OSX @@ -1408,27 +1408,27 @@ - (void)stopLoading - (void)requestFocus { - #if !TARGET_OS_OSX - [_webView becomeFirstResponder]; - #endif // !TARGET_OS_OSX +#if !TARGET_OS_OSX + [_webView becomeFirstResponder]; +#endif // !TARGET_OS_OSX } #if !TARGET_OS_OSX - (void)setBounces:(BOOL)bounces { _bounces = bounces; - //For UIRefreshControl to work correctly, the bounces should always be true + //For UIRefreshControl to work correctly, the bounces should always be true _webView.scrollView.bounces = _pullToRefreshEnabled || bounces; } #endif // !TARGET_OS_OSX - (void)setInjectedJavaScript:(NSString *)source { _injectedJavaScript = source; - + self.atEndScript = source == nil ? nil : [[WKUserScript alloc] initWithSource:source - injectionTime:WKUserScriptInjectionTimeAtDocumentEnd - forMainFrameOnly:_injectedJavaScriptForMainFrameOnly]; - + injectionTime:WKUserScriptInjectionTimeAtDocumentEnd + forMainFrameOnly:_injectedJavaScriptForMainFrameOnly]; + if(_webView != nil){ [self resetupScripts:_webView.configuration]; } @@ -1436,11 +1436,11 @@ - (void)setInjectedJavaScript:(NSString *)source { - (void)setInjectedJavaScriptBeforeContentLoaded:(NSString *)source { _injectedJavaScriptBeforeContentLoaded = source; - + self.atStartScript = source == nil ? nil : [[WKUserScript alloc] initWithSource:source - injectionTime:WKUserScriptInjectionTimeAtDocumentStart - forMainFrameOnly:_injectedJavaScriptBeforeContentLoadedForMainFrameOnly]; - + injectionTime:WKUserScriptInjectionTimeAtDocumentStart + forMainFrameOnly:_injectedJavaScriptBeforeContentLoadedForMainFrameOnly]; + if(_webView != nil){ [self resetupScripts:_webView.configuration]; } @@ -1458,27 +1458,27 @@ - (void)setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly:(BOOL)mainFrame - (void)setMessagingEnabled:(BOOL)messagingEnabled { _messagingEnabled = messagingEnabled; - + self.postMessageScript = _messagingEnabled ? [ - [WKUserScript alloc] - initWithSource: [ - NSString - stringWithFormat: - @"window.%@ = {" - " postMessage: function (data) {" - " window.webkit.messageHandlers.%@.postMessage(String(data));" - " }" - "};", MessageHandlerName, MessageHandlerName - ] - injectionTime:WKUserScriptInjectionTimeAtDocumentStart - /* TODO: For a separate (minor) PR: use logic like this (as react-native-wkwebview does) so that messaging can be used in all frames if desired. - * I am keeping it as YES for consistency with previous behaviour. */ - // forMainFrameOnly:_messagingEnabledForMainFrameOnly - forMainFrameOnly:YES - ] : + [WKUserScript alloc] + initWithSource: [ + NSString + stringWithFormat: + @"window.%@ = {" + " postMessage: function (data) {" + " window.webkit.messageHandlers.%@.postMessage(String(data));" + " }" + "};", MessageHandlerName, MessageHandlerName + ] + injectionTime:WKUserScriptInjectionTimeAtDocumentStart + /* TODO: For a separate (minor) PR: use logic like this (as react-native-wkwebview does) so that messaging can be used in all frames if desired. + * I am keeping it as YES for consistency with previous behaviour. */ + // forMainFrameOnly:_messagingEnabledForMainFrameOnly + forMainFrameOnly:YES + ] : nil; - + if(_webView != nil){ [self resetupScripts:_webView.configuration]; } @@ -1517,34 +1517,34 @@ - (void)resetupScripts:(WKWebViewConfiguration *)wkWebViewConfig { if(self.enableApplePay){ if (self.postMessageScript){ [wkWebViewConfig.userContentController addScriptMessageHandler:[[RNCWeakScriptMessageDelegate alloc] initWithDelegate:self] - name:MessageHandlerName]; + name:MessageHandlerName]; } return; } - + NSString *html5HistoryAPIShimSource = [NSString stringWithFormat: - @"(function(history) {\n" - " function notify(type) {\n" - " setTimeout(function() {\n" - " window.webkit.messageHandlers.%@.postMessage(type)\n" - " }, 0)\n" - " }\n" - " function shim(f) {\n" - " return function pushState() {\n" - " notify('other')\n" - " return f.apply(history, arguments)\n" - " }\n" - " }\n" - " history.pushState = shim(history.pushState)\n" - " history.replaceState = shim(history.replaceState)\n" - " window.addEventListener('popstate', function() {\n" - " notify('backforward')\n" - " })\n" - "})(window.history)\n", HistoryShimName + @"(function(history) {\n" + " function notify(type) {\n" + " setTimeout(function() {\n" + " window.webkit.messageHandlers.%@.postMessage(type)\n" + " }, 0)\n" + " }\n" + " function shim(f) {\n" + " return function pushState() {\n" + " notify('other')\n" + " return f.apply(history, arguments)\n" + " }\n" + " }\n" + " history.pushState = shim(history.pushState)\n" + " history.replaceState = shim(history.replaceState)\n" + " window.addEventListener('popstate', function() {\n" + " notify('backforward')\n" + " })\n" + "})(window.history)\n", HistoryShimName ]; WKUserScript *script = [[WKUserScript alloc] initWithSource:html5HistoryAPIShimSource injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]; [wkWebViewConfig.userContentController addUserScript:script]; - + if(_sharedCookiesEnabled) { // More info to sending cookies with WKWebView // https://stackoverflow.com/questions/26573137/can-i-set-the-cookies-to-be-used-by-a-wkwebview/26577303#26577303 @@ -1558,7 +1558,7 @@ - (void)resetupScripts:(WKWebViewConfiguration *)wkWebViewConfig { [self syncCookiesToWebView:nil]; } else { NSMutableString *script = [NSMutableString string]; - + // Clear all existing cookies in a direct called function. This ensures that no // javascript error will break the web content javascript. // We keep this code here, if someone requires that Cookies are also removed within the @@ -1567,48 +1567,48 @@ - (void)resetupScripts:(WKWebViewConfiguration *)wkWebViewConfig { // Generates JS: document.cookie = "key=; Expires=Thu, 01 Jan 1970 00:00:01 GMT;" // for each cookie which is already available in the WebView context. /* - [script appendString:@"(function () {\n"]; - [script appendString:@" var cookies = document.cookie.split('; ');\n"]; - [script appendString:@" for (var i = 0; i < cookies.length; i++) {\n"]; - [script appendString:@" if (cookies[i].indexOf('=') !== -1) {\n"]; - [script appendString:@" document.cookie = cookies[i].split('=')[0] + '=; Expires=Thu, 01 Jan 1970 00:00:01 GMT';\n"]; - [script appendString:@" }\n"]; - [script appendString:@" }\n"]; - [script appendString:@"})();\n\n"]; - */ - + [script appendString:@"(function () {\n"]; + [script appendString:@" var cookies = document.cookie.split('; ');\n"]; + [script appendString:@" for (var i = 0; i < cookies.length; i++) {\n"]; + [script appendString:@" if (cookies[i].indexOf('=') !== -1) {\n"]; + [script appendString:@" document.cookie = cookies[i].split('=')[0] + '=; Expires=Thu, 01 Jan 1970 00:00:01 GMT';\n"]; + [script appendString:@" }\n"]; + [script appendString:@" }\n"]; + [script appendString:@"})();\n\n"]; + */ + // Set cookies in a direct called function. This ensures that no // javascript error will break the web content javascript. - // Generates JS: document.cookie = "key=value; Path=/; Expires=Thu, 01 Jan 20xx 00:00:01 GMT;" + // Generates JS: document.cookie = "key=value; Path=/; Expires=Thu, 01 Jan 20xx 00:00:01 GMT;" // for each cookie which is available in the application context. [script appendString:@"(function () {\n"]; for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) { [script appendFormat:@"document.cookie = %@ + '=' + %@", - RCTJSONStringify(cookie.name, NULL), - RCTJSONStringify(cookie.value, NULL)]; + RCTJSONStringify(cookie.name, NULL), + RCTJSONStringify(cookie.value, NULL)]; if (cookie.path) { [script appendFormat:@" + '; Path=' + %@", RCTJSONStringify(cookie.path, NULL)]; } if (cookie.expiresDate) { [script appendFormat:@" + '; Expires=' + new Date(%f).toUTCString()", - cookie.expiresDate.timeIntervalSince1970 * 1000 + cookie.expiresDate.timeIntervalSince1970 * 1000 ]; } [script appendString:@";\n"]; } [script appendString:@"})();\n"]; - + WKUserScript* cookieInScript = [[WKUserScript alloc] initWithSource:script injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]; [wkWebViewConfig.userContentController addUserScript:cookieInScript]; } } - + if(_messagingEnabled){ if (self.postMessageScript){ [wkWebViewConfig.userContentController addScriptMessageHandler:[[RNCWeakScriptMessageDelegate alloc] initWithDelegate:self] - name:MessageHandlerName]; + name:MessageHandlerName]; [wkWebViewConfig.userContentController addUserScript:self.postMessageScript]; } if (self.atEndScript) { @@ -1623,7 +1623,7 @@ - (void)resetupScripts:(WKWebViewConfiguration *)wkWebViewConfig { - (NSURLRequest *)requestForSource:(id)json { NSURLRequest *request = [RCTConvert NSURLRequest:self.source]; - + // If sharedCookiesEnabled we automatically add all application cookies to the // http request. This is automatically done on iOS 11+ in the WebView constructor. // Se we need to manually add these shared cookies here only for iOS versions < 11. @@ -1646,15 +1646,15 @@ - (NSURLRequest *)requestForSource:(id)json { @implementation RNCWeakScriptMessageDelegate - (instancetype)initWithDelegate:(id)scriptDelegate { - self = [super init]; - if (self) { - _scriptDelegate = scriptDelegate; - } - return self; + self = [super init]; + if (self) { + _scriptDelegate = scriptDelegate; + } + return self; } - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { - [self.scriptDelegate userContentController:userContentController didReceiveScriptMessage:message]; + [self.scriptDelegate userContentController:userContentController didReceiveScriptMessage:message]; } @end diff --git a/apple/RNCWebViewManager.h b/apple/RNCWebViewManager.h index c7252e5fa5..83ba6eb9e8 100644 --- a/apple/RNCWebViewManager.h +++ b/apple/RNCWebViewManager.h @@ -8,6 +8,6 @@ #import @interface RNCWebViewManager : RCTViewManager - @property (nonatomic, copy) NSArray * _Nullable menuItems; - @property (nonatomic, copy) RCTDirectEventBlock onCustomMenuSelection; +@property (nonatomic, copy) NSArray * _Nullable menuItems; +@property (nonatomic, copy) RCTDirectEventBlock onCustomMenuSelection; @end diff --git a/apple/RNCWebViewManager.m b/apple/RNCWebViewManager.m index 5d59912bf5..401e40e017 100644 --- a/apple/RNCWebViewManager.m +++ b/apple/RNCWebViewManager.m @@ -17,19 +17,19 @@ @interface RNCWebViewManager () @implementation RCTConvert (WKWebView) #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 /* iOS 13 */ RCT_ENUM_CONVERTER(WKContentMode, (@{ - @"recommended": @(WKContentModeRecommended), - @"mobile": @(WKContentModeMobile), - @"desktop": @(WKContentModeDesktop), + @"recommended": @(WKContentModeRecommended), + @"mobile": @(WKContentModeMobile), + @"desktop": @(WKContentModeDesktop), }), WKContentModeRecommended, integerValue) #endif #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000 /* iOS 15 */ RCT_ENUM_CONVERTER(RNCWebViewPermissionGrantType, (@{ - @"grantIfSameHostElsePrompt": @(RNCWebViewPermissionGrantType_GrantIfSameHost_ElsePrompt), - @"grantIfSameHostElseDeny": @(RNCWebViewPermissionGrantType_GrantIfSameHost_ElseDeny), - @"deny": @(RNCWebViewPermissionGrantType_Deny), - @"grant": @(RNCWebViewPermissionGrantType_Grant), - @"prompt": @(RNCWebViewPermissionGrantType_Prompt), + @"grantIfSameHostElsePrompt": @(RNCWebViewPermissionGrantType_GrantIfSameHost_ElsePrompt), + @"grantIfSameHostElseDeny": @(RNCWebViewPermissionGrantType_GrantIfSameHost_ElseDeny), + @"deny": @(RNCWebViewPermissionGrantType_Deny), + @"grant": @(RNCWebViewPermissionGrantType_Grant), + @"prompt": @(RNCWebViewPermissionGrantType_Prompt), }), RNCWebViewPermissionGrantType_Prompt, integerValue) #endif @end @@ -135,7 +135,7 @@ - (RCTUIView *)view } RCT_CUSTOM_VIEW_PROPERTY(pullToRefreshEnabled, BOOL, RNCWebView) { - view.pullToRefreshEnabled = json == nil ? false : [RCTConvert BOOL: json]; + view.pullToRefreshEnabled = json == nil ? false : [RCTConvert BOOL: json]; } RCT_CUSTOM_VIEW_PROPERTY(bounces, BOOL, RNCWebView) { @@ -155,7 +155,7 @@ - (RCTUIView *)view } RCT_CUSTOM_VIEW_PROPERTY(sharedCookiesEnabled, BOOL, RNCWebView) { - view.sharedCookiesEnabled = json == nil ? false : [RCTConvert BOOL: json]; + view.sharedCookiesEnabled = json == nil ? false : [RCTConvert BOOL: json]; } #if !TARGET_OS_OSX @@ -165,7 +165,7 @@ - (RCTUIView *)view #endif // !TARGET_OS_OSX RCT_CUSTOM_VIEW_PROPERTY(directionalLockEnabled, BOOL, RNCWebView) { - view.directionalLockEnabled = json == nil ? true : [RCTConvert BOOL: json]; + view.directionalLockEnabled = json == nil ? true : [RCTConvert BOOL: json]; } RCT_CUSTOM_VIEW_PROPERTY(showsHorizontalScrollIndicator, BOOL, RNCWebView) { @@ -262,7 +262,7 @@ - (BOOL) webView:(RNCWebView *)webView _shouldStartLoad = YES; request[@"lockIdentifier"] = @(_shouldStartLoadLock.condition); callback(request); - + // Block the main thread for a maximum of 250ms until the JS thread returns if ([_shouldStartLoadLock lockWhenCondition:0 beforeDate:[NSDate dateWithTimeIntervalSinceNow:.25]]) { BOOL returnValue = _shouldStartLoad; diff --git a/ios/RNCWebView.xcodeproj/project.pbxproj b/ios/RNCWebView.xcodeproj/project.pbxproj index d2f5ef63eb..4aa4617a2b 100644 --- a/ios/RNCWebView.xcodeproj/project.pbxproj +++ b/ios/RNCWebView.xcodeproj/project.pbxproj @@ -64,7 +64,9 @@ 3515965D21A3C86000623BFA /* RNCWKProcessPoolManager.m */, 134814211AA4EA7D00B7C361 /* Products */, ); + indentWidth = 2; sourceTree = ""; + tabWidth = 2; }; /* End PBXGroup section */ From ff08b11e500334198e1cf2cc02724ef10fb18c91 Mon Sep 17 00:00:00 2001 From: Thibault Malbranche Date: Sat, 11 Jun 2022 00:41:47 +0200 Subject: [PATCH 024/104] fix(android): fixed issue with refactor Fixes #2538 --- src/WebView.android.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WebView.android.tsx b/src/WebView.android.tsx index e5a82c51c0..c2eb819fec 100644 --- a/src/WebView.android.tsx +++ b/src/WebView.android.tsx @@ -84,7 +84,7 @@ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({ if (lockIdentifier) { NativeModules.RNCWebView.onShouldStartLoadWithRequestCallback(shouldStart, lockIdentifier); } else if (shouldStart) { - Commands.loadUrl(webViewRef, url); + Commands.loadUrl(webViewRef.current, url); } }, []); From 7063c01ef3d2132262fc3cd7f6bca2f555cf7828 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 10 Jun 2022 22:43:19 +0000 Subject: [PATCH 025/104] chore(release): 11.22.1 [skip ci] ## [11.22.1](https://github.com/react-native-webview/react-native-webview/compare/v11.22.0...v11.22.1) (2022-06-10) ### Bug Fixes * **android:** fixed issue with refactor ([ff08b11](https://github.com/react-native-webview/react-native-webview/commit/ff08b11e500334198e1cf2cc02724ef10fb18c91)), closes [#2538](https://github.com/react-native-webview/react-native-webview/issues/2538) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c4246eefb2..b27e2a62a0 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.22.0", + "version": "11.22.1", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From c424a496a009507432e6a3fff3eacb1099f634a3 Mon Sep 17 00:00:00 2001 From: Caleb Clarke Date: Sun, 12 Jun 2022 05:02:30 -0700 Subject: [PATCH 026/104] fix: Don't crash if trying to download "invalid" URIs on Android (#2432) --- .../com/reactnativecommunity/webview/RNCWebViewModule.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModule.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModule.java index a3bb67e96a..bd276c17cc 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModule.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModule.java @@ -311,7 +311,12 @@ public void setDownloadRequest(DownloadManager.Request request) { public void downloadFile(String downloadingMessage) { DownloadManager dm = (DownloadManager) getCurrentActivity().getBaseContext().getSystemService(Context.DOWNLOAD_SERVICE); - dm.enqueue(this.downloadRequest); + try { + dm.enqueue(this.downloadRequest); + } catch (IllegalArgumentException e) { + Log.w("RNCWebViewModule", "Unsupported URI, aborting download", e); + return; + } Toast.makeText(getCurrentActivity().getApplicationContext(), downloadingMessage, Toast.LENGTH_LONG).show(); } From 2853bdd5ba4b8f092e97029df2943aab989026a6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 12 Jun 2022 12:04:09 +0000 Subject: [PATCH 027/104] chore(release): 11.22.2 [skip ci] ## [11.22.2](https://github.com/react-native-webview/react-native-webview/compare/v11.22.1...v11.22.2) (2022-06-12) ### Bug Fixes * Don't crash if trying to download "invalid" URIs on Android ([#2432](https://github.com/react-native-webview/react-native-webview/issues/2432)) ([c424a49](https://github.com/react-native-webview/react-native-webview/commit/c424a496a009507432e6a3fff3eacb1099f634a3)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b27e2a62a0..e25d27b9c4 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.22.1", + "version": "11.22.2", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 4b1f37938c643e2e10def249f34b01ce96b8ae4c Mon Sep 17 00:00:00 2001 From: Chiara Mooney <34109996+chiaramooney@users.noreply.github.com> Date: Wed, 15 Jun 2022 16:34:43 -0700 Subject: [PATCH 028/104] Implement postMessage/onMessage for Windows WebView2 (#2537) * Implement PostMessage / OnMessage * Fix Stop Loading * Address Feedback * Address Feedback --- .../ReactPackageProvider.cpp | 2 +- windows/ReactNativeWebView/ReactWebView.cpp | 27 ++++--- windows/ReactNativeWebView/ReactWebView.h | 3 +- windows/ReactNativeWebView/ReactWebView.idl | 3 +- windows/ReactNativeWebView/ReactWebView2.cpp | 74 +++++++++++++++++-- windows/ReactNativeWebView/ReactWebView2.h | 15 ++-- .../ReactWebView2Manager.cpp | 18 +++-- .../ReactNativeWebView/ReactWebView2Manager.h | 4 +- .../ReactWebViewManager.cpp | 2 +- windows/ReactNativeWebView/pch.h | 21 ++++-- 10 files changed, 128 insertions(+), 41 deletions(-) diff --git a/windows/ReactNativeWebView/ReactPackageProvider.cpp b/windows/ReactNativeWebView/ReactPackageProvider.cpp index fb95b861e1..5589f5cb25 100644 --- a/windows/ReactNativeWebView/ReactPackageProvider.cpp +++ b/windows/ReactNativeWebView/ReactPackageProvider.cpp @@ -14,7 +14,7 @@ namespace winrt::ReactNativeWebView::implementation { void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept { packageBuilder.AddViewManager(L"ReactWebViewManager", []() { return winrt::make(); }); -#if USE_WEBVIEW2 +#if HAS_WEBVIEW2 packageBuilder.AddViewManager(L"ReactWebView2Manager", []() { return winrt::make(); }); #endif } diff --git a/windows/ReactNativeWebView/ReactWebView.cpp b/windows/ReactNativeWebView/ReactWebView.cpp index f9ac9c0071..f35ceb27f0 100644 --- a/windows/ReactNativeWebView/ReactWebView.cpp +++ b/windows/ReactNativeWebView/ReactWebView.cpp @@ -118,9 +118,9 @@ namespace winrt::ReactNativeWebView::implementation { }); if (m_messagingEnabled) { - winrt::hstring windowAlert = L"window.alert = function (msg) {__REACT_WEB_VIEW_BRIDGE.postMessage(`{\"type\":\"__alert\",\"message\":\"${msg}\"}`)};"; - winrt::hstring postMessage = L"window.ReactNativeWebView = {postMessage: function (data) {__REACT_WEB_VIEW_BRIDGE.postMessage(String(data))}};"; - webView.InvokeScriptAsync(L"eval", { windowAlert + postMessage }); + winrt::hstring message = LR"(window.alert = function(msg) { __REACT_WEB_VIEW_BRIDGE.postMessage(`{"type":"__alert", "message" : "${msg}" }`) }; + window.ReactNativeWebView = {postMessage: function(data) { __REACT_WEB_VIEW_BRIDGE.postMessage(String(data)) }};)"; + webView.InvokeScriptAsync(L"eval", { message }); } } @@ -141,13 +141,15 @@ namespace winrt::ReactNativeWebView::implementation { void ReactWebView::HandleMessageFromJS(winrt::hstring const& message) { winrt::JsonObject jsonObject; - if (winrt::JsonObject::TryParse(message, jsonObject) && jsonObject.HasKey(L"type")) { - auto type = jsonObject.GetNamedString(L"type"); - if (type == L"__alert") { - auto dialog = winrt::MessageDialog(jsonObject.GetNamedString(L"message")); - dialog.Commands().Append(winrt::UICommand(L"OK")); - dialog.ShowAsync(); - return; + if (winrt::JsonObject::TryParse(message, jsonObject)) { + if (auto v = jsonObject.Lookup(L"type"); v && v.ValueType() == JsonValueType::String) { + auto type = v.GetString(); + if (type == L"__alert") { + auto dialog = winrt::MessageDialog(jsonObject.GetNamedString(L"message")); + dialog.Commands().Append(winrt::UICommand(L"OK")); + dialog.ShowAsync(); + return; + } } } @@ -163,8 +165,11 @@ namespace winrt::ReactNativeWebView::implementation { }); } - void ReactWebView::SetMessagingEnabled(bool enabled) { + void ReactWebView::MessagingEnabled(bool enabled) noexcept{ m_messagingEnabled = enabled; } + bool ReactWebView::MessagingEnabled() const noexcept{ + return m_messagingEnabled; + } } // namespace winrt::ReactNativeWebView::implementation \ No newline at end of file diff --git a/windows/ReactNativeWebView/ReactWebView.h b/windows/ReactNativeWebView/ReactWebView.h index 02bc25ac13..4b8f30c29e 100644 --- a/windows/ReactNativeWebView/ReactWebView.h +++ b/windows/ReactNativeWebView/ReactWebView.h @@ -16,7 +16,8 @@ namespace winrt::ReactNativeWebView::implementation { class ReactWebView : public ReactWebViewT { public: ReactWebView(Microsoft::ReactNative::IReactContext const& reactContext); - void SetMessagingEnabled(bool enabled); + void MessagingEnabled(bool enabled) noexcept; + bool MessagingEnabled() const noexcept; ~ReactWebView(); private: diff --git a/windows/ReactNativeWebView/ReactWebView.idl b/windows/ReactNativeWebView/ReactWebView.idl index f021e1615e..aa859c2120 100644 --- a/windows/ReactNativeWebView/ReactWebView.idl +++ b/windows/ReactNativeWebView/ReactWebView.idl @@ -2,7 +2,7 @@ namespace ReactNativeWebView{ [default_interface] runtimeclass ReactWebView : Windows.UI.Xaml.Controls.ContentPresenter{ ReactWebView(Microsoft.ReactNative.IReactContext context); - void SetMessagingEnabled(Boolean enabled); + Boolean MessagingEnabled; }; #if __has_include() #include @@ -14,6 +14,7 @@ namespace ReactNativeWebView{ runtimeclass ReactWebView2 : Windows.UI.Xaml.Controls.ContentPresenter{ ReactWebView2(Microsoft.ReactNative.IReactContext context); void NavigateToHtml(String html); + Boolean MessagingEnabled; }; #endif } // namespace ReactNativeWebView diff --git a/windows/ReactNativeWebView/ReactWebView2.cpp b/windows/ReactNativeWebView/ReactWebView2.cpp index f04593a08a..4da23fb6d1 100644 --- a/windows/ReactNativeWebView/ReactWebView2.cpp +++ b/windows/ReactNativeWebView/ReactWebView2.cpp @@ -4,7 +4,7 @@ #include "pch.h" #include "ReactWebView2.h" -#if USE_WEBVIEW2 +#if HAS_WEBVIEW2 #include "JSValueXaml.h" #include "ReactWebView2.g.cpp" #include @@ -18,6 +18,10 @@ namespace winrt { using namespace Windows::UI::Xaml::Controls; using namespace Microsoft::UI::Xaml::Controls; using namespace Microsoft::Web::WebView2::Core; + using namespace Windows::Data::Json; + using namespace Windows::UI::Popups; + using namespace Windows::UI::Xaml::Input; + using namespace Windows::UI::Xaml::Media; } // namespace winrt namespace winrt::ReactNativeWebView::implementation { @@ -76,7 +80,7 @@ namespace winrt::ReactNativeWebView::implementation { } } - void ReactWebView2::OnNavigationStarting(winrt::WebView2 const& webView, winrt::CoreWebView2NavigationStartingEventArgs const& args) { + void ReactWebView2::OnNavigationStarting(winrt::WebView2 const& webView, winrt::CoreWebView2NavigationStartingEventArgs const& /* args */) { m_reactContext.DispatchEvent( *this, L"topLoadingStart", @@ -85,9 +89,28 @@ namespace winrt::ReactNativeWebView::implementation { WriteWebViewNavigationEventArg(webView, eventDataWriter); eventDataWriter.WriteObjectEnd(); }); + + + if (m_messagingEnabled) { + m_messageToken = webView.WebMessageReceived([this](auto const& /* sender */ , winrt::CoreWebView2WebMessageReceivedEventArgs const& messageArgs) + { + try { + auto message = messageArgs.TryGetWebMessageAsString(); + this->OnMessagePosted(message); + } + catch (...) { + return; + } + }); + } + } + + void ReactWebView2::OnMessagePosted(hstring const& message) + { + HandleMessageFromJS(message); } - void ReactWebView2::OnNavigationCompleted(winrt::WebView2 const& webView, winrt::CoreWebView2NavigationCompletedEventArgs const& args) { + void ReactWebView2::OnNavigationCompleted(winrt::WebView2 const& webView, winrt::CoreWebView2NavigationCompletedEventArgs const& /* args */) { m_reactContext.DispatchEvent( *this, L"topLoadingFinish", @@ -96,9 +119,15 @@ namespace winrt::ReactNativeWebView::implementation { WriteWebViewNavigationEventArg(webView, eventDataWriter); eventDataWriter.WriteObjectEnd(); }); + + if (m_messagingEnabled) { + winrt::hstring message = LR"(window.alert = function (msg) {window.chrome.webview.postMessage(`{"type":"__alert","message":"${msg}"}`)}; + window.ReactNativeWebView = {postMessage: function (data) {window.chrome.webview.postMessage(String(data))}};)"; + webView.ExecuteScriptAsync(message); + } } - void ReactWebView2::OnCoreWebView2Initialized(winrt::Microsoft::UI::Xaml::Controls::WebView2 const& sender, winrt::Microsoft::UI::Xaml::Controls::CoreWebView2InitializedEventArgs const& args) { + void ReactWebView2::OnCoreWebView2Initialized(winrt::Microsoft::UI::Xaml::Controls::WebView2 const& sender, winrt::Microsoft::UI::Xaml::Controls::CoreWebView2InitializedEventArgs const& /* args */) { assert(sender.CoreWebView2()); if (m_navigateToHtml != L"") { m_webView.NavigateToString(m_navigateToHtml); @@ -106,6 +135,41 @@ namespace winrt::ReactNativeWebView::implementation { } } + void ReactWebView2::HandleMessageFromJS(winrt::hstring const& message) { + winrt::JsonObject jsonObject; + if (winrt::JsonObject::TryParse(message, jsonObject)) { + if (auto v = jsonObject.Lookup(L"type"); v && v.ValueType() == JsonValueType::String) { + auto type = v.GetString(); + if (type == L"__alert") { + auto dialog = winrt::MessageDialog(jsonObject.GetNamedString(L"message")); + dialog.Commands().Append(winrt::UICommand(L"OK")); + dialog.ShowAsync(); + return; + } + } + } + + m_reactContext.DispatchEvent( + *this, + L"topMessage", + [&](winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter) noexcept { + eventDataWriter.WriteObjectBegin(); + { + WriteProperty(eventDataWriter, L"data", message); + } + eventDataWriter.WriteObjectEnd(); + }); + } + + void ReactWebView2::MessagingEnabled(bool enabled) noexcept{ + m_messagingEnabled = enabled; + } + + bool ReactWebView2::MessagingEnabled() const noexcept{ + return m_messagingEnabled; + } + + void ReactWebView2::NavigateToHtml(winrt::hstring html) { if (m_webView.CoreWebView2()) { m_webView.NavigateToString(html); @@ -118,4 +182,4 @@ namespace winrt::ReactNativeWebView::implementation { } // namespace winrt::ReactNativeWebView::implementation -#endif // USE_WEBVIEW2 +#endif // HAS_WEBVIEW2 diff --git a/windows/ReactNativeWebView/ReactWebView2.h b/windows/ReactNativeWebView/ReactWebView2.h index ffd40d9fa2..b84bf75c38 100644 --- a/windows/ReactNativeWebView/ReactWebView2.h +++ b/windows/ReactNativeWebView/ReactWebView2.h @@ -3,13 +3,7 @@ #pragma once -#if RNW_VERSION_AT_LEAST(0,68,0) -#define USE_WEBVIEW2 1 -#else -#define USE_WEBVIEW2 0 -#endif - -#if USE_WEBVIEW2 +#if HAS_WEBVIEW2 #include "winrt/Microsoft.ReactNative.h" #include "NativeModules.h" @@ -24,11 +18,14 @@ namespace winrt::ReactNativeWebView::implementation { class ReactWebView2 : public ReactWebView2T { public: ReactWebView2(Microsoft::ReactNative::IReactContext const& reactContext); + void MessagingEnabled(bool enabled) noexcept; + bool MessagingEnabled() const noexcept; void NavigateToHtml(winrt::hstring html); ~ReactWebView2(); private: winrt::hstring m_navigateToHtml = L""; + bool m_messagingEnabled{ true }; winrt::Microsoft::UI::Xaml::Controls::WebView2 m_webView{ nullptr }; Microsoft::ReactNative::IReactContext m_reactContext{ nullptr }; @@ -36,11 +33,13 @@ namespace winrt::ReactNativeWebView::implementation { winrt::Microsoft::UI::Xaml::Controls::WebView2::NavigationStarting_revoker m_navigationStartingRevoker{}; winrt::Microsoft::UI::Xaml::Controls::WebView2::NavigationCompleted_revoker m_navigationCompletedRevoker{}; winrt::Microsoft::UI::Xaml::Controls::WebView2::CoreWebView2Initialized_revoker m_CoreWebView2InitializedRevoker{}; + void HandleMessageFromJS(winrt::hstring const& message); void RegisterEvents(); void WriteWebViewNavigationEventArg(winrt::Microsoft::UI::Xaml::Controls::WebView2 const& sender, winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter); void OnNavigationStarting(winrt::Microsoft::UI::Xaml::Controls::WebView2 const& sender, winrt::Microsoft::Web::WebView2::Core::CoreWebView2NavigationStartingEventArgs const& args); void OnNavigationCompleted(winrt::Microsoft::UI::Xaml::Controls::WebView2 const& sender, winrt::Microsoft::Web::WebView2::Core::CoreWebView2NavigationCompletedEventArgs const& args); void OnCoreWebView2Initialized(winrt::Microsoft::UI::Xaml::Controls::WebView2 const& sender, winrt::Microsoft::UI::Xaml::Controls::CoreWebView2InitializedEventArgs const& args); + void OnMessagePosted(hstring const& message); bool Is17763OrHigher(); }; } // namespace winrt::ReactNativeWebView2::implementation @@ -49,4 +48,4 @@ namespace winrt::ReactNativeWebView::factory_implementation { struct ReactWebView2 : ReactWebView2T {}; } // namespace winrt::ReactNativeWebView2::factory_implementation -#endif // USE_WEBVIEW2 +#endif // HAS_WEBVIEW2 diff --git a/windows/ReactNativeWebView/ReactWebView2Manager.cpp b/windows/ReactNativeWebView/ReactWebView2Manager.cpp index cd15275185..c7ea87fd56 100644 --- a/windows/ReactNativeWebView/ReactWebView2Manager.cpp +++ b/windows/ReactNativeWebView/ReactWebView2Manager.cpp @@ -1,7 +1,7 @@ #include "pch.h" #include "ReactWebView2Manager.h" -#if USE_WEBVIEW2 +#if HAS_WEBVIEW2 #include "NativeModules.h" #include "ReactWebView2.h" #include "JSValueXaml.h" @@ -45,6 +45,7 @@ namespace winrt::ReactNativeWebView::implementation { IMapView ReactWebView2Manager::NativeProps() noexcept { auto nativeProps = winrt::single_threaded_map(); nativeProps.Insert(L"source", ViewManagerPropertyType::Map); + nativeProps.Insert(L"messagingEnabled", ViewManagerPropertyType::Boolean); return nativeProps.GetView(); } @@ -86,6 +87,11 @@ namespace winrt::ReactNativeWebView::implementation { reactWebView2.NavigateToHtml(to_hstring(htmlString)); } } + else if (propertyName == "messagingEnabled") { + auto messagingEnabled = propertyValue.To(); + auto reactWebView2 = view.as(); + reactWebView2.MessagingEnabled(messagingEnabled); + } } } @@ -120,7 +126,7 @@ namespace winrt::ReactNativeWebView::implementation { winrt::IJSValueReader const& commandArgsReader) noexcept { auto control = view.as(); auto content = control.Content(); - auto webView = content.as(); + auto webView = content.as(); auto commandArgs = JSValue::ReadArrayFrom(commandArgsReader); if (commandId == L"goForward") { @@ -134,16 +140,16 @@ namespace winrt::ReactNativeWebView::implementation { } } else if (commandId == L"reload") { - webView.Refresh(); + webView.Reload(); } else if (commandId == L"stopLoading") { - webView.Stop(); + webView.CoreWebView2().Stop(); } else if (commandId == L"injectJavaScript") { - webView.InvokeScriptAsync(L"eval", { winrt::to_hstring(commandArgs[0].AsString()) }); + webView.ExecuteScriptAsync(winrt::to_hstring(commandArgs[0].AsString())); } } } // namespace winrt::ReactNativeWebView::implementation -#endif // USE_WEBVIEW2 +#endif // HAS_WEBVIEW2 diff --git a/windows/ReactNativeWebView/ReactWebView2Manager.h b/windows/ReactNativeWebView/ReactWebView2Manager.h index c7102cfc2a..823e3197ee 100644 --- a/windows/ReactNativeWebView/ReactWebView2Manager.h +++ b/windows/ReactNativeWebView/ReactWebView2Manager.h @@ -5,7 +5,7 @@ #include "ReactWebView2.h" -#if USE_WEBVIEW2 +#if HAS_WEBVIEW2 #include "winrt/Microsoft.ReactNative.h" #include "NativeModules.h" @@ -54,4 +54,4 @@ namespace winrt::ReactNativeWebView::implementation { }; } // namespace winrt::ReactNativeWebView::implementation -#endif // USE_WEBVIEW2 +#endif // HAS_WEBVIEW2 diff --git a/windows/ReactNativeWebView/ReactWebViewManager.cpp b/windows/ReactNativeWebView/ReactWebViewManager.cpp index b316d08df9..3e976f2a13 100644 --- a/windows/ReactNativeWebView/ReactWebViewManager.cpp +++ b/windows/ReactNativeWebView/ReactWebViewManager.cpp @@ -142,7 +142,7 @@ namespace winrt::ReactNativeWebView::implementation { else if (propertyName == "messagingEnabled") { auto messagingEnabled = propertyValue.To(); auto reactWebView = view.as(); - reactWebView.SetMessagingEnabled(messagingEnabled); + reactWebView.MessagingEnabled(messagingEnabled); } } } diff --git a/windows/ReactNativeWebView/pch.h b/windows/ReactNativeWebView/pch.h index 6d84c1facf..f1ea495527 100644 --- a/windows/ReactNativeWebView/pch.h +++ b/windows/ReactNativeWebView/pch.h @@ -1,6 +1,19 @@ #pragma once #define NOMINMAX + +#if __has_include() +#include +#else +#define RNW_VERSION_AT_LEAST(x,y,z) false +#endif + +#if RNW_VERSION_AT_LEAST(0,68,0) +#define HAS_WEBVIEW2 1 +#else +#define HAS_WEBVIEW2 0 +#endif + #include #include #include @@ -14,8 +27,6 @@ #include #include #include -#if __has_include() -#include -#else -#define RNW_VERSION_AT_LEAST(x,y,z) false -#endif +#if HAS_WEBVIEW2 +#include +#endif \ No newline at end of file From 53ff8fb86691e6d143f67e3351e722e7f87f2e65 Mon Sep 17 00:00:00 2001 From: Adam Gorman Date: Fri, 17 Jun 2022 11:54:24 -0700 Subject: [PATCH 029/104] Change WindowsTargetPlatformVersion to 10.0 (#2521) Co-authored-by: Chiara Mooney <34109996+chiaramooney@users.noreply.github.com> --- windows/ReactNativeWebView/ReactNativeWebView.vcxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/windows/ReactNativeWebView/ReactNativeWebView.vcxproj b/windows/ReactNativeWebView/ReactNativeWebView.vcxproj index 685020961a..b366eff23a 100644 --- a/windows/ReactNativeWebView/ReactNativeWebView.vcxproj +++ b/windows/ReactNativeWebView/ReactNativeWebView.vcxproj @@ -14,7 +14,7 @@ true Windows Store 10.0 - 10.0.18362.0 + 10.0 10.0.15063.0 @@ -185,4 +185,4 @@ - \ No newline at end of file + From 453d22d1f16cfb1bd82d4963747fc7da4a8e1ba6 Mon Sep 17 00:00:00 2001 From: hojunin Date: Wed, 22 Jun 2022 07:42:28 +0900 Subject: [PATCH 030/104] fix(iOS/macOS): re-added missing properties due to hooks refactor * fix: add properties for ios WKWebView configuration * Update WebView.ios.tsx * Update WebView.macos.tsx Co-authored-by: Thibault Malbranche --- src/WebView.ios.tsx | 7 ++++++- src/WebView.macos.tsx | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/WebView.ios.tsx b/src/WebView.ios.tsx index acae79c537..a9ecb1f13d 100644 --- a/src/WebView.ios.tsx +++ b/src/WebView.ios.tsx @@ -186,6 +186,11 @@ const WebViewComponent = forwardRef<{}, IOSWebViewProps>(({ injectedJavaScriptBeforeContentLoaded={injectedJavaScriptBeforeContentLoaded} injectedJavaScriptForMainFrameOnly={injectedJavaScriptForMainFrameOnly} injectedJavaScriptBeforeContentLoadedForMainFrameOnly={injectedJavaScriptBeforeContentLoadedForMainFrameOnly} + dataDetectorTypes={dataDetectorTypes} + allowsAirPlayForMediaPlayback={allowsAirPlayForMediaPlayback} + allowsInlineMediaPlayback={allowsInlineMediaPlayback} + incognito={incognito} + mediaPlaybackRequiresUserAction={mediaPlaybackRequiresUserAction} ref={webViewRef} // TODO: find a better way to type this. source={resolveAssetSource(source as ImageSourcePropType)} @@ -207,4 +212,4 @@ const isFileUploadSupported: () => Promise const WebView = Object.assign(WebViewComponent, {isFileUploadSupported}); -export default WebView; \ No newline at end of file +export default WebView; diff --git a/src/WebView.macos.tsx b/src/WebView.macos.tsx index f6a79912a5..1462a7aeb1 100644 --- a/src/WebView.macos.tsx +++ b/src/WebView.macos.tsx @@ -160,6 +160,10 @@ const WebViewComponent = forwardRef<{}, MacOSWebViewProps>(({ onContentProcessDidTerminate={onContentProcessDidTerminate} injectedJavaScript={injectedJavaScript} injectedJavaScriptBeforeContentLoaded={injectedJavaScriptBeforeContentLoaded} + allowsAirPlayForMediaPlayback={allowsAirPlayForMediaPlayback} + allowsInlineMediaPlayback={allowsInlineMediaPlayback} + incognito={incognito} + mediaPlaybackRequiresUserAction={mediaPlaybackRequiresUserAction} ref={webViewRef} // TODO: find a better way to type this. source={resolveAssetSource(source as ImageSourcePropType)} @@ -181,4 +185,4 @@ const isFileUploadSupported: () => Promise const WebView = Object.assign(WebViewComponent, {isFileUploadSupported}); -export default WebView; \ No newline at end of file +export default WebView; From 771e5a868c66e1e5302984476bc683543119819f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 21 Jun 2022 22:45:15 +0000 Subject: [PATCH 031/104] chore(release): 11.22.3 [skip ci] ## [11.22.3](https://github.com/react-native-webview/react-native-webview/compare/v11.22.2...v11.22.3) (2022-06-21) ### Bug Fixes * **iOS/macOS:** re-added missing properties due to hooks refactor ([453d22d](https://github.com/react-native-webview/react-native-webview/commit/453d22d1f16cfb1bd82d4963747fc7da4a8e1ba6)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e25d27b9c4..2bfc63fcdd 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.22.2", + "version": "11.22.3", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From a2a2d0af92aec989a58b57a191c7c738b38517b9 Mon Sep 17 00:00:00 2001 From: Caleb Clarke Date: Fri, 24 Jun 2022 02:36:46 -0700 Subject: [PATCH 032/104] chore(docs): Fix the "register the module" link in the Custom Android doc (#2560) --- docs/Custom-Android.md | 2 +- docs/Custom-Android.portuguese.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Custom-Android.md b/docs/Custom-Android.md index 9cb3040ab9..e873e9060a 100644 --- a/docs/Custom-Android.md +++ b/docs/Custom-Android.md @@ -41,7 +41,7 @@ public class CustomWebViewManager extends RNCWebViewManager { } ``` -You'll need to follow the usual steps to [register the module](native-modules-android.md#register-the-module). +You'll need to follow the usual steps to [register the module](https://reactnative.dev/docs/native-modules-android#register-the-module-android-specific). ### Adding New Properties diff --git a/docs/Custom-Android.portuguese.md b/docs/Custom-Android.portuguese.md index 8d0466a08c..960861f7bf 100644 --- a/docs/Custom-Android.portuguese.md +++ b/docs/Custom-Android.portuguese.md @@ -41,7 +41,7 @@ public class CustomWebViewManager extends RNCWebViewManager { } ``` -Você precisará seguir as etapas usuais para [registrar o módulo](native-modules-android.md#register-the-module). +Você precisará seguir as etapas usuais para [registrar o módulo](https://reactnative.dev/docs/native-modules-android#register-the-module-android-specific). ### Adicionando novas propriedades From b7f5c6f4970e4da179da1942b527427bdabbda37 Mon Sep 17 00:00:00 2001 From: Chiara Mooney <34109996+chiaramooney@users.noreply.github.com> Date: Tue, 28 Jun 2022 16:07:54 -0700 Subject: [PATCH 033/104] fix(windows): Refactor JS Code for Windows (#2554) * Refactor JS Code * Fix Typescript --- src/WebView.windows.tsx | 373 +++++++++++---------------------- windows/ReactNativeWebView.sln | 5 +- 2 files changed, 130 insertions(+), 248 deletions(-) diff --git a/src/WebView.windows.tsx b/src/WebView.windows.tsx index 0f21e4bd0c..51ba7c7e45 100644 --- a/src/WebView.windows.tsx +++ b/src/WebView.windows.tsx @@ -10,271 +10,154 @@ * Licensed under the MIT License. */ -import React from 'react'; +import React, { forwardRef, useCallback, useImperativeHandle, useRef } from 'react'; import { - UIManager as NotTypedUIManager, View, - StyleSheet, Image, ImageSourcePropType, - findNodeHandle, + NativeModules, } from 'react-native'; +// @ts-expect-error react-native doesn't have this type +import codegenNativeCommandsUntyped from 'react-native/Libraries/Utilities/codegenNativeCommands'; +import invariant from 'invariant'; import {RCTWebView, RCTWebView2} from "./WebViewNativeComponent.windows"; -import { createOnShouldStartLoadWithRequest } from './WebViewShared'; +import { useWebWiewLogic, defaultOriginWhitelist, defaultRenderError, defaultRenderLoading, } from './WebViewShared'; import { NativeWebViewWindows, WindowsWebViewProps, - WebViewProgressEvent, - WebViewNavigationEvent, - WebViewErrorEvent, - WebViewHttpErrorEvent, - WebViewMessageEvent, - RNCWebViewUIManagerWindows, - State, } from './WebViewTypes'; +import styles from './WebView.styles'; + const {version} = require('react-native/Libraries/Core/ReactNativeVersion'); -const UIManager = NotTypedUIManager as RNCWebViewUIManagerWindows; -const { resolveAssetSource } = Image; +const codegenNativeCommands = codegenNativeCommandsUntyped as (options: { supportedCommands: (keyof T)[] }) => T; -const styles = StyleSheet.create({ - container: { - flex: 1, - }, - hidden: { - height: 0, - flex: 0, // disable 'flex:1' when hiding a View - }, - loadingView: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - loadingProgressBar: { - height: 20, - }, +const Commands = codegenNativeCommands({ + supportedCommands: ['goBack', 'goForward', 'reload', 'stopLoading', 'injectJavaScript', 'requestFocus', 'postMessage', 'loadUrl'], }); +const { resolveAssetSource } = Image; -export default class WebView extends React.Component { - - static defaultProps = { - javaScriptEnabled: true, - }; - - state: State = { - viewState: this.props.startInLoadingState ? 'LOADING' : 'IDLE', - lastErrorEvent: null, - } - - webViewRef = React.createRef(); - - RnwVersionSupportsWebView2 = (version.major>1 || version.minor>=68); +const WebViewComponent = forwardRef<{}, WindowsWebViewProps>(({ + cacheEnabled = true, + originWhitelist = defaultOriginWhitelist, + startInLoadingState, + onNavigationStateChange, + onLoadStart, + onError, + onLoad, + onLoadEnd, + onLoadProgress, + onHttpError: onHttpErrorProp, + onMessage: onMessageProp, + renderLoading, + renderError, + style, + containerStyle, + source, + nativeConfig, + onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp, + useWebView2, + ...otherProps +}, ref) => { + const webViewRef = useRef(null); + + const RnwVersionSupportsWebView2 = (version.major>1 || version.minor>=68); - RCTWebViewString = (this.RnwVersionSupportsWebView2 && this.props.useWebView2) ? 'RCTWebView2' : 'RCTWebView'; - - goForward = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - UIManager.getViewManagerConfig(this.RCTWebViewString).Commands.goForward, - undefined, - ); - } - - goBack = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - UIManager.getViewManagerConfig(this.RCTWebViewString).Commands.goBack, - undefined, - ); - } - - reload = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - UIManager.getViewManagerConfig(this.RCTWebViewString).Commands.reload, - undefined, - ); - } - - injectJavaScript = (data: string) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - UIManager.getViewManagerConfig(this.RCTWebViewString).Commands.injectJavaScript, - [data], - ); - } - - postMessage = (data: string) => { - const message = this.getInjectableJSMessage(data); - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - UIManager.getViewManagerConfig(this.RCTWebViewString).Commands.injectJavaScript, - [message], - ); - }; - - getInjectableJSMessage = (message: string ) => { - return `(function() {window.dispatchEvent(new MessageEvent('message', {data: ${JSON.stringify( - message - )}}));})();`; - } - - - - /** - * We return an event with a bunch of fields including: - * url, title, loading, canGoBack, canGoForward - */ - updateNavigationState = (event: WebViewNavigationEvent) => { - if (this.props.onNavigationStateChange) { - this.props.onNavigationStateChange(event.nativeEvent); - } - } - - getWebViewHandle = () => { - // eslint-disable-next-line react/no-string-refs - return findNodeHandle(this.webViewRef.current); - } - - onLoadingStart = (event: WebViewNavigationEvent) => { - const { onLoadStart } = this.props; - if(onLoadStart) { - onLoadStart(event); - } - this.updateNavigationState(event); - } - - onLoadingProgress = (event: WebViewProgressEvent) => { - const { onLoadProgress } = this.props; - if (onLoadProgress) { - onLoadProgress(event); - } - }; - - onLoadingError = (event: WebViewErrorEvent) => { - event.persist(); // persist this event because we need to store it - const { onError, onLoadEnd } = this.props; - if (onError) { - onError(event); - } else { - console.warn('Encountered an error loading page', event.nativeEvent); - } - - if (onLoadEnd) { - onLoadEnd(event); + const RCTWebViewString = (RnwVersionSupportsWebView2 && useWebView2) ? 'RCTWebView2' : 'RCTWebView'; + + const onShouldStartLoadWithRequestCallback = useCallback((shouldStart: boolean, url: string, lockIdentifier?: number) => { + if (lockIdentifier) { + if (RCTWebViewString === 'RCTWebView'){ + NativeModules.RCTWebView.onShouldStartLoadWithRequestCallback(shouldStart, lockIdentifier); + }else{ + NativeModules.RCTWebView2.onShouldStartLoadWithRequestCallback(shouldStart, lockIdentifier); + } + } else if (shouldStart) { + Commands.loadUrl(webViewRef, url); } - if (event.isDefaultPrevented()) return; - - this.setState({ - lastErrorEvent: event.nativeEvent, - viewState: 'ERROR', - }); - }; - - onLoadingFinish =(event: WebViewNavigationEvent) => { - const {onLoad, onLoadEnd} = this.props; - if(onLoad) { - onLoad(event); - } - if(onLoadEnd) { - onLoadEnd(event); - } - this.setState({ - viewState: 'IDLE', - }); - this.updateNavigationState(event); - } - - onMessage = (event: WebViewMessageEvent) => { - const { onMessage } = this.props; - if (onMessage) { - onMessage(event); - } - } - - onHttpError = (event: WebViewHttpErrorEvent) => { - const { onHttpError } = this.props; - if (onHttpError) { - onHttpError(event); - } - } - - render () { - const { - nativeConfig = {}, - onMessage, - onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp, - originWhitelist, - renderError, - renderLoading, - style, - containerStyle, - useWebView2, - ...otherProps - } = this.props; - - let otherView = null; - - if (this.state.viewState === 'LOADING') { - otherView = this.props.renderLoading && this.props.renderLoading(); - } else if (this.state.viewState === 'ERROR') { - const errorEvent = this.state.lastErrorEvent; - otherView = this.props.renderError - && this.props.renderError( - errorEvent.domain, - errorEvent.code, - errorEvent.description, - ); - } else if (this.state.viewState !== 'IDLE') { - console.error('RCTWebView invalid state encountered: ', this.state.viewState); - } - - const webViewStyles = [styles.container, this.props.style]; - if ( - this.state.viewState === 'LOADING' - || this.state.viewState === 'ERROR' - ) { - // if we're in either LOADING or ERROR states, don't show the webView - webViewStyles.push(styles.hidden); - } - - const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest( - ()=>{}, - // casting cause it's in the default props - originWhitelist as readonly string[], - onShouldStartLoadWithRequestProp, + }, []); + + const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress } = useWebWiewLogic({ + onNavigationStateChange, + onLoad, + onError, + onHttpErrorProp, + onLoadEnd, + onLoadProgress, + onLoadStart, + onMessageProp, + startInLoadingState, + originWhitelist, + onShouldStartLoadWithRequestProp, + onShouldStartLoadWithRequestCallback, + }) + + useImperativeHandle(ref, () => ({ + goForward: () => Commands.goForward(webViewRef.current), + goBack: () => Commands.goBack(webViewRef.current), + reload: () => { + setViewState( + 'LOADING', + ); Commands.reload(webViewRef.current) + }, + stopLoading: () => Commands.stopLoading(webViewRef.current), + postMessage: (data: string) => Commands.postMessage(webViewRef.current, data), + injectJavaScript: (data: string) => Commands.injectJavaScript(webViewRef.current, data), + requestFocus: () => Commands.requestFocus(webViewRef.current), + }), [setViewState, webViewRef]); + + let otherView = null; + if (viewState === 'LOADING') { + otherView = (renderLoading || defaultRenderLoading)(); + } else if (viewState === 'ERROR') { + invariant(lastErrorEvent != null, 'lastErrorEvent expected to be non-null'); + otherView = (renderError || defaultRenderError)( + lastErrorEvent.domain, + lastErrorEvent.code, + lastErrorEvent.description, ); + } else if (viewState !== 'IDLE') { + console.error(`RNCWebView invalid state encountered: ${viewState}`); + } - const NativeWebView - = (this.RnwVersionSupportsWebView2 && this.props.useWebView2)? RCTWebView2 : RCTWebView; + const webViewStyles = [styles.container, styles.webView, style]; + const webViewContainerStyle = [styles.container, containerStyle]; + + const NativeWebView + = (RnwVersionSupportsWebView2 && useWebView2)? RCTWebView2 : RCTWebView; + + const webView = + + return ( + + {webView} + {otherView} + + ); +}); - const webView = ( - - ); +// native implementation should return "true" only for Android 5+ +const isFileUploadSupported: () => Promise += async () => false; - return ( - - {webView} - {otherView} - - ); - } +const WebView = Object.assign(WebViewComponent, {isFileUploadSupported}); -} +export default WebView; diff --git a/windows/ReactNativeWebView.sln b/windows/ReactNativeWebView.sln index b275a0b781..6633863aa0 100644 --- a/windows/ReactNativeWebView.sln +++ b/windows/ReactNativeWebView.sln @@ -29,7 +29,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactCommon", "..\node_modu EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative.Shared", "..\node_modules\react-native-windows\Shared\Shared.vcxitems", "{2049DBE9-8D13-42C9-AE4B-413AE38FFFD0}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactNativeWebView", "ReactNativeWebView2\ReactNativeWebView.vcxproj", "{00AA3765-C6A0-4713-B3F9-BFE47B9C83F5}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactNativeWebView", "ReactNativeWebView\ReactNativeWebView.vcxproj", "{00AA3765-C6A0-4713-B3F9-BFE47B9C83F5}" EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution @@ -109,7 +109,7 @@ Global {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.ActiveCfg = Release|Win32 {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.Build.0 = Release|Win32 {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.Deploy.0 = Release|Win32 - {F2824844-CE15-4242-9420-308923CD76C3}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {F2824844-CE15-4242-9420-308923CD76C3}.Debug|ARM64.ActiveCfg = Debug|ARM64 {F2824844-CE15-4242-9420-308923CD76C3}.Debug|ARM64.Build.0 = Debug|ARM64 {F2824844-CE15-4242-9420-308923CD76C3}.Debug|x64.ActiveCfg = Debug|x64 {F2824844-CE15-4242-9420-308923CD76C3}.Debug|x64.Build.0 = Debug|x64 @@ -121,7 +121,6 @@ Global {F2824844-CE15-4242-9420-308923CD76C3}.Release|x64.Build.0 = Release|x64 {F2824844-CE15-4242-9420-308923CD76C3}.Release|x86.ActiveCfg = Release|x86 {F2824844-CE15-4242-9420-308923CD76C3}.Release|x86.Build.0 = Release|x86 - {C42480ED-F288-4C37-87ED-492000D9A948}.Debug|ARM.Build.0 = Debug|ARM {C42480ED-F288-4C37-87ED-492000D9A948}.Debug|ARM64.ActiveCfg = Debug|ARM64 {C42480ED-F288-4C37-87ED-492000D9A948}.Debug|ARM64.Build.0 = Debug|ARM64 {C42480ED-F288-4C37-87ED-492000D9A948}.Debug|x64.ActiveCfg = Debug|x64 From a0f1e2641a733777e124e8396ee3b86ec4f3deb8 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 28 Jun 2022 23:09:29 +0000 Subject: [PATCH 034/104] chore(release): 11.22.4 [skip ci] ## [11.22.4](https://github.com/react-native-webview/react-native-webview/compare/v11.22.3...v11.22.4) (2022-06-28) ### Bug Fixes * **windows:** Refactor JS Code for Windows ([#2554](https://github.com/react-native-webview/react-native-webview/issues/2554)) ([b7f5c6f](https://github.com/react-native-webview/react-native-webview/commit/b7f5c6f4970e4da179da1942b527427bdabbda37)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2bfc63fcdd..03c2be156a 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.22.3", + "version": "11.22.4", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 045fb602e374374beba56f6316920985c297b34f Mon Sep 17 00:00:00 2001 From: David Wood <39954127+moonsift@users.noreply.github.com> Date: Wed, 6 Jul 2022 22:26:01 +0100 Subject: [PATCH 035/104] fix(iOS): Adding the contentProcessDidTerminate property into useWebViewLogic hook arguments (fixes #2559) (#2580) --- src/WebView.ios.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/WebView.ios.tsx b/src/WebView.ios.tsx index a9ecb1f13d..08ffffc7c9 100644 --- a/src/WebView.ios.tsx +++ b/src/WebView.ios.tsx @@ -72,6 +72,7 @@ const WebViewComponent = forwardRef<{}, IOSWebViewProps>(({ onLoad, onLoadEnd, onLoadProgress, + onContentProcessDidTerminate: onContentProcessDidTerminateProp, onFileDownload, onHttpError: onHttpErrorProp, onMessage: onMessageProp, @@ -117,6 +118,7 @@ const WebViewComponent = forwardRef<{}, IOSWebViewProps>(({ originWhitelist, onShouldStartLoadWithRequestProp, onShouldStartLoadWithRequestCallback, + onContentProcessDidTerminateProp, }); useImperativeHandle(ref, () => ({ From 4749dae4301d992ebde3922e520407a2440fb4aa Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 6 Jul 2022 21:27:29 +0000 Subject: [PATCH 036/104] chore(release): 11.22.5 [skip ci] ## [11.22.5](https://github.com/react-native-webview/react-native-webview/compare/v11.22.4...v11.22.5) (2022-07-06) ### Bug Fixes * **iOS:** Adding the contentProcessDidTerminate property into useWebViewLogic hook arguments (fixes [#2559](https://github.com/react-native-webview/react-native-webview/issues/2559)) ([#2580](https://github.com/react-native-webview/react-native-webview/issues/2580)) ([045fb60](https://github.com/react-native-webview/react-native-webview/commit/045fb602e374374beba56f6316920985c297b34f)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 03c2be156a..9993dac58d 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.22.4", + "version": "11.22.5", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 3727f81caf337c88cb1fbd6a08397dd71670eed0 Mon Sep 17 00:00:00 2001 From: Chiara Mooney <34109996+chiaramooney@users.noreply.github.com> Date: Mon, 11 Jul 2022 13:44:41 -0700 Subject: [PATCH 037/104] fix(windows): Add WinUI Version Opt In Functionality (#2575) * Add WinUI Opt In * Fix Lint * Address Feedback * Fix Dep Missing * Address Feedback --- src/WebView.windows.tsx | 10 +++------- .../ReactNativeWebView/ReactNativeWebView.vcxproj | 12 +++++++++++- windows/ReactNativeWebView/ReactWebView.idl | 3 ++- windows/ReactNativeWebView/pch.h | 2 +- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/WebView.windows.tsx b/src/WebView.windows.tsx index 51ba7c7e45..c9f41d34f4 100644 --- a/src/WebView.windows.tsx +++ b/src/WebView.windows.tsx @@ -29,8 +29,6 @@ import { import styles from './WebView.styles'; -const {version} = require('react-native/Libraries/Core/ReactNativeVersion'); - const codegenNativeCommands = codegenNativeCommandsUntyped as (options: { supportedCommands: (keyof T)[] }) => T; const Commands = codegenNativeCommands({ @@ -61,10 +59,8 @@ const WebViewComponent = forwardRef<{}, WindowsWebViewProps>(({ ...otherProps }, ref) => { const webViewRef = useRef(null); - - const RnwVersionSupportsWebView2 = (version.major>1 || version.minor>=68); - const RCTWebViewString = (RnwVersionSupportsWebView2 && useWebView2) ? 'RCTWebView2' : 'RCTWebView'; + const RCTWebViewString = useWebView2 ? 'RCTWebView2' : 'RCTWebView'; const onShouldStartLoadWithRequestCallback = useCallback((shouldStart: boolean, url: string, lockIdentifier?: number) => { if (lockIdentifier) { @@ -76,7 +72,7 @@ const WebViewComponent = forwardRef<{}, WindowsWebViewProps>(({ } else if (shouldStart) { Commands.loadUrl(webViewRef, url); } - }, []); + }, [RCTWebViewString]); const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress } = useWebWiewLogic({ onNavigationStateChange, @@ -125,7 +121,7 @@ const WebViewComponent = forwardRef<{}, WindowsWebViewProps>(({ const webViewContainerStyle = [styles.container, containerStyle]; const NativeWebView - = (RnwVersionSupportsWebView2 && useWebView2)? RCTWebView2 : RCTWebView; + = useWebView2? RCTWebView2 : RCTWebView; const webView = - + + true + @@ -113,6 +115,14 @@ NDEBUG;%(PreprocessorDefinitions) + + + WINUI2_HAS_WEBVIEW2;%(PreprocessorDefinitions) + + + WINUI2_HAS_WEBVIEW2;%(PreprocessorDefinitions) + + diff --git a/windows/ReactNativeWebView/ReactWebView.idl b/windows/ReactNativeWebView/ReactWebView.idl index aa859c2120..54b0e626d7 100644 --- a/windows/ReactNativeWebView/ReactWebView.idl +++ b/windows/ReactNativeWebView/ReactWebView.idl @@ -9,7 +9,8 @@ namespace ReactNativeWebView{ #else #define RNW_VERSION_AT_LEAST(x,y,z) false #endif -#if RNW_VERSION_AT_LEAST(0,68,0) + +#if RNW_VERSION_AT_LEAST(0,68,0) && defined(WINUI2_HAS_WEBVIEW2) [default_interface] runtimeclass ReactWebView2 : Windows.UI.Xaml.Controls.ContentPresenter{ ReactWebView2(Microsoft.ReactNative.IReactContext context); diff --git a/windows/ReactNativeWebView/pch.h b/windows/ReactNativeWebView/pch.h index f1ea495527..ac40d18ff9 100644 --- a/windows/ReactNativeWebView/pch.h +++ b/windows/ReactNativeWebView/pch.h @@ -8,7 +8,7 @@ #define RNW_VERSION_AT_LEAST(x,y,z) false #endif -#if RNW_VERSION_AT_LEAST(0,68,0) +#if RNW_VERSION_AT_LEAST(0,68,0) && defined(WINUI2_HAS_WEBVIEW2) #define HAS_WEBVIEW2 1 #else #define HAS_WEBVIEW2 0 From 1cacde450085128eee93322e60816b42a64223db Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 11 Jul 2022 20:47:09 +0000 Subject: [PATCH 038/104] chore(release): 11.22.6 [skip ci] ## [11.22.6](https://github.com/react-native-webview/react-native-webview/compare/v11.22.5...v11.22.6) (2022-07-11) ### Bug Fixes * **windows:** Add WinUI Version Opt In Functionality ([#2575](https://github.com/react-native-webview/react-native-webview/issues/2575)) ([3727f81](https://github.com/react-native-webview/react-native-webview/commit/3727f81caf337c88cb1fbd6a08397dd71670eed0)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9993dac58d..a1f58c3398 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.22.5", + "version": "11.22.6", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 7f78f206170b0a8f29b467fa2cc546544e9cd300 Mon Sep 17 00:00:00 2001 From: Artur Y <10753921+artyorsh@users.noreply.github.com> Date: Tue, 12 Jul 2022 10:13:56 +0200 Subject: [PATCH 039/104] fix(android): cacheEnabled - make compatible with android sdk-33 (#2583) * fix(android): cacheEnabled - make compatible with android sdk-33 * leftovers --- .../com/reactnativecommunity/webview/RNCWebViewManager.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java index e87f805076..c28568442a 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java @@ -316,13 +316,10 @@ public void setCacheEnabled(WebView view, boolean enabled) { if (enabled) { Context ctx = view.getContext(); if (ctx != null) { - view.getSettings().setAppCachePath(ctx.getCacheDir().getAbsolutePath()); view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); - view.getSettings().setAppCacheEnabled(true); } } else { view.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); - view.getSettings().setAppCacheEnabled(false); } } @@ -521,7 +518,6 @@ public void setIncognito(WebView view, boolean enabled) { // Disable caching view.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); - view.getSettings().setAppCacheEnabled(false); view.clearHistory(); view.clearCache(true); From 2f47372a20c7a9b4c7e5a3c4b2276d0245b73598 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 12 Jul 2022 08:15:42 +0000 Subject: [PATCH 040/104] chore(release): 11.22.7 [skip ci] ## [11.22.7](https://github.com/react-native-webview/react-native-webview/compare/v11.22.6...v11.22.7) (2022-07-12) ### Bug Fixes * **android:** cacheEnabled - make compatible with android sdk-33 ([#2583](https://github.com/react-native-webview/react-native-webview/issues/2583)) ([7f78f20](https://github.com/react-native-webview/react-native-webview/commit/7f78f206170b0a8f29b467fa2cc546544e9cd300)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a1f58c3398..950ed332c5 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.22.6", + "version": "11.22.7", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From b850d1d7b1f58830763c89146f13b9c777592be9 Mon Sep 17 00:00:00 2001 From: Takuya Matsuyama Date: Tue, 26 Jul 2022 04:31:13 +0900 Subject: [PATCH 041/104] feat(android): bump up kotlinVersion to 1.6.0 (#2592) Fixes the error "Module was compiled with an incompatible version of Kotlin" fix #2578 Co-authored-by: Jamon Holmgren --- android/gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/gradle.properties b/android/gradle.properties index a3b48de8b1..e6f0f5eb08 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,6 +1,6 @@ -ReactNativeWebView_kotlinVersion=1.3.50 +ReactNativeWebView_kotlinVersion=1.6.0 ReactNativeWebView_webkitVersion=1.4.0 ReactNativeWebView_compileSdkVersion=29 ReactNativeWebView_buildToolsVersion=29.0.3 ReactNativeWebView_targetSdkVersion=28 -ReactNativeWebView_minSdkVersion=21 \ No newline at end of file +ReactNativeWebView_minSdkVersion=21 From 76826691dfa1aac44e280575e98701bbef75c28f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 25 Jul 2022 19:32:40 +0000 Subject: [PATCH 042/104] chore(release): 11.23.0 [skip ci] # [11.23.0](https://github.com/react-native-webview/react-native-webview/compare/v11.22.7...v11.23.0) (2022-07-25) ### Features * **android:** bump up kotlinVersion to 1.6.0 ([#2592](https://github.com/react-native-webview/react-native-webview/issues/2592)) ([b850d1d](https://github.com/react-native-webview/react-native-webview/commit/b850d1d7b1f58830763c89146f13b9c777592be9)), closes [#2578](https://github.com/react-native-webview/react-native-webview/issues/2578) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 950ed332c5..68a9dfb272 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.22.7", + "version": "11.23.0", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 37c8d34df602d8c693ad261ac99b87b5cd2d4b57 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen <4123478+tido64@users.noreply.github.com> Date: Fri, 29 Jul 2022 13:37:08 +0200 Subject: [PATCH 043/104] chore: bump react-native-test-app for TurboModule support (#2612) --- example/android/build.gradle | 1 - package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/example/android/build.gradle b/example/android/build.gradle index ad926b6ddc..7f3dacb787 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -9,6 +9,5 @@ buildscript { dependencies { classpath "com.android.tools.build:gradle:$androidPluginVersion" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } } diff --git a/package.json b/package.json index 68a9dfb272..6e97318e54 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "react": "17.0.2", "react-native": "0.68.2", "react-native-macos": "0.66.57", - "react-native-test-app": "1.3.8", + "react-native-test-app": "1.5.0", "react-native-windows": "0.68.4", "selenium-appium": "1.0.2", "selenium-webdriver": "4.0.0-alpha.7", diff --git a/yarn.lock b/yarn.lock index 78ea0d1623..5d54a05566 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11430,10 +11430,10 @@ react-native-macos@0.66.57: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-native-test-app@1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/react-native-test-app/-/react-native-test-app-1.3.8.tgz#a25c3729a9e6b2a3beb37653d05265a39b5df5ef" - integrity sha512-JxPgJ2FsYT9lUMo9bRGpNtTkMZIKpEkXskpdLEk6CliZvO0z5n8z7tlVDDP4AVjJrOlss/OGvfenU88YbLzDfg== +react-native-test-app@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/react-native-test-app/-/react-native-test-app-1.5.0.tgz#a504a71246555234a18c02cab454d2a57950e914" + integrity sha512-Z+zJjnwnqE/H36aFRKLgjyjrCRanB2R5gN8j33VclBiw9tP6O3lC7iCEewJlKVyRkPzMDOdL0EM18hcx6snqsg== dependencies: ajv "^8.0.0" chalk "^4.1.0" From dbb9a72304e14da714d02b7ca117ebdf900bb301 Mon Sep 17 00:00:00 2001 From: dyegofern <35540093+dyegofern@users.noreply.github.com> Date: Thu, 25 Aug 2022 09:21:40 -0400 Subject: [PATCH 044/104] chore: Update README.portuguese.md (#2641) --- docs/README.portuguese.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/README.portuguese.md b/docs/README.portuguese.md index 5ca6832e8c..762aa0c6ed 100644 --- a/docs/README.portuguese.md +++ b/docs/README.portuguese.md @@ -1,4 +1,4 @@ -# React Native WebView - Um moderno, multiplataforma WebView para React Native +# React Native WebView - Um moderno, WebView multiplataforma para React Native [![star this repo](http://githubbadges.com/star.svg?user=react-native-webview&repo=react-native-webview&style=flat)](https://github.com/react-native-webview/react-native-webview) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) @@ -6,11 +6,11 @@ [![Known Vulnerabilities](https://snyk.io/test/github/react-native-webview/react-native-webview/badge.svg?style=flat-square)](https://snyk.io/test/github/react-native-webview/react-native-webview) -**React Native WebView** é um moderno, bem apoiado, e multiplataforma WebView para React Native. É projetado para substituir o WebView embutido(que sera [removido do core](https://github.com/react-native-community/discussions-and-proposals/pull/3)). +**React Native WebView** é um moderno WebView multiplataforma para React Native. Ele foi projetado para substituir o WebView embutido(que será [removido do core](https://github.com/react-native-community/discussions-and-proposals/pull/3)). -## Mantenedores principais - Empresas Patrocinadoras +## Principais Mantenedores - Empresas Patrocinadoras -_Esse projeto é mantido gratuitamente por essas pessoas usando ambos seu tempo livre e tempo de trabalho na empresa._ +_Esse projeto é mantido gratuitamente por essas pessoas usando ambos, seu tempo livre e tempo de trabalho na empresa._ - [Thibault Malbranche](https://github.com/Titozzz) ([Twitter @titozzz](https://twitter.com/titozzz)) from [Brigad](https://brigad.co/about) - [Jamon Holmgren](https://github.com/jamonholmgren) ([Twitter @jamonholmgren](https://twitter.com/jamonholmgren)) from [Infinite Red](https://infinite.red/react-native) @@ -49,16 +49,16 @@ Versão atual: ![version](https://img.shields.io/npm/v/react-native-webview.svg) - [3.0.0](https://github.com/react-native-webview/react-native-webview/releases/tag/v3.0.0) - WKWebview: Adicionado um pool de processos compartilhados para que os cookies e o localStorage sejam compartilhados nas webviews no iOS (habilitadas por padrão) - [2.0.0](https://github.com/react-native-webview/react-native-webview/releases/tag/v2.0.0) - Primeiro lançamento, esta é uma réplica do componente principal do webview. -**Seguinte:** +**Próximos Passos:** - Remoção do this.webView.postMessage() ( - nunca documentado e menos flexível que o injectJavascript) -> [Como migrar](https://github.com/react-native-webview/react-native-webview/issues/809) + nunca foi documentado e é menos flexível que o injectJavascript) -> [Como migrar](https://github.com/react-native-webview/react-native-webview/issues/809) - Reescrita em Kotlin - Talvez reescrita em Swift ## Uso -Importe o componente `WebView` de `react-native-webview` e use assim: +Importe o componente `WebView` `react-native-webview` e use assim: ```jsx import React, { Component } from 'react'; @@ -86,7 +86,7 @@ Veja [Contributing.md](https://github.com/react-native-webview/react-native-webv ## Contribuidores -Obrigado vai a essas pessoas maravilhosas ([emoji key](https://github.com/all-contributors/all-contributors#emoji-key-)): +Um grande obrigado vai para essas pessoas maravilhosas ([emoji key](https://github.com/all-contributors/all-contributors#emoji-key-)): From 6c00c1f9f38513f95bc44d9f3dba668c79629348 Mon Sep 17 00:00:00 2001 From: Hudi Ilfeld Date: Sat, 3 Sep 2022 21:35:53 -0400 Subject: [PATCH 045/104] fix(iOS): add null check safety for adding mainDocumentURL to event (#2662) --- apple/RNCWebView.m | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apple/RNCWebView.m b/apple/RNCWebView.m index 97b2a5d052..39d5bae24a 100644 --- a/apple/RNCWebView.m +++ b/apple/RNCWebView.m @@ -1143,9 +1143,13 @@ - (void) webView:(WKWebView *)webView if (_onShouldStartLoadWithRequest) { NSMutableDictionary *event = [self baseEvent]; + if (request.mainDocumentURL) { + [event addEntriesFromDictionary: @{ + @"mainDocumentURL": (request.mainDocumentURL).absoluteString, + }]; + } [event addEntriesFromDictionary: @{ @"url": (request.URL).absoluteString, - @"mainDocumentURL": (request.mainDocumentURL).absoluteString, @"navigationType": navigationTypes[@(navigationType)], @"isTopFrame": @(isTopFrame) }]; From ceb5cc71027311ce754759839e77d288b378d234 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 4 Sep 2022 01:37:32 +0000 Subject: [PATCH 046/104] chore(release): 11.23.1 [skip ci] ## [11.23.1](https://github.com/react-native-webview/react-native-webview/compare/v11.23.0...v11.23.1) (2022-09-04) ### Bug Fixes * **iOS:** add null check safety for adding mainDocumentURL to event ([#2662](https://github.com/react-native-webview/react-native-webview/issues/2662)) ([6c00c1f](https://github.com/react-native-webview/react-native-webview/commit/6c00c1f9f38513f95bc44d9f3dba668c79629348)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6e97318e54..531a49be5c 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.23.0", + "version": "11.23.1", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From c8258bc3eea6fc26a3f01b02ed85297ce891523d Mon Sep 17 00:00:00 2001 From: Peter Klingelhofer Date: Mon, 5 Sep 2022 02:40:47 -0400 Subject: [PATCH 047/104] chore(docs): add page navigation gesture & button support (#2609) --- docs/Guide.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/Guide.md b/docs/Guide.md index ef1c431348..ece7be83b5 100644 --- a/docs/Guide.md +++ b/docs/Guide.md @@ -15,6 +15,7 @@ _This guide is currently a work in progress._ - [Add support for File Download](Guide.md#add-support-for-file-download) - [Communicating between JS and Native](Guide.md#communicating-between-js-and-native) - [Working with custom headers, sessions, and cookies](Guide.md#working-with-custom-headers-sessions-and-cookies) +- [Page navigation gesture and button support](Guide.md#page-navigation-gesture-and-button-support) ### Basic inline HTML @@ -540,6 +541,52 @@ const App = () => { Note that these cookies will only be sent on the first request unless you use the technique above for [setting custom headers on each page load](#Setting-Custom-Headers). +### Page navigation gesture and button support +We can provide support for conventional mobile page navigation: forward/back swipe gestures on iOS and the hardware back button/gesture on Android. + +For iOS, you'll just need to use the [`allowsbackforwardnavigationgestures`](Reference.md#allowsbackforwardnavigationgestures) prop. + +For Android, you need to use `BackHandler.addEventListener` and hook that up to call `goBack` on the `WebView`. + +With functional React components, you can use `useRef` and `useEffect` (you'll need to import them from React if you aren't already) to allow users to navigate to the previous page when they press the back button like so: +```jsx +import React, { + useEffect, + useRef, +} from 'react'; +import { + BackHandler, + Platform, +} from 'react-native'; +``` + +```jsx +const webViewRef = useRef(null); +const onAndroidBackPress = () => { + if (webViewRef.current) { + webViewRef.current.goBack(); + return true; // prevent default behavior (exit app) + } + return false; +}; + +useEffect(() => { + if (Platform.OS === 'android') { + BackHandler.addEventListener('hardwareBackPress', onAndroidBackPress); + return () => { + BackHandler.removeEventListener('hardwareBackPress', onAndroidBackPress); + }; + } +}, []); +``` + +And add this prop to your `WebView` component: +```jsx + +``` + ### Hardware Silence Switch There are some inconsistencies in how the hardware silence switch is handled between embedded `audio` and `video` elements and between iOS and Android platforms. From 3a8ad105cbbe26e6f3380413f6407cdd9fca6e92 Mon Sep 17 00:00:00 2001 From: Robert Keresnyei Date: Tue, 27 Sep 2022 03:58:29 +0200 Subject: [PATCH 048/104] chore(docs): Fix indentation in guide (#2685) --- docs/Guide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Guide.md b/docs/Guide.md index ece7be83b5..e655467c64 100644 --- a/docs/Guide.md +++ b/docs/Guide.md @@ -573,9 +573,9 @@ const onAndroidBackPress = () => { useEffect(() => { if (Platform.OS === 'android') { BackHandler.addEventListener('hardwareBackPress', onAndroidBackPress); - return () => { - BackHandler.removeEventListener('hardwareBackPress', onAndroidBackPress); - }; + return () => { + BackHandler.removeEventListener('hardwareBackPress', onAndroidBackPress); + }; } }, []); ``` From c14dcc2617429ca53b91de18eac07ed7b119c239 Mon Sep 17 00:00:00 2001 From: Matin Zadeh Dolatabad Date: Fri, 7 Oct 2022 01:11:43 +0200 Subject: [PATCH 049/104] refactor(android): cleanup cacheEnabled prop (#2697) --- .../reactnativecommunity/webview/RNCWebViewManager.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java index c28568442a..6d28fed7f2 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java @@ -313,14 +313,7 @@ public void setLackPermissionToDownlaodMessage(WebView view, String message) { @ReactProp(name = "cacheEnabled") public void setCacheEnabled(WebView view, boolean enabled) { - if (enabled) { - Context ctx = view.getContext(); - if (ctx != null) { - view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); - } - } else { - view.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); - } + view.getSettings().setCacheMode(enabled ? WebSettings.LOAD_DEFAULT : WebSettings.LOAD_NO_CACHE); } @ReactProp(name = "cacheMode") From d6af98f67a0a5694b00cbd35beb27fc40ea7358b Mon Sep 17 00:00:00 2001 From: Caleb Clarke Date: Wed, 9 Nov 2022 12:39:52 -0800 Subject: [PATCH 050/104] chore(ci): Update React Native to fix Android build (#2734) See https://github.com/facebook/react-native/issues/35210 --- package.json | 2 +- yarn.lock | 31 ++++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 531a49be5c..e8510906f1 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "jest": "^26.6.3", "metro-react-native-babel-preset": "^0.67.0", "react": "17.0.2", - "react-native": "0.68.2", + "react-native": "0.68.5", "react-native-macos": "0.66.57", "react-native-test-app": "1.5.0", "react-native-windows": "0.68.4", diff --git a/yarn.lock b/yarn.lock index 5d54a05566..e3f20302bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11143,6 +11143,13 @@ promise@^8.0.3: dependencies: asap "~2.0.6" +promise@^8.2.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + prompts@^2.0.1, prompts@^2.4.0, prompts@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -11352,7 +11359,7 @@ react-is@^16.13.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-native-codegen@*, react-native-codegen@^0.0.17: +react-native-codegen@*: version "0.0.17" resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.17.tgz#83fb814d94061cbd46667f510d2ddba35ffb50ac" integrity sha512-7GIEUmAemH9uWwB6iYXNNsPoPgH06pxzGRmdBzK98TgFBdYJZ7CBuZFPMe4jmHQTPOkQazKZ/w5O6/71JBixmw== @@ -11372,6 +11379,16 @@ react-native-codegen@^0.0.13: jscodeshift "^0.13.1" nullthrows "^1.1.1" +react-native-codegen@^0.0.18: + version "0.0.18" + resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.18.tgz#99d6623d65292e8ce3fdb1d133a358caaa2145e7" + integrity sha512-XPI9aVsFy3dvgDZvyGWrFnknNiyb22kg5nHgxa0vjWTH9ENLBgVRZt9A64xHZ8BYihH+gl0p/1JNOCIEUzRPBg== + dependencies: + "@babel/parser" "^7.14.0" + flow-parser "^0.121.0" + jscodeshift "^0.13.1" + nullthrows "^1.1.1" + react-native-codegen@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.7.tgz#86651c5c5fec67a8077ef7f4e36f7ed459043e14" @@ -11485,10 +11502,10 @@ react-native-windows@0.68.4: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-native@0.68.2: - version "0.68.2" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.68.2.tgz#07547cd31bb9335a7fa4135cfbdc24e067142585" - integrity sha512-qNMz+mdIirCEmlrhapAtAG+SWVx6MAiSfCbFNhfHqiqu1xw1OKXdzIrjaBEPihRC2pcORCoCHduHGQe/Pz9Yuw== +react-native@0.68.5: + version "0.68.5" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.68.5.tgz#8ba7389e00b757c59b6ea23bf38303d52367d155" + integrity sha512-t3kiQ/gumFV+0r/NRSIGtYxanjY4da0utFqHgkMcRPJVwXFWC0Fr8YiOeRGYO1dp8EfrSsOjtfWic/inqVYlbQ== dependencies: "@jest/create-cache-key-function" "^27.0.1" "@react-native-community/cli" "^7.0.3" @@ -11510,9 +11527,9 @@ react-native@0.68.2: metro-source-map "0.67.0" nullthrows "^1.1.1" pretty-format "^26.5.2" - promise "^8.0.3" + promise "^8.2.0" react-devtools-core "^4.23.0" - react-native-codegen "^0.0.17" + react-native-codegen "^0.0.18" react-native-gradle-plugin "^0.0.6" react-refresh "^0.4.0" react-shallow-renderer "16.14.1" From a5e2a9f13ce931fdb2d93a93d23eb9750a759990 Mon Sep 17 00:00:00 2001 From: Handschrift Date: Wed, 23 Nov 2022 00:11:43 +0000 Subject: [PATCH 051/104] chore(docs): Add information that custom menu items are only available for iOS (#2748) --- docs/Reference.md | 8 ++++++++ docs/Reference.portuguese.md | 8 ++++++++ src/WebViewTypes.ts | 2 ++ 3 files changed, 18 insertions(+) diff --git a/docs/Reference.md b/docs/Reference.md index b787a7265b..525d33d0bc 100644 --- a/docs/Reference.md +++ b/docs/Reference.md @@ -1508,6 +1508,10 @@ Example: An array of custom menu item objects that will be appended to the UIMenu that appears when selecting text (will appear after 'Copy' and 'Share...'). Used in tandem with `onCustomMenuSelection` +| Type | Required | Platform | +| ------------------------------------------------------------------ | -------- | -------- | +| array of objects: {label: string, key: string} | No | iOS | + Example: ```javascript @@ -1518,6 +1522,10 @@ Example: Function called when a custom menu item is selected. It receives a Native event, which includes three custom keys: `label`, `key` and `selectedText`. +| Type | Required | Platform | +| ------------------------------------------------------------------ | -------- | -------- | +| function | No | iOS | + ```javascript void; } From 4ac0d746c9420191e4eb7387dadd35a674950f34 Mon Sep 17 00:00:00 2001 From: Matias Korhonen Date: Wed, 23 Nov 2022 03:03:21 +0200 Subject: [PATCH 052/104] feat(ios): Cookie sync improvements (#2535) --- apple/RNCWebView.m | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/apple/RNCWebView.m b/apple/RNCWebView.m index 39d5bae24a..ef053b7250 100644 --- a/apple/RNCWebView.m +++ b/apple/RNCWebView.m @@ -64,7 +64,7 @@ - (void)scrollWheel:(NSEvent *)theEvent { @end #endif // TARGET_OS_OSX -@interface RNCWebView () Date: Wed, 23 Nov 2022 01:04:51 +0000 Subject: [PATCH 053/104] chore(release): 11.24.0 [skip ci] # [11.24.0](https://github.com/react-native-webview/react-native-webview/compare/v11.23.1...v11.24.0) (2022-11-23) ### Features * **ios:** Cookie sync improvements ([#2535](https://github.com/react-native-webview/react-native-webview/issues/2535)) ([4ac0d74](https://github.com/react-native-webview/react-native-webview/commit/4ac0d746c9420191e4eb7387dadd35a674950f34)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e8510906f1..96aae6a26e 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.23.1", + "version": "11.24.0", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 2711f3a5dc04ba0cdece2fdc3d3473469ad79d55 Mon Sep 17 00:00:00 2001 From: enzo-macri <99820921+enzo-macri@users.noreply.github.com> Date: Sat, 26 Nov 2022 02:42:24 +0100 Subject: [PATCH 054/104] feat(Android): Handle RESOURCE_PROTECTED_MEDIA_ID permission (#2732) --- .../webview/RNCWebViewManager.java | 48 ++++++++++++++++--- docs/Reference.md | 10 ++++ src/WebViewTypes.ts | 8 ++++ 3 files changed, 60 insertions(+), 6 deletions(-) diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java index 6d28fed7f2..e58b530d97 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java @@ -161,6 +161,7 @@ public class RNCWebViewManager extends SimpleViewManager { protected RNCWebChromeClient mWebChromeClient = null; protected boolean mAllowsFullscreenVideo = false; + protected boolean mAllowsProtectedMedia = false; protected @Nullable String mUserAgent = null; protected @Nullable String mUserAgentWithApplicationName = null; protected @Nullable String mDownloadingMessage = null; @@ -670,6 +671,20 @@ public void setMinimumFontSize(WebView view, int fontSize) { view.getSettings().setMinimumFontSize(fontSize); } + @ReactProp(name = "allowsProtectedMedia") + public void setAllowsProtectedMedia(WebView view, boolean enabled) { + // This variable is used to keep consistency + // in case a new WebChromeClient is created + // (eg. when mAllowsFullScreenVideo changes) + mAllowsProtectedMedia = enabled; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + WebChromeClient client = view.getWebChromeClient(); + if (client != null && client instanceof RNCWebChromeClient) { + ((RNCWebChromeClient) client).setAllowsProtectedMedia(enabled); + } + } + } + @Override protected void addEventEmitters(ThemedReactContext reactContext, WebView view) { // Do not register default touch emitter and let WebView implementation handle touches @@ -875,8 +890,6 @@ public void onHideCustomView() { mReactContext.removeLifecycleEventListener(this); } }; - - webView.setWebChromeClient(mWebChromeClient); } else { if (mWebChromeClient != null) { mWebChromeClient.onHideCustomView(); @@ -888,9 +901,9 @@ public Bitmap getDefaultVideoPoster() { return Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888); } }; - - webView.setWebChromeClient(mWebChromeClient); } + mWebChromeClient.setAllowsProtectedMedia(mAllowsProtectedMedia); + webView.setWebChromeClient(mWebChromeClient); } protected static class RNCWebViewClient extends WebViewClient { @@ -1227,6 +1240,9 @@ protected static class RNCWebChromeClient extends WebChromeClient implements Lif protected RNCWebView.ProgressChangedFilter progressChangedFilter = null; + // True if protected media should be allowed, false otherwise + protected boolean mAllowsProtectedMedia = false; + public RNCWebChromeClient(ReactContext reactContext, WebView webView) { this.mReactContext = reactContext; this.mWebView = webView; @@ -1288,9 +1304,20 @@ public void onPermissionRequest(final PermissionRequest request) { } else if (requestedResource.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) { androidPermission = Manifest.permission.CAMERA; } else if(requestedResource.equals(PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID)) { - androidPermission = PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID; + if (mAllowsProtectedMedia) { + grantedPermissions.add(requestedResource); + } else { + /** + * Legacy handling (Kept in case it was working under some conditions (given Android version or something)) + * + * Try to ask user to grant permission using Activity.requestPermissions + * + * Find more details here: https://github.com/react-native-webview/react-native-webview/pull/2732 + */ + androidPermission = PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID; + } } - // TODO: RESOURCE_MIDI_SYSEX, RESOURCE_PROTECTED_MEDIA_ID. + // TODO: RESOURCE_MIDI_SYSEX. if (androidPermission != null) { if (ContextCompat.checkSelfPermission(mReactContext, androidPermission) == PackageManager.PERMISSION_GRANTED) { @@ -1480,6 +1507,15 @@ protected ViewGroup getRootView() { public void setProgressChangedFilter(RNCWebView.ProgressChangedFilter filter) { progressChangedFilter = filter; } + + /** + * Set whether or not protected media should be allowed + * /!\ Setting this to false won't revoke permission already granted to the current webpage. + * In order to do so, you'd need to reload the page /!\ + */ + public void setAllowsProtectedMedia(boolean enabled) { + mAllowsProtectedMedia = enabled; + } } /** diff --git a/docs/Reference.md b/docs/Reference.md index 525d33d0bc..9bfea3f9d4 100644 --- a/docs/Reference.md +++ b/docs/Reference.md @@ -89,6 +89,7 @@ This document lays out the current public properties and methods for the React N - [`minimumFontSize`](Reference.md#minimumFontSize) - [`downloadingMessage`](Reference.md#downloadingMessage) - [`lackPermissionToDownloadMessage`](Reference.md#lackPermissionToDownloadMessage) +- [`allowsProtectedMedia`](Reference.md#allowsProtectedMedia) ## Methods Index @@ -1592,6 +1593,15 @@ This is the message that is shown in the Toast when the webview is unable to dow | ------ | -------- | -------- | | string | No | Android | +### `allowsProtectedMedia` + +Whether or not the Webview can play media protected by DRM. Default is false. +/!\ Setting this to false won't revoke the permission already granted to the current webpage. In order to do so, you'd have to reload the page as well. /!\ + +| Type | Required | Platform | +| ------ | -------- | -------- | +| boolean | No | Android | + ## Methods ### `goForward()`[⬆](#methods-index) diff --git a/src/WebViewTypes.ts b/src/WebViewTypes.ts index 8dbb79eecb..cba759a3df 100644 --- a/src/WebViewTypes.ts +++ b/src/WebViewTypes.ts @@ -340,6 +340,7 @@ export interface AndroidNativeWebViewProps extends CommonNativeWebViewProps { minimumFontSize?: number; downloadingMessage?: string; lackPermissionToDownloadMessage?: string; + allowsProtectedMedia?: boolean; } export declare type ContentInsetAdjustmentBehavior = @@ -1119,6 +1120,13 @@ export interface AndroidWebViewProps extends WebViewSharedProps { * @platform android */ lackPermissionToDownloadMessage?: string; + + /** + * Boolean value to control whether webview can play media protected by DRM. + * Default is false. + * @platform android + */ + allowsProtectedMedia?: boolean; } export interface WebViewSharedProps extends ViewProps { From 0817524326a882107ed1994d3861212b382f054d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 26 Nov 2022 01:44:44 +0000 Subject: [PATCH 055/104] chore(release): 11.25.0 [skip ci] # [11.25.0](https://github.com/react-native-webview/react-native-webview/compare/v11.24.0...v11.25.0) (2022-11-26) ### Features * **Android:** Handle RESOURCE_PROTECTED_MEDIA_ID permission ([#2732](https://github.com/react-native-webview/react-native-webview/issues/2732)) ([2711f3a](https://github.com/react-native-webview/react-native-webview/commit/2711f3a5dc04ba0cdece2fdc3d3473469ad79d55)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 96aae6a26e..8b656f92d7 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.24.0", + "version": "11.25.0", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 47c05b0fba21fde471ca6c3aacf7b75756b6a52e Mon Sep 17 00:00:00 2001 From: Xun Sun Date: Wed, 7 Dec 2022 08:17:11 +0800 Subject: [PATCH 056/104] fix(android): Respect "filename*" parameter in the field Content-Disposition when detecting filenames for downloading. (#2767) --- .../webview/RNCWebViewManager.java | 1 - .../reactnativecommunity/webview/URLUtil.java | 179 ++++++++++++++++++ example/App.tsx | 12 +- example/examples/Downloads.tsx | 2 + 4 files changed, 186 insertions(+), 8 deletions(-) create mode 100644 android/src/main/java/com/reactnativecommunity/webview/URLUtil.java diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java index e58b530d97..9cfe821f29 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java @@ -33,7 +33,6 @@ import android.webkit.RenderProcessGoneDetail; import android.webkit.SslErrorHandler; import android.webkit.PermissionRequest; -import android.webkit.URLUtil; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebResourceRequest; diff --git a/android/src/main/java/com/reactnativecommunity/webview/URLUtil.java b/android/src/main/java/com/reactnativecommunity/webview/URLUtil.java new file mode 100644 index 0000000000..7d965374c6 --- /dev/null +++ b/android/src/main/java/com/reactnativecommunity/webview/URLUtil.java @@ -0,0 +1,179 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * The source code is obtained from the Android SDK Sources (API level 31), + * and modified by UNIDY2002 . + * + * Change list: + * - Remove all unused class members except guessFileName, + * CONTENT_DISPOSITION_PATTERN and parseContentDisposition + * - Improve CONTENT_DISPOSITION_PATTERN and parseContentDisposition to add + * support for the "filename*" parameter in content disposition + */ + +package com.reactnativecommunity.webview; + +import android.net.Uri; +import android.webkit.MimeTypeMap; +import androidx.annotation.Nullable; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public final class URLUtil { + /** + * Guesses canonical filename that a download would have, using + * the URL and contentDisposition. File extension, if not defined, + * is added based on the mimetype + * @param url Url to the content + * @param contentDisposition Content-Disposition HTTP header or {@code null} + * @param mimeType Mime-type of the content or {@code null} + * + * @return suggested filename + */ + public static final String guessFileName( + String url, + @Nullable String contentDisposition, + @Nullable String mimeType) { + String filename = null; + String extension = null; + + // If we couldn't do anything with the hint, move toward the content disposition + if (filename == null && contentDisposition != null) { + filename = parseContentDisposition(contentDisposition); + if (filename != null) { + int index = filename.lastIndexOf('/') + 1; + if (index > 0) { + filename = filename.substring(index); + } + } + } + + // If all the other http-related approaches failed, use the plain uri + if (filename == null) { + String decodedUrl = Uri.decode(url); + if (decodedUrl != null) { + int queryIndex = decodedUrl.indexOf('?'); + // If there is a query string strip it, same as desktop browsers + if (queryIndex > 0) { + decodedUrl = decodedUrl.substring(0, queryIndex); + } + if (!decodedUrl.endsWith("/")) { + int index = decodedUrl.lastIndexOf('/') + 1; + if (index > 0) { + filename = decodedUrl.substring(index); + } + } + } + } + + // Finally, if couldn't get filename from URI, get a generic filename + if (filename == null) { + filename = "downloadfile"; + } + + // Split filename between base and extension + // Add an extension if filename does not have one + int dotIndex = filename.indexOf('.'); + if (dotIndex < 0) { + if (mimeType != null) { + extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType); + if (extension != null) { + extension = "." + extension; + } + } + if (extension == null) { + if (mimeType != null && mimeType.toLowerCase(Locale.ROOT).startsWith("text/")) { + if (mimeType.equalsIgnoreCase("text/html")) { + extension = ".html"; + } else { + extension = ".txt"; + } + } else { + extension = ".bin"; + } + } + } else { + if (mimeType != null) { + // Compare the last segment of the extension against the mime type. + // If there's a mismatch, discard the entire extension. + int lastDotIndex = filename.lastIndexOf('.'); + String typeFromExt = MimeTypeMap.getSingleton().getMimeTypeFromExtension( + filename.substring(lastDotIndex + 1)); + if (typeFromExt != null && !typeFromExt.equalsIgnoreCase(mimeType)) { + extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType); + if (extension != null) { + extension = "." + extension; + } + } + } + if (extension == null) { + extension = filename.substring(dotIndex); + } + filename = filename.substring(0, dotIndex); + } + + return filename + extension; + } + + /** Regex used to parse content-disposition headers */ + private static final Pattern CONTENT_DISPOSITION_PATTERN = + Pattern.compile("attachment(?:;\\s*filename\\s*=\\s*(\"?)([^\"]*)\\1)?(?:;\\s*filename\\s*\\*\\s*=\\s*([^']*)'[^']*'([^']*))?\\s*$", + Pattern.CASE_INSENSITIVE); + + /** + * Parse the Content-Disposition HTTP Header. The format of the header + * is defined here: RFC 6266 + * This header provides a filename for content that is going to be + * downloaded to the file system. We only support the attachment type. + */ + static String parseContentDisposition(String contentDisposition) { + try { + // The regex attempts to match the following pattern: + // attachment; filename="(Group 2)"; filename*=(Group 3)'(lang)'(Group 4) + // Group 4 refers to the percent-encoded filename, and the charset + // is specified in Group 3. + // Group 2 is the fallback filename. + // Group 1 refers to the quotation marks around Group 2. + // + // Test cases can be found at http://test.greenbytes.de/tech/tc2231/ + // Examples can be found at https://www.rfc-editor.org/rfc/rfc6266#section-5 + // There are a few known limitations: + // - any Content Disposition value that does not have parameters + // arranged in the order of "attachment...filename...filename*" + // or contains extra parameters shall fail to be parsed + // - any filename that contains " shall fail to be parsed + Matcher m = CONTENT_DISPOSITION_PATTERN.matcher(contentDisposition); + if (m.find()) { + if (m.group(3) != null && m.group(4) != null) { + try { + return URLDecoder.decode(m.group(4), m.group(3).isEmpty() ? "UTF-8" : m.group(3)); + } catch (UnsupportedEncodingException e) { + // Skip the ext-parameter as the encoding is unsupported + } + } + return m.group(2); + } + } catch (IllegalStateException ex) { + // This function is defined as returning null when it can't parse the header + } + return null; + } +} diff --git a/example/App.tsx b/example/App.tsx index cc0e9b0fb7..ff9b833fff 100644 --- a/example/App.tsx +++ b/example/App.tsx @@ -165,13 +165,11 @@ export default class App extends Component { title="LocalPageLoad" onPress={() => this._changeTest('PageLoad')} /> - {Platform.OS == 'ios' && ( -

+

Nothing received yet

+ @@ -48,6 +55,9 @@ export default class Messaging extends Component { render() { return ( + { + this.webView.current.postMessage(e.nativeEvent.text); + }}/> { state = {}; @@ -15,6 +15,13 @@ export default class NativeWebpage extends Component { { + console.log("onShouldStartLoadWithRequest", event); + return true; + }} + onLoadStart={(event) => { + console.log("onLoadStart", event.nativeEvent); + }} /> ); diff --git a/example/ios/.xcode.env b/example/ios/.xcode.env new file mode 100644 index 0000000000..d85cff741c --- /dev/null +++ b/example/ios/.xcode.env @@ -0,0 +1 @@ +export NODE_BINARY=/usr/local/bin/node diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index b7b149e8d0..2a1e1b0e59 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1,290 +1,321 @@ PODS: - boost (1.76.0) - DoubleConversion (1.1.6) - - FBLazyVector (0.68.5) - - FBReactNativeSpec (0.68.5): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.5) - - RCTTypeSafety (= 0.68.5) - - React-Core (= 0.68.5) - - React-jsi (= 0.68.5) - - ReactCommon/turbomodule/core (= 0.68.5) + - FBLazyVector (0.71.3) + - FBReactNativeSpec (0.71.3): + - RCT-Folly (= 2021.07.22.00) + - RCTRequired (= 0.71.3) + - RCTTypeSafety (= 0.71.3) + - React-Core (= 0.71.3) + - React-jsi (= 0.71.3) + - ReactCommon/turbomodule/core (= 0.71.3) - fmt (6.2.1) - glog (0.3.5) - - RCT-Folly (2021.06.28.00-v2): + - RCT-Folly (2021.07.22.00): - boost - DoubleConversion - fmt (~> 6.2.1) - glog - - RCT-Folly/Default (= 2021.06.28.00-v2) - - RCT-Folly/Default (2021.06.28.00-v2): + - RCT-Folly/Default (= 2021.07.22.00) + - RCT-Folly/Default (2021.07.22.00): - boost - DoubleConversion - fmt (~> 6.2.1) - glog - - RCTRequired (0.68.5) - - RCTTypeSafety (0.68.5): - - FBLazyVector (= 0.68.5) - - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.5) - - React-Core (= 0.68.5) - - React (0.68.5): - - React-Core (= 0.68.5) - - React-Core/DevSupport (= 0.68.5) - - React-Core/RCTWebSocket (= 0.68.5) - - React-RCTActionSheet (= 0.68.5) - - React-RCTAnimation (= 0.68.5) - - React-RCTBlob (= 0.68.5) - - React-RCTImage (= 0.68.5) - - React-RCTLinking (= 0.68.5) - - React-RCTNetwork (= 0.68.5) - - React-RCTSettings (= 0.68.5) - - React-RCTText (= 0.68.5) - - React-RCTVibration (= 0.68.5) - - React-callinvoker (0.68.5) - - React-Codegen (0.68.5): - - FBReactNativeSpec (= 0.68.5) - - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.5) - - RCTTypeSafety (= 0.68.5) - - React-Core (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - ReactCommon/turbomodule/core (= 0.68.5) - - React-Core (0.68.5): + - RCTRequired (0.71.3) + - RCTTypeSafety (0.71.3): + - FBLazyVector (= 0.71.3) + - RCTRequired (= 0.71.3) + - React-Core (= 0.71.3) + - React (0.71.3): + - React-Core (= 0.71.3) + - React-Core/DevSupport (= 0.71.3) + - React-Core/RCTWebSocket (= 0.71.3) + - React-RCTActionSheet (= 0.71.3) + - React-RCTAnimation (= 0.71.3) + - React-RCTBlob (= 0.71.3) + - React-RCTImage (= 0.71.3) + - React-RCTLinking (= 0.71.3) + - React-RCTNetwork (= 0.71.3) + - React-RCTSettings (= 0.71.3) + - React-RCTText (= 0.71.3) + - React-RCTVibration (= 0.71.3) + - React-callinvoker (0.71.3) + - React-Codegen (0.71.3): + - FBReactNativeSpec + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-jsc + - React-jsi + - React-jsiexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-Core (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.5) - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default (= 0.71.3) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/CoreModulesHeaders (0.68.5): + - React-Core/CoreModulesHeaders (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/Default (0.68.5): + - React-Core/Default (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - RCT-Folly (= 2021.07.22.00) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/DevSupport (0.68.5): + - React-Core/DevSupport (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.5) - - React-Core/RCTWebSocket (= 0.68.5) - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-jsinspector (= 0.68.5) - - React-perflogger (= 0.68.5) + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default (= 0.71.3) + - React-Core/RCTWebSocket (= 0.71.3) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-jsinspector (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/RCTActionSheetHeaders (0.68.5): + - React-Core/RCTActionSheetHeaders (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/RCTAnimationHeaders (0.68.5): + - React-Core/RCTAnimationHeaders (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/RCTBlobHeaders (0.68.5): + - React-Core/RCTBlobHeaders (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/RCTImageHeaders (0.68.5): + - React-Core/RCTImageHeaders (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/RCTLinkingHeaders (0.68.5): + - React-Core/RCTLinkingHeaders (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/RCTNetworkHeaders (0.68.5): + - React-Core/RCTNetworkHeaders (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/RCTSettingsHeaders (0.68.5): + - React-Core/RCTSettingsHeaders (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/RCTTextHeaders (0.68.5): + - React-Core/RCTTextHeaders (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/RCTVibrationHeaders (0.68.5): + - React-Core/RCTVibrationHeaders (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-Core/RCTWebSocket (0.68.5): + - React-Core/RCTWebSocket (0.71.3): - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.5) - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsiexecutor (= 0.68.5) - - React-perflogger (= 0.68.5) + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default (= 0.71.3) + - React-cxxreact (= 0.71.3) + - React-jsc + - React-jsi (= 0.71.3) + - React-jsiexecutor (= 0.71.3) + - React-perflogger (= 0.71.3) - Yoga - - React-CoreModules (0.68.5): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.5) - - React-Codegen (= 0.68.5) - - React-Core/CoreModulesHeaders (= 0.68.5) - - React-jsi (= 0.68.5) - - React-RCTImage (= 0.68.5) - - ReactCommon/turbomodule/core (= 0.68.5) - - React-cxxreact (0.68.5): - - boost (= 1.76.0) - - DoubleConversion - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.5) - - React-jsi (= 0.68.5) - - React-jsinspector (= 0.68.5) - - React-logger (= 0.68.5) - - React-perflogger (= 0.68.5) - - React-runtimeexecutor (= 0.68.5) - - React-jsi (0.68.5): + - React-CoreModules (0.71.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.71.3) + - React-Codegen (= 0.71.3) + - React-Core/CoreModulesHeaders (= 0.71.3) + - React-jsi (= 0.71.3) + - React-RCTBlob + - React-RCTImage (= 0.71.3) + - ReactCommon/turbomodule/core (= 0.71.3) + - React-cxxreact (0.71.3): - boost (= 1.76.0) - DoubleConversion - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi/Default (= 0.68.5) - - React-jsi/Default (0.68.5): + - RCT-Folly (= 2021.07.22.00) + - React-callinvoker (= 0.71.3) + - React-jsi (= 0.71.3) + - React-jsinspector (= 0.71.3) + - React-logger (= 0.71.3) + - React-perflogger (= 0.71.3) + - React-runtimeexecutor (= 0.71.3) + - React-jsc (0.71.3): + - React-jsc/Fabric (= 0.71.3) + - React-jsi (= 0.71.3) + - React-jsc/Fabric (0.71.3): + - React-jsi (= 0.71.3) + - React-jsi (0.71.3): - boost (= 1.76.0) - DoubleConversion - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-jsiexecutor (0.68.5): + - RCT-Folly (= 2021.07.22.00) + - React-jsiexecutor (0.71.3): - DoubleConversion - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-perflogger (= 0.68.5) - - React-jsinspector (0.68.5) - - React-logger (0.68.5): + - RCT-Folly (= 2021.07.22.00) + - React-cxxreact (= 0.71.3) + - React-jsi (= 0.71.3) + - React-perflogger (= 0.71.3) + - React-jsinspector (0.71.3) + - React-logger (0.71.3): - glog - - react-native-webview (11.26.0): + - react-native-webview (12.0.0-rc.2): + - React-Core + - React-perflogger (0.71.3) + - React-RCTActionSheet (0.71.3): + - React-Core/RCTActionSheetHeaders (= 0.71.3) + - React-RCTAnimation (0.71.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.71.3) + - React-Codegen (= 0.71.3) + - React-Core/RCTAnimationHeaders (= 0.71.3) + - React-jsi (= 0.71.3) + - ReactCommon/turbomodule/core (= 0.71.3) + - React-RCTAppDelegate (0.71.3): + - RCT-Folly + - RCTRequired + - RCTTypeSafety - React-Core - - React-perflogger (0.68.5) - - React-RCTActionSheet (0.68.5): - - React-Core/RCTActionSheetHeaders (= 0.68.5) - - React-RCTAnimation (0.68.5): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.5) - - React-Codegen (= 0.68.5) - - React-Core/RCTAnimationHeaders (= 0.68.5) - - React-jsi (= 0.68.5) - - ReactCommon/turbomodule/core (= 0.68.5) - - React-RCTBlob (0.68.5): - - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.68.5) - - React-Core/RCTBlobHeaders (= 0.68.5) - - React-Core/RCTWebSocket (= 0.68.5) - - React-jsi (= 0.68.5) - - React-RCTNetwork (= 0.68.5) - - ReactCommon/turbomodule/core (= 0.68.5) - - React-RCTImage (0.68.5): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.5) - - React-Codegen (= 0.68.5) - - React-Core/RCTImageHeaders (= 0.68.5) - - React-jsi (= 0.68.5) - - React-RCTNetwork (= 0.68.5) - - ReactCommon/turbomodule/core (= 0.68.5) - - React-RCTLinking (0.68.5): - - React-Codegen (= 0.68.5) - - React-Core/RCTLinkingHeaders (= 0.68.5) - - React-jsi (= 0.68.5) - - ReactCommon/turbomodule/core (= 0.68.5) - - React-RCTNetwork (0.68.5): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.5) - - React-Codegen (= 0.68.5) - - React-Core/RCTNetworkHeaders (= 0.68.5) - - React-jsi (= 0.68.5) - - ReactCommon/turbomodule/core (= 0.68.5) - - React-RCTSettings (0.68.5): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.5) - - React-Codegen (= 0.68.5) - - React-Core/RCTSettingsHeaders (= 0.68.5) - - React-jsi (= 0.68.5) - - ReactCommon/turbomodule/core (= 0.68.5) - - React-RCTText (0.68.5): - - React-Core/RCTTextHeaders (= 0.68.5) - - React-RCTVibration (0.68.5): - - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.68.5) - - React-Core/RCTVibrationHeaders (= 0.68.5) - - React-jsi (= 0.68.5) - - ReactCommon/turbomodule/core (= 0.68.5) - - React-runtimeexecutor (0.68.5): - - React-jsi (= 0.68.5) - - ReactCommon/turbomodule/core (0.68.5): + - ReactCommon/turbomodule/core + - React-RCTBlob (0.71.3): + - RCT-Folly (= 2021.07.22.00) + - React-Codegen (= 0.71.3) + - React-Core/RCTBlobHeaders (= 0.71.3) + - React-Core/RCTWebSocket (= 0.71.3) + - React-jsi (= 0.71.3) + - React-RCTNetwork (= 0.71.3) + - ReactCommon/turbomodule/core (= 0.71.3) + - React-RCTImage (0.71.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.71.3) + - React-Codegen (= 0.71.3) + - React-Core/RCTImageHeaders (= 0.71.3) + - React-jsi (= 0.71.3) + - React-RCTNetwork (= 0.71.3) + - ReactCommon/turbomodule/core (= 0.71.3) + - React-RCTLinking (0.71.3): + - React-Codegen (= 0.71.3) + - React-Core/RCTLinkingHeaders (= 0.71.3) + - React-jsi (= 0.71.3) + - ReactCommon/turbomodule/core (= 0.71.3) + - React-RCTNetwork (0.71.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.71.3) + - React-Codegen (= 0.71.3) + - React-Core/RCTNetworkHeaders (= 0.71.3) + - React-jsi (= 0.71.3) + - ReactCommon/turbomodule/core (= 0.71.3) + - React-RCTSettings (0.71.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.71.3) + - React-Codegen (= 0.71.3) + - React-Core/RCTSettingsHeaders (= 0.71.3) + - React-jsi (= 0.71.3) + - ReactCommon/turbomodule/core (= 0.71.3) + - React-RCTText (0.71.3): + - React-Core/RCTTextHeaders (= 0.71.3) + - React-RCTVibration (0.71.3): + - RCT-Folly (= 2021.07.22.00) + - React-Codegen (= 0.71.3) + - React-Core/RCTVibrationHeaders (= 0.71.3) + - React-jsi (= 0.71.3) + - ReactCommon/turbomodule/core (= 0.71.3) + - React-runtimeexecutor (0.71.3): + - React-jsi (= 0.71.3) + - ReactCommon/turbomodule/bridging (0.71.3): + - DoubleConversion + - glog + - RCT-Folly (= 2021.07.22.00) + - React-callinvoker (= 0.71.3) + - React-Core (= 0.71.3) + - React-cxxreact (= 0.71.3) + - React-jsi (= 0.71.3) + - React-logger (= 0.71.3) + - React-perflogger (= 0.71.3) + - ReactCommon/turbomodule/core (0.71.3): - DoubleConversion - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.5) - - React-Core (= 0.68.5) - - React-cxxreact (= 0.68.5) - - React-jsi (= 0.68.5) - - React-logger (= 0.68.5) - - React-perflogger (= 0.68.5) + - RCT-Folly (= 2021.07.22.00) + - React-callinvoker (= 0.71.3) + - React-Core (= 0.71.3) + - React-cxxreact (= 0.71.3) + - React-jsi (= 0.71.3) + - React-logger (= 0.71.3) + - React-perflogger (= 0.71.3) - ReactTestApp-DevSupport (2.3.2): - React-Core - React-jsi @@ -304,10 +335,10 @@ DEPENDENCIES: - React-callinvoker (from `../../node_modules/react-native/ReactCommon/callinvoker`) - React-Codegen (from `build/generated/ios`) - React-Core (from `../../node_modules/react-native/`) - - React-Core/DevSupport (from `../../node_modules/react-native/`) - React-Core/RCTWebSocket (from `../../node_modules/react-native/`) - React-CoreModules (from `../../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../../node_modules/react-native/ReactCommon/cxxreact`) + - React-jsc (from `../../node_modules/react-native/ReactCommon/jsc`) - React-jsi (from `../../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `../../node_modules/react-native/ReactCommon/jsinspector`) @@ -316,6 +347,7 @@ DEPENDENCIES: - React-perflogger (from `../../node_modules/react-native/ReactCommon/reactperflogger`) - React-RCTActionSheet (from `../../node_modules/react-native/Libraries/ActionSheetIOS`) - React-RCTAnimation (from `../../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTAppDelegate (from `../../node_modules/react-native/Libraries/AppDelegate`) - React-RCTBlob (from `../../node_modules/react-native/Libraries/Blob`) - React-RCTImage (from `../../node_modules/react-native/Libraries/Image`) - React-RCTLinking (from `../../node_modules/react-native/Libraries/LinkingIOS`) @@ -362,6 +394,8 @@ EXTERNAL SOURCES: :path: "../../node_modules/react-native/React/CoreModules" React-cxxreact: :path: "../../node_modules/react-native/ReactCommon/cxxreact" + React-jsc: + :path: "../../node_modules/react-native/ReactCommon/jsc" React-jsi: :path: "../../node_modules/react-native/ReactCommon/jsi" React-jsiexecutor: @@ -378,6 +412,8 @@ EXTERNAL SOURCES: :path: "../../node_modules/react-native/Libraries/ActionSheetIOS" React-RCTAnimation: :path: "../../node_modules/react-native/Libraries/NativeAnimation" + React-RCTAppDelegate: + :path: "../../node_modules/react-native/Libraries/AppDelegate" React-RCTBlob: :path: "../../node_modules/react-native/Libraries/Blob" React-RCTImage: @@ -404,41 +440,43 @@ EXTERNAL SOURCES: :path: "../../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - boost: a7c83b31436843459a1961bfd74b96033dc77234 - DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 - FBLazyVector: 2b47ff52037bd9ae07cc9b051c9975797814b736 - FBReactNativeSpec: 077145af227b87804441c945101b5587c04ad00c + boost: 57d2868c099736d80fcd648bf211b4431e51a558 + DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 + FBLazyVector: 60195509584153283780abdac5569feffb8f08cc + FBReactNativeSpec: 5b217c2677f8edae343b6646dad608d5d3147fc0 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 - glog: 476ee3e89abb49e07f822b48323c51c57124b572 - RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8 - RCTRequired: 0f06b6068f530932d10e1a01a5352fad4eaacb74 - RCTTypeSafety: b0ee81f10ef1b7d977605a2b266823dabd565e65 - React: 3becd12bd51ea8a43bdde7e09d0f40fba7820e03 - React-callinvoker: 11abfff50e6bf7a55b3a90b4dc2187f71f224593 - React-Codegen: f8946ce0768fb8e92e092e30944489c4b2955b2d - React-Core: 203cdb6ee2657b198d97d41031c249161060e6ca - React-CoreModules: 6eb0c06a4a223fde2cb6a8d0f44f58b67e808942 - React-cxxreact: afb0c6c07d19adbd850747fedeac20c6832d40b9 - React-jsi: 14d37a6db2af2c1a49f6f5c2e4ee667c364ae45c - React-jsiexecutor: 45c0496ca8cef6b02d9fa0274c25cf458fe91a56 - React-jsinspector: eb202e43b3879aba9a14f3f65788aec85d4e1ea9 - React-logger: 98f663b292a60967ebbc6d803ae96c1381183b6d - react-native-webview: 994b9f8fbb504d6314dc40d83f94f27c6831b3bf - React-perflogger: 0458a87ea9a7342079e7a31b0d32b3734fb8415f - React-RCTActionSheet: 22538001ea2926dea001111dd2846c13a0730bc9 - React-RCTAnimation: 732ce66878d4aa151d56a0d142b1105aa12fd313 - React-RCTBlob: 9cb9e3e9a41d27be34aaf89b0e0f52c7ca415d57 - React-RCTImage: 6bd16627eb9c4bb79903c4cdec7c551266ee1a5b - React-RCTLinking: e9edfc8919c8fa9a3f3c7b34362811f58a2ebba4 - React-RCTNetwork: 880eccd21bbe2660a0b63da5ccba75c46eceeaa6 - React-RCTSettings: 8c85d8188c97d6c6bd470af6631a6c4555b79bb3 - React-RCTText: bbd275ee287730c5acbab1aadc0db39c25c5c64e - React-RCTVibration: 9819a3bf6230e4b2a99877c21268b0b2416157a1 - React-runtimeexecutor: b1f1995089b90696dbc2a7ffe0059a80db5c8eb1 - ReactCommon: 149e2c0acab9bac61378da0db5b2880a1b5ff59b + glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b + RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1 + RCTRequired: bec48f07daf7bcdc2655a0cde84e07d24d2a9e2a + RCTTypeSafety: 171394eebacf71e1cfad79dbfae7ee8fc16ca80a + React: d7433ccb6a8c36e4cbed59a73c0700fc83c3e98a + React-callinvoker: 15f165009bd22ae829b2b600e50bcc98076ce4b8 + React-Codegen: df9d3975a10b29c1dfa4baa7678449e9d9648ca7 + React-Core: 882014e745cdad5788c5c8aa1a0f4661880aad69 + React-CoreModules: e0cbc1a4f4f3f60e23c476fef7ab37be363ea8c1 + React-cxxreact: bde3dde79b6d8e2dae76197ad75c11883f7d152d + React-jsc: 30670396f92f5f9bab121bf8c303f5a0a507061b + React-jsi: 103a8ff6586095e0e6853522f8eea37ca0226f99 + React-jsiexecutor: 891dad49e50d35fba97eeb43a35ae7470a8e10b2 + React-jsinspector: 9f7c9137605e72ca0343db4cea88006cb94856dd + React-logger: 957e5dc96d9dbffc6e0f15e0ee4d2b42829ff207 + react-native-webview: 2f7e47e1273ed81b98bb2ce7ad8c3c1a872cf073 + React-perflogger: af8a3d31546077f42d729b949925cc4549f14def + React-RCTActionSheet: 57cc5adfefbaaf0aae2cf7e10bccd746f2903673 + React-RCTAnimation: 11c61e94da700c4dc915cf134513764d87fc5e2b + React-RCTAppDelegate: 3057d5a551fbe3ac8bac361761f4c74ba2e5ab17 + React-RCTBlob: 0e49a4ecd4d5276c79bea13d1c4b21f99da45121 + React-RCTImage: 7a9226b0944f1e76e8e01e35a9245c2477cdbabb + React-RCTLinking: bbe8cc582046a9c04f79c235b73c93700263e8b4 + React-RCTNetwork: fc2ca322159dc54e06508d4f5c3e934da63dc013 + React-RCTSettings: f1e9db2cdf946426d3f2b210e4ff4ce0f0d842ef + React-RCTText: 1c41dd57e5d742b1396b4eeb251851ce7ff0fca1 + React-RCTVibration: 5199a180d04873366a83855de55ac33ce60fe4d5 + React-runtimeexecutor: 7bf0dafc7b727d93c8cb94eb00a9d3753c446c3e + ReactCommon: 5768a505f0bc7b798dc2becdd3ee6442224f796c ReactTestApp-DevSupport: 1646ce70be36400a60ca18608284f3f7099a35c1 ReactTestApp-Resources: ff5f151e465e890010b417ce65ca6c5de6aeccbb - Yoga: c4d61225a466f250c35c1ee78d2d0b3d41fe661c + Yoga: 5ed1699acbba8863755998a4245daa200ff3817b PODFILE CHECKSUM: 8344c021910ed9b6a9bb9985ff8f7f05a68b19c1 diff --git a/example/macos/Podfile.lock b/example/macos/Podfile.lock index ffcf2fae1f..689d3ef2df 100644 --- a/example/macos/Podfile.lock +++ b/example/macos/Podfile.lock @@ -218,7 +218,7 @@ PODS: - React-jsinspector (0.68.62) - React-logger (0.68.62): - glog - - react-native-webview (11.26.0): + - react-native-webview (12.0.0-rc.0): - React-Core - React-perflogger (0.68.62) - React-RCTActionSheet (0.68.62): @@ -423,7 +423,7 @@ SPEC CHECKSUMS: React-jsiexecutor: 1862151d3f809499c82d7f66a3ca624b4d6b49d9 React-jsinspector: 39348b9a3417419aea646f41cba625e1a7bbbd30 React-logger: 7a2e45e85d0fe59edb6d4fb2cbcbb9981ab9486e - react-native-webview: 994b9f8fbb504d6314dc40d83f94f27c6831b3bf + react-native-webview: bf1329769290feefad471977132b5fb6c8288f71 React-perflogger: 20ae52b52ce2c0e1e257e0c0502f8f08a0b43ff9 React-RCTActionSheet: 2a62f3135a621bbf90504a28205cf5ef05b27bea React-RCTAnimation: 219eb987ed34c38cbf13096062da7ddc142f0fac diff --git a/package.json b/package.json index 959e863d17..b9148f90d4 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", - "ios": "react-native run-ios --project-path example/ios", + "ios": "react-native run-ios", "macos": "react-native run-macos --scheme WebviewExample --project-path example/macos", "start": "cd example && react-native start", "windows": "install-windows-test-app --project-directory example/windows && react-native run-windows --root example --arch x64", @@ -23,7 +23,8 @@ "build": "yarn tsc", "prepare": "yarn build", "appium": "appium", - "test:windows": "yarn jest --setupFiles=./jest-setups/jest.setup.js" + "test:windows": "yarn jest --setupFiles=./jest-setups/jest.setup.js", + "add:macos": "yarn add react-native-macos@0.68.62" }, "rn-docs": { "title": "Webview", @@ -42,9 +43,8 @@ "@babel/runtime": "^7.0.0", "@semantic-release/git": "7.0.16", "@types/invariant": "^2.2.30", - "@types/jest": "^26.0.0", - "@types/react": "^17.0.0", - "@types/react-native": "^0.67.3", + "@types/jest": "^29.4.0", + "@types/react": "18.0.27", "@types/selenium-webdriver": "4.0.9", "@typescript-eslint/eslint-plugin": "2.1.0", "@typescript-eslint/parser": "2.1.0", @@ -57,13 +57,12 @@ "eslint-plugin-react": "7.14.3", "eslint-plugin-react-hooks": "^4.5.0", "eslint-plugin-react-native": "3.7.0", - "jest": "^26.6.3", - "metro-react-native-babel-preset": "^0.67.0", - "react": "17.0.2", - "react-native": "0.68.5", - "react-native-macos": "0.68.62", - "react-native-test-app": "2.3.2", - "react-native-windows": "0.68.4", + "jest": "^29.4.1", + "metro-react-native-babel-preset": "0.73.7", + "react": "18.2.0", + "react-native": "0.71.3", + "react-native-test-app": "2.3.12", + "react-native-windows": "0.71.0", "selenium-appium": "1.0.2", "selenium-webdriver": "4.0.0-alpha.7", "semantic-release": "15.13.24", @@ -75,15 +74,31 @@ "url": "https://github.com/react-native-webview/react-native-webview.git" }, "files": [ - "android", + "android/src", + "android/build.gradle", + "android/gradle.properties", "apple", "ios", "macos", "windows", "lib", + "src", "index.js", "index.d.ts", "react-native-webview.podspec", "react-native.config.js" - ] + ], + "resolutions": { + "@react-native-community/cli": "10.1.3", + "@react-native-community/cli-platform-android": "10.1.3", + "@react-native-community/cli-platform-ios": "10.1.1" + }, + "codegenConfig": { + "name": "RNCWebViewSpec", + "type": "all", + "jsSrcsDir": "./src", + "android": { + "javaPackageName": "com.reactnativecommunity.webview" + } + } } diff --git a/react-native-webview.podspec b/react-native-webview.podspec index 7ed0835d27..b6f164ada4 100644 --- a/react-native-webview.podspec +++ b/react-native-webview.podspec @@ -2,6 +2,8 @@ require 'json' package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) +folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' + Pod::Spec.new do |s| s.name = package['name'] s.version = package['version'] @@ -13,7 +15,24 @@ Pod::Spec.new do |s| s.platforms = { :ios => "9.0", :osx => "10.13" } s.source = { :git => "https://github.com/react-native-webview/react-native-webview.git", :tag => "v#{s.version}" } - s.source_files = "apple/**/*.{h,m}" - s.dependency 'React-Core' + s.source_files = "apple/**/*.{h,m,mm,swift}" + + s.dependency "React-Core" + + if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then + s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1" + s.pod_target_xcconfig = { + "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"", + "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1", + "CLANG_CXX_LANGUAGE_STANDARD" => "c++17" + } + + s.dependency "React-RCTFabric" + s.dependency "React-Codegen" + s.dependency "RCT-Folly" + s.dependency "RCTRequired" + s.dependency "RCTTypeSafety" + s.dependency "ReactCommon/turbomodule/core" + end end diff --git a/react-native.config.js b/react-native.config.js index 154ceaf956..2736685e79 100644 --- a/react-native.config.js +++ b/react-native.config.js @@ -4,7 +4,6 @@ const project = (() => { try { const { androidManifestPath, - iosProjectPath, windowsProjectPath, } = require('react-native-test-app'); return { @@ -15,7 +14,7 @@ const project = (() => { ), }, ios: { - project: iosProjectPath('example/ios'), + sourceDir: 'example/ios', }, windows: fs.existsSync('example/windows/WebviewExample.sln') && { sourceDir: path.join('example', 'windows'), diff --git a/src/NativeRNCWebView.ts b/src/NativeRNCWebView.ts new file mode 100644 index 0000000000..6497e7e861 --- /dev/null +++ b/src/NativeRNCWebView.ts @@ -0,0 +1,14 @@ +/* eslint-disable import/no-duplicates */ +import type { TurboModule } from 'react-native'; +import { TurboModuleRegistry } from 'react-native'; +import {Int32} from 'react-native/Libraries/Types/CodegenTypes'; + +export interface Spec extends TurboModule { + readonly getConstants: () => {}; + + // your module methods go here, for example: + isFileUploadSupported(): Promise; + shouldStartLoadWithLockIdentifier(shouldStart: boolean, lockIdentifier: Int32): void; +} + +export default TurboModuleRegistry.getEnforcing('RNCWebView'); \ No newline at end of file diff --git a/src/RNCWebViewNativeComponent.ts b/src/RNCWebViewNativeComponent.ts new file mode 100644 index 0000000000..0472b755f8 --- /dev/null +++ b/src/RNCWebViewNativeComponent.ts @@ -0,0 +1,272 @@ +import type { HostComponent, ViewProps } from 'react-native'; +import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent'; +import {DirectEventHandler,Double, Int32, WithDefault} from 'react-native/Libraries/Types/CodegenTypes'; +import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands'; + +export type WebViewNativeEvent = Readonly<{ + url: string; + loading: boolean; + title: string; + canGoBack: boolean; + canGoForward: boolean; + lockIdentifier: Double; +}> +export type WebViewCustomMenuSelectionEvent = Readonly<{ + label: string; + key: string; + selectedText: string; +}> +export type WebViewMessageEvent = Readonly<{ + url: string; + loading: boolean; + title: string; + canGoBack: boolean; + canGoForward: boolean; + lockIdentifier: Double; + data: string; +}> +export type WebViewHttpErrorEvent = Readonly<{ + url: string; + loading: boolean; + title: string; + canGoBack: boolean; + canGoForward: boolean; + lockIdentifier: Double; + description: string; + statusCode: Int32; +}> + +export type WebViewErrorEvent = Readonly<{ + url: string; + loading: boolean; + title: string; + canGoBack: boolean; + canGoForward: boolean; + lockIdentifier: Double; + domain?: string; + code: Int32; + description: string; +}> + +export type WebViewNativeProgressEvent = Readonly< { + url: string; + loading: boolean; + title: string; + canGoBack: boolean; + canGoForward: boolean; + lockIdentifier: Double; + progress: Double; +}> + +export type WebViewNavigationEvent = Readonly< { + url: string; + loading: boolean; + title: string; + canGoBack: boolean; + canGoForward: boolean; + lockIdentifier: Double; + navigationType: + | 'click' + | 'formsubmit' + | 'backforward' + | 'reload' + | 'formresubmit' + | 'other'; + mainDocumentURL?: string; +}> + +export type ShouldStartLoadRequestEvent = Readonly<{ + url: string; + loading: boolean; + title: string; + canGoBack: boolean; + canGoForward: boolean; + lockIdentifier: Double; + navigationType: + | 'click' + | 'formsubmit' + | 'backforward' + | 'reload' + | 'formresubmit' + | 'other'; + mainDocumentURL?: string; + isTopFrame: boolean; +}> + +type ScrollEvent = Readonly<{ + contentInset: { + bottom: Double, + left: Double, + right: Double, + top: Double, + }, + contentOffset: { + y: Double, + x: Double, + }, + contentSize: { + height: Double, + width: Double, + }, + layoutMeasurement: { + height: Double, + width: Double, + }, + targetContentOffset?: { + y: Double, + x: Double, + }, + velocity?: { + y: Double, + x: Double, + }, + zoomScale?: Double, + responderIgnoreScroll?: boolean, +}> + +type WebViewRenderProcessGoneEvent = Readonly<{ + didCrash: boolean; +}> + +type WebViewDownloadEvent = Readonly<{ + downloadUrl: string; +}> + +// type MenuItem = Readonly<{label: string, key: string}>; + +export interface NativeProps extends ViewProps { + // Android only + allowFileAccess?: boolean; + allowsProtectedMedia?: boolean; + allowsFullscreenVideo?: boolean; + androidLayerType?: WithDefault<'none' | 'software' | 'hardware', 'none'>; + cacheMode?: WithDefault<'LOAD_DEFAULT' | 'LOAD_CACHE_ELSE_NETWORK' | 'LOAD_NO_CACHE' | 'LOAD_CACHE_ONLY', 'LOAD_DEFAULT'>; + domStorageEnabled?: boolean; + downloadingMessage?: string; + forceDarkOn?: boolean; + geolocationEnabled?: boolean; + lackPermissionToDownloadMessage?: string; + messagingModuleName: string; + minimumFontSize?: Int32; + mixedContentMode?: WithDefault<'never' | 'always' | 'compatibility', 'never'>; + nestedScrollEnabled?: boolean; + onContentSizeChange?: DirectEventHandler; + onRenderProcessGone?: DirectEventHandler; + overScrollMode?: string; + saveFormDataDisabled?: boolean; + scalesPageToFit?: boolean; + setBuiltInZoomControls?: boolean; + setDisplayZoomControls?: boolean; + setSupportMultipleWindows?: boolean; + textZoom?: Int32; + thirdPartyCookiesEnabled?: boolean; + // Workaround to watch if listener if defined + hasOnScroll?: boolean; + // !Android only + + // iOS only + allowingReadAccessToURL?: string; + allowsBackForwardNavigationGestures?: boolean; + allowsInlineMediaPlayback?: boolean; + allowsAirPlayForMediaPlayback?: boolean; + allowsLinkPreview?: boolean; + automaticallyAdjustContentInsets?: boolean; + autoManageStatusBarEnabled?: boolean; + bounces?: boolean; + contentInset?: Readonly<{ + top?: Double; + left?: Double; + bottom?: Double; + right?: Double; + }>; + contentInsetAdjustmentBehavior?: WithDefault<'never' | 'automatic' | 'scrollableAxes' | 'always', 'never'>; + contentMode?: WithDefault<'recommended' | 'mobile' | 'desktop', 'recommended'>; + dataDetectorTypes?: WithDefault< + // eslint-disable-next-line @typescript-eslint/array-type + ReadonlyArray<'address' | 'link' | 'calendarEvent' | 'trackingNumber' | 'flightNumber' | 'lookupSuggestion' | 'phoneNumber' | 'all' | 'none'>, + 'phoneNumber' + >; + decelerationRate?: Double; + directionalLockEnabled?: boolean; + enableApplePay?: boolean; + hideKeyboardAccessoryView?: boolean; + keyboardDisplayRequiresUserAction?: boolean; + limitsNavigationsToAppBoundDomains?: boolean; + mediaCapturePermissionGrantType?: WithDefault<'prompt' | 'grant' | 'deny' | 'grantIfSameHostElsePrompt' | 'grantIfSameHostElseDeny', 'prompt'>; + pagingEnabled?: boolean; + pullToRefreshEnabled?: boolean; + scrollEnabled?: boolean; + sharedCookiesEnabled?: boolean; + textInteractionEnabled?: boolean; + useSharedProcessPool?: boolean; + onContentProcessDidTerminate?: DirectEventHandler; + onCustomMenuSelection?: DirectEventHandler; + onFileDownload?: DirectEventHandler; + // eslint-disable-next-line @typescript-eslint/array-type + menuItems?: ReadonlyArray>; + // Workaround to watch if listener if defined + hasOnFileDownload?: boolean; + // !iOS only + + allowFileAccessFromFileURLs?: boolean; + allowUniversalAccessFromFileURLs?: boolean; + applicationNameForUserAgent?: string; + basicAuthCredential?: Readonly<{ + username: string; + password: string; + }>; + cacheEnabled?: boolean; + incognito?: boolean; + injectedJavaScript?: string; + injectedJavaScriptBeforeContentLoaded?: string; + injectedJavaScriptForMainFrameOnly?: boolean; + injectedJavaScriptBeforeContentLoadedForMainFrameOnly?: boolean; + javaScriptCanOpenWindowsAutomatically?: boolean; + javaScriptEnabled?: boolean; + mediaPlaybackRequiresUserAction?: boolean; + messagingEnabled: boolean; + onLoadingError: DirectEventHandler; + onLoadingFinish: DirectEventHandler; + onLoadingProgress: DirectEventHandler; + onLoadingStart: DirectEventHandler; + onHttpError: DirectEventHandler; + onMessage: DirectEventHandler; + onScroll?: DirectEventHandler; + onShouldStartLoadWithRequest: DirectEventHandler; + showsHorizontalScrollIndicator?: boolean; + showsVerticalScrollIndicator?: boolean; + newSource: Readonly<{ + uri?: string + method?: string; + body?: string; + // eslint-disable-next-line @typescript-eslint/array-type + headers?: ReadonlyArray>; + html?: string; + baseUrl?: string; + }>; + userAgent?: string; +} + +export interface NativeCommands { + goBack: (viewRef: React.ElementRef> ) => void; + goForward: (viewRef: React.ElementRef>) => void; + reload: (viewRef: React.ElementRef>) => void; + stopLoading: (viewRef: React.ElementRef>) => void; + injectJavaScript: (viewRef: React.ElementRef>, javascript: string) => void; + requestFocus: (viewRef: React.ElementRef>) => void; + postMessage: (viewRef: React.ElementRef>, data: string) => void; + // Android Only + loadUrl: (viewRef: React.ElementRef>, url: string) => void; + clearFormData: (viewRef: React.ElementRef>) => void; + clearCache: (viewRef: React.ElementRef>, includeDiskFiles: boolean) => void; + clearHistory: (viewRef: React.ElementRef>) => void; + // !Android Only +} + +export const Commands = codegenNativeCommands({ + supportedCommands: ['goBack', 'goForward', 'reload', 'stopLoading', 'injectJavaScript', 'requestFocus', 'postMessage', 'loadUrl', 'clearFormData', 'clearCache', 'clearHistory'], +}); + +export default codegenNativeComponent( + 'RNCWebView' +) as HostComponent; \ No newline at end of file diff --git a/src/WebView.android.tsx b/src/WebView.android.tsx index 8f3a21d3a1..e1875625b3 100644 --- a/src/WebView.android.tsx +++ b/src/WebView.android.tsx @@ -1,19 +1,18 @@ -import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react'; +import React, { forwardRef, ReactElement, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react'; import { Image, View, - NativeModules, ImageSourcePropType, + HostComponent, } from 'react-native'; import BatchedBridge from 'react-native/Libraries/BatchedBridge/BatchedBridge'; -// @ts-expect-error react-native doesn't have this type -import codegenNativeCommandsUntyped from 'react-native/Libraries/Utilities/codegenNativeCommands'; import invariant from 'invariant'; -import RNCWebView from "./WebViewNativeComponent.android"; +import RNCWebView, {Commands, NativeProps} from "./RNCWebViewNativeComponent"; +import RNCWebViewModule from "./NativeRNCWebView"; import { defaultOriginWhitelist, defaultRenderError, @@ -21,18 +20,11 @@ import { useWebWiewLogic, } from './WebViewShared'; import { - AndroidWebViewProps, - NativeWebViewAndroid, + AndroidWebViewProps, WebViewSourceUri, } from './WebViewTypes'; import styles from './WebView.styles'; -const codegenNativeCommands = codegenNativeCommandsUntyped as (options: { supportedCommands: (keyof T)[] }) => T; - -const Commands = codegenNativeCommands({ - supportedCommands: ['goBack', 'goForward', 'reload', 'stopLoading', 'injectJavaScript', 'requestFocus', 'postMessage', 'clearFormData', 'clearCache', 'clearHistory', 'loadUrl'], -}); - const { resolveAssetSource } = Image; /** @@ -49,7 +41,6 @@ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({ allowFileAccess = false, saveFormDataDisabled = false, cacheEnabled = true, - androidHardwareAccelerationDisabled = false, androidLayerType = "none", originWhitelist = defaultOriginWhitelist, setSupportMultipleWindows = true, @@ -76,14 +67,14 @@ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({ ...otherProps }, ref) => { const messagingModuleName = useRef(`WebViewMessageHandler${uniqueRef += 1}`).current; - const webViewRef = useRef(null); + const webViewRef = useRef> | null>(null); const onShouldStartLoadWithRequestCallback = useCallback((shouldStart: boolean, url: string, lockIdentifier?: number) => { if (lockIdentifier) { - NativeModules.RNCWebView.onShouldStartLoadWithRequestCallback(shouldStart, lockIdentifier); - } else if (shouldStart) { + RNCWebViewModule.shouldStartLoadWithLockIdentifier(shouldStart, lockIdentifier); + } else if (shouldStart && webViewRef.current) { Commands.loadUrl(webViewRef.current, url); } }, []); @@ -105,20 +96,23 @@ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({ }) useImperativeHandle(ref, () => ({ - goForward: () => Commands.goForward(webViewRef.current), - goBack: () => Commands.goBack(webViewRef.current), + goForward: () => webViewRef.current && Commands.goForward(webViewRef.current), + goBack: () => webViewRef.current && Commands.goBack(webViewRef.current), reload: () => { setViewState( 'LOADING', - ); Commands.reload(webViewRef.current) + ); + if (webViewRef.current) { + Commands.reload(webViewRef.current) + } }, - stopLoading: () => Commands.stopLoading(webViewRef.current), - postMessage: (data: string) => Commands.postMessage(webViewRef.current, data), - injectJavaScript: (data: string) => Commands.injectJavaScript(webViewRef.current, data), - requestFocus: () => Commands.requestFocus(webViewRef.current), - clearFormData: () => Commands.clearFormData(webViewRef.current), - clearCache: (includeDiskFiles: boolean) => Commands.clearCache(webViewRef.current, includeDiskFiles), - clearHistory: () => Commands.clearHistory(webViewRef.current), + stopLoading: () => webViewRef.current && Commands.stopLoading(webViewRef.current), + postMessage: (data: string) => webViewRef.current && Commands.postMessage(webViewRef.current, data), + injectJavaScript: (data: string) => webViewRef.current && Commands.injectJavaScript(webViewRef.current, data), + requestFocus: () => webViewRef.current && Commands.requestFocus(webViewRef.current), + clearFormData: () => webViewRef.current && Commands.clearFormData(webViewRef.current), + clearCache: (includeDiskFiles: boolean) => webViewRef.current && Commands.clearCache(webViewRef.current, includeDiskFiles), + clearHistory: () => webViewRef.current && Commands.clearHistory(webViewRef.current), }), [setViewState, webViewRef]); const directEventCallbacks = useMemo(() => ({ @@ -130,16 +124,18 @@ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({ BatchedBridge.registerCallableModule(messagingModuleName, directEventCallbacks); }, [messagingModuleName, directEventCallbacks]) - let otherView = null; + let otherView: ReactElement | undefined; if (viewState === 'LOADING') { otherView = (renderLoading || defaultRenderLoading)(); } else if (viewState === 'ERROR') { invariant(lastErrorEvent != null, 'lastErrorEvent expected to be non-null'); - otherView = (renderError || defaultRenderError)( - lastErrorEvent.domain, - lastErrorEvent.code, - lastErrorEvent.description, - ); + if (lastErrorEvent) { + otherView = (renderError || defaultRenderError)( + lastErrorEvent.domain, + lastErrorEvent.code, + lastErrorEvent.description, + ); + } } else if (viewState !== 'IDLE') { console.error(`RNCWebView invalid state encountered: ${viewState}`); } @@ -157,9 +153,22 @@ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({ } } - const NativeWebView - = (nativeConfig?.component as (typeof NativeWebViewAndroid | undefined)) || RNCWebView; + = (nativeConfig?.component as (typeof RNCWebView | undefined)) || RNCWebView; + + const sourceResolved = resolveAssetSource(source as ImageSourcePropType) + const newSource = typeof sourceResolved === "object" ? Object.entries(sourceResolved as WebViewSourceUri).reduce((prev, [currKey, currValue]) => { + return { + ...prev, + [currKey]: currKey === "headers" && currValue && typeof currValue === "object" ? Object.entries(currValue).map( + ([key, value]) => { + return { + name: key, + value + } + }) : currValue + } + }, {}) : sourceResolved const webView = (({ messagingEnabled={typeof onMessageProp === 'function'} messagingModuleName={messagingModuleName} + hasOnScroll={!!otherProps.onScroll} onLoadingError={onLoadingError} onLoadingFinish={onLoadingFinish} onLoadingProgress={onLoadingProgress} @@ -175,10 +185,11 @@ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({ onRenderProcessGone={onRenderProcessGone} onMessage={onMessage} onShouldStartLoadWithRequest={onShouldStartLoadWithRequest} - ref={webViewRef} // TODO: find a better way to type this. - source={resolveAssetSource(source as ImageSourcePropType)} + // @ts-expect-error source is old arch + source={sourceResolved} + newSource={newSource} style={webViewStyles} overScrollMode={overScrollMode} javaScriptEnabled={javaScriptEnabled} @@ -188,7 +199,6 @@ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({ allowFileAccess={allowFileAccess} saveFormDataDisabled={saveFormDataDisabled} cacheEnabled={cacheEnabled} - androidHardwareAccelerationDisabled={androidHardwareAccelerationDisabled} androidLayerType={androidLayerType} setSupportMultipleWindows={setSupportMultipleWindows} setBuiltInZoomControls={setBuiltInZoomControls} @@ -206,9 +216,8 @@ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({ }); // native implementation should return "true" only for Android 5+ -const isFileUploadSupported: () => Promise - = NativeModules.RNCWebView.isFileUploadSupported(); +const { isFileUploadSupported } = RNCWebViewModule; -const WebView = Object.assign(WebViewComponent, {isFileUploadSupported}); +const WebView = Object.assign(WebViewComponent, { isFileUploadSupported }); export default WebView; diff --git a/src/WebView.ios.tsx b/src/WebView.ios.tsx index 221fa17c68..3ffda25de4 100644 --- a/src/WebView.ios.tsx +++ b/src/WebView.ios.tsx @@ -2,14 +2,14 @@ import React, { forwardRef, useCallback, useImperativeHandle, useRef } from 'rea import { Image, View, - NativeModules, ImageSourcePropType, + HostComponent, } from 'react-native'; import invariant from 'invariant'; -// @ts-expect-error react-native doesn't have this type -import codegenNativeCommandsUntyped from 'react-native/Libraries/Utilities/codegenNativeCommands'; -import RNCWebView from "./WebViewNativeComponent.ios"; +import RNCWebView, {Commands, NativeProps} from "./RNCWebViewNativeComponent"; +import RNCWebViewModule from "./NativeRNCWebView"; + import { defaultOriginWhitelist, defaultRenderError, @@ -19,18 +19,12 @@ import { import { IOSWebViewProps, DecelerationRateConstant, - NativeWebViewIOS, - ViewManager, + WebViewSourceUri, } from './WebViewTypes'; import styles from './WebView.styles'; -const codegenNativeCommands = codegenNativeCommandsUntyped as (options: { supportedCommands: (keyof T)[] }) => T; - -const Commands = codegenNativeCommands({ - supportedCommands: ['goBack', 'goForward', 'reload', 'stopLoading', 'injectJavaScript', 'requestFocus', 'postMessage', 'loadUrl'], -}); const { resolveAssetSource } = Image; const processDecelerationRate = ( @@ -45,8 +39,6 @@ const processDecelerationRate = ( return newDecelerationRate; }; -const RNCWebViewManager = NativeModules.RNCWebViewManager as ViewManager; - const useWarnIfChanges = (value: T, name: string) => { const ref = useRef(value); if (ref.current !== value) { @@ -91,19 +83,15 @@ const WebViewComponent = forwardRef<{}, IOSWebViewProps>(({ onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp, ...otherProps }, ref) => { - const webViewRef = useRef(null); + const webViewRef = useRef> | null>(null); const onShouldStartLoadWithRequestCallback = useCallback(( shouldStart: boolean, _url: string, lockIdentifier = 0, ) => { - const viewManager - = (nativeConfig?.viewManager) - || RNCWebViewManager; - - viewManager.startLoadWithResult(!!shouldStart, lockIdentifier); - }, [nativeConfig?.viewManager]); + RNCWebViewModule.shouldStartLoadWithLockIdentifier(shouldStart, lockIdentifier); + }, []); const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onContentProcessDidTerminate } = useWebWiewLogic({ onNavigationStateChange, @@ -122,17 +110,20 @@ const WebViewComponent = forwardRef<{}, IOSWebViewProps>(({ }); useImperativeHandle(ref, () => ({ - goForward: () => Commands.goForward(webViewRef.current), - goBack: () => Commands.goBack(webViewRef.current), + goForward: () => webViewRef.current && Commands.goForward(webViewRef.current), + goBack: () => webViewRef.current && Commands.goBack(webViewRef.current), reload: () => { setViewState( 'LOADING', - ); Commands.reload(webViewRef.current) + ); + if (webViewRef.current) { + Commands.reload(webViewRef.current) + } }, - stopLoading: () => Commands.stopLoading(webViewRef.current), - postMessage: (data: string) => Commands.postMessage(webViewRef.current, data), - injectJavaScript: (data: string) => Commands.injectJavaScript(webViewRef.current, data), - requestFocus: () => Commands.requestFocus(webViewRef.current), + stopLoading: () => webViewRef.current && Commands.stopLoading(webViewRef.current), + postMessage: (data: string) => webViewRef.current && Commands.postMessage(webViewRef.current, data), + injectJavaScript: (data: string) => webViewRef.current && Commands.injectJavaScript(webViewRef.current, data), + requestFocus: () => webViewRef.current && Commands.requestFocus(webViewRef.current), }), [setViewState, webViewRef]); @@ -148,9 +139,9 @@ const WebViewComponent = forwardRef<{}, IOSWebViewProps>(({ } else if (viewState === 'ERROR') { invariant(lastErrorEvent != null, 'lastErrorEvent expected to be non-null'); otherView = (renderError || defaultRenderError)( - lastErrorEvent.domain, - lastErrorEvent.code, - lastErrorEvent.description, + lastErrorEvent?.domain, + lastErrorEvent?.code ?? 0, + lastErrorEvent?.description ?? '', ); } else if (viewState !== 'IDLE') { console.error(`RNCWebView invalid state encountered: ${viewState}`); @@ -162,9 +153,23 @@ const WebViewComponent = forwardRef<{}, IOSWebViewProps>(({ const decelerationRate = processDecelerationRate(decelerationRateProp); const NativeWebView - = (nativeConfig?.component as typeof NativeWebViewIOS | undefined) + = (nativeConfig?.component as typeof RNCWebView | undefined) || RNCWebView; + const sourceResolved = resolveAssetSource(source as ImageSourcePropType) + const newSource = typeof sourceResolved === "object" ? Object.entries(sourceResolved as WebViewSourceUri).reduce((prev, [currKey, currValue]) => { + return { + ...prev, + [currKey]: currKey === "headers" && currValue && typeof currValue === "object" ? Object.entries(currValue).map( + ([key, value]) => { + return { + name: key, + value + } + }) : currValue + } + }, {}) : sourceResolved + const webView = ( (({ textInteractionEnabled={textInteractionEnabled} decelerationRate={decelerationRate} messagingEnabled={typeof onMessageProp === 'function'} + messagingModuleName="" // android ONLY onLoadingError={onLoadingError} onLoadingFinish={onLoadingFinish} onLoadingProgress={onLoadingProgress} @@ -188,15 +194,17 @@ const WebViewComponent = forwardRef<{}, IOSWebViewProps>(({ injectedJavaScriptBeforeContentLoaded={injectedJavaScriptBeforeContentLoaded} injectedJavaScriptForMainFrameOnly={injectedJavaScriptForMainFrameOnly} injectedJavaScriptBeforeContentLoadedForMainFrameOnly={injectedJavaScriptBeforeContentLoadedForMainFrameOnly} - dataDetectorTypes={dataDetectorTypes} + dataDetectorTypes={!dataDetectorTypes || Array.isArray(dataDetectorTypes) ? dataDetectorTypes : [dataDetectorTypes]} allowsAirPlayForMediaPlayback={allowsAirPlayForMediaPlayback} allowsInlineMediaPlayback={allowsInlineMediaPlayback} incognito={incognito} mediaPlaybackRequiresUserAction={mediaPlaybackRequiresUserAction} - ref={webViewRef} - // TODO: find a better way to type this. - source={resolveAssetSource(source as ImageSourcePropType)} + newSource={newSource} style={webViewStyles} + hasOnFileDownload={!!onFileDownload} + ref={webViewRef} + // @ts-expect-error old arch only + source={sourceResolved} {...nativeConfig?.props} /> ); diff --git a/src/WebView.macos.tsx b/src/WebView.macos.tsx index d4860be737..d9b91bd1a0 100644 --- a/src/WebView.macos.tsx +++ b/src/WebView.macos.tsx @@ -2,14 +2,13 @@ import React, { forwardRef, useCallback, useImperativeHandle, useRef } from 'rea import { Image, View, - NativeModules, ImageSourcePropType, } from 'react-native'; import invariant from 'invariant'; -// @ts-expect-error react-native doesn't have this type -import codegenNativeCommandsUntyped from 'react-native/Libraries/Utilities/codegenNativeCommands'; +import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands'; import RNCWebView from "./WebViewNativeComponent.macos"; +import RNCWebViewModule from "./NativeRNCWebView"; import { defaultOriginWhitelist, defaultRenderError, @@ -19,22 +18,16 @@ import { import { MacOSWebViewProps, NativeWebViewMacOS, - ViewManager, } from './WebViewTypes'; import styles from './WebView.styles'; - -const codegenNativeCommands = codegenNativeCommandsUntyped as (options: { supportedCommands: (keyof T)[] }) => T; - const Commands = codegenNativeCommands({ supportedCommands: ['goBack', 'goForward', 'reload', 'stopLoading', 'injectJavaScript', 'requestFocus', 'postMessage', 'loadUrl'], }); const { resolveAssetSource } = Image; -const RNCWebViewManager = NativeModules.RNCWebViewManager as ViewManager; - const useWarnIfChanges = (value: T, name: string) => { const ref = useRef(value); if (ref.current !== value) { @@ -79,12 +72,8 @@ const WebViewComponent = forwardRef<{}, MacOSWebViewProps>(({ _url: string, lockIdentifier = 0, ) => { - const viewManager - = (nativeConfig?.viewManager) - || RNCWebViewManager; - - viewManager.startLoadWithResult(!!shouldStart, lockIdentifier); - }, [nativeConfig?.viewManager]); + RNCWebViewModule.shouldStartLoadWithLockIdentifier(!!shouldStart, lockIdentifier); + }, []); const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onContentProcessDidTerminate } = useWebWiewLogic({ onNavigationStateChange, diff --git a/src/WebView.windows.tsx b/src/WebView.windows.tsx index 843c6ffacd..79121a97bc 100644 --- a/src/WebView.windows.tsx +++ b/src/WebView.windows.tsx @@ -17,8 +17,7 @@ import { ImageSourcePropType, NativeModules, } from 'react-native'; -// @ts-expect-error react-native doesn't have this type -import codegenNativeCommandsUntyped from 'react-native/Libraries/Utilities/codegenNativeCommands'; +import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands'; import invariant from 'invariant'; import {RCTWebView, RCTWebView2} from "./WebViewNativeComponent.windows"; import { useWebWiewLogic, defaultOriginWhitelist, defaultRenderError, defaultRenderLoading, } from './WebViewShared'; @@ -29,8 +28,6 @@ import { import styles from './WebView.styles'; -const codegenNativeCommands = codegenNativeCommandsUntyped as (options: { supportedCommands: (keyof T)[] }) => T; - const Commands = codegenNativeCommands({ supportedCommands: ['goBack', 'goForward', 'reload', 'stopLoading', 'injectJavaScript', 'requestFocus', 'postMessage', 'loadUrl'], }); @@ -59,7 +56,7 @@ const WebViewComponent = forwardRef<{}, WindowsWebViewProps>(({ ...otherProps }, ref) => { const webViewRef = useRef(null); - + const RCTWebViewString = useWebView2 ? 'RCTWebView2' : 'RCTWebView'; const onShouldStartLoadWithRequestCallback = useCallback((shouldStart: boolean, url: string, lockIdentifier?: number) => { diff --git a/src/WebViewNativeComponent.android.ts b/src/WebViewNativeComponent.android.ts deleted file mode 100644 index 130a54abe3..0000000000 --- a/src/WebViewNativeComponent.android.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { requireNativeComponent } from "react-native"; -import type { NativeWebViewAndroid } from "./WebViewTypes"; - -const RNCWebView: typeof NativeWebViewAndroid = requireNativeComponent( - 'RNCWebView', -); - -export default RNCWebView; diff --git a/src/WebViewNativeComponent.ios.ts b/src/WebViewNativeComponent.ios.ts deleted file mode 100644 index 96d03d543a..0000000000 --- a/src/WebViewNativeComponent.ios.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { requireNativeComponent } from "react-native"; -import type { NativeWebViewIOS } from "./WebViewTypes"; - -const RNCWebView: typeof NativeWebViewIOS = requireNativeComponent( - 'RNCWebView', -); - -export default RNCWebView; diff --git a/src/WebViewTypes.ts b/src/WebViewTypes.ts index cba759a3df..b30b7c0fbd 100644 --- a/src/WebViewTypes.ts +++ b/src/WebViewTypes.ts @@ -1,17 +1,18 @@ /* eslint-disable react/no-multi-comp, max-classes-per-file */ -import { ReactElement, Component } from 'react'; +import { ReactElement, Component, ComponentProps } from 'react'; import { NativeSyntheticEvent, ViewProps, StyleProp, ViewStyle, NativeMethodsMixin, - Constructor, UIManagerStatic, NativeScrollEvent, } from 'react-native'; +import type NativeWebViewComponent from './RNCWebViewNativeComponent' + type WebViewCommands = | 'goForward' | 'goBack' @@ -55,11 +56,8 @@ interface ErrorState extends BaseState { export type State = NormalState | ErrorState; -// eslint-disable-next-line react/prefer-stateless-function -declare class NativeWebViewIOSComponent extends Component {} -declare const NativeWebViewIOSBase: Constructor & - typeof NativeWebViewIOSComponent; -export class NativeWebViewIOS extends NativeWebViewIOSBase {} +// eslint-disable-next-line @typescript-eslint/no-type-alias, @typescript-eslint/no-explicit-any +type Constructor = new (...args: any[]) => T; // eslint-disable-next-line react/prefer-stateless-function declare class NativeWebViewMacOSComponent extends Component {} @@ -67,12 +65,6 @@ declare const NativeWebViewMacOSBase: Constructor & typeof NativeWebViewMacOSComponent; export class NativeWebViewMacOS extends NativeWebViewMacOSBase {} -// eslint-disable-next-line react/prefer-stateless-function -declare class NativeWebViewAndroidComponent extends Component {} -declare const NativeWebViewAndroidBase: Constructor & - typeof NativeWebViewAndroidComponent; -export class NativeWebViewAndroid extends NativeWebViewAndroidBase {} - // eslint-disable-next-line react/prefer-stateless-function declare class NativeWebViewWindowsComponent extends Component {} declare const NativeWebViewWindowsBase: Constructor & @@ -241,7 +233,7 @@ export interface WebViewCustomMenuItems { export type WebViewSource = WebViewSourceUri | WebViewSourceHtml; export interface ViewManager { - startLoadWithResult: Function; + shouldStartLoadWithLockIdentifier: Function; } export interface WebViewNativeConfig { @@ -249,9 +241,8 @@ export interface WebViewNativeConfig { * The native component used to render the WebView. */ component?: - | typeof NativeWebViewIOS | typeof NativeWebViewMacOS - | typeof NativeWebViewAndroid; + | typeof NativeWebViewComponent; /** * Set props directly on the native component WebView. Enables custom props which the * original WebView doesn't pass through. @@ -311,38 +302,6 @@ export interface CommonNativeWebViewProps extends ViewProps { basicAuthCredential?: BasicAuthCredential; } -export interface AndroidNativeWebViewProps extends CommonNativeWebViewProps { - cacheMode?: CacheMode; - allowFileAccess?: boolean; - scalesPageToFit?: boolean; - allowFileAccessFromFileURLs?: boolean; - allowsFullscreenVideo?: boolean; - allowUniversalAccessFromFileURLs?: boolean; - androidHardwareAccelerationDisabled?: boolean; - androidLayerType?: AndroidLayerType; - domStorageEnabled?: boolean; - geolocationEnabled?: boolean; - javaScriptEnabled?: boolean; - mixedContentMode?: 'never' | 'always' | 'compatibility'; - onContentSizeChange?: (event: WebViewEvent) => void; - onRenderProcessGone?: (event: WebViewRenderProcessGoneEvent) => void; - overScrollMode?: OverScrollModeType; - saveFormDataDisabled?: boolean; - setSupportMultipleWindows?: boolean; - textZoom?: number; - thirdPartyCookiesEnabled?: boolean; - messagingModuleName?: string; - setBuiltInZoomControls?: boolean; - setDisplayZoomControls?: boolean; - nestedScrollEnabled?: boolean; - readonly urlPrefixesForDefaultIntent?: string[]; - forceDarkOn?: boolean; - minimumFontSize?: number; - downloadingMessage?: string; - lackPermissionToDownloadMessage?: string; - allowsProtectedMedia?: boolean; -} - export declare type ContentInsetAdjustmentBehavior = | 'automatic' | 'scrollableAxes' @@ -358,37 +317,6 @@ export declare type MediaCapturePermissionGrantType = export declare type ContentMode = 'recommended' | 'mobile' | 'desktop'; -export interface IOSNativeWebViewProps extends CommonNativeWebViewProps { - allowingReadAccessToURL?: string; - allowsBackForwardNavigationGestures?: boolean; - allowsInlineMediaPlayback?: boolean; - allowsAirPlayForMediaPlayback?: boolean; - allowsLinkPreview?: boolean; - allowFileAccessFromFileURLs?: boolean; - allowUniversalAccessFromFileURLs?: boolean; - automaticallyAdjustContentInsets?: boolean; - autoManageStatusBarEnabled?: boolean; - bounces?: boolean; - contentInset?: ContentInsetProp; - contentInsetAdjustmentBehavior?: ContentInsetAdjustmentBehavior; - contentMode?: ContentMode; - readonly dataDetectorTypes?: DataDetectorTypes | DataDetectorTypes[]; - decelerationRate?: number; - directionalLockEnabled?: boolean; - hideKeyboardAccessoryView?: boolean; - javaScriptEnabled?: boolean; - pagingEnabled?: boolean; - scrollEnabled?: boolean; - useSharedProcessPool?: boolean; - onContentProcessDidTerminate?: (event: WebViewTerminatedEvent) => void; - injectedJavaScriptForMainFrameOnly?: boolean; - injectedJavaScriptBeforeContentLoadedForMainFrameOnly?: boolean; - onFileDownload?: (event: FileDownloadEvent) => void; - limitsNavigationsToAppBoundDomains?: boolean; - textInteractionEnabled?: boolean; - mediaCapturePermissionGrantType?: MediaCapturePermissionGrantType; -} - export interface MacOSNativeWebViewProps extends CommonNativeWebViewProps { allowingReadAccessToURL?: string; allowFileAccessFromFileURLs?: boolean; @@ -744,7 +672,12 @@ export interface IOSWebViewProps extends WebViewSharedProps { * `selectedText`: the text selected on the document * @platform ios */ - onCustomMenuSelection?: (event: WebViewEvent) => void; + onCustomMenuSelection?: (event: {nativeEvent: { + label: string; + key: string; + selectedText: string; + } + }) => void; } export interface MacOSWebViewProps extends WebViewSharedProps { @@ -988,22 +921,6 @@ export interface AndroidWebViewProps extends WebViewSharedProps { */ setSupportMultipleWindows?: boolean; - /** - * Used on Android only, controls whether the given list of URL prefixes should - * make {@link com.facebook.react.views.webview.ReactWebViewClient} to launch a - * default activity intent for those URL instead of loading it within the webview. - * Use this to list URLs that WebView cannot handle, e.g. a PDF url. - * @platform android - */ - readonly urlPrefixesForDefaultIntent?: string[]; - - /** - * Boolean value to disable Hardware Acceleration in the `WebView`. Used on Android only - * as Hardware Acceleration is a feature only for Android. The default value is `false`. - * @platform android - */ - androidHardwareAccelerationDisabled?: boolean; - /** * https://developer.android.com/reference/android/webkit/WebView#setLayerType(int,%20android.graphics.Paint) * Sets the layerType. Possible values are: @@ -1170,7 +1087,7 @@ export interface WebViewSharedProps extends ViewProps { /** * Function that is invoked when the `WebView` scrolls. */ - onScroll?: (event: WebViewScrollEvent) => void; + onScroll?: ComponentProps['onScroll']; /** * Function that is invoked when the `WebView` has finished loading. diff --git a/src/__tests__/__snapshots__/WebViewShared-test.js.snap b/src/__tests__/__snapshots__/WebViewShared-test.js.snap index 57d8ea1917..dfc866c1d9 100644 --- a/src/__tests__/__snapshots__/WebViewShared-test.js.snap +++ b/src/__tests__/__snapshots__/WebViewShared-test.js.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`WebViewShared exports defaultOriginWhitelist 1`] = ` -Array [ +[ "http://*", "https://*", ] diff --git a/yarn.lock b/yarn.lock index 717276e7d3..a34fc4fc05 100644 --- a/yarn.lock +++ b/yarn.lock @@ -68,19 +68,19 @@ dependencies: tslib "^2.2.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: - "@babel/highlight" "^7.16.7" + "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" - integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== +"@babel/compat-data@^7.20.5": + version "7.20.10" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" + integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== -"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.14.0", "@babel/core@^7.7.5": +"@babel/core@^7.0.0", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.14.0": version "7.17.8" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.8.tgz#3dac27c190ebc3a4381110d46c80e77efe172e1a" integrity sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ== @@ -101,29 +101,51 @@ json5 "^2.1.2" semver "^6.3.0" -"@babel/generator@^7.14.0", "@babel/generator@^7.17.3", "@babel/generator@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" - integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== +"@babel/core@^7.11.6", "@babel/core@^7.20.0": + version "7.20.12" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" + integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== dependencies: - "@babel/types" "^7.17.0" + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helpers" "^7.20.7" + "@babel/parser" "^7.20.7" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.12" + "@babel/types" "^7.20.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/generator@^7.17.7", "@babel/generator@^7.7.2": + version "7.20.14" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce" + integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== + dependencies: + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" - source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== +"@babel/generator@^7.20.0", "@babel/generator@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" + integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" - integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== +"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/types" "^7.18.6" "@babel/helper-builder-react-jsx-experimental@^7.10.4": version "7.10.5" @@ -142,37 +164,51 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-compilation-targets@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" - integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" + integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" + "@babel/compat-data" "^7.20.5" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.7": - version "7.17.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz#9699f14a88833a7e055ce57dcd3ffdcd25186b21" - integrity sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-create-regexp-features-plugin@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" - integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - regexpu-core "^4.7.0" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz#d802ee16a64a9e824fcbf0a2ffc92f19d58550ce" + integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-class-features-plugin@^7.20.12": + version "7.20.12" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz#4349b928e79be05ed2d1643b20b99bb87c503819" + integrity sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-member-expression-to-functions" "^7.20.7" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.10.4", "@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c" + integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" "@babel/helper-define-map@^7.10.4": version "7.10.5" @@ -183,82 +219,84 @@ "@babel/types" "^7.10.5" lodash "^4.17.19" -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== -"@babel/helper-explode-assignable-expression@^7.10.4": - version "7.11.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b" - integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ== +"@babel/helper-function-name@^7.10.4", "@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== dependencies: - "@babel/types" "^7.10.4" + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" -"@babel/helper-function-name@^7.10.4", "@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-get-function-arity@^7.10.4", "@babel/helper-get-function-arity@^7.16.7": +"@babel/helper-get-function-arity@^7.10.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== dependencies: "@babel/types" "^7.16.7" -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" -"@babel/helper-member-expression-to-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" - integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.9" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== +"@babel/helper-member-expression-to-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05" + integrity sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.20.7" -"@babel/helper-module-transforms@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" - integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" + "@babel/types" "^7.18.6" -"@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== +"@babel/helper-module-transforms@^7.17.7", "@babel/helper-module-transforms@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" + integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== dependencies: - "@babel/types" "^7.16.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.10" + "@babel/types" "^7.20.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== +"@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== "@babel/helper-regex@^7.10.4": version "7.10.5" @@ -267,97 +305,151 @@ dependencies: lodash "^4.17.19" -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" +"@babel/helper-remap-async-to-generator@^7.16.8", "@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.10.4", "@babel/helper-replace-supers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" + integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" + integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.20.7" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/helper-simple-access@^7.17.7", "@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== + dependencies: + "@babel/types" "^7.20.2" + +"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" + integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0", "@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== + dependencies: + "@babel/types" "^7.20.0" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helper-wrap-function@^7.18.9": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz#bff23ace436e3f6aefb61f85ffae2291c80ed1fb" + integrity sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w== + dependencies: + "@babel/helper-function-name" "^7.18.9" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.11" + "@babel/types" "^7.18.10" -"@babel/helper-replace-supers@^7.10.4", "@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-simple-access@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" - integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-skip-transparent-expression-wrappers@^7.11.0", "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== +"@babel/helpers@^7.17.8": + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.13.tgz#e3cb731fb70dc5337134cadc24cbbad31cc87ad2" + integrity sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg== dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.13" + "@babel/types" "^7.20.7" -"@babel/helpers@^7.17.8": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.8.tgz#288450be8c6ac7e4e44df37bcc53d345e07bc106" - integrity sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw== +"@babel/helpers@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" + integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" -"@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.8": +"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7": version "7.17.8" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== +"@babel/parser@^7.17.8", "@babel/parser@^7.20.13": + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.13.tgz#ddf1eb5a813588d2fb1692b70c6fce75b945c088" + integrity sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw== + +"@babel/parser@^7.20.0", "@babel/parser@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" + integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== + +"@babel/plugin-proposal-async-generator-functions@^7.0.0": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz#85ea478c98b0095c3e4102bff3b67d306ed24952" + integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.13.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" - integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-export-default-from@^7.0.0": version "7.10.4" @@ -436,12 +528,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.16.7", "@babel/plugin-syntax-flow@^7.2.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" - integrity sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ== +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.18.6", "@babel/plugin-syntax-flow@^7.2.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1" + integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -464,6 +556,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -513,12 +612,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" - integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== +"@babel/plugin-syntax-typescript@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" + integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-transform-arrow-functions@^7.0.0": version "7.10.4" @@ -578,21 +684,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" - integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== +"@babel/plugin-transform-flow-strip-types@^7.0.0": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.18.9.tgz#5b4cc521426263b5ce08893a2db41097ceba35bf" + integrity sha512-+G6rp2zRuOAInY5wcggsx4+QVao1qPM0osC9fTUVlAV3zOrzTCnrMAFVnR6+a3T8wz1wFIH7KhYMcMB3u1n80A== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-flow" "^7.18.6" -"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz#291fb140c78dabbf87f2427e7c7c332b126964b8" - integrity sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg== +"@babel/plugin-transform-flow-strip-types@^7.16.7": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz#e9e8606633287488216028719638cbbb2f2dde8f" + integrity sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-flow" "^7.16.7" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-flow" "^7.18.6" "@babel/plugin-transform-for-of@^7.0.0": version "7.10.4" @@ -633,12 +739,13 @@ "@babel/helper-simple-access" "^7.17.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-object-assign@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.10.4.tgz#f7c8f54ce8052ccd8b9da9b3358848423221c338" - integrity sha512-6zccDhYEICfMeQqIjuY5G09/yhKzG30DKHJeYBQUHIsJH7c2jXSGvgwRalufLAXAq432OSlsEfAOLlzEsQzxVw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" + integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-object-super@^7.0.0": version "7.10.4" @@ -696,13 +803,6 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" - integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== - dependencies: - regenerator-transform "^0.14.2" - "@babel/plugin-transform-runtime@^7.0.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz#e27f78eb36f19448636e05c33c90fd9ad9b8bccf" @@ -744,14 +844,23 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typescript@^7.16.7", "@babel/plugin-transform-typescript@^7.5.0": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" - integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== +"@babel/plugin-transform-typescript@^7.16.7": + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.13.tgz#e3581b356b8694f6ff450211fe6774eaff8d25ab" + integrity sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-typescript" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.20.12" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-typescript" "^7.20.0" + +"@babel/plugin-transform-typescript@^7.5.0": + version "7.18.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.12.tgz#712e9a71b9e00fde9f8c0238e0cceee86ab2f8fd" + integrity sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-typescript" "^7.18.6" "@babel/plugin-transform-unicode-regex@^7.0.0": version "7.10.4" @@ -798,44 +907,61 @@ pirates "^4.0.5" source-map-support "^0.5.16" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.4.3", "@babel/runtime@^7.4.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.4.3", "@babel/runtime@^7.4.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.0.0", "@babel/template@^7.16.7", "@babel/template@^7.3.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" +"@babel/template@^7.0.0", "@babel/template@^7.16.7", "@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.14.0", "@babel/traverse@^7.18.11", "@babel/traverse@^7.18.9", "@babel/traverse@^7.20.0", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.7": + version "7.20.12" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.12.tgz#7f0f787b3a67ca4475adef1f56cb94f6abd4a4b5" + integrity sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + debug "^4.1.0" + globals "^11.1.0" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" - integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.3" - "@babel/types" "^7.17.0" +"@babel/traverse@^7.17.3", "@babel/traverse@^7.20.13", "@babel/traverse@^7.7.2": + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" + integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.20.13" + "@babel/types" "^7.20.7" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" + integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -843,14 +969,6 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - "@dabh/diagnostics@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" @@ -897,172 +1015,221 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== +"@jest/console@^29.4.1": + version "29.4.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.4.1.tgz#cbc31d73f6329f693b3d34b365124de797704fff" + integrity sha512-m+XpwKSi3PPM9znm5NGS8bBReeAJJpSkL1OuFCqaMaJL2YX9YXLkkI+MBchMPwu+ZuM2rynL51sgfkQteQ1CKQ== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.4.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" + jest-message-util "^29.4.1" + jest-util "^29.4.1" slash "^3.0.0" -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== +"@jest/core@^29.4.1": + version "29.4.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.4.1.tgz#91371179b5959951e211dfaeea4277a01dcca14f" + integrity sha512-RXFTohpBqpaTebNdg5l3I5yadnKo9zLBajMT0I38D0tDhreVBYv3fA8kywthI00sWxPztWLD3yjiUkewwu/wKA== dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.4.1" + "@jest/reporters" "^29.4.1" + "@jest/test-result" "^29.4.1" + "@jest/transform" "^29.4.1" + "@jest/types" "^29.4.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" + ci-info "^3.2.0" exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" + graceful-fs "^4.2.9" + jest-changed-files "^29.4.0" + jest-config "^29.4.1" + jest-haste-map "^29.4.1" + jest-message-util "^29.4.1" + jest-regex-util "^29.2.0" + jest-resolve "^29.4.1" + jest-resolve-dependencies "^29.4.1" + jest-runner "^29.4.1" + jest-runtime "^29.4.1" + jest-snapshot "^29.4.1" + jest-util "^29.4.1" + jest-validate "^29.4.1" + jest-watcher "^29.4.1" + micromatch "^4.0.4" + pretty-format "^29.4.1" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/create-cache-key-function@^27.0.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz#7448fae15602ea95c828f5eceed35c202a820b31" - integrity sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ== +"@jest/create-cache-key-function@^29.2.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.3.1.tgz#3a0970ea595ab3d9507244edbcef14d6b016cdc9" + integrity sha512-4i+E+E40gK13K78ffD/8cy4lSSqeWwyXeTZoq16tndiCP12hC8uQsPJdIu5C6Kf22fD8UbBk71so7s/6VwpUOQ== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.3.1" -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== +"@jest/environment@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.3.1.tgz#eb039f726d5fcd14698acd072ac6576d41cfcaa6" + integrity sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag== dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/fake-timers" "^29.3.1" + "@jest/types" "^29.3.1" "@types/node" "*" - jest-mock "^26.6.2" + jest-mock "^29.3.1" -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== +"@jest/environment@^29.4.1": + version "29.4.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.4.1.tgz#52d232a85cdc995b407a940c89c86568f5a88ffe" + integrity sha512-pJ14dHGSQke7Q3mkL/UZR9ZtTOxqskZaC91NzamEH4dlKRt42W+maRBXiw/LWkdJe+P0f/zDR37+SPMplMRlPg== dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" + "@jest/fake-timers" "^29.4.1" + "@jest/types" "^29.4.1" "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-mock "^29.4.1" -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== +"@jest/expect-utils@^29.4.1": + version "29.4.1" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.4.1.tgz#105b9f3e2c48101f09cae2f0a4d79a1b3a419cbb" + integrity sha512-w6YJMn5DlzmxjO00i9wu2YSozUYRBhIoJ6nQwpMYcBMtiqMGJm1QBzOf6DDgRao8dbtpDoaqLg6iiQTvv0UHhQ== dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" + jest-get-type "^29.2.0" -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== +"@jest/expect@^29.4.1": + version "29.4.1" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.4.1.tgz#3338fa20f547bb6e550c4be37d6f82711cc13c38" + integrity sha512-ZxKJP5DTUNF2XkpJeZIzvnzF1KkfrhEF6Rz0HGG69fHl6Bgx5/GoU3XyaeFYEjuuKSOOsbqD/k72wFvFxc3iTw== + dependencies: + expect "^29.4.1" + jest-snapshot "^29.4.1" + +"@jest/fake-timers@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.3.1.tgz#b140625095b60a44de820876d4c14da1aa963f67" + integrity sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A== + dependencies: + "@jest/types" "^29.3.1" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + jest-message-util "^29.3.1" + jest-mock "^29.3.1" + jest-util "^29.3.1" + +"@jest/fake-timers@^29.4.1": + version "29.4.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.4.1.tgz#7b673131e8ea2a2045858f08241cace5d518b42b" + integrity sha512-/1joI6rfHFmmm39JxNfmNAO3Nwm6Y0VoL5fJDy7H1AtWrD1CgRtqJbN9Ld6rhAkGO76qqp4cwhhxJ9o9kYjQMw== + dependencies: + "@jest/types" "^29.4.1" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.4.1" + jest-mock "^29.4.1" + jest-util "^29.4.1" + +"@jest/globals@^29.4.1": + version "29.4.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.4.1.tgz#3cd78c5567ab0249f09fbd81bf9f37a7328f4713" + integrity sha512-znoK2EuFytbHH0ZSf2mQK2K1xtIgmaw4Da21R2C/NE/+NnItm5mPEFQmn8gmF3f0rfOlmZ3Y3bIf7bFj7DHxAA== + dependencies: + "@jest/environment" "^29.4.1" + "@jest/expect" "^29.4.1" + "@jest/types" "^29.4.1" + jest-mock "^29.4.1" + +"@jest/reporters@^29.4.1": + version "29.4.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.4.1.tgz#50d509c08575c75e3cd2176d72ec3786419d5e04" + integrity sha512-AISY5xpt2Xpxj9R6y0RF1+O6GRy9JsGa8+vK23Lmzdy1AYcpQn5ItX79wJSsTmfzPKSAcsY1LNt/8Y5Xe5LOSg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.4.1" + "@jest/test-result" "^29.4.1" + "@jest/transform" "^29.4.1" + "@jest/types" "^29.4.1" + "@jridgewell/trace-mapping" "^0.3.15" + "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" + glob "^7.1.3" + graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" + istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" + istanbul-reports "^3.1.3" + jest-message-util "^29.4.1" + jest-util "^29.4.1" + jest-worker "^29.4.1" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== +"@jest/schemas@^29.0.0": + version "29.0.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" + integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/schemas@^29.4.0": + version "29.4.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.0.tgz#0d6ad358f295cc1deca0b643e6b4c86ebd539f17" + integrity sha512-0E01f/gOZeNTG76i5eWWSupvSHaIINrTie7vCyjiYFKgzNdyEGd12BUv4oNBFHOqlHDbtoJi3HrQ38KCC90NsQ== dependencies: + "@sinclair/typebox" "^0.25.16" + +"@jest/source-map@^29.2.0": + version "29.2.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.2.0.tgz#ab3420c46d42508dcc3dc1c6deee0b613c235744" + integrity sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.15" callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" + graceful-fs "^4.2.9" -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== +"@jest/test-result@^29.4.1": + version "29.4.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.4.1.tgz#997f19695e13b34779ceb3c288a416bd26c3238d" + integrity sha512-WRt29Lwt+hEgfN8QDrXqXGgCTidq1rLyFqmZ4lmJOpVArC8daXrZWkWjiaijQvgd3aOUj2fM8INclKHsQW9YyQ== dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.4.1" + "@jest/types" "^29.4.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== +"@jest/test-sequencer@^29.4.1": + version "29.4.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.4.1.tgz#f7a006ec7058b194a10cf833c88282ef86d578fd" + integrity sha512-v5qLBNSsM0eHzWLXsQ5fiB65xi49A3ILPSFQKPXzGL4Vyux0DPZAIN7NAFJa9b4BiTDP9MBF/Zqc/QA1vuiJ0w== dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" + "@jest/test-result" "^29.4.1" + graceful-fs "^4.2.9" + jest-haste-map "^29.4.1" + slash "^3.0.0" -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== +"@jest/transform@^29.4.1": + version "29.4.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.4.1.tgz#e4f517841bb795c7dcdee1ba896275e2c2d26d4a" + integrity sha512-5w6YJrVAtiAgr0phzKjYd83UPbCXsBRTeYI4BXokv9Er9CcrH9hfXL/crCvP2d2nGOcovPUnlYiLPFLZrkG5Hg== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" + "@babel/core" "^7.11.6" + "@jest/types" "^29.4.1" + "@jridgewell/trace-mapping" "^0.3.15" + babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.4.1" + jest-regex-util "^29.2.0" + jest-util "^29.4.1" + micromatch "^4.0.4" + pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + write-file-atomic "^5.0.0" "@jest/types@^26.6.2": version "26.6.2" @@ -1086,6 +1253,30 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.3.1.tgz#7c5a80777cb13e703aeec6788d044150341147e3" + integrity sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA== + dependencies: + "@jest/schemas" "^29.0.0" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jest/types@^29.4.1": + version "29.4.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.4.1.tgz#f9f83d0916f50696661da72766132729dcb82ecb" + integrity sha512-zbrAXDUOnpJ+FMST2rV7QZOgec8rskg2zv8g2ajeqitp4tvZiyqTCYXANrKsM+ryj5o+LI+ZN2EgU9drrkiwSA== + dependencies: + "@jest/schemas" "^29.4.0" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jimp/bmp@^0.10.3": version "0.10.3" resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.10.3.tgz#79a23678e8389865c62e77b0dccc3e069dfc27f0" @@ -1658,24 +1849,64 @@ dependencies: core-js "^2.5.7" +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + "@jridgewell/resolve-uri@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.11" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== -"@jridgewell/trace-mapping@^0.3.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" - integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== +"@jridgewell/trace-mapping@^0.3.0", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + "@nodelib/fs.scandir@2.1.3": version "2.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" @@ -1835,124 +2066,130 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.3.0.tgz#0d740709fd65845c9cab215d5581e9fa80c59520" integrity sha512-7lmGpLL/7EHQcLVBxxOesgQQS7JSxzF/Xqx7VNMxAQbo14dzJEX6Ks0hb4LHqEMpCrKpErWXi4JxYCGrRJgx9A== -"@react-native-community/cli-debugger-ui@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-7.0.3.tgz#3eeeacc5a43513cbcae56e5e965d77726361bcb4" - integrity sha512-G4SA6jFI0j22o+j+kYP8/7sxzbCDqSp2QiHA/X5E0lsGEd2o9qN2zbIjiFr8b8k+VVAYSUONhoC0+uKuINvmkA== +"@react-native-community/cli-clean@^10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-10.1.1.tgz#4c73ce93a63a24d70c0089d4025daac8184ff504" + integrity sha512-iNsrjzjIRv9yb5y309SWJ8NDHdwYtnCpmxZouQDyOljUdC9MwdZ4ChbtA4rwQyAwgOVfS9F/j56ML3Cslmvrxg== + dependencies: + "@react-native-community/cli-tools" "^10.1.1" + chalk "^4.1.2" + execa "^1.0.0" + prompts "^2.4.0" + +"@react-native-community/cli-config@^10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-10.1.1.tgz#08dcc5d7ca1915647dc06507ed853fe0c1488395" + integrity sha512-p4mHrjC+s/ayiNVG6T35GdEGdP6TuyBUg5plVGRJfTl8WT6LBfLYLk+fz/iETrEZ/YkhQIsQcEUQC47MqLNHog== + dependencies: + "@react-native-community/cli-tools" "^10.1.1" + chalk "^4.1.2" + cosmiconfig "^5.1.0" + deepmerge "^3.2.0" + glob "^7.1.3" + joi "^17.2.1" + +"@react-native-community/cli-debugger-ui@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-10.0.0.tgz#4bb6d41c7e46449714dc7ba5d9f5b41ef0ea7c57" + integrity sha512-8UKLcvpSNxnUTRy8CkCl27GGLqZunQ9ncGYhSrWyKrU9SWBJJGeZwi2k2KaoJi5FvF2+cD0t8z8cU6lsq2ZZmA== dependencies: serve-static "^1.13.1" -"@react-native-community/cli-hermes@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-6.3.0.tgz#92b2f07d08626a60f6893c3e3d57c1538c8fb5a7" - integrity sha512-Uhbm9bubyZLZ12vFCIfWbE/Qi3SBTbYIN/TC08EudTLhv/KbPomCQnmFsnJ7AXQFuOZJs73mBxoEAYSbRbwyVA== +"@react-native-community/cli-doctor@^10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-10.1.1.tgz#6d60a2df74ea112d1f3b41491b6ee0948daa4fb3" + integrity sha512-9uvUhr6aJu4C7pCTsD9iRS/38tx1mzIrWuEQoh2JffTXg9MOq4jesvobkyKFRD90nOvqunEvfpnWnRdWcZO0Wg== dependencies: - "@react-native-community/cli-platform-android" "^6.3.0" - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-config" "^10.1.1" + "@react-native-community/cli-platform-ios" "^10.1.1" + "@react-native-community/cli-tools" "^10.1.1" chalk "^4.1.2" + command-exists "^1.2.8" + envinfo "^7.7.2" + execa "^1.0.0" hermes-profile-transformer "^0.0.6" ip "^1.1.5" + node-stream-zip "^1.9.1" + ora "^5.4.1" + prompts "^2.4.0" + semver "^6.3.0" + strip-ansi "^5.2.0" + sudo-prompt "^9.0.0" + wcwidth "^1.0.1" -"@react-native-community/cli-platform-android@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-6.3.0.tgz#ab7d156bd69a392493323eeaba839a874c0e201f" - integrity sha512-d5ufyYcvrZoHznYm5bjBXaiHIJv552t5gYtQpnUsxBhHSQ8QlaNmlLUyeSPRDfOw4ND9b0tPHqs4ufwx6vp/fQ== +"@react-native-community/cli-hermes@^10.1.3": + version "10.1.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-10.1.3.tgz#440e2ff0f2ac9aba0ca1daee6ffaaf9c093437cc" + integrity sha512-uYl8MLBtuu6bj0tDUzVGf30nK5i9haBv7F0u+NCOq31+zVjcwiUplrCuLorb2dMLMF+Fno9wDxi66W9MxoW4nA== dependencies: - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-platform-android" "^10.1.3" + "@react-native-community/cli-tools" "^10.1.1" chalk "^4.1.2" - execa "^1.0.0" - fs-extra "^8.1.0" - glob "^7.1.3" - jetifier "^1.6.2" - lodash "^4.17.15" - logkitty "^0.7.1" - slash "^3.0.0" - xmldoc "^1.1.2" + hermes-profile-transformer "^0.0.6" + ip "^1.1.5" -"@react-native-community/cli-platform-android@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-7.0.1.tgz#d165897edf401f9bceff1f361ef446528133cb52" - integrity sha512-nOr0aMkxAymCnbtsQwXBlyoRN2Y+IzC7Qz5T+/zyWwEbTY8SKQI8uV+8+qttUvzSvuXa2PeXsTWluuliOS8KCw== +"@react-native-community/cli-platform-android@10.0.0", "@react-native-community/cli-platform-android@10.1.3", "@react-native-community/cli-platform-android@^10.1.3": + version "10.1.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-10.1.3.tgz#8380799cd4d3f9a0ca568b0f5b4ae9e462ce3669" + integrity sha512-8YZEpBL6yd9l4CIoFcLOgrV8x2GDujdqrdWrNsNERDAbsiFwqAQvfjyyb57GAZVuEPEJCoqUlGlMCwOh3XQb9A== dependencies: - "@react-native-community/cli-tools" "^7.0.1" + "@react-native-community/cli-tools" "^10.1.1" chalk "^4.1.2" execa "^1.0.0" - fs-extra "^8.1.0" glob "^7.1.3" - jetifier "^1.6.2" - lodash "^4.17.15" logkitty "^0.7.1" - slash "^3.0.0" - xmldoc "^1.1.2" -"@react-native-community/cli-platform-ios@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-7.0.1.tgz#1c27af85229246b7a528e97f093e38859896cc93" - integrity sha512-PLRIbzrCzSedmpjuFtQqcqUD45G8q7sEciI1lf5zUbVMXqjIBwJWS7iz8235PyWwj8J4MNHohLC+oyRueFtbGg== +"@react-native-community/cli-platform-ios@10.0.0", "@react-native-community/cli-platform-ios@10.1.1", "@react-native-community/cli-platform-ios@^10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-10.1.1.tgz#39ed6810117d8e7330d3aa4d85818fb6ae358785" + integrity sha512-EB9/L8j1LqrqyfJtLRixU+d8FIP6Pr83rEgUgXgya/u8wk3h/bvX70w+Ff2skwjdPLr5dLUQ/n5KFX4r3bsNmA== dependencies: - "@react-native-community/cli-tools" "^7.0.1" + "@react-native-community/cli-tools" "^10.1.1" chalk "^4.1.2" execa "^1.0.0" glob "^7.1.3" - js-yaml "^3.13.1" - lodash "^4.17.15" ora "^5.4.1" - plist "^3.0.2" - xcode "^3.0.0" -"@react-native-community/cli-plugin-metro@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-7.0.3.tgz#b381ed2f68a0b126e4fa238f1956a44846e1ef8a" - integrity sha512-HJrEkFbxv9DNixsGwO+Q0zCcZMghDltyzeB9yQ//D5ZR4ZUEuAIPrRDdEp9xVw0WkBxAIZs6KXLux2/yPMwLhA== +"@react-native-community/cli-plugin-metro@^10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-10.1.1.tgz#8b8689c921f6f0aeafa7ea9aabbde4c482b376b7" + integrity sha512-wEp47le4mzlelDF5sfkaaujUDYcuLep5HZqlcMx7PkL7BA3/fSHdDo1SblqaLgZ1ca6vFU+kfbHueLDct+xwFg== dependencies: - "@react-native-community/cli-server-api" "^7.0.3" - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-server-api" "^10.1.1" + "@react-native-community/cli-tools" "^10.1.1" chalk "^4.1.2" - metro "^0.67.0" - metro-config "^0.67.0" - metro-core "^0.67.0" - metro-react-native-babel-transformer "^0.67.0" - metro-resolver "^0.67.0" - metro-runtime "^0.67.0" + execa "^1.0.0" + metro "0.73.7" + metro-config "0.73.7" + metro-core "0.73.7" + metro-react-native-babel-transformer "0.73.7" + metro-resolver "0.73.7" + metro-runtime "0.73.7" readline "^1.3.0" -"@react-native-community/cli-server-api@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-7.0.3.tgz#ba9695a2fdfef22750d141153efd94baf641129b" - integrity sha512-JDrLsrkBgNxbG2u3fouoVGL9tKrXUrTsaNwr+oCV+3XyMwbVe42r/OaQ681/iW/7mHXjuVkDnMcp7BMg7e2yJg== +"@react-native-community/cli-server-api@^10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-10.1.1.tgz#e382269de281bb380c2e685431364fbbb8c1cb3a" + integrity sha512-NZDo/wh4zlm8as31UEBno2bui8+ufzsZV+KN7QjEJWEM0levzBtxaD+4je0OpfhRIIkhaRm2gl/vVf7OYAzg4g== dependencies: - "@react-native-community/cli-debugger-ui" "^7.0.3" - "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-debugger-ui" "^10.0.0" + "@react-native-community/cli-tools" "^10.1.1" compression "^1.7.1" connect "^3.6.5" errorhandler "^1.5.0" - nocache "^2.1.0" + nocache "^3.0.1" pretty-format "^26.6.2" serve-static "^1.13.1" ws "^7.5.1" -"@react-native-community/cli-tools@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-6.2.0.tgz#8f4adc2d83ab96e5654348533c8fa602742c4fce" - integrity sha512-08ssz4GMEnRxC/1FgTTN/Ud7mExQi5xMphItPjfHiTxpZPhrFn+IMx6mya0ncFEhhxQ207wYlJMRLPRRdBZ8oA== +"@react-native-community/cli-tools@^10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-10.1.1.tgz#fa66e509c0d3faa31f7bb87ed7d42ad63f368ddd" + integrity sha512-+FlwOnZBV+ailEzXjcD8afY2ogFEBeHOw/8+XXzMgPaquU2Zly9B+8W089tnnohO3yfiQiZqkQlElP423MY74g== dependencies: appdirsjs "^1.2.4" chalk "^4.1.2" - lodash "^4.17.15" - mime "^2.4.1" - node-fetch "^2.6.0" - open "^6.2.0" - semver "^6.3.0" - shell-quote "1.6.1" - -"@react-native-community/cli-tools@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-7.0.1.tgz#73790d6ca2825e42a70a770c1b403a6777e690d6" - integrity sha512-0xra4hKNA5PR2zYVXsDMNiXMGaDNoNRYMY6eTP2aVIxQbqIcVMDWSyCA8wMWX5iOpMWg0cZGaQ6a77f3Rlb34g== - dependencies: - appdirsjs "^1.2.4" - chalk "^4.1.2" - lodash "^4.17.15" + find-up "^5.0.0" mime "^2.4.1" node-fetch "^2.6.0" open "^6.2.0" @@ -1960,59 +2197,48 @@ semver "^6.3.0" shell-quote "^1.7.3" -"@react-native-community/cli-types@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-6.0.0.tgz#90269fbdc7229d5e3b8f2f3e029a94083551040d" - integrity sha512-K493Fk2DMJC0ZM8s8gnfseKxGasIhuDaCUDeLZcoCSFlrjKEuEs1BKKEJiev0CARhKEXKOyyp/uqYM9nWhisNw== +"@react-native-community/cli-types@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-10.0.0.tgz#046470c75ec18f8b3bd906e54e43a6f678e01a45" + integrity sha512-31oUM6/rFBZQfSmDQsT1DX/5fjqfxg7sf2u8kTPJK7rXVya5SRpAMaCXsPAG0omsmJxXt+J9HxUi3Ic+5Ux5Iw== dependencies: - ora "^3.4.0" + joi "^17.2.1" -"@react-native-community/cli@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-7.0.3.tgz#1addb462d71786fcbbd266fbceb41819b8cf7839" - integrity sha512-WyJOA829KAhU1pw2MDQt0YhOS9kyR2KqyqgJyTuQhzFVCBPX4F5aDEkZYYn4jdldaDHCPrLJ3ho3gxYTXy+x7w== - dependencies: - "@react-native-community/cli-debugger-ui" "^7.0.3" - "@react-native-community/cli-hermes" "^6.3.0" - "@react-native-community/cli-plugin-metro" "^7.0.3" - "@react-native-community/cli-server-api" "^7.0.3" - "@react-native-community/cli-tools" "^6.2.0" - "@react-native-community/cli-types" "^6.0.0" - appdirsjs "^1.2.4" +"@react-native-community/cli@10.0.0", "@react-native-community/cli@10.1.3": + version "10.1.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-10.1.3.tgz#ad610c46da9fc7c717272024ec757dc646726506" + integrity sha512-kzh6bYLGN1q1q0IiczKSP1LTrovFeVzppYRTKohPI9VdyZwp7b5JOgaQMB/Ijtwm3MxBDrZgV9AveH/eUmUcKQ== + dependencies: + "@react-native-community/cli-clean" "^10.1.1" + "@react-native-community/cli-config" "^10.1.1" + "@react-native-community/cli-debugger-ui" "^10.0.0" + "@react-native-community/cli-doctor" "^10.1.1" + "@react-native-community/cli-hermes" "^10.1.3" + "@react-native-community/cli-plugin-metro" "^10.1.1" + "@react-native-community/cli-server-api" "^10.1.1" + "@react-native-community/cli-tools" "^10.1.1" + "@react-native-community/cli-types" "^10.0.0" chalk "^4.1.2" - command-exists "^1.2.8" - commander "^2.19.0" - cosmiconfig "^5.1.0" - deepmerge "^3.2.0" - envinfo "^7.7.2" + commander "^9.4.1" execa "^1.0.0" find-up "^4.1.0" fs-extra "^8.1.0" - glob "^7.1.3" graceful-fs "^4.1.3" - joi "^17.2.1" - leven "^3.1.0" - lodash "^4.17.15" - minimist "^1.2.0" - node-stream-zip "^1.9.1" - ora "^3.4.0" - pretty-format "^26.6.2" prompts "^2.4.0" semver "^6.3.0" - serve-static "^1.13.1" - strip-ansi "^5.2.0" - sudo-prompt "^9.0.0" - wcwidth "^1.0.1" -"@react-native-windows/cli@0.68.2": - version "0.68.2" - resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.68.2.tgz#6c47f9e5c43a4132892a9bf1df5f58ead09b851e" - integrity sha512-hbWUy4EiWapkLfP5rouMb7yRiVvltOAJex1WlwfEfbVLWPg0WAf1mtMfc10VViorFk6xNL9JjVPzbaUO4tO58A== - dependencies: - "@react-native-windows/fs" "0.68.0" - "@react-native-windows/package-utils" "0.68.0" - "@react-native-windows/telemetry" "0.68.2" - "@xmldom/xmldom" "^0.7.5" +"@react-native-windows/cli@0.71.0": + version "0.71.0" + resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.71.0.tgz#2e18423eeef6048b206edf7f14e4efe4610d6ff2" + integrity sha512-NlkapPGJGC4Gg6xW5gDqFziNbUFFCU3bXBwKVBt9WZeSrmxKfW1Nc0nSWVxt8Tn0pfF2480px0N/HDY/rfwpYg== + dependencies: + "@react-native-windows/codegen" "0.71.0" + "@react-native-windows/fs" "0.71.0" + "@react-native-windows/package-utils" "0.71.0" + "@react-native-windows/telemetry" "0.71.0" + "@typescript-eslint/eslint-plugin" "^5.30.5" + "@typescript-eslint/parser" "^5.30.5" + "@xmldom/xmldom" "^0.7.7" chalk "^4.1.0" cli-spinners "^2.2.0" envinfo "^7.5.0" @@ -2030,61 +2256,76 @@ xml-parser "^1.2.1" xpath "^0.0.27" -"@react-native-windows/find-repo-root@0.68.0": - version "0.68.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/find-repo-root/-/find-repo-root-0.68.0.tgz#efbc5af3a4952a7e7712f8d6bd73b8de858f3d7d" - integrity sha512-YuSUlrRdr6SNPapf4b77yi3U/rfTeYhetBpSwm1L/jq3UT8Wm4Z/JSBZg2UioYIeQV6xrNRjlLQHKjDBzmxOkQ== +"@react-native-windows/codegen@0.71.0": + version "0.71.0" + resolved "https://registry.yarnpkg.com/@react-native-windows/codegen/-/codegen-0.71.0.tgz#f31aecc0c595642a073c2531ee3dab0469843ffd" + integrity sha512-sLheajiQwC3fXZDm9cZ6uZQQ3LrL2Mlm8t24FS6p7g3JqshyRvLeYr6EFaI7RzvWbvzAW1tBUTVVVMvhWrE2jQ== dependencies: + "@react-native-windows/fs" "0.71.0" + "@typescript-eslint/eslint-plugin" "^5.30.5" + "@typescript-eslint/parser" "^5.30.5" + chalk "^4.1.0" + globby "^11.0.4" + mustache "^4.0.1" + source-map-support "^0.5.19" + yargs "^16.2.0" + +"@react-native-windows/find-repo-root@0.71.0": + version "0.71.0" + resolved "https://registry.yarnpkg.com/@react-native-windows/find-repo-root/-/find-repo-root-0.71.0.tgz#51faaa2406f180714433d6df71dedb7b3a98353a" + integrity sha512-znR9i2J7nA0C7OXOlDy8aHUL7eYHDZrn1CAv2VKyUC0aKxuA0MHT4sJaXLzUUknQu6XUjrK2eDLKaoaEfjE45Q== + dependencies: + "@react-native-windows/fs" "0.71.0" + "@typescript-eslint/eslint-plugin" "^5.30.5" + "@typescript-eslint/parser" "^5.30.5" find-up "^4.1.0" -"@react-native-windows/fs@0.68.0": - version "0.68.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/fs/-/fs-0.68.0.tgz#bdf722b9c7475e66de9a580b37cdb7136af797a4" - integrity sha512-2ZnL0NVs6zJQgXypyX1Arh7Xyo8mG1yKw1ephbOX5U6J7HLlnsx3X1sANGIz+JcAjA9jEJ08r9DHbH93NvzFWA== +"@react-native-windows/fs@0.71.0": + version "0.71.0" + resolved "https://registry.yarnpkg.com/@react-native-windows/fs/-/fs-0.71.0.tgz#7aaeb83c33a77dd032d987efdd0528e22430c2a1" + integrity sha512-hQkJ9nSUzBs+UUKJhhH4N+59lrcSws94x2kOu8EbjlK8ZNqQgwm6WPDmyKD10xdZnnuNs8xA47WZIUSn028nYw== dependencies: + "@typescript-eslint/eslint-plugin" "^5.30.5" + "@typescript-eslint/parser" "^5.30.5" graceful-fs "^4.2.8" -"@react-native-windows/package-utils@0.68.0": - version "0.68.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/package-utils/-/package-utils-0.68.0.tgz#072b838fd106aedaff746ae6fab5173b6c61880a" - integrity sha512-IgcZib3Ydhosk8HoN/9l/im/EzeualqQPku/aRUyLehKjYEi7YksUDEM3un9bWyAwCeT9gpIjbEnEFwODQdvZg== +"@react-native-windows/package-utils@0.71.0": + version "0.71.0" + resolved "https://registry.yarnpkg.com/@react-native-windows/package-utils/-/package-utils-0.71.0.tgz#587900ddca58058633b7c990c15898ce4d1fbb0e" + integrity sha512-HBn8lTvCA6tf+yu3mrLvZzhsUtOPBrMSn9zSFL0f6LDI9C4CHaGIzEqRmAwfmG3CHB1xc2get9VGKRMKQqDmlQ== dependencies: - "@react-native-windows/find-repo-root" "0.68.0" - "@react-native-windows/fs" "0.68.0" + "@react-native-windows/find-repo-root" "0.71.0" + "@react-native-windows/fs" "0.71.0" + "@typescript-eslint/eslint-plugin" "^5.30.5" + "@typescript-eslint/parser" "^5.30.5" get-monorepo-packages "^1.2.0" lodash "^4.17.15" -"@react-native-windows/telemetry@0.68.2": - version "0.68.2" - resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.68.2.tgz#c693f66e9e4032cce6256ef777c0033b7e5fb262" - integrity sha512-tkd7eJM3Jhs6aenL0Iz8msRbK22GGgYvaSViCLBkenlwOdF0AE/r0+NAGGXzOxHz89GIDYUhj5rtpln83NtWXA== +"@react-native-windows/telemetry@0.71.0": + version "0.71.0" + resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.71.0.tgz#dd4997526d5fc08ad5de8e7db505d59b51a9d602" + integrity sha512-lVsAAhIz7CUX5yzONqIkl9zhgrIKSjfONWxVYoTUGTq/PPHqOfGNTw751DSWzlmvUZgxG1zzVfYPit1Blw07DA== dependencies: - "@react-native-windows/fs" "0.68.0" - "@xmldom/xmldom" "^0.7.5" + "@react-native-windows/fs" "0.71.0" + "@typescript-eslint/eslint-plugin" "^5.30.5" + "@typescript-eslint/parser" "^5.30.5" + "@xmldom/xmldom" "^0.7.7" applicationinsights "^2.3.1" ci-info "^3.2.0" envinfo "^7.8.1" lodash "^4.17.21" - node-machine-id "^1.1.12" os-locale "^5.0.0" xpath "^0.0.27" -"@react-native-windows/virtualized-list@0.68.0": - version "0.68.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/virtualized-list/-/virtualized-list-0.68.0.tgz#06b63d21bad896c2bd37d6b5544f90f0f4fa838b" - integrity sha512-XKqwn7FWDUVanr42sNT+547je2YwCq38I3YR+iq1WcmH5TiQ5E+KF5jXvPv7oOFuWJzzXzjiRZUfEwMv2qqoMg== - dependencies: - invariant "^2.2.4" - "@react-native/assets@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@react-native/assets/-/assets-1.0.0.tgz#c6f9bf63d274bafc8e970628de24986b30a55c8e" integrity sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ== -"@react-native/normalize-color@*", "@react-native/normalize-color@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.0.0.tgz#da955909432474a9a0fe1cbffc66576a0447f567" - integrity sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw== +"@react-native/normalize-color@*", "@react-native/normalize-color@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.1.0.tgz#939b87a9849e81687d3640c5efa2a486ac266f91" + integrity sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA== "@react-native/polyfills@2.0.0": version "2.0.0" @@ -2197,6 +2438,16 @@ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== +"@sinclair/typebox@^0.24.1": + version "0.24.51" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" + integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== + +"@sinclair/typebox@^0.25.16": + version "0.25.21" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.21.tgz#763b05a4b472c93a8db29b2c3e359d55b29ce272" + integrity sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g== + "@sindresorhus/is@^3.0.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-3.1.2.tgz#548650de521b344e3781fbdb0ece4aa6f729afb8" @@ -2209,10 +2460,24 @@ dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== +"@sinonjs/commons@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" + integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" + integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== + dependencies: + "@sinonjs/commons" "^2.0.0" + +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== dependencies: "@sinonjs/commons" "^1.7.0" @@ -2223,18 +2488,13 @@ dependencies: defer-to-connect "^2.0.0" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.18" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" - integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== +"@types/babel__core@^7.1.14": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" + integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" "@types/babel__generator" "*" "@types/babel__template" "*" "@types/babel__traverse" "*" @@ -2254,7 +2514,7 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": version "7.14.2" resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== @@ -2294,10 +2554,10 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== +"@types/graceful-fs@^4.1.3": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" @@ -2330,18 +2590,18 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^26.0.0": - version "26.0.24" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" - integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== +"@types/jest@^29.4.0": + version "29.4.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.4.0.tgz#a8444ad1704493e84dbf07bb05990b275b3b9206" + integrity sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ== dependencies: - jest-diff "^26.0.0" - pretty-format "^26.0.0" + expect "^29.0.0" + pretty-format "^29.0.0" -"@types/json-schema@^7.0.3": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" - integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/keyv@*": version "3.1.1" @@ -2378,10 +2638,10 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== -"@types/prettier@^2.0.0": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" - integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== +"@types/prettier@^2.1.5": + version "2.7.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" + integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== "@types/prop-types@*": version "15.7.3" @@ -2395,17 +2655,10 @@ dependencies: "@types/node" "*" -"@types/react-native@^0.67.3": - version "0.67.3" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.67.3.tgz#baba111c8ce1a45a6034c15f6f0ad98826239780" - integrity sha512-hF4uOZFl2PPQtGWOtLoafrlCJeU815X3PgfVePM+7EhOIZhYXKH7+p3R3cZSnwVnrU5Ep/JfiHimMDliY3o8oQ== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^17.0.0": - version "17.0.39" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.39.tgz#d0f4cde092502a6db00a1cded6e6bf2abb7633ce" - integrity sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug== +"@types/react@18.0.27": + version "18.0.27" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.27.tgz#d9425abe187a00f8a5ec182b010d4fd9da703b71" + integrity sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2443,6 +2696,11 @@ resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.0.9.tgz#12621e55b2ef8f6c98bd17fe23fa720c6cba16bd" integrity sha512-HopIwBE7GUXsscmt/J0DhnFXLSmO04AfxT6b8HAprknwka7pqEWquWDMXxCjd+NUHK9MkCe1SDKKsMiNmCItbQ== +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -2479,6 +2737,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^17.0.8": + version "17.0.19" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.19.tgz#8dbecdc9ab48bee0cb74f6e3327de3fa0d0c98ae" + integrity sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ== + dependencies: + "@types/yargs-parser" "*" + "@types/yauzl@^2.9.1": version "2.9.1" resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af" @@ -2497,6 +2762,21 @@ regexpp "^2.0.1" tsutils "^3.14.0" +"@typescript-eslint/eslint-plugin@^5.30.5": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz#54f8368d080eb384a455f60c2ee044e948a8ce67" + integrity sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ== + dependencies: + "@typescript-eslint/scope-manager" "5.48.0" + "@typescript-eslint/type-utils" "5.48.0" + "@typescript-eslint/utils" "5.48.0" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/experimental-utils@2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.1.0.tgz#0837229f0e75a32db0db9bf662ad0eface914453" @@ -2516,6 +2796,39 @@ "@typescript-eslint/typescript-estree" "2.1.0" eslint-visitor-keys "^1.0.0" +"@typescript-eslint/parser@^5.30.5": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.0.tgz#02803355b23884a83e543755349809a50b7ed9ba" + integrity sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg== + dependencies: + "@typescript-eslint/scope-manager" "5.48.0" + "@typescript-eslint/types" "5.48.0" + "@typescript-eslint/typescript-estree" "5.48.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.0.tgz#607731cb0957fbc52fd754fd79507d1b6659cecf" + integrity sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow== + dependencies: + "@typescript-eslint/types" "5.48.0" + "@typescript-eslint/visitor-keys" "5.48.0" + +"@typescript-eslint/type-utils@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz#40496dccfdc2daa14a565f8be80ad1ae3882d6d6" + integrity sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g== + dependencies: + "@typescript-eslint/typescript-estree" "5.48.0" + "@typescript-eslint/utils" "5.48.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.0.tgz#d725da8dfcff320aab2ac6f65c97b0df30058449" + integrity sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw== + "@typescript-eslint/typescript-estree@2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.1.0.tgz#88e676cc9760516711f6fe43958adc31b93de8e5" @@ -2526,6 +2839,41 @@ lodash.unescape "4.0.1" semver "^6.2.0" +"@typescript-eslint/typescript-estree@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz#a7f04bccb001003405bb5452d43953a382c2fac2" + integrity sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw== + dependencies: + "@typescript-eslint/types" "5.48.0" + "@typescript-eslint/visitor-keys" "5.48.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.0.tgz#eee926af2733f7156ad8d15e51791e42ce300273" + integrity sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.48.0" + "@typescript-eslint/types" "5.48.0" + "@typescript-eslint/typescript-estree" "5.48.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.48.0": + version "5.48.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz#4446d5e7f6cadde7140390c0e284c8702d944904" + integrity sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q== + dependencies: + "@typescript-eslint/types" "5.48.0" + eslint-visitor-keys "^3.3.0" + "@wdio/config@5.22.4": version "5.22.4" resolved "https://registry.yarnpkg.com/@wdio/config/-/config-5.22.4.tgz#053d4ba0a8b0dae6be740b1b7b9ab25abac2799e" @@ -2603,10 +2951,10 @@ dependencies: "@wdio/logger" "6.0.16" -"@xmldom/xmldom@^0.7.5": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d" - integrity sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A== +"@xmldom/xmldom@^0.7.7": + version "0.7.9" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.9.tgz#7f9278a50e737920e21b297b8a35286e9942c056" + integrity sha512-yceMpm/xd4W2a85iqZyO09gTnHvXF6pyiWjD2jcOJs7hRoZtNNOO1eJlhHj1ixA+xip2hOyGn+LgcvLCMo5zXA== JSONStream@^1.0.4, JSONStream@^1.3.4, JSONStream@^1.3.5: version "1.3.5" @@ -2616,11 +2964,6 @@ JSONStream@^1.0.4, JSONStream@^1.3.4, JSONStream@^1.3.5: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.3, abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -2646,33 +2989,20 @@ accepts@^1.3.7, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - acorn-jsx@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - acorn@^7.1.1: version "7.4.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== -acorn@^8.2.4: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== +acorn@^8.5.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== adbkit-apkreader@^3.1.2: version "3.2.0" @@ -2695,13 +3025,6 @@ agent-base@5: resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - agent-base@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" @@ -2799,10 +3122,10 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" @@ -2819,6 +3142,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + ansi-wrap@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" @@ -2839,14 +3167,6 @@ any-base@^1.1.0: resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg== -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - anymatch@^3.0.3: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -3565,11 +3885,6 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -3589,16 +3904,6 @@ array-includes@^3.0.3, array-includes@^3.1.1: es-abstract "^1.17.0" is-string "^1.0.5" -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= - array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -3707,17 +4012,17 @@ async-lock@^1.0.0, async-lock@^1.2.2: resolved "https://registry.yarnpkg.com/async-lock/-/async-lock-1.2.4.tgz#80d0d612383045dd0c30eb5aad08510c1397cb91" integrity sha512-UBQJC2pbeyGutIfYmErGc9RaJYnpZ1FHaxuKwb0ahvGiiCkPUf3p67Io+YLPmmv3RHY+mF6JEtNW8FlHsraAaA== -async@^2.4.0, async@^2.6.0, async@^2.6.2, async@^2.6.3: +async@^2.6.0, async@^2.6.2, async@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== dependencies: lodash "^4.17.14" -async@^3.1.0, async@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" - integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== +async@^3.1.0, async@^3.2.0, async@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== asyncbox@2.x, asyncbox@^2.0.2, asyncbox@^2.0.4, asyncbox@^2.3.0, asyncbox@^2.3.1, asyncbox@^2.3.2, asyncbox@^2.5.2, asyncbox@^2.5.3, asyncbox@^2.6.0: version "2.6.0" @@ -3772,18 +4077,17 @@ babel-core@^7.0.0-bridge.0: resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== +babel-jest@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.4.1.tgz#01fa167e27470b35c2d4a1b841d9586b1764da19" + integrity sha512-xBZa/pLSsF/1sNpkgsiT3CmY7zV1kAsZ9OxxtrFqYucnOuRftXAfcJqcDVyOPeN4lttWTwhLdu0T9f8uvoPEUg== dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" + "@jest/transform" "^29.4.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.4.0" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" slash "^3.0.0" babel-plugin-dynamic-import-node@^2.3.3: @@ -3793,7 +4097,7 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-istanbul@^6.0.0: +babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== @@ -3804,14 +4108,14 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== +babel-plugin-jest-hoist@^29.4.0: + version "29.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.0.tgz#3fd3dfcedf645932df6d0c9fc3d9a704dd860248" + integrity sha512-a/sZRLQJEmsmejQ2rPEUe35nO1+C9dc9O1gplH1SXmJxveQSRUYdBk8yGZG/VOUuZs1u2aHZJusEGoRMbhhwCg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: @@ -3870,12 +4174,12 @@ babel-preset-fbjs@^3.4.0: "@babel/plugin-transform-template-literals" "^7.0.0" babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== +babel-preset-jest@^29.4.0: + version "29.4.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.4.0.tgz#c2b03c548b02dea0a18ae21d5759c136f9251ee4" + integrity sha512-fUB9vZflUSM3dO/6M2TCAepTzvA4VkOvl67PjErcrQMGt9Eve7uazaeyCZ2th3UtI7ljpiBJES0F7A1vBRsLZA== dependencies: - babel-plugin-jest-hoist "^26.6.2" + babel-plugin-jest-hoist "^29.4.0" babel-preset-current-node-syntax "^1.0.0" babel-runtime@^6.26.0: @@ -3891,7 +4195,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.3.1, base64-js@^1.5.1: +base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -3933,7 +4237,7 @@ before-after-hook@^2.0.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== -big-integer@1.6.x, big-integer@^1.6.44: +big-integer@^1.6.44: version "1.6.51" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== @@ -4003,20 +4307,13 @@ boxen@^1.2.1: term-size "^1.2.0" widest-line "^2.0.0" -bplist-creator@0.1.0, bplist-creator@^0: +bplist-creator@^0: version "0.1.0" resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e" integrity sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg== dependencies: stream-buffers "2.2.x" -bplist-parser@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.1.tgz#e1c90b2ca2a9f9474cc72f6862bbf3fee8341fd1" - integrity sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA== - dependencies: - big-integer "1.6.x" - bplist-parser@^0.2: version "0.2.0" resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" @@ -4055,21 +4352,15 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.17.5: - version "4.18.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f" - integrity sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ== +browserslist@^4.21.3: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== dependencies: - caniuse-lite "^1.0.30001280" - electron-to-chromium "^1.3.896" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" bser@2.1.1: version "2.1.1" @@ -4106,14 +4397,6 @@ buffer@^5.1.0, buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.0.2" ieee754 "^1.1.4" -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - bufferpack@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/bufferpack/-/bufferpack-0.0.6.tgz#fb3d8738a0e1e4e03bcff99f9a75f9ec18a9d73e" @@ -4246,22 +4529,15 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001280: - version "1.0.30001312" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f" - integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" +caniuse-lite@^1.0.30001400: + version "1.0.30001442" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz#40337f1cf3be7c637b061e2f78582dc1daec0614" + integrity sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow== capture-stack-trace@^1.0.0: version "1.0.1" @@ -4365,10 +4641,10 @@ circular-json@^0.5.9: resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d" integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ== -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== class-utils@^0.3.5: version "0.3.6" @@ -4484,6 +4760,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -4633,11 +4918,16 @@ command-exists@^1.2.8: resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== -commander@^2.11.0, commander@^2.19.0: +commander@^2.11.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^9.4.1: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" @@ -4846,13 +5136,18 @@ conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.7: through2 "^3.0.0" trim-off-newlines "^1.0.0" -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -4955,7 +5250,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: +cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4979,23 +5274,6 @@ css-value@^0.0.1: resolved "https://registry.yarnpkg.com/css-value/-/css-value-0.0.1.tgz#5efd6c2eea5ea1fd6b6ac57ec0427b18452424ea" integrity sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo= -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - csstype@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" @@ -5018,15 +5296,6 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - dateformat@^3.0.0, dateformat@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" @@ -5051,12 +5320,12 @@ debug@3.1.0, debug@=3.1.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - ms "^2.1.1" + ms "2.1.2" debug@^3.1.0, debug@^3.1.1: version "3.2.6" @@ -5065,6 +5334,13 @@ debug@^3.1.0, debug@^3.1.1: dependencies: ms "^2.1.1" +debug@~4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -5083,11 +5359,6 @@ decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decimal.js@^10.2.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== - decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -5100,6 +5371,11 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + deep-eql@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" @@ -5193,10 +5469,10 @@ depd@~2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -deprecated-react-native-prop-types@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-2.3.0.tgz#c10c6ee75ff2b6de94bb127f142b814e6e08d9ab" - integrity sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA== +deprecated-react-native-prop-types@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-3.0.1.tgz#a275f84cd8519cd1665e8df3c99e9067d57a23ec" + integrity sha512-J0jCJcsk4hMlIb7xwOZKLfMpuJn6l8UtrPEzzQV5ewz5gvKNYakhBuq9h2rWX7YwHHJZFhU5W8ye7dB9oN8VcQ== dependencies: "@react-native/normalize-color" "*" invariant "*" @@ -5266,10 +5542,10 @@ diagnostic-channel@1.1.0: dependencies: semver "^5.3.0" -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff-sequences@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.3.1.tgz#104b5b95fe725932421a9c6e5b4bef84c3f2249e" + integrity sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ== dir-glob@^2.0.0: version "2.2.2" @@ -5312,13 +5588,6 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - dot-prop@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" @@ -5383,10 +5652,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.896: - version "1.4.75" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz#d1ad9bb46f2f1bf432118c2be21d27ffeae82fdd" - integrity sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q== +electron-to-chromium@^1.4.251: + version "1.4.284" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" + integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== emitter-listener@^1.0.1, emitter-listener@^1.1.1: version "1.1.2" @@ -5395,10 +5664,10 @@ emitter-listener@^1.0.1, emitter-listener@^1.1.1: dependencies: shimmer "^1.2.0" -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^7.0.1, emoji-regex@^7.0.2: version "7.0.3" @@ -5561,18 +5830,6 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - eslint-config-airbnb-base@^14.0.0: version "14.2.0" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz#fe89c24b3f9dc8008c9c0d0d88c28f95ed65e9c4" @@ -5686,12 +5943,12 @@ eslint-scope@^4.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" - integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - esrecurse "^4.1.0" + esrecurse "^4.3.0" estraverse "^4.1.1" eslint-utils@^1.4.0, eslint-utils@^1.4.2: @@ -5701,11 +5958,28 @@ eslint-utils@^1.4.0, eslint-utils@^1.4.2: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + eslint@6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.3.0.tgz#1f1a902f67bfd4c354e7288b81e40654d927eb6a" @@ -5758,7 +6032,7 @@ espree@^6.1.1: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.1.0" -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: +esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -5770,14 +6044,14 @@ esquery@^1.0.1: dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -5807,16 +6081,6 @@ eventemitter3@^3.1.2: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== - execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -5887,6 +6151,21 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + exif-parser@^0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" @@ -5910,17 +6189,16 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== +expect@^29.0.0, expect@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.4.1.tgz#58cfeea9cbf479b64ed081fd1e074ac8beb5a1fe" + integrity sha512-OKrGESHOaMxK3b6zxIq9SOW8kEXztKff/Dvg88j4xIJxur1hspEbedVkR3GpHe5LO+WB2Qw7OWN0RMTdp6as5A== dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" + "@jest/expect-utils" "^29.4.1" + jest-get-type "^29.2.0" + jest-matcher-utils "^29.4.1" + jest-message-util "^29.4.1" + jest-util "^29.4.1" express@^4.16.2: version "4.17.1" @@ -6042,19 +6320,18 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.0.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" - integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== +fast-glob@^3.0.3, fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" + glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" + micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -6204,6 +6481,14 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + find-versions@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" @@ -6238,15 +6523,10 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== -flow-parser@0.*: - version "0.171.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.171.0.tgz#5ffae78f050e43513abc86add9f19a97fcbabcdb" - integrity sha512-cqEsgic6HH81Pz0IQLeyuoh0O8Y7ECAIdZ0idPQ9P1jZ/kHB9KK0hwqnjVtqTGog15JURkIxvyXm+9pAb6uuSQ== - -flow-parser@^0.121.0: - version "0.121.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.121.0.tgz#9f9898eaec91a9f7c323e9e992d81ab5c58e618f" - integrity sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg== +flow-parser@0.*, flow-parser@^0.185.0: + version "0.185.2" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.185.2.tgz#cb7ee57f77377d6c5d69a469e980f6332a15e492" + integrity sha512-2hJ5ACYeJCzNtiVULov6pljKOLygy0zddoqSI1fFetM+XRPpRshFdGEijtqlamA1XwyZ+7rhryI6FQFzvtLWUQ== flush-write-stream@^1.0.0: version "1.1.1" @@ -6352,15 +6632,6 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - fs-extra@^8.0.0, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -6401,7 +6672,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@2.x, fsevents@^2.1.2, fsevents@^2.3.2: +fsevents@2.x, fsevents@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -6521,6 +6792,11 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -6545,10 +6821,10 @@ git-log-parser@^1.2.0: through2 "~2.0.0" traverse "~0.6.6" -glob-parent@^5.0.0, glob-parent@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== +glob-parent@^5.0.0, glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" @@ -6609,6 +6885,18 @@ globby@^10.0.0: merge2 "^1.2.3" slash "^3.0.0" +globby@^11.0.4, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + globby@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" @@ -6665,11 +6953,6 @@ grapheme-splitter@^1.0.2: resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - handlebars@^4.7.6: version "4.7.6" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" @@ -6763,22 +7046,17 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hermes-engine@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.11.0.tgz#bb224730d230a02a5af02c4e090d1f52d57dd3db" - integrity sha512-7aMUlZja2IyLYAcZ69NBnwJAR5ZOYlSllj0oMpx08a8HzxHOys0eKCzfphrf6D0vX1JGO1QQvVsQKe6TkYherw== +hermes-estree@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.8.0.tgz#530be27243ca49f008381c1f3e8b18fb26bf9ec0" + integrity sha512-W6JDAOLZ5pMPMjEiQGLCXSSV7pIBEgRR5zGkxgmzGSXHOxqV5dC/M1Zevqpbm9TZDE5tu358qZf8Vkzmsc+u7Q== -hermes-estree@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.5.0.tgz#36432a2b12f01b217244da098924efdfdfc12327" - integrity sha512-1h8rvG23HhIR5K6Kt0e5C7BC72J1Ath/8MmSta49vxXp/j6wl7IMHvIRFYBQr35tWnQY97dSGR2uoAJ5pHUQkg== - -hermes-parser@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.5.0.tgz#8b678dd8b29a08b57cbaf60adba4896494c59a53" - integrity sha512-ARnJBScKAkkq8j3BHrNGBUv/4cSpZNbKDsVizEtzmsFeqC67Dopa5s4XRe+e3wN52Dh5Mj2kDB5wJvhcxwDkPg== +hermes-parser@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.8.0.tgz#116dceaba32e45b16d6aefb5c4c830eaeba2d257" + integrity sha512-yZKalg1fTYG5eOiToLUaw69rQfZq/fi+/NtEXRU7N87K/XobNRhRWorh80oSge2lWUiZfTgUvRJH+XgZWrhoqA== dependencies: - hermes-estree "0.5.0" + hermes-estree "0.8.0" hermes-profile-transformer@^0.0.6: version "0.0.6" @@ -6804,13 +7082,6 @@ hosted-git-info@^3.0.0: dependencies: lru-cache "^6.0.0" -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -6864,15 +7135,6 @@ http-proxy-agent@^3.0.0: agent-base "5" debug "4" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -6911,19 +7173,16 @@ https-proxy-agent@^4.0.0: agent-base "5" debug "4" -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -6945,7 +7204,7 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@^1.1.4, ieee754@^1.2.1: +ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -6977,10 +7236,10 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.1: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ignore@^5.1.1, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== image-size@^0.6.0: version "0.6.3" @@ -7200,13 +7459,6 @@ is-ci@^1.0.10: dependencies: ci-info "^1.5.0" -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - is-cidr@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7" @@ -7226,6 +7478,13 @@ is-core-module@^2.8.1: dependencies: has "^1.0.3" +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -7317,10 +7576,10 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -7395,11 +7654,6 @@ is-plain-object@^4.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-4.1.1.tgz#1a14d6452cbd50790edc7fdaa0aed5a40a35ebb5" integrity sha512-5Aw8LLVsDlZsETVMhoMXzqsXwQqr/0vlnBYzIXJbYo2F4yYlhLHs+Ez7Bod7IIQKWkJbJfxrWD7pA1Dw1TKrwA== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" @@ -7446,7 +7700,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -7521,16 +7775,6 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - istanbul-lib-instrument@^5.0.4: version "5.1.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" @@ -7542,6 +7786,17 @@ istanbul-lib-instrument@^5.0.4: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -7560,10 +7815,10 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2: - version "3.1.4" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" - integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -7573,328 +7828,327 @@ java-properties@^1.0.0: resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== +jest-changed-files@^29.4.0: + version "29.4.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.4.0.tgz#ac2498bcd394228f7eddcadcf928b3583bf2779d" + integrity sha512-rnI1oPxgFghoz32Y8eZsGJMjW54UlqT17ycQeCEktcxxwqqKdlj9afl8LNeO0Pbu+h2JQHThQP0BzS67eTRx4w== dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" + execa "^5.0.0" + p-limit "^3.1.0" -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== +jest-circus@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.4.1.tgz#ff1b63eb04c3b111cefea9489e8dbadd23ce49bd" + integrity sha512-v02NuL5crMNY4CGPHBEflLzl4v91NFb85a+dH9a1pUNx6Xjggrd8l9pPy4LZ1VYNRXlb+f65+7O/MSIbLir6pA== dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/environment" "^29.4.1" + "@jest/expect" "^29.4.1" + "@jest/test-result" "^29.4.1" + "@jest/types" "^29.4.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^29.4.1" + jest-matcher-utils "^29.4.1" + jest-message-util "^29.4.1" + jest-runtime "^29.4.1" + jest-snapshot "^29.4.1" + jest-util "^29.4.1" + p-limit "^3.1.0" + pretty-format "^29.4.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.4.1.tgz#7abef96944f300feb9b76f68b1eb2d68774fe553" + integrity sha512-jz7GDIhtxQ37M+9dlbv5K+/FVcIo1O/b1sX3cJgzlQUf/3VG25nvuWzlDC4F1FLLzUThJeWLu8I7JF9eWpuURQ== + dependencies: + "@jest/core" "^29.4.1" + "@jest/test-result" "^29.4.1" + "@jest/types" "^29.4.1" chalk "^4.0.0" exit "^0.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" + jest-config "^29.4.1" + jest-util "^29.4.1" + jest-validate "^29.4.1" prompts "^2.0.1" - yargs "^15.4.1" + yargs "^17.3.1" -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== +jest-config@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.4.1.tgz#e62670c6c980ec21d75941806ec4d0c0c6402728" + integrity sha512-g7p3q4NuXiM4hrS4XFATTkd+2z0Ml2RhFmFPM8c3WyKwVDNszbl4E7cV7WIx1YZeqqCtqbtTtZhGZWJlJqngzg== dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.4.1" + "@jest/types" "^29.4.1" + babel-jest "^29.4.1" chalk "^4.0.0" + ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.4.1" + jest-environment-node "^29.4.1" + jest-get-type "^29.2.0" + jest-regex-util "^29.2.0" + jest-resolve "^29.4.1" + jest-runner "^29.4.1" + jest-util "^29.4.1" + jest-validate "^29.4.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.4.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" -jest-diff@^26.0.0, jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== +jest-diff@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.4.1.tgz#9a6dc715037e1fa7a8a44554e7d272088c4029bd" + integrity sha512-uazdl2g331iY56CEyfbNA0Ut7Mn2ulAG5vUaEHXycf1L6IPyuImIxSz4F0VYBKi7LYIuxOwTZzK3wh5jHzASMw== dependencies: chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + diff-sequences "^29.3.1" + jest-get-type "^29.2.0" + pretty-format "^29.4.1" -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== +jest-docblock@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.2.0.tgz#307203e20b637d97cee04809efc1d43afc641e82" + integrity sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A== dependencies: detect-newline "^3.0.0" -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== +jest-each@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.4.1.tgz#05ce9979e7486dbd0f5d41895f49ccfdd0afce01" + integrity sha512-QlYFiX3llJMWUV0BtWht/esGEz9w+0i7BHwODKCze7YzZzizgExB9MOfiivF/vVT0GSQ8wXLhvHXh3x2fVD4QQ== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.4.1" chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + jest-get-type "^29.2.0" + jest-util "^29.4.1" + pretty-format "^29.4.1" + +jest-environment-node@^29.2.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.3.1.tgz#5023b32472b3fba91db5c799a0d5624ad4803e74" + integrity sha512-xm2THL18Xf5sIHoU7OThBPtuH6Lerd+Y1NLYiZJlkE3hbE+7N7r8uvHIl/FkZ5ymKXJe/11SQuf3fv4v6rUMag== + dependencies: + "@jest/environment" "^29.3.1" + "@jest/fake-timers" "^29.3.1" + "@jest/types" "^29.3.1" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" + jest-mock "^29.3.1" + jest-util "^29.3.1" -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== +jest-environment-node@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.4.1.tgz#22550b7d0f8f0b16228639c9f88ca04bbf3c1974" + integrity sha512-x/H2kdVgxSkxWAIlIh9MfMuBa0hZySmfsC5lCsWmWr6tZySP44ediRKDUiNggX/eHLH7Cd5ZN10Rw+XF5tXsqg== dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/environment" "^29.4.1" + "@jest/fake-timers" "^29.4.1" + "@jest/types" "^29.4.1" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-mock "^29.4.1" + jest-util "^29.4.1" jest-get-type@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" +jest-get-type@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" + integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== -jest-haste-map@^27.3.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== +jest-haste-map@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.4.1.tgz#b0579dc82d94b40ed9041af56ad25c2f80bedaeb" + integrity sha512-imTjcgfVVTvg02khXL11NNLTx9ZaofbAWhilrMg/G8dIkp+HYCswhxf0xxJwBkfhWb3e8dwbjuWburvxmcr58w== dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" + "@jest/types" "^29.4.1" + "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" - jest-regex-util "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-regex-util "^29.2.0" + jest-util "^29.4.1" + jest-worker "^29.4.1" micromatch "^4.0.4" - walker "^1.0.7" + walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== +jest-leak-detector@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.4.1.tgz#632186c546e084da2b490b7496fee1a1c9929637" + integrity sha512-akpZv7TPyGMnH2RimOCgy+hPmWZf55EyFUvymQ4LMsQP8xSPlZumCPtXGoDhFNhUE2039RApZkTQDKU79p/FiQ== dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" + jest-get-type "^29.2.0" + pretty-format "^29.4.1" -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== +jest-matcher-utils@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.4.1.tgz#73d834e305909c3b43285fbc76f78bf0ad7e1954" + integrity sha512-k5h0u8V4nAEy6lSACepxL/rw78FLDkBnXhZVgFneVpnJONhb2DhZj/Gv4eNe+1XqQ5IhgUcqj745UwH0HJmMnA== dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + chalk "^4.0.0" + jest-diff "^29.4.1" + jest-get-type "^29.2.0" + pretty-format "^29.4.1" -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== +jest-message-util@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.3.1.tgz#37bc5c468dfe5120712053dd03faf0f053bd6adb" + integrity sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA== dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.3.1" + "@types/stack-utils" "^2.0.0" chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.3.1" + slash "^3.0.0" + stack-utils "^2.0.3" -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== +jest-message-util@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.4.1.tgz#522623aa1df9a36ebfdffb06495c7d9d19e8a845" + integrity sha512-H4/I0cXUaLeCw6FM+i4AwCnOwHRgitdaUFOdm49022YD5nfyr8C/DrbXOBEyJaj+w/y0gGJ57klssOaUiLLQGQ== dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.4.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.4.1" slash "^3.0.0" - stack-utils "^2.0.2" + stack-utils "^2.0.3" -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== +jest-mock@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.3.1.tgz#60287d92e5010979d01f218c6b215b688e0f313e" + integrity sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.3.1" "@types/node" "*" + jest-util "^29.3.1" + +jest-mock@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.4.1.tgz#a218a2abf45c99c501d4665207748a6b9e29afbd" + integrity sha512-MwA4hQ7zBOcgVCVnsM8TzaFLVUD/pFWTfbkY953Y81L5ret3GFRZtmPmRFAjKQSdCKoJvvqOu6Bvfpqlwwb0dQ== + dependencies: + "@jest/types" "^29.4.1" + "@types/node" "*" + jest-util "^29.4.1" jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-regex-util@^27.5.1: +jest-regex-util@^27.0.6: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== +jest-regex-util@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.2.0.tgz#82ef3b587e8c303357728d0322d48bbfd2971f7b" + integrity sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA== + +jest-resolve-dependencies@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.1.tgz#02420a2e055da105e5fca8218c471d8b9553c904" + integrity sha512-Y3QG3M1ncAMxfjbYgtqNXC5B595zmB6e//p/qpA/58JkQXu/IpLDoLeOa8YoYfsSglBKQQzNUqtfGJJT/qLmJg== dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" + jest-regex-util "^29.2.0" + jest-snapshot "^29.4.1" -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== +jest-resolve@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.4.1.tgz#4c6bf71a07b8f0b79c5fdf4f2a2cf47317694c5e" + integrity sha512-j/ZFNV2lm9IJ2wmlq1uYK0Y/1PiyDq9g4HEGsNTNr3viRbJdV+8Lf1SXIiLZXFvyiisu0qUyIXGBnw+OKWkJwQ== dependencies: - "@jest/types" "^26.6.2" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" + jest-haste-map "^29.4.1" jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" + jest-util "^29.4.1" + jest-validate "^29.4.1" + resolve "^1.20.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== +jest-runner@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.4.1.tgz#57460d9ebb0eea2e27eeddca1816cf8537469661" + integrity sha512-8d6XXXi7GtHmsHrnaqBKWxjKb166Eyj/ksSaUYdcBK09VbjPwIgWov1VwSmtupCIz8q1Xv4Qkzt/BTo3ZqiCeg== dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.4.1" + "@jest/environment" "^29.4.1" + "@jest/test-result" "^29.4.1" + "@jest/transform" "^29.4.1" + "@jest/types" "^29.4.1" "@types/node" "*" chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.2.0" + jest-environment-node "^29.4.1" + jest-haste-map "^29.4.1" + jest-leak-detector "^29.4.1" + jest-message-util "^29.4.1" + jest-resolve "^29.4.1" + jest-runtime "^29.4.1" + jest-util "^29.4.1" + jest-watcher "^29.4.1" + jest-worker "^29.4.1" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.4.1.tgz#9a50f9c69d3a391690897c01b0bfa8dc5dd45808" + integrity sha512-UXTMU9uKu2GjYwTtoAw5rn4STxWw/nadOfW7v1sx6LaJYa3V/iymdCLQM6xy3+7C6mY8GfX22vKpgxY171UIoA== + dependencies: + "@jest/environment" "^29.4.1" + "@jest/fake-timers" "^29.4.1" + "@jest/globals" "^29.4.1" + "@jest/source-map" "^29.2.0" + "@jest/test-result" "^29.4.1" + "@jest/transform" "^29.4.1" + "@jest/types" "^29.4.1" + "@types/node" "*" chalk "^4.0.0" - cjs-module-lexer "^0.6.0" + cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - exit "^0.1.2" glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" + graceful-fs "^4.2.9" + jest-haste-map "^29.4.1" + jest-message-util "^29.4.1" + jest-mock "^29.4.1" + jest-regex-util "^29.2.0" + jest-resolve "^29.4.1" + jest-snapshot "^29.4.1" + jest-util "^29.4.1" + semver "^7.3.5" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.4.1" -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-serializer@^27.5.1: +jest-serializer@^27.0.6: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== @@ -7902,41 +8156,37 @@ jest-serializer@^27.5.1: "@types/node" "*" graceful-fs "^4.2.9" -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== +jest-snapshot@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.4.1.tgz#5692210b3690c94f19317913d4082b123bd83dd9" + integrity sha512-l4iV8EjGgQWVz3ee/LR9sULDk2pCkqb71bjvlqn+qp90lFwpnulHj4ZBT8nm1hA1C5wowXLc7MGnw321u0tsYA== dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.4.1" + "@jest/transform" "^29.4.1" + "@jest/types" "^29.4.1" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" + expect "^29.4.1" + graceful-fs "^4.2.9" + jest-diff "^29.4.1" + jest-get-type "^29.2.0" + jest-haste-map "^29.4.1" + jest-matcher-utils "^29.4.1" + jest-message-util "^29.4.1" + jest-util "^29.4.1" natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" - -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" + pretty-format "^29.4.1" + semver "^7.3.5" -jest-util@^27.5.1: +jest-util@^27.2.0: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== @@ -7948,7 +8198,31 @@ jest-util@^27.5.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^26.5.2, jest-validate@^26.6.2: +jest-util@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.3.1.tgz#1dda51e378bbcb7e3bc9d8ab651445591ed373e1" + integrity sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ== + dependencies: + "@jest/types" "^29.3.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-util@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.4.1.tgz#2eeed98ff4563b441b5a656ed1a786e3abc3e4c4" + integrity sha512-bQy9FPGxVutgpN4VRc0hk6w7Hx/m6L53QxpDreTZgJd9gfx/AV2MjyPde9tGyZRINAUrSv57p2inGBu2dRLmkQ== + dependencies: + "@jest/types" "^29.4.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^26.5.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== @@ -7960,50 +8234,60 @@ jest-validate@^26.5.2, jest-validate@^26.6.2: leven "^3.1.0" pretty-format "^26.6.2" -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== +jest-validate@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.4.1.tgz#0d5174510415083ec329d4f981bf6779211f17e9" + integrity sha512-qNZXcZQdIQx4SfUB/atWnI4/I2HUvhz8ajOSYUu40CSmf9U5emil8EDHgE7M+3j9/pavtk3knlZBDsgFvv/SWw== dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/types" "^29.4.1" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.2.0" + leven "^3.1.0" + pretty-format "^29.4.1" + +jest-watcher@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.4.1.tgz#6e3e2486918bd778849d4d6e67fd77b814f3e6ed" + integrity sha512-vFOzflGFs27nU6h8dpnVRER3O2rFtL+VMEwnG0H3KLHcllLsU8y9DchSh0AL/Rg5nN1/wSiQ+P4ByMGpuybaVw== + dependencies: + "@jest/test-result" "^29.4.1" + "@jest/types" "^29.4.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.6.2" + emittery "^0.13.1" + jest-util "^29.4.1" string-length "^4.0.1" -jest-worker@^26.0.0, jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== +jest-worker@^27.2.0: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" - supports-color "^7.0.0" + supports-color "^8.0.0" -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +jest-worker@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.4.1.tgz#7cb4a99a38975679600305650f86f4807460aab1" + integrity sha512-O9doU/S1EBe+yp/mstQ0VpPwpv0Clgn68TkNwGxL6/usX/KUW9Arnn4ag8C3jc6qHcXznhsT5Na1liYzAsuAbQ== dependencies: "@types/node" "*" + jest-util "^29.4.1" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== +jest@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.4.1.tgz#bb34baca8e05901b49c02c62f1183a6182ea1785" + integrity sha512-cknimw7gAXPDOmj0QqztlxVtBVCw2lYY9CeIE5N6kD+kET1H4H79HSNISJmijb1HF+qk+G+ploJgiDi5k/fRlg== dependencies: - "@jest/core" "^26.6.3" + "@jest/core" "^29.4.1" + "@jest/types" "^29.4.1" import-local "^3.0.2" - jest-cli "^26.6.3" - -jetifier@^1.6.2: - version "1.6.6" - resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.6.tgz#fec8bff76121444c12dc38d2dad6767c421dab68" - integrity sha512-JNAkmPeB/GS2tCRqUzRPsTOHpGDah7xP18vGJfIjZC+W2sxEHbxgJxetIjIqhjQ3yYbYNEELkM/spKLtwoOSUQ== + jest-cli "^29.4.1" jimp@^0.10.0: version "0.10.3" @@ -8072,6 +8356,11 @@ jsc-android@^250230.2.1: resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-250230.2.1.tgz#3790313a970586a03ab0ad47defbc84df54f1b83" integrity sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q== +jsc-android@^250231.0.0: + version "250231.0.0" + resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-250231.0.0.tgz#91720f8df382a108872fa4b3f558f33ba5e95262" + integrity sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw== + jscodeshift@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.13.1.tgz#69bfe51e54c831296380585c6d9e733512aecdef" @@ -8097,39 +8386,6 @@ jscodeshift@^0.13.1: temp "^0.8.4" write-file-atomic "^2.3.0" -jsdom@^16.4.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -8192,19 +8448,10 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" +json5@^2.1.2, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^4.0.0: version "4.0.0" @@ -8213,11 +8460,6 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -8289,13 +8531,6 @@ kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= - optionalDependencies: - graceful-fs "^4.1.9" - klaw@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" @@ -8577,6 +8812,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lock-verify@^2.0.2, lock-verify@^2.1.0: version "2.2.1" resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.1.tgz#81107948c51ed16f97b96ff8b60675affb243fc1" @@ -8721,7 +8963,7 @@ lodash.zip@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.9, lodash@^4.2.1, lodash@^4.6.1, lodash@^4.7.0: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.9, lodash@^4.2.1, lodash@^4.6.1: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -8861,6 +9103,13 @@ make-fetch-happen@^5.0.0: socks-proxy-agent "^4.0.0" ssri "^6.0.0" +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -8963,6 +9212,11 @@ mem@^5.0.0: mimic-fn "^2.1.0" p-is-promise "^2.1.0" +memoize-one@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + meow@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.0.tgz#50ecbcdafa16f8b58fb7eb9675b933f6473b3a59" @@ -8990,7 +9244,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3, merge2@^1.3.0: +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -9010,79 +9264,160 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -metro-babel-transformer@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.67.0.tgz#42fe82af9953e5c62d9a8d7d544eb7be9020dd18" - integrity sha512-SBqc4nq/dgsPNFm+mpWcQQzJaXnh0nrfz2pSnZC4i6zMtIakrTWb8SQ78jOU1FZVEZ3nu9xCYVHS9Tbr/LoEuw== +metro-babel-transformer@0.73.5: + version "0.73.5" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.73.5.tgz#e7ebe371cd8bf5df90b0e9153587b4d5089d2ce7" + integrity sha512-G3awAJ9of/R2jEg+MRokYcq/TNvMSxJipwybQ2NfwwSj5iLEmRH2YbwTx5w8f5qKgs2K4SS2pmBIs8qjdV6p3Q== dependencies: "@babel/core" "^7.14.0" - hermes-parser "0.5.0" - metro-source-map "0.67.0" + hermes-parser "0.8.0" + metro-source-map "0.73.5" + nullthrows "^1.1.1" + +metro-babel-transformer@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.73.7.tgz#561ffa0336eb6d7d112e7128e957114c729fdb71" + integrity sha512-s7UVkwovGTEXYEQrv5hcmSBbFJ9s9lhCRNMScn4Itgj3UMdqRr9lU8DXKEFlJ7osgRxN6n5+eXqcvhE4B1H1VQ== + dependencies: + "@babel/core" "^7.20.0" + hermes-parser "0.8.0" + metro-source-map "0.73.7" nullthrows "^1.1.1" -metro-cache-key@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.67.0.tgz#4df6a73cced199e1bddd0f3454bb931a27141eeb" - integrity sha512-FNJe5Rcb2uzY6G6tsqCf0RV4t2rCeX6vSHBxmP7k+4aI4NqX4evtPI0K82r221nBzm5DqNWCURZ0RYUT6jZMGA== +metro-cache-key@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.73.7.tgz#fa3b4ece5f3191ce238a623051a0d03bada2a153" + integrity sha512-GngYzrHwZU9U0Xl81H4aq9Tn5cjQyU12v9/flB0hzpeiYO5A89TIeilb4Kg8jtfC6JcmmsdK9nxYIGEq7odHhQ== -metro-cache@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.67.0.tgz#928db5742542719677468c4d22ea29b71c7ec8fc" - integrity sha512-IY5dXiR76L75b2ue/mv+9vW8g5hdQJU6YEe81lj6gTSoUrhcONT0rzY+Gh5QOS2Kk6z9utZQMvd9PRKL9/635A== +metro-cache@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.73.7.tgz#dd2b6a791b2754eae9c0a86dcf714b98e025fd95" + integrity sha512-CPPgI+i9yVzOEDCdmEEZ67JgOvZyNDs8kStmGUFgDuLSjj3//HhkqT5XyfWjGeH6KmyGiS8ip3cgLOVn3IsOSA== dependencies: - metro-core "0.67.0" - mkdirp "^0.5.1" - rimraf "^2.5.4" + metro-core "0.73.7" + rimraf "^3.0.2" -metro-config@0.67.0, metro-config@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.67.0.tgz#5507d3b295bd10c87bd13dbe5a3033a357418786" - integrity sha512-ThAwUmzZwTbKyyrIn2bKIcJDPDBS0LKAbqJZQioflvBGfcgA21h3fdL3IxRmvCEl6OnkEWI0Tn1Z9w2GLAjf2g== +metro-config@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.73.7.tgz#8935054ece6155d214420c263272cd3a690a82e2" + integrity sha512-pD/F+vK3u37cbj1skYmI6cUsEEscqNRtW2KlDKu1m+n8nooDB2oGTOZatlS5WQa7Ga6jYQRydftlq4CLDexAfA== dependencies: cosmiconfig "^5.0.5" jest-validate "^26.5.2" - metro "0.67.0" - metro-cache "0.67.0" - metro-core "0.67.0" - metro-runtime "0.67.0" + metro "0.73.7" + metro-cache "0.73.7" + metro-core "0.73.7" + metro-runtime "0.73.7" -metro-core@0.67.0, metro-core@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.67.0.tgz#75066e11b4df220992abf9cd6200279dd87876c8" - integrity sha512-TOa/ShE1bUq83fGNfV6rFwyfZ288M8ydmWN3g9C2OW8emOHLhJslYD/SIU4DhDkP/99yaJluIALdZ2g0+pCrvQ== +metro-core@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.73.7.tgz#f5abe2448ea72a65f54db9bc90068f3308de1df2" + integrity sha512-H7j1Egj1VnNnsSYf9ZKv0SRwijgtRKIcaGNQq/T+er73vqqb4kR9H+2VIJYPXi6R8lT+QLIMfs6CWSUHAJUgtg== dependencies: - jest-haste-map "^27.3.1" lodash.throttle "^4.1.1" - metro-resolver "0.67.0" + metro-resolver "0.73.7" + +metro-file-map@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.73.7.tgz#709f33ac5ea6f87668d454c77973ab296b7a064b" + integrity sha512-BYaCo2e/4FMN4nOajeN+Za5cPfecfikzUYuFWWMyLAmHU6dj7B+PFkaJ4OEJO3vmRoeq5vMOmhpKXgysYbNXJg== + dependencies: + abort-controller "^3.0.0" + anymatch "^3.0.3" + debug "^2.2.0" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + invariant "^2.2.4" + jest-regex-util "^27.0.6" + jest-serializer "^27.0.6" + jest-util "^27.2.0" + jest-worker "^27.2.0" + micromatch "^4.0.4" + nullthrows "^1.1.1" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" -metro-hermes-compiler@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.67.0.tgz#9c1340f1882fbf535145868d0d28211ca15b0477" - integrity sha512-X5Pr1jC8/kO6d1EBDJ6yhtuc5euHX89UDNv8qdPJHAET03xfFnlojRPwOw6il2udAH20WLBv+F5M9VY+58zspQ== +metro-hermes-compiler@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.73.7.tgz#d1b519c4040423240d89e7816340ca9635deeae8" + integrity sha512-F8PlJ8mWEEumGNH3eMRA3gjgP70ZvH4Ex5F1KY6ofD/gpn7w5HJHSPTeVw8gtUb1pYLN4nevptpyXGg04Jfcog== -metro-inspector-proxy@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.67.0.tgz#22b360a837b07e9e2bc87a71af6154dd8fcc02a5" - integrity sha512-5Ubjk94qpNaU3OT2IZa4/dec09bauic1hzWms4czorBzDenkp4kYXG9/aWTmgQLtCk92H3Q8jKl1PQRxUSkrOQ== +metro-inspector-proxy@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.73.7.tgz#edb966c1581a41a3302860d264f3228e1f57a220" + integrity sha512-TsAtQeKr9X7NaQHlpshu+ZkGWlPi5fFKNqieLkfqvT1oXN4PQF/4q38INyiZtWLPvoUzTR6PRnm4pcUbJ7+Nzg== dependencies: connect "^3.6.5" debug "^2.2.0" ws "^7.5.1" - yargs "^15.3.1" + yargs "^17.5.1" -metro-minify-uglify@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.67.0.tgz#28a77dbd78d9e558dba8c2f31c2b9c6f939df966" - integrity sha512-4CmM5b3MTAmQ/yFEfsHOhD2SuBObB2YF6PKzXZc4agUsQVVtkrrNElaiWa8w26vrTzA9emwcyurxMf4Nl3lYPQ== +metro-minify-terser@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.73.7.tgz#e45fc05eb2e3bc76c9b4fe4abccee0fffeedcf75" + integrity sha512-gbv1fmMOZm6gJ6dQoD+QktlCi2wk6nlTR8j8lQCjeeXGbs6O9e5XLWNPOexHqo7S69bdbohEnfZnLJFcxgHeNw== + dependencies: + terser "^5.15.0" + +metro-minify-uglify@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.73.7.tgz#3dfd397e8202905731e4a519a58fc334d9232a15" + integrity sha512-DmDCzfdbaPExQuQ7NQozCNOSOAgp5Ux9kWzmKAT8seQ38/3NtUepW+PTgxXIHmwNjJV4oHsHwlBlTwJmYihKXg== dependencies: uglify-es "^3.1.9" -metro-react-native-babel-preset@0.67.0, metro-react-native-babel-preset@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.67.0.tgz#53aec093f53a09b56236a9bb534d76658efcbec7" - integrity sha512-tgTG4j0SKwLHbLRELMmgkgkjV1biYkWlGGKOmM484/fJC6bpDikdaFhfjsyE+W+qt7I5szbCPCickMTNQ+zwig== +metro-react-native-babel-preset@0.73.5: + version "0.73.5" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.5.tgz#9b92f1ebc2b3d96f511c45a03f8e35e0fc46cc19" + integrity sha512-Ej6J8ozWSs6nrh0nwX7hgX4oPXUai40ckah37cSLu8qeED2XiEtfLV1YksTLafFE8fX0EieiP97U97dkOGHP4w== + dependencies: + "@babel/core" "^7.14.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + react-refresh "^0.4.0" + +metro-react-native-babel-preset@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.7.tgz#78e1ce448aa9a5cf3651c0ebe73cb225465211b4" + integrity sha512-RKcmRZREjJCzHKP+JhC9QTCohkeb3xa/DtqHU14U5KWzJHdC0mMrkTZYNXhV0cryxsaVKVEw5873KhbZyZHMVw== dependencies: - "@babel/core" "^7.14.0" + "@babel/core" "^7.20.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-export-default-from" "^7.0.0" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" @@ -9091,7 +9426,7 @@ metro-react-native-babel-preset@0.67.0, metro-react-native-babel-preset@^0.67.0: "@babel/plugin-proposal-optional-chaining" "^7.0.0" "@babel/plugin-syntax-dynamic-import" "^7.0.0" "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.2.0" + "@babel/plugin-syntax-flow" "^7.18.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" "@babel/plugin-syntax-optional-chaining" "^7.0.0" "@babel/plugin-transform-arrow-functions" "^7.0.0" @@ -9100,19 +9435,16 @@ metro-react-native-babel-preset@0.67.0, metro-react-native-babel-preset@^0.67.0: "@babel/plugin-transform-classes" "^7.0.0" "@babel/plugin-transform-computed-properties" "^7.0.0" "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-exponentiation-operator" "^7.0.0" "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" "@babel/plugin-transform-function-name" "^7.0.0" "@babel/plugin-transform-literals" "^7.0.0" "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" "@babel/plugin-transform-parameters" "^7.0.0" "@babel/plugin-transform-react-display-name" "^7.0.0" "@babel/plugin-transform-react-jsx" "^7.0.0" "@babel/plugin-transform-react-jsx-self" "^7.0.0" "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-regenerator" "^7.0.0" "@babel/plugin-transform-runtime" "^7.0.0" "@babel/plugin-transform-shorthand-properties" "^7.0.0" "@babel/plugin-transform-spread" "^7.0.0" @@ -9123,145 +9455,194 @@ metro-react-native-babel-preset@0.67.0, metro-react-native-babel-preset@^0.67.0: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-transformer@0.67.0, metro-react-native-babel-transformer@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.67.0.tgz#756d32eb3c05cab3d72fcb1700f8fd09322bb07f" - integrity sha512-P0JT09n7T01epUtgL9mH6BPat3xn4JjBakl4lWHdL61cvEGcrxuIom1eoFFKkgU/K5AVLU4aCAttHS7nSFCcEQ== +metro-react-native-babel-transformer@0.73.5: + version "0.73.5" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.5.tgz#fb1d48cc73ce26371cf2a115f702b7bf3bb5516b" + integrity sha512-CZYgUguqFTzV9vSOZb60p8qlp31aWz8aBB6OqoZ2gJday+n/1k+Y0yy6VPr/tfXJheuQYVIXKvG1gMmUDyxt+Q== dependencies: "@babel/core" "^7.14.0" babel-preset-fbjs "^3.4.0" - hermes-parser "0.5.0" - metro-babel-transformer "0.67.0" - metro-react-native-babel-preset "0.67.0" - metro-source-map "0.67.0" + hermes-parser "0.8.0" + metro-babel-transformer "0.73.5" + metro-react-native-babel-preset "0.73.5" + metro-source-map "0.73.5" + nullthrows "^1.1.1" + +metro-react-native-babel-transformer@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.7.tgz#a92055fd564cd403255cc34f925c5e99ce457565" + integrity sha512-73HW8betjX+VPm3iqsMBe8F/F2Tt+hONO6YJwcF7FonTqQYW1oTz0dOp0dClZGfHUXxpJBz6Vuo7J6TpdzDD+w== + dependencies: + "@babel/core" "^7.20.0" + babel-preset-fbjs "^3.4.0" + hermes-parser "0.8.0" + metro-babel-transformer "0.73.7" + metro-react-native-babel-preset "0.73.7" + metro-source-map "0.73.7" nullthrows "^1.1.1" -metro-resolver@0.67.0, metro-resolver@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.67.0.tgz#8143c716f77e468d1d42eca805243706eb349959" - integrity sha512-d2KS/zAyOA/z/q4/ff41rAp+1txF4H6qItwpsls/RHStV2j6PqgRHUzq/3ga+VIeoUJntYJ8nGW3+3qSrhFlig== +metro-resolver@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.73.7.tgz#1e174cf59eac84c0869172764316042b466daaa5" + integrity sha512-mGW3XPeKBCwZnkHcKo1dhFa9olcx7SyNzG1vb5kjzJYe4Qs3yx04r/qFXIJLcIgLItB69TIGvosznUhpeOOXzg== dependencies: absolute-path "^0.0.0" -metro-runtime@0.67.0, metro-runtime@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.67.0.tgz#a8888dfd06bcebbac3c99dcac7cd622510dd8ee0" - integrity sha512-IFtSL0JUt1xK3t9IoLflTDft82bjieSzdIJWLzrRzBMlesz8ox5bVmnpQbVQEwfYUpEOxbM3VOZauVbdCmXA7g== +metro-runtime@0.73.5: + version "0.73.5" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.73.5.tgz#8c92c3947e97a8dede6347ba6a9844bfb8be8258" + integrity sha512-8QJOS7bhJmR6r/Gkki/qY9oX/DdxnLhS8FpdG1Xmm2hDeUVAug12ekWTiCRMu7d1CDVv1F8WvUz09QckZ0dO0g== + dependencies: + "@babel/runtime" "^7.0.0" + react-refresh "^0.4.0" + +metro-runtime@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.73.7.tgz#9f3a7f3ff668c1a87370650e32b47d8f6329fd1e" + integrity sha512-2fxRGrF8FyrwwHY0TCitdUljzutfW6CWEpdvPilfrs8p0PI5X8xOWg8ficeYtw+DldHtHIAL2phT59PqzHTyVA== + dependencies: + "@babel/runtime" "^7.0.0" + react-refresh "^0.4.0" -metro-source-map@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.67.0.tgz#e28db7253b9ca688e60d5710ebdccba60b45b2df" - integrity sha512-yxypInsRo3SfS00IgTuL6a2W2tfwLY//vA2E+GeqGBF5zTbJZAhwNGIEl8S87XXZhwzJcxf5/8LjJC1YDzabww== +metro-source-map@0.73.5: + version "0.73.5" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.73.5.tgz#67e14bd1fcc1074b9623640ca311cd99d07426fa" + integrity sha512-58p3zNWgUrqYYjFJb0KkZ+uJurTL4oz7i5T7577b3kvTYuJ0eK4y7rtYf8EwOfMYxRAn/m20aH1Y1fHTsLUwjQ== dependencies: "@babel/traverse" "^7.14.0" - "@babel/types" "^7.0.0" + "@babel/types" "^7.20.0" + invariant "^2.2.4" + metro-symbolicate "0.73.5" + nullthrows "^1.1.1" + ob1 "0.73.5" + source-map "^0.5.6" + vlq "^1.0.0" + +metro-source-map@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.73.7.tgz#8e9f850a72d60ea7ace05b984f981c8ec843e7a0" + integrity sha512-gbC/lfUN52TtQhEsTTA+987MaFUpQlufuCI05blLGLosDcFCsARikHsxa65Gtslm/rG2MqvFLiPA5hviONNv9g== + dependencies: + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" invariant "^2.2.4" - metro-symbolicate "0.67.0" + metro-symbolicate "0.73.7" nullthrows "^1.1.1" - ob1 "0.67.0" + ob1 "0.73.7" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.67.0.tgz#16729d05663d28176895244b3d932a898fca2b45" - integrity sha512-ZqVVcfa0xSz40eFzA5P8pCF3V6Tna9RU1prFzAJTa3j9dCGqwh0HTXC8AIkMtgX7hNdZrCJI1YipzUBlwkT0/A== +metro-symbolicate@0.73.5: + version "0.73.5" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.73.5.tgz#8de118be231decd55c8c70ed54deb308fdffceda" + integrity sha512-aIC8sDlaEdtn0dTt+64IFZFEATatFx3GtzRbJi0+jJx47RjDRiuCt9fzmTMLuadWwnbFK9ZfVMuWEXM9sdtQ7w== dependencies: invariant "^2.2.4" - metro-source-map "0.67.0" + metro-source-map "0.73.5" nullthrows "^1.1.1" source-map "^0.5.6" through2 "^2.0.1" vlq "^1.0.0" -metro-transform-plugins@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.67.0.tgz#6122aa4e5e5f9a767cebcc5af6fd1695666683ce" - integrity sha512-DQFoSDIJdTMPDTUlKaCNJjEXiHGwFNneAF9wDSJ3luO5gigM7t7MuSaPzF4hpjmfmcfPnRhP6AEn9jcza2Sh8Q== +metro-symbolicate@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.73.7.tgz#40e4cda81f8030b86afe391b5e686a0b06822b0a" + integrity sha512-571ThWmX5o8yGNzoXjlcdhmXqpByHU/bSZtWKhtgV2TyIAzYCYt4hawJAS5+/qDazUvjHdm8BbdqFUheM0EKNQ== dependencies: - "@babel/core" "^7.14.0" - "@babel/generator" "^7.14.0" + invariant "^2.2.4" + metro-source-map "0.73.7" + nullthrows "^1.1.1" + source-map "^0.5.6" + through2 "^2.0.1" + vlq "^1.0.0" + +metro-transform-plugins@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.73.7.tgz#49ff2571742d557f20301880f55b00054e468e52" + integrity sha512-M5isiWEau0jMudb5ezaNBZnYqXxcATMqnAYc+Cu25IahT1NHi5aWwLok9EBmBpN5641IZUZXScf+KnS7fPxPCQ== + dependencies: + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" "@babel/template" "^7.0.0" - "@babel/traverse" "^7.14.0" + "@babel/traverse" "^7.20.0" nullthrows "^1.1.1" -metro-transform-worker@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.67.0.tgz#5689553c25b0657aadefdf4ea2cd8dd06e18882a" - integrity sha512-29n+JdTb80ROiv/wDiBVlY/xRAF/nrjhp/Udv/XJl1DZb+x7JEiPxpbpthPhwwl+AYxVrostGB0W06WJ61hfiw== +metro-transform-worker@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.73.7.tgz#be111805e92ea48b7c76dd75830798f318e252e0" + integrity sha512-gZYIu9JAqEI9Rxi0xGMuMW6QsHGbMSptozlTOwOd7T7yXX3WwYS/I3yLPbLhbZTjOhwMHkTt8Nhm2qBo8nh14g== dependencies: - "@babel/core" "^7.14.0" - "@babel/generator" "^7.14.0" - "@babel/parser" "^7.14.0" - "@babel/types" "^7.0.0" + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/parser" "^7.20.0" + "@babel/types" "^7.20.0" babel-preset-fbjs "^3.4.0" - metro "0.67.0" - metro-babel-transformer "0.67.0" - metro-cache "0.67.0" - metro-cache-key "0.67.0" - metro-hermes-compiler "0.67.0" - metro-source-map "0.67.0" - metro-transform-plugins "0.67.0" + metro "0.73.7" + metro-babel-transformer "0.73.7" + metro-cache "0.73.7" + metro-cache-key "0.73.7" + metro-hermes-compiler "0.73.7" + metro-source-map "0.73.7" + metro-transform-plugins "0.73.7" nullthrows "^1.1.1" -metro@0.67.0, metro@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.67.0.tgz#8007a041d22de1cdb05184431c67eb7989eef6e0" - integrity sha512-DwuBGAFcAivoac/swz8Lp7Y5Bcge1tzT7T6K0nf1ubqJP8YzBUtyR4pkjEYVUzVu/NZf7O54kHSPVu1ibYzOBQ== +metro@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.73.7.tgz#435081339ac209e4d8802c57ac522638140c802b" + integrity sha512-pkRqFhuGUvkiu8HxKPUQelbCuyy6te6okMssTyLzQwsKilNLK4YMI2uD6PHnypg5SiMJ58lwfqkp/t5w72jEvw== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/core" "^7.14.0" - "@babel/generator" "^7.14.0" - "@babel/parser" "^7.14.0" + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/parser" "^7.20.0" "@babel/template" "^7.0.0" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.0.0" + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" absolute-path "^0.0.0" accepts "^1.3.7" - async "^2.4.0" + async "^3.2.2" chalk "^4.0.0" ci-info "^2.0.0" connect "^3.6.5" debug "^2.2.0" denodeify "^1.2.1" error-stack-parser "^2.0.6" - fs-extra "^1.0.0" - graceful-fs "^4.1.3" - hermes-parser "0.5.0" + graceful-fs "^4.2.4" + hermes-parser "0.8.0" image-size "^0.6.0" invariant "^2.2.4" - jest-haste-map "^27.3.1" - jest-worker "^26.0.0" + jest-worker "^27.2.0" lodash.throttle "^4.1.1" - metro-babel-transformer "0.67.0" - metro-cache "0.67.0" - metro-cache-key "0.67.0" - metro-config "0.67.0" - metro-core "0.67.0" - metro-hermes-compiler "0.67.0" - metro-inspector-proxy "0.67.0" - metro-minify-uglify "0.67.0" - metro-react-native-babel-preset "0.67.0" - metro-resolver "0.67.0" - metro-runtime "0.67.0" - metro-source-map "0.67.0" - metro-symbolicate "0.67.0" - metro-transform-plugins "0.67.0" - metro-transform-worker "0.67.0" + metro-babel-transformer "0.73.7" + metro-cache "0.73.7" + metro-cache-key "0.73.7" + metro-config "0.73.7" + metro-core "0.73.7" + metro-file-map "0.73.7" + metro-hermes-compiler "0.73.7" + metro-inspector-proxy "0.73.7" + metro-minify-terser "0.73.7" + metro-minify-uglify "0.73.7" + metro-react-native-babel-preset "0.73.7" + metro-resolver "0.73.7" + metro-runtime "0.73.7" + metro-source-map "0.73.7" + metro-symbolicate "0.73.7" + metro-transform-plugins "0.73.7" + metro-transform-worker "0.73.7" mime-types "^2.1.27" - mkdirp "^0.5.1" node-fetch "^2.2.0" nullthrows "^1.1.1" - rimraf "^2.5.4" + rimraf "^3.0.2" serialize-error "^2.1.0" source-map "^0.5.6" strip-ansi "^6.0.0" temp "0.8.3" throat "^5.0.0" ws "^7.5.1" - yargs "^15.3.1" + yargs "^17.5.1" -micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.10: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -9280,7 +9661,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.0, micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -9363,7 +9744,7 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -9493,7 +9874,7 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.2, ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -9539,6 +9920,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -9569,10 +9955,10 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nocache@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.1.0.tgz#120c9ffec43b5729b1d5de88cd71aa75a0ba491f" - integrity sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q== +nocache@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/nocache/-/nocache-3.0.4.tgz#5b37a56ec6e09fc7d401dceaed2eab40c8bfdf79" + integrity sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw== node-dir@^0.1.17: version "0.1.17" @@ -9631,27 +10017,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-machine-id@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" - integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== - -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== node-simctl@^5.0.2: version "5.3.0" @@ -9707,13 +10076,6 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -9832,7 +10194,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -9985,20 +10347,20 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -ob1@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.67.0.tgz#91f104c90641b1af8c364fc82a4b2c7d0801072d" - integrity sha512-YvZtX8HKYackQ5PwdFIuuNFVsMChRPHvnARRRT0Vk59xsBvL5t9U1Ock3M1sYrKj+Gp73+0q9xcHLAxI+xLi5g== +ob1@0.73.5: + version "0.73.5" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.73.5.tgz#b80dc4a6f787044e3d8afde3c2d034ae23d05a86" + integrity sha512-MxQH/rCq9/COvgTQbjCldArmesGEidZVVQIn4vDUJvJJ8uMphXOTCBsgWTief2ugvb0WUimIaslKSA+qryFjjQ== + +ob1@0.73.7: + version "0.73.7" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.73.7.tgz#14c9b6ddc26cf99144f59eb542d7ae956e6b3192" + integrity sha512-DfelfvR843KADhSUATGGhuepVMRcf5VQX+6MQLy5AW0BKDLlO7Usj6YZeAAZP7P86QwsoTxB0RXCFiA7t6S1IQ== object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" @@ -10128,7 +10490,7 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -10152,7 +10514,7 @@ openssl-wrapper@^0.3.4: resolved "https://registry.yarnpkg.com/openssl-wrapper/-/openssl-wrapper-0.3.4.tgz#c01ec98e4dcd2b5dfe0b693f31827200e3b81b07" integrity sha1-wB7Jjk3NK13+C2k/MYJyAOO4Gwc= -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.2: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -10254,11 +10616,6 @@ p-defer@^1.0.0: resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - p-filter@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" @@ -10300,6 +10657,13 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -10321,6 +10685,13 @@ p-locate@^4.0.0, p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -10464,6 +10835,16 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + parse-listing@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/parse-listing/-/parse-listing-1.1.3.tgz#aa546f57fdc129cfbf9945cd4b757b14b06182dd" @@ -10474,11 +10855,6 @@ parse-node-version@^1.0.0: resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -10578,7 +10954,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -10605,7 +10981,7 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.1, pirates@^4.0.5: +pirates@^4.0.4, pirates@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== @@ -10646,7 +11022,7 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -plist@^3.0.1, plist@^3.0.2, plist@^3.0.5: +plist@^3.0.1: version "3.0.5" resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987" integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA== @@ -10701,7 +11077,7 @@ prepend-http@^1.0.1: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -pretty-format@^26.0.0, pretty-format@^26.5.2, pretty-format@^26.6.2: +pretty-format@^26.5.2, pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== @@ -10711,6 +11087,24 @@ pretty-format@^26.0.0, pretty-format@^26.5.2, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" +pretty-format@^29.0.0, pretty-format@^29.4.1: + version "29.4.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.1.tgz#0da99b532559097b8254298da7c75a0785b1751c" + integrity sha512-dt/Z761JUVsrIKaY215o1xQJBGlSmTx/h4cSqXqjHLnU1+Kt+mavVE7UgqJJO5ukx5HjSswHfmXz4LjS2oIJfg== + dependencies: + "@jest/schemas" "^29.4.0" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +pretty-format@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.3.1.tgz#1841cac822b02b4da8971dacb03e8a871b4722da" + integrity sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg== + dependencies: + "@jest/schemas" "^29.0.0" + ansi-styles "^5.0.0" + react-is "^18.0.0" + process-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/process-exists/-/process-exists-4.0.0.tgz#dc12d87798c17b3f129f716631e2ccdaf240b4ab" @@ -10751,7 +11145,7 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" -promise@^8.0.3, promise@^8.2.0: +promise@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== @@ -10949,110 +11343,53 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-devtools-core@^4.23.0: - version "4.24.3" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.24.3.tgz#371fef3f5c639db0dc59eeef334dd5e10ac61661" - integrity sha512-+htKZxLxDN14jhRG3+IXRiJqNSGHUiPYrMtv9e7qlZxcbKeJjVs+C/hd8kZF5rydp3faBwFN6ZpTaZnLA3/ZGA== +react-devtools-core@^4.26.1: + version "4.27.1" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.27.1.tgz#167aa174383c65786cbb7e965a5b39c702f0a2d3" + integrity sha512-qXhcxxDWiFmFAOq48jts9YQYe1+wVoUXzJTlY4jbaATzyio6dd6CUGu3dXBhREeVgpZ+y4kg6vFJzIOZh6vY2w== dependencies: shell-quote "^1.6.1" ws "^7" -"react-is@^16.12.0 || ^17.0.0", react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-native-codegen@*, react-native-codegen@^0.0.18: - version "0.0.18" - resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.18.tgz#99d6623d65292e8ce3fdb1d133a358caaa2145e7" - integrity sha512-XPI9aVsFy3dvgDZvyGWrFnknNiyb22kg5nHgxa0vjWTH9ENLBgVRZt9A64xHZ8BYihH+gl0p/1JNOCIEUzRPBg== - dependencies: - "@babel/parser" "^7.14.0" - flow-parser "^0.121.0" - jscodeshift "^0.13.1" - nullthrows "^1.1.1" - -react-native-codegen@^0.0.13: - version "0.0.13" - resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.13.tgz#4cc94546fc75a5dbe9350d59c10108f2efe6bc17" - integrity sha512-rCh1P+s0Q4N6vNgS97ckafbhJRztz22+0l0VZoyQC06F07J98kI5cUByH0ATypPRIdpkMbAZc59DoPdDFc01bg== - dependencies: - "@babel/parser" "^7.14.0" - flow-parser "^0.121.0" - jscodeshift "^0.13.1" - nullthrows "^1.1.1" +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-native-codegen@^0.0.17: - version "0.0.17" - resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.17.tgz#83fb814d94061cbd46667f510d2ddba35ffb50ac" - integrity sha512-7GIEUmAemH9uWwB6iYXNNsPoPgH06pxzGRmdBzK98TgFBdYJZ7CBuZFPMe4jmHQTPOkQazKZ/w5O6/71JBixmw== +react-native-codegen@^0.71.3, react-native-codegen@^0.71.5: + version "0.71.5" + resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.71.5.tgz#454a42a891cd4ca5fc436440d301044dc1349c14" + integrity sha512-rfsuc0zkuUuMjFnrT55I1mDZ+pBRp2zAiRwxck3m6qeGJBGK5OV5JH66eDQ4aa+3m0of316CqrJDRzVlYufzIg== dependencies: "@babel/parser" "^7.14.0" - flow-parser "^0.121.0" + flow-parser "^0.185.0" jscodeshift "^0.13.1" nullthrows "^1.1.1" -react-native-gradle-plugin@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.5.tgz#1f20d437b140eda65b6e3bdf6eb102bbab1a5a10" - integrity sha512-kGupXo+pD2mB6Z+Oyowor3qlCroiS32FNGoiGQdwU19u8o+NNhEZKwoKfC5Qt03bMZSmFlcAlTyf79vrS2BZKQ== - dependencies: - react-native-codegen "*" +react-native-gradle-plugin@^0.71.12: + version "0.71.13" + resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.13.tgz#6f60ff24ac712554903dfc0ae98475cb280c57a6" + integrity sha512-C66LNZAXbU0YDRkWx8d/8kjesdu7fsUAc/3QPJNftSXKEvEtnFZK2aH/rIgu1s5dbTcE0fjhdVPNJMRIfKo61w== -react-native-gradle-plugin@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.6.tgz#b61a9234ad2f61430937911003cddd7e15c72b45" - integrity sha512-eIlgtsmDp1jLC24dRn43hB3kEcZVqx6DUQbR0N1ABXGnMEafm9I3V3dUUeD1vh+Dy5WqijSoEwLNUPLgu5zDMg== - -react-native-macos@0.68.62: - version "0.68.62" - resolved "https://registry.yarnpkg.com/react-native-macos/-/react-native-macos-0.68.62.tgz#76785f42c1f3d37147c52ecdd1daf04331bab808" - integrity sha512-0IZ0ob8z6TUsENdbgWhKXdgn+HEYVPPPx3QU5WKkdpCoKuHFv9y9F+bPi4uMG36u2khF1eod1hkajXG3tOexDQ== - dependencies: - "@jest/create-cache-key-function" "^27.0.1" - "@react-native-community/cli" "^7.0.3" - "@react-native-community/cli-platform-android" "^7.0.1" - "@react-native-community/cli-platform-ios" "^7.0.1" - "@react-native-community/cli-tools" "^7.0.1" - "@react-native/assets" "1.0.0" - "@react-native/normalize-color" "2.0.0" - "@react-native/polyfills" "2.0.0" - abort-controller "^3.0.0" - anser "^1.4.9" - base64-js "^1.1.2" - deprecated-react-native-prop-types "^2.3.0" - event-target-shim "^5.0.1" - hermes-engine "~0.11.0" - invariant "^2.2.4" - jsc-android "^250230.2.1" - metro-react-native-babel-transformer "0.67.0" - metro-runtime "0.67.0" - metro-source-map "0.67.0" - nullthrows "^1.1.1" - pretty-format "^26.5.2" - promise "^8.0.3" - react-devtools-core "^4.23.0" - react-native-codegen "^0.0.17" - react-native-gradle-plugin "^0.0.6" - react-refresh "^0.4.0" - react-shallow-renderer "16.14.1" - readable-stream "^4.0.0" - regenerator-runtime "^0.13.2" - scheduler "^0.20.2" - stacktrace-parser "^0.1.3" - use-subscription ">=1.0.0 <1.6.0" - whatwg-fetch "^3.0.0" - ws "^6.1.4" +react-native-gradle-plugin@^0.71.15: + version "0.71.15" + resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.15.tgz#9e6b506f30729fe8eb086981702f4e3c891d2b13" + integrity sha512-7S3pAuPaQJlhax6EZ4JMsDNpj05TfuzX9gPgWLrFfAIWIFLuJ6aDQYAZy2TEI9QJALPoWrj8LWaqP/DGYh14pw== -react-native-test-app@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/react-native-test-app/-/react-native-test-app-2.3.2.tgz#4f9b003077f02837817ec86844e9175f0fec2d6a" - integrity sha512-xe9Fb4oHBSbEvzbGmmVxHoSNIXT26gfH1CvGyAiiWq9V485s9duQj72dwZKMQtnZGw3jjahafFhv2D49pzadOg== +react-native-test-app@2.3.12: + version "2.3.12" + resolved "https://registry.yarnpkg.com/react-native-test-app/-/react-native-test-app-2.3.12.tgz#d3a7fd55fdd15a89b7bda1093a5fcbd6a5cb41ef" + integrity sha512-+kVRB5CgB9LSOeCpYD47m18wG2GZSffQ6pafb0/hiVw3DAV2xKcOUJbhkyxggC7RJb3WHgP2uNvEnFgz7/cngw== dependencies: ajv "^8.0.0" chalk "^4.1.0" @@ -11062,106 +11399,108 @@ react-native-test-app@2.3.2: uuid "^8.3.2" yargs "^16.0.0" -react-native-windows@0.68.4: - version "0.68.4" - resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.68.4.tgz#8619b002c05d33e52c3aa0b871ad55789016d8d5" - integrity sha512-i4PMiFbbuKmCcYaMQs0YKpsxl9mn2m8Ij4BnOYtJji4eS108O3/bB/qLd3povWq5qu96D2anpw/KleVozvMBjw== +react-native-windows@0.71.0: + version "0.71.0" + resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.71.0.tgz#d5514f2a85020985851c06f8fa482580c6a80a28" + integrity sha512-k56CKEJpIFA50LAT2JZJxz4EkTx1hkZLcQL/g3aMTAu9hwnKptQVaAMs8okhP1fgMoUbbZ1lQB+deYyHyJAr7Q== dependencies: "@babel/runtime" "^7.0.0" - "@jest/create-cache-key-function" "^27.0.1" - "@react-native-community/cli" "^7.0.3" - "@react-native-community/cli-platform-android" "^7.0.1" - "@react-native-community/cli-platform-ios" "^7.0.1" - "@react-native-windows/cli" "0.68.2" - "@react-native-windows/virtualized-list" "0.68.0" + "@jest/create-cache-key-function" "^29.2.1" + "@react-native-community/cli" "10.0.0" + "@react-native-community/cli-platform-android" "10.0.0" + "@react-native-community/cli-platform-ios" "10.0.0" + "@react-native-windows/cli" "0.71.0" "@react-native/assets" "1.0.0" - "@react-native/normalize-color" "2.0.0" + "@react-native/normalize-color" "2.1.0" "@react-native/polyfills" "2.0.0" abort-controller "^3.0.0" anser "^1.4.9" base64-js "^1.1.2" - deprecated-react-native-prop-types "^2.3.0" + deprecated-react-native-prop-types "^3.0.1" event-target-shim "^5.0.1" - hermes-engine "~0.11.0" invariant "^2.2.4" + jest-environment-node "^29.2.1" jsc-android "^250230.2.1" - metro-react-native-babel-transformer "0.67.0" - metro-runtime "0.67.0" - metro-source-map "0.67.0" + memoize-one "^5.0.0" + metro-react-native-babel-transformer "0.73.5" + metro-runtime "0.73.5" + metro-source-map "0.73.5" + mkdirp "^0.5.1" nullthrows "^1.1.1" pretty-format "^26.5.2" - promise "^8.0.3" - react-devtools-core "^4.23.0" - react-native-codegen "^0.0.13" - react-native-gradle-plugin "^0.0.5" + promise "^8.3.0" + react-devtools-core "^4.26.1" + react-native-codegen "^0.71.3" + react-native-gradle-plugin "^0.71.12" react-refresh "^0.4.0" - react-shallow-renderer "16.14.1" + react-shallow-renderer "^16.15.0" regenerator-runtime "^0.13.2" - scheduler "^0.20.2" + scheduler "^0.23.0" source-map-support "^0.5.19" stacktrace-parser "^0.1.3" - use-subscription "^1.0.0" + use-sync-external-store "^1.0.0" whatwg-fetch "^3.0.0" - ws "^6.1.4" + ws "^6.2.2" -react-native@0.68.5: - version "0.68.5" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.68.5.tgz#8ba7389e00b757c59b6ea23bf38303d52367d155" - integrity sha512-t3kiQ/gumFV+0r/NRSIGtYxanjY4da0utFqHgkMcRPJVwXFWC0Fr8YiOeRGYO1dp8EfrSsOjtfWic/inqVYlbQ== +react-native@0.71.3: + version "0.71.3" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.71.3.tgz#0faab799c49e61ba12df9e6525c3ac7d595d673c" + integrity sha512-RYJXCcQGa4NTfKiPgl92eRDUuQ6JGDnHqFEzRwJSqEx9lWvlvRRIebstJfurzPDKLQWQrvITR7aI7e09E25mLw== dependencies: - "@jest/create-cache-key-function" "^27.0.1" - "@react-native-community/cli" "^7.0.3" - "@react-native-community/cli-platform-android" "^7.0.1" - "@react-native-community/cli-platform-ios" "^7.0.1" + "@jest/create-cache-key-function" "^29.2.1" + "@react-native-community/cli" "10.1.3" + "@react-native-community/cli-platform-android" "10.1.3" + "@react-native-community/cli-platform-ios" "10.1.1" "@react-native/assets" "1.0.0" - "@react-native/normalize-color" "2.0.0" + "@react-native/normalize-color" "2.1.0" "@react-native/polyfills" "2.0.0" abort-controller "^3.0.0" anser "^1.4.9" base64-js "^1.1.2" - deprecated-react-native-prop-types "^2.3.0" + deprecated-react-native-prop-types "^3.0.1" event-target-shim "^5.0.1" - hermes-engine "~0.11.0" invariant "^2.2.4" - jsc-android "^250230.2.1" - metro-react-native-babel-transformer "0.67.0" - metro-runtime "0.67.0" - metro-source-map "0.67.0" + jest-environment-node "^29.2.1" + jsc-android "^250231.0.0" + memoize-one "^5.0.0" + metro-react-native-babel-transformer "0.73.7" + metro-runtime "0.73.7" + metro-source-map "0.73.7" + mkdirp "^0.5.1" nullthrows "^1.1.1" pretty-format "^26.5.2" - promise "^8.2.0" - react-devtools-core "^4.23.0" - react-native-codegen "^0.0.18" - react-native-gradle-plugin "^0.0.6" + promise "^8.3.0" + react-devtools-core "^4.26.1" + react-native-codegen "^0.71.5" + react-native-gradle-plugin "^0.71.15" react-refresh "^0.4.0" - react-shallow-renderer "16.14.1" + react-shallow-renderer "^16.15.0" regenerator-runtime "^0.13.2" - scheduler "^0.20.2" + scheduler "^0.23.0" stacktrace-parser "^0.1.3" - use-subscription ">=1.0.0 <1.6.0" + use-sync-external-store "^1.0.0" whatwg-fetch "^3.0.0" - ws "^6.1.4" + ws "^6.2.2" react-refresh@^0.4.0: version "0.4.3" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA== -react-shallow-renderer@16.14.1: - version "16.14.1" - resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz#bf0d02df8a519a558fd9b8215442efa5c840e124" - integrity sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg== +react-shallow-renderer@^16.15.0: + version "16.15.0" + resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" + integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== dependencies: object-assign "^4.1.1" - react-is "^16.12.0 || ^17.0.0" + react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react@17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: version "1.0.5" @@ -11287,16 +11626,6 @@ readable-stream@^1.0.31, readable-stream@~1.1.10: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.3.0.tgz#0914d0c72db03b316c9733bb3461d64a3cc50cba" - integrity sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - readdir-glob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.0.0.tgz#a495436934bbe57be6a68039d16e8946621eb8c5" @@ -11351,17 +11680,17 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== dependencies: - regenerate "^1.4.0" + regenerate "^1.4.2" -regenerate@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" - integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.11.0: version "0.11.1" @@ -11373,13 +11702,6 @@ regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3, regenerator-runtime@^0 resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -11393,17 +11715,22 @@ regexpp@^2.0.1: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== -regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" + integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" registry-auth-token@^3.0.1: version "3.4.0" @@ -11427,23 +11754,18 @@ registry-url@^3.0.3: dependencies: rc "^1.0.1" -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== dependencies: jsesc "~0.5.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" @@ -11549,7 +11871,12 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.13.1, resolve@^1.18.1, resolve@^1.8.1: +resolve.exports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.0.tgz#c1a0028c2d166ec2fbf7d0644584927e76e7400e" + integrity sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg== + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.13.1, resolve@^1.8.1: version "1.22.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== @@ -11558,6 +11885,15 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.13 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.20.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + responselike@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" @@ -11664,11 +12000,6 @@ rpc-websockets@^5.1.1: uuid "^3.4.0" ws "^5.2.2" -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - run-async@^2.2.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" @@ -11725,21 +12056,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - sanitize-filename@^1.6.1: version "1.6.3" resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" @@ -11747,25 +12063,17 @@ sanitize-filename@^1.6.1: dependencies: truncate-utf8-bytes "^1.0.0" -sax@>=0.6.0, sax@^1.2.1: +sax@>=0.6.0: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" selenium-appium@1.0.2: version "1.0.2" @@ -11845,10 +12153,10 @@ semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0, semver@^7.3.2, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== +semver@^7.0.0, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" @@ -11987,16 +12295,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - shell-quote@^1.4.3, shell-quote@^1.6.1, shell-quote@^1.7.2, shell-quote@^1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" @@ -12011,11 +12309,6 @@ shelljs@0.8.x, shelljs@^0.8.4: interpret "^1.0.0" rechoir "^0.6.2" -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - shimmer@^1.1.0, shimmer@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" @@ -12026,6 +12319,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + signale@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" @@ -12035,15 +12333,6 @@ signale@^1.2.1: figures "^2.0.0" pkg-conf "^2.1.0" -simple-plist@^1.1.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017" - integrity sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw== - dependencies: - bplist-creator "0.1.0" - bplist-parser "0.3.1" - plist "^3.0.5" - simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -12155,7 +12444,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -"source-map-support@0.3.2 - 1.0.0", source-map-support@0.x, source-map-support@^0.5.12, source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@^0.5.3, source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@^0.5.8, source-map-support@^0.5.9: +"source-map-support@0.3.2 - 1.0.0", source-map-support@0.x, source-map-support@^0.5.12, source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@^0.5.3, source-map-support@^0.5.5, source-map-support@^0.5.8, source-map-support@^0.5.9, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -12163,12 +12452,20 @@ source-map-resolve@^0.5.0: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -12284,10 +12581,10 @@ stack-trace@0.0.x: resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= -stack-utils@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" @@ -12402,14 +12699,14 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" string.prototype.trimend@^1.0.1: version "1.0.1" @@ -12472,12 +12769,12 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^5.0.0" + ansi-regex "^5.0.1" strip-bom@^3.0.0: version "3.0.0" @@ -12506,7 +12803,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.0.1: +strip-json-comments@^3.0.1, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -12533,7 +12830,7 @@ supports-color@^5.0.0, supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -12555,24 +12852,11 @@ supports-hyperlinks@^1.0.1: has-flag "^2.0.0" supports-color "^5.0.0" -supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -12672,13 +12956,15 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== +terser@^5.15.0: + version "5.16.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" + integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" test-exclude@^6.0.0: version "6.0.0" @@ -12769,6 +13055,11 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -12833,13 +13124,6 @@ tough-cookie@^4.0.0: punycode "^2.1.1" universalify "^0.1.2" -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -12882,10 +13166,10 @@ tslib@^2.0.1, tslib@^2.2.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tsutils@^3.14.0: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== +tsutils@^3.14.0, tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" @@ -12966,13 +13250,6 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -13019,28 +13296,28 @@ unbzip2-stream@^1.3.3: buffer "^5.2.1" through "^2.3.8" -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== union-value@^1.0.0: version "1.0.1" @@ -13113,6 +13390,14 @@ unzip-response@^2.0.1: resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= +update-browserslist-db@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" @@ -13153,12 +13438,10 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" -"use-subscription@>=1.0.0 <1.6.0", use-subscription@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" - integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA== - dependencies: - object-assign "^4.1.1" +use-sync-external-store@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== use@^3.1.0: version "3.1.1" @@ -13224,11 +13507,6 @@ uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" - integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== - uuid@^8.0.0, uuid@^8.3.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -13239,14 +13517,14 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" - source-map "^0.7.3" validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" @@ -13287,27 +13565,20 @@ vlq@^1.0.0: resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7, walker@~1.0.5: +walker@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= dependencies: makeerror "1.0.x" +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -13393,33 +13664,11 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - whatwg-fetch@^3.0.0: version "3.4.0" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.4.0.tgz#e11de14f4878f773fbebcde8871b2c0699af8b30" integrity sha512-rsum2ulz2iuZH08mJkT0Yi6JnKhwdw4oeyMjokgxd+mmqYSd9cPpOQf01TIWgjxG/U4+QR+AwKq6lSbXVxkyoQ== -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -13428,15 +13677,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -13571,15 +13811,13 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== +write-file-atomic@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.0.tgz#54303f117e109bf3d540261125c8ea5a7320fab0" + integrity sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" + signal-exit "^3.0.7" write@1.0.3: version "1.0.3" @@ -13595,26 +13833,18 @@ ws@^5.2.2: dependencies: async-limiter "~1.0.0" -ws@^6.1.4: +ws@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== dependencies: async-limiter "~1.0.0" -ws@^7, ws@^7.0.0, ws@^7.2.3, ws@^7.4.6, ws@^7.5.1: +ws@^7, ws@^7.0.0, ws@^7.2.3, ws@^7.5.1: version "7.5.7" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== -xcode@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" - integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA== - dependencies: - simple-plist "^1.1.0" - uuid "^7.0.3" - xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" @@ -13637,11 +13867,6 @@ xml-formatter@^2.4.0: dependencies: xml-parser-xo "^3.2.0" -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - xml-parse-from-string@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" @@ -13677,18 +13902,6 @@ xmlbuilder@~11.0.0: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xmldoc@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-1.1.2.tgz#6666e029fe25470d599cd30e23ff0d1ed50466d7" - integrity sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ== - dependencies: - sax "^1.2.1" - xmldom@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.3.0.tgz#e625457f4300b5df9c2e1ecb776147ece47f3e5a" @@ -13768,6 +13981,11 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" @@ -13810,7 +14028,7 @@ yargs@^14.0.0, yargs@^14.2.3: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.0.1, yargs@^15.1.0, yargs@^15.3.0, yargs@^15.3.1, yargs@^15.4.1: +yargs@^15.0.1, yargs@^15.1.0, yargs@^15.3.0: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -13827,7 +14045,7 @@ yargs@^15.0.1, yargs@^15.1.0, yargs@^15.3.0, yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.0.0: +yargs@^16.0.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -13840,6 +14058,19 @@ yargs@^16.0.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.3.1, yargs@^17.5.1: + version "17.6.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" + integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" @@ -13867,6 +14098,11 @@ yauzl@^2.10.0, yauzl@^2.7.0: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + zip-stream@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.1.3.tgz#26cc4bdb93641a8590dd07112e1f77af1758865b" From b22d25f5a986f7c0ea705f1a363cf227efaeea33 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 1 Apr 2023 11:54:30 +0000 Subject: [PATCH 069/104] chore(release): 12.0.0 [skip ci] # [12.0.0](https://github.com/react-native-webview/react-native-webview/compare/v11.26.1...v12.0.0) (2023-04-01) ### Features * Fabric support ([#2686](https://github.com/react-native-webview/react-native-webview/issues/2686)) ([5558e28](https://github.com/react-native-webview/react-native-webview/commit/5558e28feab2e8bd881450f155e642cf1e66caad)) ### BREAKING CHANGES * - If you are using custom native implementation are still possible on the old arch but many classes were moved / renamed so they will need some changes - removed the following props: androidHardwareAccelerationDisabled (deprecated), urlPrefixesForDefaultIntent (unused) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b9148f90d4..1165e49db3 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "11.26.1", + "version": "12.0.0", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From a2eec1700271f43af1ba43bd95ad60be11d55877 Mon Sep 17 00:00:00 2001 From: Thibault Malbranche Date: Wed, 5 Apr 2023 01:31:33 +0200 Subject: [PATCH 070/104] fix(iOS): Foundation Import (#2917) Fixed a build issue that could be happening on iOS see #2915 --- apple/RNCWebViewDecisionManager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apple/RNCWebViewDecisionManager.h b/apple/RNCWebViewDecisionManager.h index 29735a3243..da01fba0b8 100644 --- a/apple/RNCWebViewDecisionManager.h +++ b/apple/RNCWebViewDecisionManager.h @@ -1,4 +1,4 @@ -#import +#import #import #import From 64a346946b45ed540512d9ce237ee68ebd6dab8c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 4 Apr 2023 23:33:16 +0000 Subject: [PATCH 071/104] chore(release): 12.0.1 [skip ci] ## [12.0.1](https://github.com/react-native-webview/react-native-webview/compare/v12.0.0...v12.0.1) (2023-04-04) ### Bug Fixes * **iOS:** Foundation Import ([#2917](https://github.com/react-native-webview/react-native-webview/issues/2917)) ([a2eec17](https://github.com/react-native-webview/react-native-webview/commit/a2eec1700271f43af1ba43bd95ad60be11d55877)), closes [#2915](https://github.com/react-native-webview/react-native-webview/issues/2915) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1165e49db3..2d182097e3 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "12.0.0", + "version": "12.0.1", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 4d0c0dea008c53dc8f4cd8760e90c008b098234d Mon Sep 17 00:00:00 2001 From: Piotr Kochanowski <63232710+TheKohan@users.noreply.github.com> Date: Thu, 6 Apr 2023 20:54:47 +0200 Subject: [PATCH 072/104] fix(ios): fix userAgent ios type comment (#2888) --- src/WebViewTypes.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/WebViewTypes.ts b/src/WebViewTypes.ts index b30b7c0fbd..1a9b5d9db3 100644 --- a/src/WebViewTypes.ts +++ b/src/WebViewTypes.ts @@ -488,6 +488,7 @@ export interface IOSWebViewProps extends WebViewSharedProps { /** * The custom user agent string. + * @platform ios */ userAgent?: string; From 681aac4fe7e35834264daa01b67a9893c4a9ebe7 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 6 Apr 2023 18:56:36 +0000 Subject: [PATCH 073/104] chore(release): 12.0.2 [skip ci] ## [12.0.2](https://github.com/react-native-webview/react-native-webview/compare/v12.0.1...v12.0.2) (2023-04-06) ### Bug Fixes * **ios:** fix userAgent ios type comment ([#2888](https://github.com/react-native-webview/react-native-webview/issues/2888)) ([4d0c0de](https://github.com/react-native-webview/react-native-webview/commit/4d0c0dea008c53dc8f4cd8760e90c008b098234d)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2d182097e3..6d488b0bfe 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "12.0.1", + "version": "12.0.2", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 81e3aa4ecd531220d1ec1da0711195dc6ebdc781 Mon Sep 17 00:00:00 2001 From: Valentina M Date: Sun, 21 May 2023 19:29:00 -0700 Subject: [PATCH 074/104] fix(Android): Don't crash while downloading file with % in filename (#2861) --- .../reactnativecommunity/webview/RNCWebViewManagerImpl.kt | 8 +++++++- .../webview/RNCWebViewModuleImpl.java | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt index 25f9c5490e..ddbb5d60db 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt @@ -29,6 +29,8 @@ import java.net.MalformedURLException import java.net.URL import java.util.* +val invalidCharRegex = "[\\\\/%\"]".toRegex() + class RNCWebViewManagerImpl { companion object { @@ -97,7 +99,11 @@ class RNCWebViewManagerImpl { Log.w(TAG, "Unsupported URI, aborting download", e) return@DownloadListener } - val fileName = URLUtil.guessFileName(url, contentDisposition, mimetype) + var fileName = URLUtil.guessFileName(url, contentDisposition, mimetype) + + // Sanitize filename by replacing invalid characters with "_" + fileName = fileName.replace(invalidCharRegex, "_") + val downloadMessage = "Downloading $fileName" //Attempt to add cookie, if it exists diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModuleImpl.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModuleImpl.java index 95b99c22b4..a9dd8b8080 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModuleImpl.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModuleImpl.java @@ -36,6 +36,7 @@ import java.io.File; import java.io.IOException; +import java.lang.SecurityException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -305,7 +306,7 @@ public void downloadFile(String downloadingMessage) { try { dm.enqueue(mDownloadRequest); - } catch (IllegalArgumentException e) { + } catch (IllegalArgumentException | SecurityException e) { Log.w("RNCWebViewModule", "Unsupported URI, aborting download", e); return; } From d8442dc0dc7a984587b609bf2ef6e338334612d4 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 22 May 2023 02:31:47 +0000 Subject: [PATCH 075/104] chore(release): 12.0.3 [skip ci] ## [12.0.3](https://github.com/react-native-webview/react-native-webview/compare/v12.0.2...v12.0.3) (2023-05-22) ### Bug Fixes * **Android:** Don't crash while downloading file with % in filename ([#2861](https://github.com/react-native-webview/react-native-webview/issues/2861)) ([81e3aa4](https://github.com/react-native-webview/react-native-webview/commit/81e3aa4ecd531220d1ec1da0711195dc6ebdc781)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6d488b0bfe..284d6b8e7a 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "12.0.2", + "version": "12.0.3", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 379fa9f6fd904e197d0fca52138d1f7892df7ddc Mon Sep 17 00:00:00 2001 From: Tatiana Kapos Date: Mon, 22 May 2023 11:57:58 -0700 Subject: [PATCH 076/104] bump min version (#2955) --- windows/ReactNativeWebView/ReactNativeWebView.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/windows/ReactNativeWebView/ReactNativeWebView.vcxproj b/windows/ReactNativeWebView/ReactNativeWebView.vcxproj index 9ecc62f5ef..9bd27c194d 100644 --- a/windows/ReactNativeWebView/ReactNativeWebView.vcxproj +++ b/windows/ReactNativeWebView/ReactNativeWebView.vcxproj @@ -15,7 +15,7 @@ Windows Store 10.0 10.0 - 10.0.15063.0 + 10.0.17763.0
From ed00b17ada6adb91e37566d3fbccb08a422094c5 Mon Sep 17 00:00:00 2001 From: flow Date: Tue, 23 May 2023 06:26:25 +0900 Subject: [PATCH 077/104] chore: fix typo (#2868) --- src/WebView.android.tsx | 4 ++-- src/WebView.ios.tsx | 4 ++-- src/WebView.macos.tsx | 4 ++-- src/WebView.windows.tsx | 4 ++-- src/WebViewShared.tsx | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/WebView.android.tsx b/src/WebView.android.tsx index e1875625b3..6100702900 100644 --- a/src/WebView.android.tsx +++ b/src/WebView.android.tsx @@ -17,7 +17,7 @@ import { defaultOriginWhitelist, defaultRenderError, defaultRenderLoading, - useWebWiewLogic, + useWebViewLogic, } from './WebViewShared'; import { AndroidWebViewProps, WebViewSourceUri, @@ -79,7 +79,7 @@ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({ } }, []); - const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onRenderProcessGone } = useWebWiewLogic({ + const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onRenderProcessGone } = useWebViewLogic({ onNavigationStateChange, onLoad, onError, diff --git a/src/WebView.ios.tsx b/src/WebView.ios.tsx index 3ffda25de4..93aa01b3d3 100644 --- a/src/WebView.ios.tsx +++ b/src/WebView.ios.tsx @@ -14,7 +14,7 @@ import { defaultOriginWhitelist, defaultRenderError, defaultRenderLoading, - useWebWiewLogic, + useWebViewLogic, } from './WebViewShared'; import { IOSWebViewProps, @@ -93,7 +93,7 @@ const WebViewComponent = forwardRef<{}, IOSWebViewProps>(({ RNCWebViewModule.shouldStartLoadWithLockIdentifier(shouldStart, lockIdentifier); }, []); - const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onContentProcessDidTerminate } = useWebWiewLogic({ + const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onContentProcessDidTerminate } = useWebViewLogic({ onNavigationStateChange, onLoad, onError, diff --git a/src/WebView.macos.tsx b/src/WebView.macos.tsx index d9b91bd1a0..5e108ef2b3 100644 --- a/src/WebView.macos.tsx +++ b/src/WebView.macos.tsx @@ -13,7 +13,7 @@ import { defaultOriginWhitelist, defaultRenderError, defaultRenderLoading, - useWebWiewLogic, + useWebViewLogic, } from './WebViewShared'; import { MacOSWebViewProps, @@ -75,7 +75,7 @@ const WebViewComponent = forwardRef<{}, MacOSWebViewProps>(({ RNCWebViewModule.shouldStartLoadWithLockIdentifier(!!shouldStart, lockIdentifier); }, []); - const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onContentProcessDidTerminate } = useWebWiewLogic({ + const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onContentProcessDidTerminate } = useWebViewLogic({ onNavigationStateChange, onLoad, onError, diff --git a/src/WebView.windows.tsx b/src/WebView.windows.tsx index 79121a97bc..798f4cb967 100644 --- a/src/WebView.windows.tsx +++ b/src/WebView.windows.tsx @@ -20,7 +20,7 @@ import { import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands'; import invariant from 'invariant'; import {RCTWebView, RCTWebView2} from "./WebViewNativeComponent.windows"; -import { useWebWiewLogic, defaultOriginWhitelist, defaultRenderError, defaultRenderLoading, } from './WebViewShared'; +import { useWebViewLogic, defaultOriginWhitelist, defaultRenderError, defaultRenderLoading, } from './WebViewShared'; import { NativeWebViewWindows, WindowsWebViewProps, @@ -71,7 +71,7 @@ const WebViewComponent = forwardRef<{}, WindowsWebViewProps>(({ } }, [RCTWebViewString]); - const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress } = useWebWiewLogic({ + const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress } = useWebViewLogic({ onNavigationStateChange, onLoad, onError, diff --git a/src/WebViewShared.tsx b/src/WebViewShared.tsx index f10476ecde..7e4bc18e48 100644 --- a/src/WebViewShared.tsx +++ b/src/WebViewShared.tsx @@ -96,7 +96,7 @@ export { defaultRenderError, }; -export const useWebWiewLogic = ({ +export const useWebViewLogic = ({ startInLoadingState, onNavigationStateChange, onLoadStart, From 39ce0077f06f1b7dbf91be1302792909ae945029 Mon Sep 17 00:00:00 2001 From: Peter Lazar Date: Tue, 23 May 2023 15:40:44 +0200 Subject: [PATCH 078/104] feat: make pushState changes trackable on android (#2929) Authored-by: Peter Lazar --- .../webview/RNCWebViewClient.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewClient.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewClient.java index 1a1da851e2..898087ecd9 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewClient.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewClient.java @@ -65,17 +65,23 @@ public void onPageFinished(WebView webView, String url) { } @Override - public void onPageStarted(WebView webView, String url, Bitmap favicon) { - super.onPageStarted(webView, url, favicon); - mLastLoadFailed = false; + public void doUpdateVisitedHistory (WebView webView, String url, boolean isReload) { + super.doUpdateVisitedHistory(webView, url, isReload); + + ((RNCWebView) webView).dispatchEvent( + webView, + new TopLoadingStartEvent( + webView.getId(), + createWebViewEvent(webView, url))); + } - RNCWebView reactWebView = (RNCWebView) webView; - reactWebView.callInjectedJavaScriptBeforeContentLoaded(); - int reactTag = webView.getId(); + @Override + public void onPageStarted(WebView webView, String url, Bitmap favicon) { + super.onPageStarted(webView, url, favicon); + mLastLoadFailed = false; - UIManagerHelper.getEventDispatcherForReactTag((ReactContext) webView.getContext(), reactTag).dispatchEvent(new TopLoadingStartEvent( - webView.getId(), - createWebViewEvent(webView, url))); + RNCWebView reactWebView = (RNCWebView) webView; + reactWebView.callInjectedJavaScriptBeforeContentLoaded(); } @Override From 39285730273d81ec9ea49662246c1cce078588d6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 23 May 2023 13:42:34 +0000 Subject: [PATCH 079/104] chore(release): 12.1.0 [skip ci] # [12.1.0](https://github.com/react-native-webview/react-native-webview/compare/v12.0.3...v12.1.0) (2023-05-23) ### Features * make pushState changes trackable on android ([#2929](https://github.com/react-native-webview/react-native-webview/issues/2929)) ([39ce007](https://github.com/react-native-webview/react-native-webview/commit/39ce0077f06f1b7dbf91be1302792909ae945029)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 284d6b8e7a..f466edff58 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "12.0.3", + "version": "12.1.0", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From 75e7801a6255b37f6887d29d10b9ba688e051416 Mon Sep 17 00:00:00 2001 From: Anandraj Date: Thu, 1 Jun 2023 13:40:39 -0700 Subject: [PATCH 080/104] Missing android.support.FILE_PROVIDER_PATHS meta-data on some OEMs (#2952) We (Microsoft Office apps) are seeing the following crashes in certain OEMs (biased toward Samsung) Exception java.lang.RuntimeException: Unable to get provider com.reactnativecommunity.webview.RNCWebViewFileProvider: java.lang.IllegalArgumentException: Missing android.support.FILE_PROVIDER_PATHS meta-data at android.app.ActivityThread.installProvider (ActivityThread.java:6840) at android.app.ActivityThread.installContentProviders (ActivityThread.java:6382) at android.app.ActivityThread.handleBindApplication (ActivityThread.java:6286) ... Caused by java.lang.IllegalArgumentException: Missing android.support.FILE_PROVIDER_PATHS meta-data at androidx.core.content.FileProvider.d at androidx.core.content.FileProvider.h at androidx.core.content.FileProvider.e at androidx.core.content.FileProvider.attachInfoMAM .. Upon further investigation, we found the hypothesis that some OEMs strip meta-data from the manifest (though we don't have any solid data to confirm). This discussion is related : https://issuetracker.google.com/issues/237727754?pli=1 And this commit into AOSP : https://android-review.googlesource.com/c/platform/frameworks/support/+/1978527 --- .../webview/RNCWebViewFileProvider.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewFileProvider.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewFileProvider.java index 919b3ad508..4e7a2883bb 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewFileProvider.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewFileProvider.java @@ -1,6 +1,7 @@ package com.reactnativecommunity.webview; import androidx.core.content.FileProvider; +import com.reactnativecommunity.webview.R; /** * Providing a custom {@code FileProvider} prevents manifest {@code } name collisions. @@ -8,7 +9,7 @@ * See https://developer.android.com/guide/topics/manifest/provider-element.html for details. */ public class RNCWebViewFileProvider extends FileProvider { - - // This class intentionally left blank. - + public RNCWebViewFileProvider() { + super(R.xml.file_provider_paths); + } } \ No newline at end of file From 1851ead46582aece53884ab12694234e50457b10 Mon Sep 17 00:00:00 2001 From: vahagnni Date: Thu, 1 Jun 2023 21:57:30 +0100 Subject: [PATCH 081/104] feat(windows): Support headers and cookies in source prop (#2897) * [windows] Support headers and cookies in source prop * minor fixes --- windows/ReactNativeWebView/ReactWebView.idl | 1 + windows/ReactNativeWebView/ReactWebView2.cpp | 161 +++++++++++++++--- windows/ReactNativeWebView/ReactWebView2.h | 3 + .../ReactWebView2Manager.cpp | 34 +++- windows/ReactNativeWebView/pch.h | 1 + 5 files changed, 176 insertions(+), 24 deletions(-) diff --git a/windows/ReactNativeWebView/ReactWebView.idl b/windows/ReactNativeWebView/ReactWebView.idl index 54b0e626d7..51e95f914e 100644 --- a/windows/ReactNativeWebView/ReactWebView.idl +++ b/windows/ReactNativeWebView/ReactWebView.idl @@ -15,6 +15,7 @@ namespace ReactNativeWebView{ runtimeclass ReactWebView2 : Windows.UI.Xaml.Controls.ContentPresenter{ ReactWebView2(Microsoft.ReactNative.IReactContext context); void NavigateToHtml(String html); + void NavigateWithHeaders(String uri, Windows.Foundation.Collections.IMapView headers); Boolean MessagingEnabled; }; #endif diff --git a/windows/ReactNativeWebView/ReactWebView2.cpp b/windows/ReactNativeWebView/ReactWebView2.cpp index 4da23fb6d1..759aa04302 100644 --- a/windows/ReactNativeWebView/ReactWebView2.cpp +++ b/windows/ReactNativeWebView/ReactWebView2.cpp @@ -9,6 +9,11 @@ #include "ReactWebView2.g.cpp" #include #include +#include +#include +#include +#include + namespace winrt { using namespace Microsoft::ReactNative; @@ -22,9 +27,68 @@ namespace winrt { using namespace Windows::UI::Popups; using namespace Windows::UI::Xaml::Input; using namespace Windows::UI::Xaml::Media; + using namespace Windows::Storage::Streams; } // namespace winrt namespace winrt::ReactNativeWebView::implementation { + namespace helpers { + std::string trimString(const std::string& str) { + std::string trimmedString = str; + + // Trim from start + trimmedString.erase(0, trimmedString.find_first_not_of(" \t\n\r\f\v")); + + // Trim from end + trimmedString.erase(trimmedString.find_last_not_of(" \t\n\r\f\v") + 1); + + return trimmedString; + } + std::vector splitString( + const std::string& str, + const std::string& delim) { + std::vector tokens; + auto startPos = 0; + auto endPos = str.find(delim); + + while (endPos != std::string::npos) { + auto token = str.substr(startPos, endPos - startPos); + tokens.push_back(trimString(token)); + + startPos = endPos + delim.length(); + endPos = str.find(delim, startPos); + } + + auto lastToken = str.substr(startPos); + tokens.push_back(trimString(lastToken)); + + return tokens; + } + + std::map parseSetCookieHeader( + const std::string& setCookieHeader) { + std::map cookie; + + // Split the header into individual cookie strings + auto cookieStrings = splitString(setCookieHeader, ";"); + + // Extract the cookie name and value from the first string + auto nameValuePair = splitString(cookieStrings[0], "="); + cookie["Name"] = trimString(nameValuePair[0]); + cookie["Value"] = trimString(nameValuePair[1]); + + // Extract the attributes from the remaining strings + for (std::size_t i = 1; i < cookieStrings.size(); ++i) { + auto attributeValuePair = splitString(cookieStrings[i], "="); + auto attributeName = attributeValuePair[0]; + auto attributeValue = + attributeValuePair.size() > 1 ? attributeValuePair[1] : ""; + cookie[attributeName] = trimString(attributeValue); + } + + return cookie; + } + } // namespace HP + ReactWebView2::ReactWebView2(winrt::IReactContext const& reactContext) : m_reactContext(reactContext) { m_webView = winrt::WebView2(); @@ -32,23 +96,23 @@ namespace winrt::ReactNativeWebView::implementation { RegisterEvents(); } - ReactWebView2::~ReactWebView2(){} + ReactWebView2::~ReactWebView2() {} void ReactWebView2::RegisterEvents() { m_navigationStartingRevoker = m_webView.NavigationStarting( winrt::auto_revoke, [ref = get_weak()](auto const& sender, auto const& args) { - if (auto self = ref.get()) { - self->OnNavigationStarting(sender, args); - } - - }); + if (auto self = ref.get()) { + self->OnNavigationStarting(sender, args); + } + + }); m_navigationCompletedRevoker = m_webView.NavigationCompleted( winrt::auto_revoke, [ref = get_weak()](auto const& sender, auto const& args) { - if (auto self = ref.get()) { - self->OnNavigationCompleted(sender, args); - } - }); + if (auto self = ref.get()) { + self->OnNavigationCompleted(sender, args); + } + }); m_CoreWebView2InitializedRevoker = m_webView.CoreWebView2Initialized( winrt::auto_revoke, [ref = get_weak()](auto const& sender, auto const& args){ @@ -56,13 +120,13 @@ namespace winrt::ReactNativeWebView::implementation { self->OnCoreWebView2Initialized(sender, args); } }); - } + } bool ReactWebView2::Is17763OrHigher() { static std::optional hasUniversalAPIContract_v7; if (!hasUniversalAPIContract_v7.has_value()) { - hasUniversalAPIContract_v7 = winrt::Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent(L"Windows.Foundation.UniversalApiContract", 7); + hasUniversalAPIContract_v7 = winrt::Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent(L"Windows.Foundation.UniversalApiContract", 7); } return hasUniversalAPIContract_v7.value(); } @@ -72,11 +136,11 @@ namespace winrt::ReactNativeWebView::implementation { WriteProperty(eventDataWriter, L"canGoBack", sender.CanGoBack()); WriteProperty(eventDataWriter, L"canGoForward", sender.CanGoForward()); if (Is17763OrHigher()) { - WriteProperty(eventDataWriter, L"loading", !sender.IsLoaded()); + WriteProperty(eventDataWriter, L"loading", !sender.IsLoaded()); } WriteProperty(eventDataWriter, L"target", tag); if (auto uri = sender.Source()) { - WriteProperty(eventDataWriter, L"url", uri.AbsoluteCanonicalUri()); + WriteProperty(eventDataWriter, L"url", uri.AbsoluteCanonicalUri()); } } @@ -90,9 +154,9 @@ namespace winrt::ReactNativeWebView::implementation { eventDataWriter.WriteObjectEnd(); }); - + if (m_messagingEnabled) { - m_messageToken = webView.WebMessageReceived([this](auto const& /* sender */ , winrt::CoreWebView2WebMessageReceivedEventArgs const& messageArgs) + m_messageToken = webView.WebMessageReceived([this](auto const& /* sender */, winrt::CoreWebView2WebMessageReceivedEventArgs const& messageArgs) { try { auto message = messageArgs.TryGetWebMessageAsString(); @@ -121,7 +185,7 @@ namespace winrt::ReactNativeWebView::implementation { }); if (m_messagingEnabled) { - winrt::hstring message = LR"(window.alert = function (msg) {window.chrome.webview.postMessage(`{"type":"__alert","message":"${msg}"}`)}; + winrt::hstring message = LR"(window.alert = function (msg) {window.chrome.webview.postMessage(`{"type":"__alert","message":"${msg}"}`)}; window.ReactNativeWebView = {postMessage: function (data) {window.chrome.webview.postMessage(String(data))}};)"; webView.ExecuteScriptAsync(message); } @@ -129,10 +193,40 @@ namespace winrt::ReactNativeWebView::implementation { void ReactWebView2::OnCoreWebView2Initialized(winrt::Microsoft::UI::Xaml::Controls::WebView2 const& sender, winrt::Microsoft::UI::Xaml::Controls::CoreWebView2InitializedEventArgs const& /* args */) { assert(sender.CoreWebView2()); + if (m_navigateToHtml != L"") { m_webView.NavigateToString(m_navigateToHtml); m_navigateToHtml = L""; } + else if (m_navigationWithHeaders.has_value()) { + auto headers = m_navigationWithHeaders.value().second; + + auto stream = InMemoryRandomAccessStream(); + + // construct headers string + winrt::hstring headers_str; + for (auto const& header : headers) { + if (header.Key() == L"cookie" || header.Key() == L"Cookie") { + WriteCookiesToWebView2(header.Value()); + } + else { + headers_str = headers_str + header.Key() + L": " + + header.Value() + L"\r\n"; + } + + } + + auto request = + m_webView.CoreWebView2().Environment().CreateWebResourceRequest( + m_navigationWithHeaders.value().first, + L"GET", + stream, + headers_str + ); + + m_webView.CoreWebView2().NavigateWithWebResourceRequest(request); + m_navigationWithHeaders.reset(); + } } void ReactWebView2::HandleMessageFromJS(winrt::hstring const& message) { @@ -161,11 +255,11 @@ namespace winrt::ReactNativeWebView::implementation { }); } - void ReactWebView2::MessagingEnabled(bool enabled) noexcept{ + void ReactWebView2::MessagingEnabled(bool enabled) noexcept { m_messagingEnabled = enabled; } - bool ReactWebView2::MessagingEnabled() const noexcept{ + bool ReactWebView2::MessagingEnabled() const noexcept { return m_messagingEnabled; } @@ -180,6 +274,35 @@ namespace winrt::ReactNativeWebView::implementation { } } + void ReactWebView2::NavigateWithHeaders(winrt::hstring uri, IMapView headers) { + m_navigationWithHeaders = std::make_pair(uri, headers); + m_webView.EnsureCoreWebView2Async(); + } + + void ReactWebView2::WriteCookiesToWebView2(winrt::hstring cookies) { + // Persisting cookies passed from JS + // Cookies are separated by ;, and adheres to the Set-Cookie HTTP header format of RFC-6265. + + auto cm = m_webView.CoreWebView2().CookieManager(); + auto cookies_list = + helpers::splitString(winrt::to_string(cookies), ";,"); + for (const auto& cookie_str : cookies_list) { + auto cookieData = helpers::parseSetCookieHeader(helpers::trimString(cookie_str)); + + if (!cookieData.count("Name") || !cookieData.count("Value")) { + continue; + } + auto cookie = cm.CreateCookie( + winrt::to_hstring(cookieData["Name"]), + winrt::to_hstring(cookieData["Value"]), + cookieData.count("Domain") + ? winrt::to_hstring(cookieData["Domain"]) + : L"", + cookieData.count("Path") + ? winrt::to_hstring(cookieData["Path"]) : L""); + cm.AddOrUpdateCookie(cookie); + } + } } // namespace winrt::ReactNativeWebView::implementation #endif // HAS_WEBVIEW2 diff --git a/windows/ReactNativeWebView/ReactWebView2.h b/windows/ReactNativeWebView/ReactWebView2.h index b84bf75c38..8404a83fa3 100644 --- a/windows/ReactNativeWebView/ReactWebView2.h +++ b/windows/ReactNativeWebView/ReactWebView2.h @@ -21,10 +21,12 @@ namespace winrt::ReactNativeWebView::implementation { void MessagingEnabled(bool enabled) noexcept; bool MessagingEnabled() const noexcept; void NavigateToHtml(winrt::hstring html); + void NavigateWithHeaders(winrt::hstring uri, IMapView headers); ~ReactWebView2(); private: winrt::hstring m_navigateToHtml = L""; + std::optional>> m_navigationWithHeaders; bool m_messagingEnabled{ true }; winrt::Microsoft::UI::Xaml::Controls::WebView2 m_webView{ nullptr }; @@ -35,6 +37,7 @@ namespace winrt::ReactNativeWebView::implementation { winrt::Microsoft::UI::Xaml::Controls::WebView2::CoreWebView2Initialized_revoker m_CoreWebView2InitializedRevoker{}; void HandleMessageFromJS(winrt::hstring const& message); void RegisterEvents(); + void WriteCookiesToWebView2(winrt::hstring cookies); void WriteWebViewNavigationEventArg(winrt::Microsoft::UI::Xaml::Controls::WebView2 const& sender, winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter); void OnNavigationStarting(winrt::Microsoft::UI::Xaml::Controls::WebView2 const& sender, winrt::Microsoft::Web::WebView2::Core::CoreWebView2NavigationStartingEventArgs const& args); void OnNavigationCompleted(winrt::Microsoft::UI::Xaml::Controls::WebView2 const& sender, winrt::Microsoft::Web::WebView2::Core::CoreWebView2NavigationCompletedEventArgs const& args); diff --git a/windows/ReactNativeWebView/ReactWebView2Manager.cpp b/windows/ReactNativeWebView/ReactWebView2Manager.cpp index c7ea87fd56..65e50d42f7 100644 --- a/windows/ReactNativeWebView/ReactWebView2Manager.cpp +++ b/windows/ReactNativeWebView/ReactWebView2Manager.cpp @@ -16,6 +16,8 @@ namespace winrt { using namespace Microsoft::UI::Xaml::Controls; using namespace Windows::Web::Http; using namespace Windows::Web::Http::Headers; + using namespace Microsoft::Web::WebView2::Core; + using namespace Windows::Storage::Streams; } namespace winrt::ReactNativeWebView::implementation { @@ -28,8 +30,8 @@ namespace winrt::ReactNativeWebView::implementation { } winrt::FrameworkElement ReactWebView2Manager::CreateView() noexcept { - auto view = winrt::ReactNativeWebView::ReactWebView2(m_reactContext); - return view; + auto view = winrt::ReactNativeWebView::ReactWebView2(m_reactContext); + return view; } // IViewManagerWithReactContext @@ -79,7 +81,29 @@ namespace winrt::ReactNativeWebView::implementation { auto bundleRootPath = winrt::to_string(ReactNativeHost().InstanceSettings().BundleRootPath()); uriString.replace(0, std::size(file), bundleRootPath.empty() ? "ms-appx-web:///Bundle/" : bundleRootPath); } - webView.Source(winrt::Uri(to_hstring(uriString))); + + if (uriString.find("ms-appdata://") == 0 || uriString.find("ms-appx-web://") == 0) { + webView.Source(winrt::Uri(to_hstring(uriString))); + } + else { + const auto hasHeaders = srcMap.find("headers") != srcMap.end(); + + if (hasHeaders) { + auto headers = winrt::single_threaded_map(); + + for (auto const& header : srcMap.at("headers").AsObject()) { + auto const& headerKey = header.first; + auto const& headerValue = header.second; + headers.Insert(winrt::to_hstring(headerKey), winrt::to_hstring(headerValue.AsString())); + } + + const auto reactWebView2 = view.as(); + reactWebView2.NavigateWithHeaders(to_hstring(uriString), headers.GetView()); + } + else { + webView.Source(winrt::Uri(to_hstring(uriString))); + } + } } else if (srcMap.find("html") != srcMap.end()) { auto htmlString = srcMap.at("html").AsString(); @@ -92,7 +116,7 @@ namespace winrt::ReactNativeWebView::implementation { auto reactWebView2 = view.as(); reactWebView2.MessagingEnabled(messagingEnabled); } - } + } } // IViewManagerWithExportedEventTypeConstants @@ -147,7 +171,7 @@ namespace winrt::ReactNativeWebView::implementation { } else if (commandId == L"injectJavaScript") { webView.ExecuteScriptAsync(winrt::to_hstring(commandArgs[0].AsString())); - } + } } } // namespace winrt::ReactNativeWebView::implementation diff --git a/windows/ReactNativeWebView/pch.h b/windows/ReactNativeWebView/pch.h index ac40d18ff9..5c8902bffb 100644 --- a/windows/ReactNativeWebView/pch.h +++ b/windows/ReactNativeWebView/pch.h @@ -29,4 +29,5 @@ #include #if HAS_WEBVIEW2 #include +#include #endif \ No newline at end of file From fe36effdff50d6819b9ed908662dac07f53d9d2a Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 1 Jun 2023 20:59:19 +0000 Subject: [PATCH 082/104] chore(release): 12.2.0 [skip ci] # [12.2.0](https://github.com/react-native-webview/react-native-webview/compare/v12.1.0...v12.2.0) (2023-06-01) ### Features * **windows:** Support headers and cookies in source prop ([#2897](https://github.com/react-native-webview/react-native-webview/issues/2897)) ([1851ead](https://github.com/react-native-webview/react-native-webview/commit/1851ead46582aece53884ab12694234e50457b10)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f466edff58..f914a965d7 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "12.1.0", + "version": "12.2.0", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From e17a79b9aa1ea41c9e52ae67fb6afd91cfa144f2 Mon Sep 17 00:00:00 2001 From: Thibault Malbranche Date: Sat, 10 Jun 2023 13:09:46 +0200 Subject: [PATCH 083/104] fix: Revert "Missing android.support.FILE_PROVIDER_PATHS meta-data on some OEMs (#2952)" This reverts commit 75e7801a6255b37f6887d29d10b9ba688e051416. --- .../webview/RNCWebViewFileProvider.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewFileProvider.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewFileProvider.java index 4e7a2883bb..919b3ad508 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewFileProvider.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewFileProvider.java @@ -1,7 +1,6 @@ package com.reactnativecommunity.webview; import androidx.core.content.FileProvider; -import com.reactnativecommunity.webview.R; /** * Providing a custom {@code FileProvider} prevents manifest {@code } name collisions. @@ -9,7 +8,7 @@ * See https://developer.android.com/guide/topics/manifest/provider-element.html for details. */ public class RNCWebViewFileProvider extends FileProvider { - public RNCWebViewFileProvider() { - super(R.xml.file_provider_paths); - } + + // This class intentionally left blank. + } \ No newline at end of file From 224e2835783a15da026624bd9f660618ee514079 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 10 Jun 2023 11:12:38 +0000 Subject: [PATCH 084/104] chore(release): 12.2.1 [skip ci] ## [12.2.1](https://github.com/react-native-webview/react-native-webview/compare/v12.2.0...v12.2.1) (2023-06-10) ### Bug Fixes * Revert "Missing android.support.FILE_PROVIDER_PATHS meta-data on some OEMs ([#2952](https://github.com/react-native-webview/react-native-webview/issues/2952))" ([e17a79b](https://github.com/react-native-webview/react-native-webview/commit/e17a79b9aa1ea41c9e52ae67fb6afd91cfa144f2)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f914a965d7..d7dd30a08c 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "Thibault Malbranche " ], "license": "MIT", - "version": "12.2.0", + "version": "12.2.1", "homepage": "https://github.com/react-native-webview/react-native-webview#readme", "scripts": { "android": "react-native run-android", From f2aef667b28ac36ac6b75ec81fc95055a1c5743a Mon Sep 17 00:00:00 2001 From: Thibault Malbranche Date: Sat, 10 Jun 2023 13:56:05 +0200 Subject: [PATCH 085/104] feat: custom action menu on android + improved iOS (#2993) * Update RNCWebView.java * Update RNCWebView.java * wip * wip * fix build on latest xcode * add example + fix a few things * Update RNCWebViewImpl.m * fix macOS build --- .../webview/RNCWebView.java | 81 ++++ .../webview/RNCWebViewManagerImpl.kt | 5 +- .../events/TopCustomMenuSelectionEvent.kt | 24 + .../webview/RNCWebViewManager.java | 11 +- .../webview/RNCWebViewManager.java | 7 + apple/RNCWebViewImpl.m | 59 ++- example/App.tsx | 14 + example/examples/CustomMenu.tsx | 88 ++++ example/ios/Podfile.lock | 452 +++++++++--------- package.json | 4 +- yarn.lock | 162 ++++++- 11 files changed, 633 insertions(+), 274 deletions(-) create mode 100644 android/src/main/java/com/reactnativecommunity/webview/events/TopCustomMenuSelectionEvent.kt create mode 100644 example/examples/CustomMenu.tsx diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java index f998614170..467677953e 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java @@ -4,13 +4,18 @@ import android.annotation.SuppressLint; import android.content.Context; +import android.graphics.Rect; import android.os.Build; import android.text.TextUtils; import android.util.AttributeSet; +import android.view.ActionMode; +import android.view.Menu; +import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.webkit.JavascriptInterface; +import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -28,14 +33,21 @@ import com.facebook.react.uimanager.events.ContentSizeChangeEvent; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.EventDispatcher; +import com.facebook.react.uimanager.events.RCTEventEmitter; import com.facebook.react.views.scroll.OnScrollDispatchHelper; import com.facebook.react.views.scroll.ScrollEvent; import com.facebook.react.views.scroll.ScrollEventType; +import com.reactnativecommunity.webview.events.TopCustomMenuSelectionEvent; import com.reactnativecommunity.webview.events.TopLoadingProgressEvent; import com.reactnativecommunity.webview.events.TopMessageEvent; +import org.json.JSONException; +import org.json.JSONObject; + import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.util.List; +import java.util.Map; public class RNCWebView extends WebView implements LifecycleEventListener { protected @Nullable @@ -135,6 +147,75 @@ protected void onSizeChanged(int w, int h, int ow, int oh) { } } + protected @Nullable + List> menuCustomItems; + + public void setMenuCustomItems(List> menuCustomItems) { + this.menuCustomItems = menuCustomItems; + } + + @Override + public ActionMode startActionMode(ActionMode.Callback callback, int type) { + if(menuCustomItems == null ){ + return super.startActionMode(callback, type); + } + + return super.startActionMode(new ActionMode.Callback2() { + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + for (int i = 0; i < menuCustomItems.size(); i++) { + menu.add(Menu.NONE, i, i, (menuCustomItems.get(i)).get("label")); + } + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { + return false; + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + WritableMap wMap = Arguments.createMap(); + RNCWebView.this.evaluateJavascript( + "(function(){return {selection: window.getSelection().toString()} })()", + new ValueCallback() { + @Override + public void onReceiveValue(String selectionJson) { + Map menuItemMap = menuCustomItems.get(item.getItemId()); + wMap.putString("label", menuItemMap.get("label")); + wMap.putString("key", menuItemMap.get("key")); + String selectionText = ""; + try { + selectionText = new JSONObject(selectionJson).getString("selection"); + } catch (JSONException ignored) {} + wMap.putString("selectedText", selectionText); + dispatchEvent(RNCWebView.this, new TopCustomMenuSelectionEvent(RNCWebView.this.getId(), wMap)); + mode.finish(); + } + } + ); + return true; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + mode = null; + } + + @Override + public void onGetContentRect (ActionMode mode, + View view, + Rect outRect){ + if (callback instanceof ActionMode.Callback2) { + ((ActionMode.Callback2) callback).onGetContentRect(mode, view, outRect); + } else { + super.onGetContentRect(mode, view, outRect); + } + } + }, type); + } + @Override public void setWebViewClient(WebViewClient client) { super.setWebViewClient(client); diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt index ddbb5d60db..3e67bdcb30 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt @@ -31,7 +31,6 @@ import java.util.* val invalidCharRegex = "[\\\\/%\"]".toRegex() - class RNCWebViewManagerImpl { companion object { const val NAME = "RNCWebView" @@ -600,6 +599,10 @@ class RNCWebViewManagerImpl { } } + fun setMenuCustomItems(view: RNCWebView, value: ReadableArray) { + view.setMenuCustomItems(value.toArrayList() as List>) + } + fun setNestedScrollEnabled(view: RNCWebView, value: Boolean) { view.nestedScrollEnabled = value } diff --git a/android/src/main/java/com/reactnativecommunity/webview/events/TopCustomMenuSelectionEvent.kt b/android/src/main/java/com/reactnativecommunity/webview/events/TopCustomMenuSelectionEvent.kt new file mode 100644 index 0000000000..47f9f8b12b --- /dev/null +++ b/android/src/main/java/com/reactnativecommunity/webview/events/TopCustomMenuSelectionEvent.kt @@ -0,0 +1,24 @@ +package com.reactnativecommunity.webview.events + +import com.facebook.react.bridge.WritableMap +import com.facebook.react.uimanager.events.Event +import com.facebook.react.uimanager.events.RCTEventEmitter + +/** + * Event emitted when there is a loading progress event. + */ +class TopCustomMenuSelectionEvent(viewId: Int, private val mEventData: WritableMap) : + Event(viewId) { + companion object { + const val EVENT_NAME = "topCustomMenuSelection" + } + + override fun getEventName(): String = EVENT_NAME + + override fun canCoalesce(): Boolean = false + + override fun getCoalescingKey(): Short = 0 + + override fun dispatch(rctEventEmitter: RCTEventEmitter) = + rctEventEmitter.receiveEvent(viewTag, eventName, mEventData) +} diff --git a/android/src/newarch/com/reactnativecommunity/webview/RNCWebViewManager.java b/android/src/newarch/com/reactnativecommunity/webview/RNCWebViewManager.java index 28ef443ecc..b3f1c337f3 100644 --- a/android/src/newarch/com/reactnativecommunity/webview/RNCWebViewManager.java +++ b/android/src/newarch/com/reactnativecommunity/webview/RNCWebViewManager.java @@ -14,6 +14,7 @@ import com.facebook.react.viewmanagers.RNCWebViewManagerDelegate; import com.facebook.react.viewmanagers.RNCWebViewManagerInterface; import com.facebook.react.views.scroll.ScrollEventType; +import com.reactnativecommunity.webview.events.TopCustomMenuSelectionEvent; import com.reactnativecommunity.webview.events.TopHttpErrorEvent; import com.reactnativecommunity.webview.events.TopLoadingErrorEvent; import com.reactnativecommunity.webview.events.TopLoadingFinishEvent; @@ -204,6 +205,12 @@ public void setMediaPlaybackRequiresUserAction(RNCWebView view, boolean value) { mRNCWebViewManagerImpl.setMediaPlaybackRequiresUserAction(view, value); } + @Override + @ReactProp(name = "menuItems") + public void setMenuItems(RNCWebView view, @Nullable ReadableArray items) { + mRNCWebViewManagerImpl.setMenuCustomItems(view, items); + } + @Override @ReactProp(name = "messagingEnabled") public void setMessagingEnabled(RNCWebView view, boolean value) { @@ -376,9 +383,6 @@ public void setTextInteractionEnabled(RNCWebView view, boolean value) {} @Override public void setHasOnFileDownload(RNCWebView view, boolean value) {} - @Override - public void setMenuItems(RNCWebView view, ReadableArray value) {} - @Override public void setMediaCapturePermissionGrantType(RNCWebView view, @Nullable String value) {} /* !iOS PROPS - no implemented here */ @@ -488,6 +492,7 @@ public Map getExportedCustomDirectEventTypeConstants() { export.put(ScrollEventType.getJSEventName(ScrollEventType.SCROLL), MapBuilder.of("registrationName", "onScroll")); export.put(TopHttpErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onHttpError")); export.put(TopRenderProcessGoneEvent.EVENT_NAME, MapBuilder.of("registrationName", "onRenderProcessGone")); + export.put(TopCustomMenuSelectionEvent.EVENT_NAME, MapBuilder.of("registrationName", "onCustomMenuSelection")); return export; } diff --git a/android/src/oldarch/com/reactnativecommunity/webview/RNCWebViewManager.java b/android/src/oldarch/com/reactnativecommunity/webview/RNCWebViewManager.java index 4c03b51e99..4d786f5591 100644 --- a/android/src/oldarch/com/reactnativecommunity/webview/RNCWebViewManager.java +++ b/android/src/oldarch/com/reactnativecommunity/webview/RNCWebViewManager.java @@ -12,6 +12,7 @@ import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.views.scroll.ScrollEventType; +import com.reactnativecommunity.webview.events.TopCustomMenuSelectionEvent; import com.reactnativecommunity.webview.events.TopHttpErrorEvent; import com.reactnativecommunity.webview.events.TopLoadingErrorEvent; import com.reactnativecommunity.webview.events.TopLoadingFinishEvent; @@ -179,6 +180,11 @@ public void setMessagingEnabled(RNCWebView view, boolean value) { mRNCWebViewManagerImpl.setMessagingEnabled(view, value); } + @ReactProp(name = "menuItems") + public void setMenuCustomItems(RNCWebView view, @Nullable ReadableArray items) { + mRNCWebViewManagerImpl.setMenuCustomItems(view, items); + } + @ReactProp(name = "messagingModuleName") public void setMessagingModuleName(RNCWebView view, @Nullable String value) { mRNCWebViewManagerImpl.setMessagingModuleName(view, value); @@ -283,6 +289,7 @@ public Map getExportedCustomDirectEventTypeConstants() { export.put(ScrollEventType.getJSEventName(ScrollEventType.SCROLL), MapBuilder.of("registrationName", "onScroll")); export.put(TopHttpErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onHttpError")); export.put(TopRenderProcessGoneEvent.EVENT_NAME, MapBuilder.of("registrationName", "onRenderProcessGone")); + export.put(TopCustomMenuSelectionEvent.EVENT_NAME, MapBuilder.of("registrationName", "onCustomMenuSelection")); return export; } diff --git a/apple/RNCWebViewImpl.m b/apple/RNCWebViewImpl.m index c6d18bb093..d590095e70 100644 --- a/apple/RNCWebViewImpl.m +++ b/apple/RNCWebViewImpl.m @@ -48,10 +48,31 @@ -(id)inputAccessoryView @end #endif // !TARGET_OS_OSX -#if TARGET_OS_OSX @interface RNCWKWebView : WKWebView +#if !TARGET_OS_OSX +@property (nonatomic, copy) NSArray * _Nullable menuItems; +#endif // !TARGET_OS_OSX @end @implementation RNCWKWebView +#if !TARGET_OS_OSX +- (BOOL)canPerformAction:(SEL)action + withSender:(id)sender{ + + if (!self.menuItems) { + return [super canPerformAction:action withSender:sender]; + } + + return NO; +} +- (void)buildMenuWithBuilder:(id)builder API_AVAILABLE(ios(13.0)) { + if (@available(iOS 16.0, *)) { + if(self.menuItems){ + [builder removeMenuForIdentifier:UIMenuLookup]; + } + } + [super buildMenuWithBuilder:builder]; +} +#else // TARGET_OS_OSX - (void)scrollWheel:(NSEvent *)theEvent { RNCWebViewImpl *rncWebView = (RNCWebViewImpl *)[self superview]; RCTAssert([rncWebView isKindOfClass:[rncWebView class]], @"superview must be an RNCWebViewImpl"); @@ -61,8 +82,8 @@ - (void)scrollWheel:(NSEvent *)theEvent { } [super scrollWheel:theEvent]; } -@end #endif // TARGET_OS_OSX +@end @interface RNCWebViewImpl () -#if !TARGET_OS_OSX -@property (nonatomic, copy) WKWebView *webView; -#else @property (nonatomic, copy) RNCWKWebView *webView; -#endif // !TARGET_OS_OSX @property (nonatomic, strong) WKUserScript *postMessageScript; @property (nonatomic, strong) WKUserScript *atStartScript; @property (nonatomic, strong) WKUserScript *atEndScript; @@ -196,10 +213,15 @@ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecogni // Listener for long presses - (void)startLongPress:(UILongPressGestureRecognizer *)pressSender { - // When a long press ends, bring up our custom UIMenu - if(pressSender.state == UIGestureRecognizerStateEnded) { - if (!self.menuItems || self.menuItems.count == 0) { - return; + if (pressSender.state != UIGestureRecognizerStateEnded || !self.menuItems) { + return; + } + // When a long press ends, bring up our custom UIMenu if defined + if (self.menuItems.count == 0) { + UIMenuController *menuController = [UIMenuController sharedMenuController]; + menuController.menuItems = nil; + [menuController setMenuVisible:NO animated:YES]; + return; } UIMenuController *menuController = [UIMenuController sharedMenuController]; NSMutableArray *menuControllerItems = [NSMutableArray arrayWithCapacity:self.menuItems.count]; @@ -210,13 +232,11 @@ - (void)startLongPress:(UILongPressGestureRecognizer *)pressSender NSString *sel = [NSString stringWithFormat:@"%@%@", CUSTOM_SELECTOR, menuItemKey]; UIMenuItem *item = [[UIMenuItem alloc] initWithTitle: menuItemLabel action: NSSelectorFromString(sel)]; - [menuControllerItems addObject: item]; } menuController.menuItems = menuControllerItems; [menuController setMenuVisible:YES animated:YES]; - } } #endif // !TARGET_OS_OSX @@ -412,14 +432,10 @@ - (void)didMoveToWindow { if (self.window != nil && _webView == nil) { WKWebViewConfiguration *wkWebViewConfig = [self setUpWkWebViewConfig]; -#if !TARGET_OS_OSX - _webView = [[WKWebView alloc] initWithFrame:self.bounds configuration: wkWebViewConfig]; -#else _webView = [[RNCWKWebView alloc] initWithFrame:self.bounds configuration: wkWebViewConfig]; -#endif // !TARGET_OS_OSX - [self setBackgroundColor: _savedBackgroundColor]; #if !TARGET_OS_OSX + _webView.menuItems = _menuItems; _webView.scrollView.delegate = self; #endif // !TARGET_OS_OSX _webView.UIDelegate = self; @@ -492,6 +508,10 @@ - (void)removeFromSuperview [_webView removeFromSuperview]; #if !TARGET_OS_OSX _webView.scrollView.delegate = nil; + if (_menuItems) { + UIMenuController *menuController = [UIMenuController sharedMenuController]; + menuController.menuItems = nil; + } #endif // !TARGET_OS_OSX _webView = nil; if (_onContentProcessDidTerminate) { @@ -741,6 +761,11 @@ - (void)visitSource } #if !TARGET_OS_OSX +-(void)setMenuItems:(NSArray *)menuItems { + _menuItems = menuItems; + _webView.menuItems = menuItems; +} + -(void)setKeyboardDisplayRequiresUserAction:(BOOL)keyboardDisplayRequiresUserAction { if (_webView == nil) { diff --git a/example/App.tsx b/example/App.tsx index ebb4ae32f2..db93fa99d7 100644 --- a/example/App.tsx +++ b/example/App.tsx @@ -20,6 +20,7 @@ import LocalPageLoad from './examples/LocalPageLoad'; import Messaging from './examples/Messaging'; import NativeWebpage from './examples/NativeWebpage'; import ApplePay from './examples/ApplePay'; +import CustomMenu from './examples/CustomMenu'; const TESTS = { Messaging: { @@ -101,6 +102,14 @@ const TESTS = { render() { return ; }, + }, + CustomMenu: { + title: 'Custom Menu', + testId: 'CustomMenu', + description: 'Test to custom context menu shown on highlighting text', + render() { + return ; + }, } }; @@ -194,6 +203,11 @@ export default class App extends Component { onPress={() => this._changeTest('ApplePay')} /> )} +