Compare commits

...
Author SHA1 Message Date
Lorenzo Sciandra 8a43321271 [0.60.0-rc.3] Bump version numbers 2019-06-28 10:49:34 +01:00
Lorenzo Sciandra db1d60fa95 bump jsc dep 2019-06-28 08:39:52 +01:00
Lorenzo Sciandra 93c83181fb bump CLI rc 2019-06-28 08:39:43 +01:00
soh335andLorenzo Sciandra 9837d2480c Fix some languages wrapped texts are cut off on android (#25306)
Summary:
Fix wrapped some languages (like Japanese, Chinese) texts are cut off on android. This p-r is based on linjson [patch](https://github.com/facebook/react-native/issues/25275#issuecomment-502548807).

- related (maybe)
    - https://github.com/facebook/react-native/issues/25297
    - https://github.com/facebook/react-native/issues/25275
    - https://github.com/facebook/react-native/issues/24837
    - https://github.com/facebook/react-native/issues/25155

`setUseLineSpacingFromFallbacks` is recommended to set true on [document](https://developer.android.com/reference/android/text/StaticLayout.Builder#setUseLineSpacingFromFallbacks(boolean))

>For backward compatibility reasons, the default is false, but setting this to true is strongly recommended. It is required to be true if text could be in languages like Burmese or Tibetan where text is typically much taller or deeper than Latin text.

## Changelog

[Android] [Fixed] - Fix some languages wrapped texts are cut off.
Pull Request resolved: https://github.com/facebook/react-native/pull/25306

Test Plan:
Set the target SDK to 28 in ``fbsource/fbandroid/java/com/facebook/catalyst/shell/AndroidManifest.xml``:
```
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="28"/>
```

Insert the following code into Playground.js: P67720709

Start the Catalyst Android app and navigate to the playground:

`buck install -r catalyst`

|Before|After|
|{F163482789}|{F163481060}|

Reviewed By: cpojer

Differential Revision: D15985809

Pulled By: makovkastar

fbshipit-source-id: 0f98760b7a7fe4689fa3fe90ca747e9bf9fc4780
2019-06-28 08:38:26 +01:00
Janic DuplessisandLorenzo Sciandra b68966ec7b Use CALayers to draw text (#24387)
Summary:
The current technique we use to draw text uses linear memory, which means that when text is too long the UIView layer is unable to draw it. This causes the issue described [here](https://github.com/facebook/react-native/issues/19453). On an iOS simulator the bug happens at around 500 lines which is quite annoying. It can also happen on a real device but requires a lot more text.

To be more specific the amount of text doesn't actually matter, it is the size of the UIView that we use to draw the text. When we use `[drawRect:]` the view creates a bitmap to send to the gpu to render, if that bitmap is too big it cannot render.

To fix this we can use `CATiledLayer` which will split drawing into smaller parts, that gets executed when the content is about to be visible. This drawing is also async which means the text can seem to appear during scroll. See https://developer.apple.com/documentation/quartzcore/calayer?language=objc.

`CATiledLayer` also adds some overhead that we don't want when rendering small amount of text. To fix this we can use either a regular `CALayer` or a `CATiledLayer` depending on the size of the view containing the text. I picked 1024 as the threshold which is about 1 screen and a half, and is still smaller than the height needed for the bug to occur when using a regular `CALayer` on a iOS simulator.

Also found this which addresses the problem in a similar manner and took some inspiration from the code linked there https://github.com/GitHawkApp/StyledTextKit/issues/14#issuecomment-395234885

Fixes https://github.com/facebook/react-native/issues/19453

## Changelog

[iOS] [Fixed] - Use CALayers to draw text, fixes rendering for long text
Pull Request resolved: https://github.com/facebook/react-native/pull/24387

Test Plan:
- Added the example I was using to verify the fix to RNTester.
- Made sure all other examples are still rendering properly.
- Tested text selection

Reviewed By: shergin

Differential Revision: D15918277

Pulled By: sammy-SC

fbshipit-source-id: c45409a8413e6e3ad272be39ba527a4e8d349e28
2019-06-28 08:38:17 +01:00
Robert YingandLorenzo Sciandra 99bc31cfa6 Fix regression of improper assets copy (revert #24518 #24778) (#25363)
Summary:
Pull requests https://github.com/facebook/react-native/issues/24518 #24778 make Gradle copy all **generated** assets and resources into `android/app/src/res`, which is a bad behavior, because `src/res` goes into version control and should hold only those **original** resource files.

These changes in https://github.com/facebook/react-native/issues/24518 #24778 were merged into 0.60.0-rc release and cause regression.

This pull request will:

- Revert pull requests https://github.com/facebook/react-native/issues/24518 #24778
- Close https://github.com/facebook/react-native/issues/25325

## Changelog

[Android] [Fixed] - Fix regression of improper assets copy (revert https://github.com/facebook/react-native/issues/24518 #24778)
Pull Request resolved: https://github.com/facebook/react-native/pull/25363

Test Plan: It is a revert pull request and the reverted script should work the same as it has in 0.59.x.

Differential Revision: D15963329

Pulled By: cpojer

fbshipit-source-id: 5619a318dbdb40e816e37b6e37d4fe32caa46e9e
2019-06-28 08:38:10 +01:00
DulmandakhandLorenzo Sciandra c36c481016 bump fresco to 2.0.0, supports AndroidX (#25358)
Summary:
Bump Fresco to 2.0.0, which supports AndroidX. We should cherry-pick to 0.60 release, to support brown field apps but also native components.

## Changelog

[Android] [Changed] - Bump Fresco to 2.0.0, supports AndroidX
Pull Request resolved: https://github.com/facebook/react-native/pull/25358

Test Plan: CI is green, and RNTester builds and runs as expected.

Differential Revision: D15959443

Pulled By: mdvacca

fbshipit-source-id: 58ba2c3e4d1342014d6ea632cd865b4f413548d9
2019-06-28 08:38:01 +01:00
DulmandakhandLorenzo Sciandra 13f4fa0245 custom fontWeight numeric values for Text on Android (#25341)
Summary:
I found that on Android we only support 2 fontWeight options, either **normal** or **bold**, even developer can set any numeric value. But iOS supports all possible numeric values. This PR tries to add support for all possible numeric values on Android, even if it's supported only on Android P(28) and above.

This change might break texts where fontWeight use improperly, because this PR removes conversion of values above 500 to BOLD and below 500 to normal.

FYI, also moved **mCustomTypefaceCache** usage up because it was working after unnecessary mFontCache usage.

## Changelog

[Android] [Changed] - add custom font weight support to Text component on Android, only on P(API 28) and above versions.
Pull Request resolved: https://github.com/facebook/react-native/pull/25341

Test Plan: RNTester app's Text examples will show Rubik Regular, Rubik Light, Rubik Bold, Rubik Medium and Rubik Medium Italic texts in corresponding font family, style and weights.

Differential Revision: D15956350

Pulled By: mdvacca

fbshipit-source-id: 61079d953c65fb34ab4497d44c22317912a5a616
2019-06-28 08:37:51 +01:00
Lorenzo Sciandra 9792f2c9d7 [0.60.0-rc.2] Bump version numbers 2019-06-20 11:40:30 +01:00
Lorenzo Sciandra 53cec2dc1f [LOCAL] bump version in template to match repo 2019-06-20 10:07:32 +01:00
Rick HanlonandLorenzo Sciandra b4f3d4b92e Move scheduler to dependencies
Summary: Fixes https://github.com/react-native-community/releases/issues/116#issuecomment-503449687

Reviewed By: gaearon

Differential Revision: D15901557

fbshipit-source-id: 653119c181585cf9a4a561b350c66bd10cb674bd
2019-06-20 10:06:01 +01:00
SalakarandLorenzo Sciandra e741488659 Implement changes to enable native modules auto linking (#24506)
Summary:
Replaces #24099 (original PR became detached for some reason)

Implements the template changes required to enable native modules auto-linking for both Android & iOS.

Requires the following to be merged first and an updated CLI to be published:

- [x] https://github.com/react-native-community/react-native-cli/pull/254
- [x] https://github.com/react-native-community/react-native-cli/pull/256
- [x] https://github.com/react-native-community/react-native-cli/pull/258

cc grabbou thymikee orta for review

- [ ] https://github.com/facebook/react-native/pull/24517 update CLI version)

[TEMPLATE] [FEATURE] - Enable auto-initialization/linking of react native modules for new projects
Pull Request resolved: https://github.com/facebook/react-native/pull/24506

Differential Revision: D15062701

Pulled By: cpojer

fbshipit-source-id: 65296cbec2925405fe8033de71910325e0c719bc

# Conflicts:
#	template/ios/Podfile
2019-06-19 14:10:57 +01:00
Michał PierzchałaandLorenzo Sciandra bf4ee6f5c1 Bump CLI to 2.0.0-rc.2 (#25241)
Summary:
Fixing Metro validation issue. Hope that helps with fixing the CI �.

## Changelog

[General] [Changed] - Bump CLI to 2.0.0-rc.2
Pull Request resolved: https://github.com/facebook/react-native/pull/25241

Differential Revision: D15803610

Pulled By: cpojer

fbshipit-source-id: 22136db1583f8cf5a40afd5d8a561d98cb6de982
2019-06-19 12:54:50 +01:00
zhongwuzwandLorenzo Sciandra cecba01b71 Removed autoresizing mask for modal host container view (#25150)
Summary:
Fixes #18177 . Related #24497. Autoresizing mask would conflict with `AutoLayout`. For example , it would impact `SafeAreaView`. And actually we don't need to use autoresizing mask,  we observe the bounds change notification and [update the frame manually](https://github.com/facebook/react-native/blob/1151c096dab17e5d9a6ac05b61aacecd4305f3db/React/Views/RCTModalHostView.m#L59).

## Changelog

[iOS] [Fixed] - Removed autoresizing mask for modal host container view
Pull Request resolved: https://github.com/facebook/react-native/pull/25150

Differential Revision: D15645148

Pulled By: cpojer

fbshipit-source-id: 95d5f40feaa980b959a3de6e273dccac8158c57b
2019-06-19 12:54:39 +01:00
Lorenzo Sciandra 06fffc2042 [0.60.0-rc.1] Bump version numbers 2019-06-10 12:30:15 +01:00
Lorenzo Sciandra 5ecc87bf3e bump versions to match the requirements 2019-06-07 17:54:20 +01:00
Lorenzo Sciandra 7082c3e449 re-add the hasteImpl 2019-06-07 15:52:42 +01:00
Michał PierzchałaandLorenzo Sciandra 39ce412b25 Bump CLI to 2.0.0-rc.0 (#25175)
Summary:
Upgrading the CLI to the latest with a bunch of fixes and features included.

## Changelog

[General] [Changed] - Bump CLI to 2.0.0-rc.0
Pull Request resolved: https://github.com/facebook/react-native/pull/25175

Differential Revision: D15694764

Pulled By: cpojer

fbshipit-source-id: 25fbf1c275ed5379e1cdb372512b6bb6327dea92

# Conflicts:
#	jest/hasteImpl.js
#	package.json
#	yarn.lock
2019-06-07 15:14:32 +01:00
Пётр ПотаповandLorenzo Sciandra 00c7cf3d68 Fix: RefreshControl in FlatList makes borderWidth not working (#24411)
Summary:
Fixes #22752

On line 1021 you are passing base style to props:
`style: [baseStyle, this.props.style],`

Explicitly passing base style to ScrollView just overrides this line and doesn't let developers to customise style of any inheritors of ScrollView (not only FlatList) with custom RefreshControl.

So this line (1113) seems to be removed.

## Changelog

[GENERAL] [Fixed] - fix of Android's bug that doesn't let override ScrollView's Style with custom RefreshControl.
Pull Request resolved: https://github.com/facebook/react-native/pull/24411

Differential Revision: D15713061

Pulled By: cpojer

fbshipit-source-id: 461259800f867af15e53e0743a5057ea4528ae69
2019-06-07 15:13:00 +01:00
NateandLorenzo Sciandra a916dd6632 Android Fix for 9145: No longer hard code build port (#23616)
Summary:
### Problem

According to https://github.com/facebook/react-native/issues/9145, the `--port` setting is not respected when executing `react-native run-android`. The templates that report things like what port the dev server runs on are hard coded as well.

### Solution

This commit replaces the hardcoded instances of port 8081 on Android with a build configuration property. This allows setting of the port React Native Android connects to for the local build server.

For this change to work, there must also be an update to the react native CLI to pass along this setting:

https://github.com/react-native-community/react-native-cli/compare/master...nhunzaker:9145-android-no-port-hardcode-cli

To avoid some noise on their end, I figured I wouldn't submit a PR until it's this approach is deemed workable.

## Changelog

[Android][fixed] - `react-native run-android --port <x>` correctly connects to dev server and related error messages display the correct port
Pull Request resolved: https://github.com/facebook/react-native/pull/23616

Differential Revision: D15645200

Pulled By: cpojer

fbshipit-source-id: 3bdfd458b8ac3ec78290736c9ed0db2e5776ed46
2019-06-07 15:12:11 +01:00
Eric LewisandLorenzo Sciandra eb73dbe24e Fix Xcode 11 build (#25146)
Summary:
Fixes build in Xcode 11 beta, the signature for `__unused` was changed. This adds a new check for the new style.

## Changelog

[iOS] [Fixed] - Xcode 11 beta build
Pull Request resolved: https://github.com/facebook/react-native/pull/25146

Differential Revision: D15628404

Pulled By: cpojer

fbshipit-source-id: 781a188a0e1562a3316fbe62920b12b03a44e4a7
2019-06-07 15:12:03 +01:00
Sharon GongandLorenzo Sciandra bcc9fcf1c7 Fix accessibilityActions accessors (#25134)
Summary:
The accessibilityActions accessors  in UIView+React.m are not aligned with the property declaration in the header file.

## Changelog

[General] [Fixed] - Fix accessibilityActions accessors
Pull Request resolved: https://github.com/facebook/react-native/pull/25134

Differential Revision: D15621848

Pulled By: cpojer

fbshipit-source-id: f344689292ae7988e46d0d4263980306d364366b
2019-06-07 15:11:56 +01:00
DratwasandLorenzo Sciandra 3e937eac2b fix indexed RAM bundle (#24967)
Summary:
Co-Authored: zamotany
With React Native 0.59.8 the app keeps crashing with indexed RAM bundle on Android with the following error:

```
2019-05-09 11:58:06.684 2793-2856/? E/AndroidRuntime: FATAL EXCEPTION: mqt_js
    Process: com.ramtestapp, PID: 2793
    com.facebook.jni.CppException: getPropertyAsObject: property '__fbRequireBatchedBridge' is not an Object

    no stack
        at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29)
        at android.os.Looper.loop(Looper.java:193)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:232)
        at java.lang.Thread.run(Thread.java:764)
```

After investigation we found that when using any bundle, let it be non-ram, FIle RAM bundle or Index RAM bundle, the `CatalystInstanceImpl.java` is always using `loadScriptsFromAsset`, which is calling `CatalystInstanceImpl::jniLoadScriptFromAssets` in C++. This method when checking if bundle is a RAM bundle, uses `JniJSModulesUnbundle::isUnbundle` which only check for js-modules/UNBUNDLE - file generated when building File RAM bundle. There is no other logic to handle Indexed RAM bundle, so it figures that the bundle is not RAM, cause there is no js-modules/UNBUNDLE file and tries to load as regular bundle and fails.

In this PR we added check if it is indexed RAM bundle in `jniLoadScriptFromAssets` and handle it if it is.
## Changelog
[Android] [Fixed] fix indexed RAM bundle

Solves https://github.com/facebook/react-native/issues/21282
Pull Request resolved: https://github.com/facebook/react-native/pull/24967

Differential Revision: D15575924

Pulled By: cpojer

fbshipit-source-id: 5ea428e0b793edd8242243f39f933d1092b35260
2019-06-07 15:11:50 +01:00
Michael MasonandLorenzo Sciandra 0d05051f3c - Fix missing whitespace in debug instructions (#25122)
Summary:
Fixes minor whitespace issue with the new new-app template.

## Changelog

[Android] [Fixed] - Fix missing whitespace in debug instructions
Pull Request resolved: https://github.com/facebook/react-native/pull/25122

Differential Revision: D15602100

Pulled By: cpojer

fbshipit-source-id: 07c51c6359e37826941de659bcedea692ff3315a
2019-06-07 15:11:43 +01:00
Janic DuplessisandLorenzo Sciandra 54471963e0 Remove vendored fetch polyfill, update to whatwg-fetch@3.0 (#24418)
Summary:
The original reason for vendoring the fetch polyfill was to remove the default blob response type but this was reverted.

Here's a little history around the fetch polyfill and the blob issue:

- Original commit introducing the vendored polyfill: #19333, the goal was to fix a memory leak because our blob implementation doesn't release resources automatically. Not an ideal fix but since the issue was pretty severe and the infra for a proper fix was not in place.
- This introduced an issue when downloading images using `fetch` which was fixed by #22063 which re-added the default blob content type. However that re-introduced the original fetch memory leak.
- We have better infra now with jsi and I was able to get blob deallocation working, see #24405

Currently the vendored fetch polyfill is useless since it was changed back to the original version. We can just use the npm version again. I also updated to 3.0 which brings better spec compliance and support for cancellation via `AbortController`, https://github.com/github/fetch/releases/tag/v3.0.0.

## Changelog

[General] [Changed] - Remove vendored fetch polyfill, update to whatwg-fetch@3.0
Pull Request resolved: https://github.com/facebook/react-native/pull/24418

Differential Revision: D14932683

Pulled By: cpojer

fbshipit-source-id: 915e3d25978e8b9d7507ed807e7fba45aa88385a
2019-06-07 15:11:36 +01:00
Petter HesselbergandLorenzo Sciandra 1b8f7e7a36 Don't reference null android.ndkDirectory in build.gradle (#25088)
Summary:
If you (try to) build React Native for Android without having the NDK properly installed and referenced, you get the following error:

>A problem occurred evaluating project ':ReactAndroid'.
\> Cannot get property 'absolutePath' on null object

This is not an overly helpful diagnostic. This PR results in this message instead:

>ndk-build binary cannot be found, check if you've set $ANDROID_NDK environment variable correctly or if ndk.dir is setup in local.properties

Fixes #25087

## Changelog

[Android] [Fixed] - Show proper error message instead of throwing a NullReferenceException if Gradle cannot find the NDK
Pull Request resolved: https://github.com/facebook/react-native/pull/25088

Differential Revision: D15559271

Pulled By: cpojer

fbshipit-source-id: 35c9a9321af4e4a34bf519144ada48884b48352d
2019-06-07 15:11:29 +01:00
Andrea CimitanandLorenzo Sciandra 46500b3e36 Linking.getInitialURL() to work with NFC tags on Android (#25055)
Summary:
This PR solves bug https://github.com/facebook/react-native/issues/24393 for Android. Allows an app to be opened with an NFC tag and getting the url trough Linking.getInitialURL()

## Changelog
[Android] [Fixed] - This branch checks also for `ACTION_NDEF_DISCOVERED` intent matches to set the initialURL
Pull Request resolved: https://github.com/facebook/react-native/pull/25055

Differential Revision: D15516873

Pulled By: cpojer

fbshipit-source-id: e8803738d857a69e1063e926fc3858a416a0b25e
2019-06-07 15:11:22 +01:00
Oleksandr MelnykovandLorenzo Sciandra ed40f382e8 Fix backgroundColor top level prop of TextInput
Summary:
Changelog: [Android] [FIXED] - Fix backgroundColor top level prop of TextInput

This diff fixes two issues with the `backgroundColor` top level property of TextInput on Android:
 * Now it is possible to set a **string** value for the top-level `backgroundColor` property of TextInput (crashed the app previously):
```
<TextInput backgroundColor="#ffccbb">Hello, React Native</TextInput>
```
* Now it's possible to set an **integer** value for the top-level `backgroundColor` property of TextInput (had no effect previously):
```
<TextInput backgroundColor={0xffccbbff}>Hello, React Native</TextInput>
```

A `customType = "Color"` annotation parameter must be provided for `ReactBaseTextShadowNode.setBackgroundColor(...)` since the color value must be previously processed in JS before sending it over the bridge to the native code. The JS code will parse the color value and return the proper ARGB color integer to the native platforms (https://fburl.com/uqup52tn).

Without providing the custom type for the background color, if a string value is set for the top-level `backgroundColor` property in the JS code, the Android code will crash since it expects an integer value for the color in `ReactBaseTextShadowNode.setBackgroundColor(...)`, but a string will be passed from JS without any conversion and there will be a `ClassCastException` thrown. If an integer value without the alpha component (like `0xffccbb`) is set, the Android native view would get an integer color value with its alpha component set to `0x00`, which means a transparent color.

On a side note: the alpha component of a color must always be set when using an integer value for `backgroundColor` since the JS code, while processing the color type, shifts the rightmost 8 bytes (alpha component) to the leftmost position. If those 8 bytes are not the alpha component, you will get the wrong color in the end. It doesn't seem to be a problem for string values of `backgroundColor` though.

Reviewed By: mdvacca

Differential Revision: D15453980

fbshipit-source-id: f3f5d9c9877cdbce79a67f2ed93ad4589576d166
2019-06-07 15:11:14 +01:00
DulmandakhandLorenzo Sciandra 8d61a4e5f9 bump android gradle plugin to 3.4.1 (#24883)
Summary:
bump android gradle plugin to 3.4.1, includes many fixes and improvements.

## Changelog

[Android] [Changed] - bump android gradle plugin to 3.4.1
Pull Request resolved: https://github.com/facebook/react-native/pull/24883

Differential Revision: D15474556

Pulled By: hramos

fbshipit-source-id: 8d1eb91855b9f416ed3380c61f34672deded26c1
2019-06-07 15:11:05 +01:00
Héctor Ramos 55332afb29 [0.60.0-rc.0] Bump version numbers 2019-05-30 08:29:45 -07:00
Héctor Ramos d014fc7153 Use newer Docker container, with ssl support 2019-05-30 08:28:56 -07:00
Héctor Ramos 29496ede07 Revert "[0.60.0-rc.0] Bump version numbers"
This reverts commit f4508a6765.
2019-05-30 08:23:24 -07:00
Mike Grabowski f4508a6765 [0.60.0-rc.0] Bump version numbers 2019-05-30 13:34:40 +02:00
Héctor Ramos 53e32a47e4 Remove duplicate Android SDK steps already present in container 2019-05-28 18:15:43 -07:00
Héctor Ramos 41742b3fe3 Fix config for 0.60 release 2019-05-28 07:56:31 -07:00
Héctor Ramos 5be47faff7 Make publish job depend on checkout_code as git is not available in RNAndroid docker container 2019-05-28 07:55:22 -07:00
Héctor Ramos ea460d6d3e Revert "[0.60.0-rc.0] Bump version numbers"
This reverts commit edb749f283.
2019-05-28 07:39:11 -07:00
Mike Grabowski edb749f283 [0.60.0-rc.0] Bump version numbers 2019-05-22 22:29:43 +02:00
61 changed files with 827 additions and 1070 deletions
+6 -6
View File
@@ -157,7 +157,7 @@ js_defaults: &js_defaults
android_defaults: &android_defaults
<<: *defaults
docker:
- image: reactnativecommunity/react-native-android:2019-5-7
- image: reactnativecommunity/react-native-android:2019-5-29
resource_class: "large"
environment:
- TERM: "dumb"
@@ -544,10 +544,9 @@ jobs:
# Keep configuring Android dependencies while AVD boots up
# Install Buck
- restore-cache: *restore-buck-downloads-cache
- run:
name: Install BUCK
name: Install Buck
command: |
buck --version
# Install related tooling
@@ -684,9 +683,6 @@ jobs:
- restore-cache: *restore-gradle-downloads-cache
- run: *download-dependencies-gradle
- restore-cache: *restore-yarn-cache
- run: *yarn
- run:
name: Authenticate with npm
command: echo "//registry.npmjs.org/:_authToken=${CIRCLE_NPM_TOKEN}" > ~/.npmrc
@@ -727,8 +723,12 @@ workflows:
releases:
jobs:
- checkout_code:
filters: *filter-only-version-tags
- publish_npm_package:
filters: *filter-only-version-tags
requires:
- checkout_code
analysis:
jobs:
@@ -25,6 +25,7 @@ const invariant = require('invariant');
const processDecelerationRate = require('./processDecelerationRate');
const requireNativeComponent = require('../../ReactNative/requireNativeComponent');
const resolveAssetSource = require('../../Image/resolveAssetSource');
const splitLayoutProps = require('../../StyleSheet/splitLayoutProps');
import type {
PressEvent,
@@ -1125,15 +1126,15 @@ class ScrollView extends React.Component<Props, State> {
// On Android wrap the ScrollView with a AndroidSwipeRefreshLayout.
// Since the ScrollView is wrapped add the style props to the
// AndroidSwipeRefreshLayout and use flex: 1 for the ScrollView.
// Note: we should only apply props.style on the wrapper
// Note: we should split props.style on the inner and outer props
// however, the ScrollView still needs the baseStyle to be scrollable
const {outer, inner} = splitLayoutProps(flattenStyle(props.style));
return React.cloneElement(
refreshControl,
{style: props.style},
{style: [baseStyle, outer]},
<ScrollViewClass
{...props}
style={baseStyle}
style={[baseStyle, inner]}
// $FlowFixMe
ref={this._setScrollViewRef}>
{contentContainer}
+4 -4
View File
@@ -1,17 +1,17 @@
/**
* @generated by scripts/bump-oss-version.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @generated by scripts/bump-oss-version.js
* @flow
*/
exports.version = {
major: 0,
minor: 0,
minor: 60,
patch: 0,
prerelease: null,
prerelease: 'rc.3',
};
+4
View File
@@ -21,6 +21,10 @@ if (global.window === undefined) {
global.window = global;
}
if (global.self === undefined) {
global.self = global;
}
// Set up process
global.process = global.process || {};
global.process.env = global.process.env || {};
+1 -1
View File
@@ -11,7 +11,7 @@
'use strict';
const whatwg = require('../vendor/core/whatwg-fetch');
const whatwg = require('whatwg-fetch');
if (whatwg && whatwg.fetch) {
module.exports = whatwg;
@@ -27,7 +27,7 @@ const DebugInstructions = Platform.select({
),
default: () => (
<Text>
Press <Text style={styles.highlight}>menu button</Text> or
Press <Text style={styles.highlight}>menu button</Text> or{' '}
<Text style={styles.highlight}>Shake</Text> your device to open the React
Native debug menu.
</Text>
@@ -0,0 +1,44 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @emails oncall+react_native
*/
'use strict';
const splitLayoutProps = require('../splitLayoutProps');
test('splits style objects', () => {
const style = {width: 10, margin: 20, padding: 30};
const {outer, inner} = splitLayoutProps(style);
expect(outer).toMatchInlineSnapshot(`
Object {
"margin": 20,
"width": 10,
}
`);
expect(inner).toMatchInlineSnapshot(`
Object {
"padding": 30,
}
`);
});
test('does not copy values to both returned objects', () => {
const style = {marginVertical: 5, paddingHorizontal: 10};
const {outer, inner} = splitLayoutProps(style);
expect(outer).toMatchInlineSnapshot(`
Object {
"marginVertical": 5,
}
`);
expect(inner).toMatchInlineSnapshot(`
Object {
"paddingHorizontal": 10,
}
`);
});
+62
View File
@@ -0,0 +1,62 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict-local
*/
'use strict';
import type {DangerouslyImpreciseStyle} from './StyleSheet';
const OUTER_PROPS = Object.assign(Object.create(null), {
margin: true,
marginHorizontal: true,
marginVertical: true,
marginBottom: true,
marginTop: true,
marginLeft: true,
marginRight: true,
flex: true,
flexGrow: true,
flexShrink: true,
flexBasis: true,
alignSelf: true,
height: true,
minHeight: true,
maxHeight: true,
width: true,
minWidth: true,
maxWidth: true,
position: true,
left: true,
right: true,
bottom: true,
top: true,
});
function splitLayoutProps(
props: ?DangerouslyImpreciseStyle,
): {
outer: DangerouslyImpreciseStyle,
inner: DangerouslyImpreciseStyle,
} {
const inner = {};
const outer = {};
if (props) {
Object.keys(props).forEach(k => {
const value: $ElementType<DangerouslyImpreciseStyle, typeof k> = props[k];
if (OUTER_PROPS[k]) {
outer[k] = value;
} else {
inner[k] = value;
}
});
}
return {outer, inner};
}
module.exports = splitLayoutProps;
@@ -7,6 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
19461666225DC3B300E4E008 /* RCTTextRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 19461664225DC3B300E4E008 /* RCTTextRenderer.m */; };
5956B130200FEBAA008D9D16 /* RCTRawTextShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5956B0FD200FEBA9008D9D16 /* RCTRawTextShadowView.m */; };
5956B131200FEBAA008D9D16 /* RCTRawTextViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5956B0FE200FEBA9008D9D16 /* RCTRawTextViewManager.m */; };
5956B132200FEBAA008D9D16 /* RCTSinglelineTextInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5956B101200FEBA9008D9D16 /* RCTSinglelineTextInputView.m */; };
@@ -187,6 +188,8 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
19461664225DC3B300E4E008 /* RCTTextRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTextRenderer.m; sourceTree = "<group>"; };
19461665225DC3B300E4E008 /* RCTTextRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTextRenderer.h; sourceTree = "<group>"; };
2D2A287B1D9B048500D4039D /* libRCTText-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libRCTText-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
58B5119B1A9E6C1200147676 /* libRCTText.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRCTText.a; sourceTree = BUILT_PRODUCTS_DIR; };
5956B0F9200FEBA9008D9D16 /* RCTConvert+Text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTConvert+Text.h"; sourceTree = "<group>"; };
@@ -360,6 +363,8 @@
children = (
5956B129200FEBAA008D9D16 /* NSTextStorage+FontScaling.h */,
5956B125200FEBAA008D9D16 /* NSTextStorage+FontScaling.m */,
19461665225DC3B300E4E008 /* RCTTextRenderer.h */,
19461664225DC3B300E4E008 /* RCTTextRenderer.m */,
5956B126200FEBAA008D9D16 /* RCTTextShadowView.h */,
5956B122200FEBAA008D9D16 /* RCTTextShadowView.m */,
5956B123200FEBAA008D9D16 /* RCTTextView.h */,
@@ -439,6 +444,7 @@
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
English,
en,
);
mainGroup = 58B511921A9E6C1200147676;
@@ -504,6 +510,7 @@
5956B142200FEBAA008D9D16 /* RCTTextViewManager.m in Sources */,
5956B135200FEBAA008D9D16 /* RCTBaseTextInputView.m in Sources */,
5956B144200FEBAA008D9D16 /* RCTVirtualTextViewManager.m in Sources */,
19461666225DC3B300E4E008 /* RCTTextRenderer.m in Sources */,
5C245F39205E216A00D936E9 /* RCTInputAccessoryShadowView.m in Sources */,
5956B13B200FEBAA008D9D16 /* RCTMultilineTextInputViewManager.m in Sources */,
5956B134200FEBAA008D9D16 /* RCTSinglelineTextInputViewManager.m in Sources */,
+23
View File
@@ -0,0 +1,23 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
/**
* Used by text layers to render text. Note that UIKit crashes if this delegate is implemented
* directly on a UIView subclass since it already implements it for the view's root
* layer. This is why this is implemented in a separate class.
*/
@interface RCTTextRenderer : NSObject <CALayerDelegate>
- (void)setTextStorage:(NSTextStorage *)textStorage contentFrame:(CGRect)contentFrame;
@end
NS_ASSUME_NONNULL_END
+56
View File
@@ -0,0 +1,56 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import "RCTTextRenderer.h"
#import "RCTTextAttributes.h"
@implementation RCTTextRenderer
{
NSTextStorage *_Nullable _textStorage;
CGRect _contentFrame;
}
- (void)setTextStorage:(NSTextStorage *)textStorage
contentFrame:(CGRect)contentFrame
{
_textStorage = textStorage;
_contentFrame = contentFrame;
}
- (void)drawLayer:(CALayer *)layer
inContext:(CGContextRef)ctx;
{
if (!_textStorage) {
return;
}
CGRect boundingBox = CGContextGetClipBoundingBox(ctx);
CGContextSaveGState(ctx);
UIGraphicsPushContext(ctx);
NSLayoutManager *layoutManager = _textStorage.layoutManagers.firstObject;
NSTextContainer *textContainer = layoutManager.textContainers.firstObject;
NSRange glyphRange =
[layoutManager glyphRangeForBoundingRect:boundingBox
inTextContainer:textContainer];
[layoutManager drawBackgroundForGlyphRange:glyphRange atPoint:_contentFrame.origin];
[layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:_contentFrame.origin];
UIGraphicsPopContext();
CGContextRestoreGState(ctx);
}
- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event
{
// Disable all implicit animations.
return (id)[NSNull null];
}
@end
+112 -30
View File
@@ -13,15 +13,36 @@
#import <React/UIView+React.h>
#import "RCTTextShadowView.h"
#import "RCTTextRenderer.h"
@interface RCTTextTiledLayer : CATiledLayer
@end
@implementation RCTTextTiledLayer
+ (CFTimeInterval)fadeDuration
{
return 0.05;
}
@end
@implementation RCTTextView
{
CAShapeLayer *_highlightLayer;
UILongPressGestureRecognizer *_longPressGestureRecognizer;
NSArray<UIView *> *_Nullable _descendantViews;
NSTextStorage *_Nullable _textStorage;
CGRect _contentFrame;
RCTTextRenderer *_renderer;
// For small amount of text avoid the overhead of CATiledLayer and
// make render text synchronously. For large amount of text, use
// CATiledLayer to chunk text rendering and avoid linear memory
// usage.
CALayer *_Nullable _syncLayer;
RCTTextTiledLayer *_Nullable _asyncTiledLayer;
CAShapeLayer *_highlightLayer;
}
- (instancetype)initWithFrame:(CGRect)frame
@@ -31,6 +52,7 @@
self.accessibilityTraits |= UIAccessibilityTraitStaticText;
self.opaque = NO;
self.contentMode = UIViewContentModeRedraw;
_renderer = [RCTTextRenderer new];
}
return self;
}
@@ -65,6 +87,7 @@
// This disables the frame animation, without affecting opacity, etc.
[UIView performWithoutAnimation:^{
[super reactSetFrame:frame];
[self configureLayer];
}];
}
@@ -91,55 +114,101 @@
[self addSubview:view];
}
[self setNeedsDisplay];
[_renderer setTextStorage:textStorage contentFrame:contentFrame];
[self configureLayer];
[self setCurrentLayerNeedsDisplay];
}
- (void)drawRect:(CGRect)rect
- (void)configureLayer
{
if (!_textStorage) {
return;
}
CALayer *currentLayer;
CGSize screenSize = RCTScreenSize();
CGFloat textViewTileSize = MAX(screenSize.width, screenSize.height) * 1.5;
if (self.frame.size.width > textViewTileSize || self.frame.size.height > textViewTileSize) {
// Cleanup sync layer
if (_syncLayer != nil) {
_syncLayer.delegate = nil;
[_syncLayer removeFromSuperlayer];
_syncLayer = nil;
}
if (_asyncTiledLayer == nil) {
RCTTextTiledLayer *layer = [RCTTextTiledLayer layer];
layer.delegate = _renderer;
layer.contentsScale = RCTScreenScale();
layer.tileSize = CGSizeMake(textViewTileSize, textViewTileSize);
_asyncTiledLayer = layer;
[self.layer addSublayer:layer];
[layer setNeedsDisplay];
}
_asyncTiledLayer.frame = self.bounds;
currentLayer = _asyncTiledLayer;
} else {
// Cleanup async tiled layer
if (_asyncTiledLayer != nil) {
_asyncTiledLayer.delegate = nil;
[_asyncTiledLayer removeFromSuperlayer];
_asyncTiledLayer = nil;
}
if (_syncLayer == nil) {
CALayer *layer = [CALayer layer];
layer.delegate = _renderer;
layer.contentsScale = RCTScreenScale();
_syncLayer = layer;
[self.layer addSublayer:layer];
[layer setNeedsDisplay];
}
_syncLayer.frame = self.bounds;
currentLayer = _syncLayer;
}
NSLayoutManager *layoutManager = _textStorage.layoutManagers.firstObject;
NSTextContainer *textContainer = layoutManager.textContainers.firstObject;
NSRange glyphRange = [layoutManager glyphRangeForTextContainer:textContainer];
[layoutManager drawBackgroundForGlyphRange:glyphRange atPoint:_contentFrame.origin];
[layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:_contentFrame.origin];
NSRange glyphRange =
[layoutManager glyphRangeForTextContainer:textContainer];
__block UIBezierPath *highlightPath = nil;
NSRange characterRange = [layoutManager characterRangeForGlyphRange:glyphRange
actualGlyphRange:NULL];
[_textStorage enumerateAttribute:RCTTextAttributesIsHighlightedAttributeName
inRange:characterRange
options:0
usingBlock:
^(NSNumber *value, NSRange range, __unused BOOL *stop) {
if (!value.boolValue) {
return;
}
^(NSNumber *value, NSRange range, __unused BOOL *stop) {
if (!value.boolValue) {
return;
}
[layoutManager enumerateEnclosingRectsForGlyphRange:range
withinSelectedGlyphRange:range
inTextContainer:textContainer
usingBlock:
^(CGRect enclosingRect, __unused BOOL *anotherStop) {
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(enclosingRect, -2, -2) cornerRadius:2];
if (highlightPath) {
[highlightPath appendPath:path];
} else {
highlightPath = path;
}
[layoutManager enumerateEnclosingRectsForGlyphRange:range
withinSelectedGlyphRange:range
inTextContainer:textContainer
usingBlock:
^(CGRect enclosingRect, __unused BOOL *anotherStop) {
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(enclosingRect, -2, -2) cornerRadius:2];
if (highlightPath) {
[highlightPath appendPath:path];
} else {
highlightPath = path;
}
}
];
}];
}];
if (highlightPath) {
if (!_highlightLayer) {
_highlightLayer = [CAShapeLayer layer];
_highlightLayer.fillColor = [UIColor colorWithWhite:0 alpha:0.25].CGColor;
[self.layer addSublayer:_highlightLayer];
}
if (![currentLayer.sublayers containsObject:_highlightLayer]) {
[currentLayer addSublayer:_highlightLayer];
}
_highlightLayer.position = _contentFrame.origin;
_highlightLayer.path = highlightPath.CGPath;
@@ -149,6 +218,15 @@
}
}
- (void)setCurrentLayerNeedsDisplay
{
if (_asyncTiledLayer != nil) {
[_asyncTiledLayer setNeedsDisplay];
} else if (_syncLayer != nil) {
[_syncLayer setNeedsDisplay];
}
[_highlightLayer setNeedsDisplay];
}
- (NSNumber *)reactTagAtPoint:(CGPoint)point
{
@@ -174,14 +252,18 @@
{
[super didMoveToWindow];
// When an `RCTText` instance moves offscreen (possibly due to parent clipping),
// we unset the layer's contents until it comes onscreen again.
if (!self.window) {
self.layer.contents = nil;
if (_highlightLayer) {
[_highlightLayer removeFromSuperlayer];
_highlightLayer = nil;
}
[_syncLayer removeFromSuperlayer];
_syncLayer = nil;
[_asyncTiledLayer removeFromSuperlayer];
_asyncTiledLayer = nil;
[_highlightLayer removeFromSuperlayer];
_highlightLayer = nil;
} else if (_textStorage) {
[self setNeedsDisplay];
[self configureLayer];
[self setCurrentLayerNeedsDisplay];
}
}
-533
View File
@@ -1,533 +0,0 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
// Fork of https://github.com/github/fetch/blob/master/fetch.js that does not
// use reponseType: 'blob' by default. RN already has specific native implementations
// for different response types so there is no need to add the extra blob overhead.
// Copyright (c) 2014-2016 GitHub, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
(function(self) {
'use strict';
if (self.fetch) {
return;
}
var support = {
searchParams: 'URLSearchParams' in self,
iterable: 'Symbol' in self && 'iterator' in Symbol,
blob:
'FileReader' in self &&
'Blob' in self &&
(function() {
try {
new Blob();
return true;
} catch (e) {
return false;
}
})(),
formData: 'FormData' in self,
arrayBuffer: 'ArrayBuffer' in self,
};
if (support.arrayBuffer) {
var viewClasses = [
'[object Int8Array]',
'[object Uint8Array]',
'[object Uint8ClampedArray]',
'[object Int16Array]',
'[object Uint16Array]',
'[object Int32Array]',
'[object Uint32Array]',
'[object Float32Array]',
'[object Float64Array]',
];
var isDataView = function(obj) {
return obj && DataView.prototype.isPrototypeOf(obj);
};
var isArrayBufferView =
ArrayBuffer.isView ||
function(obj) {
return (
obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
);
};
}
function normalizeName(name) {
if (typeof name !== 'string') {
name = String(name);
}
if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) {
throw new TypeError('Invalid character in header field name');
}
return name.toLowerCase();
}
function normalizeValue(value) {
if (typeof value !== 'string') {
value = String(value);
}
return value;
}
// Build a destructive iterator for the value list
function iteratorFor(items) {
var iterator = {
next: function() {
var value = items.shift();
return {done: value === undefined, value: value};
},
};
if (support.iterable) {
iterator[Symbol.iterator] = function() {
return iterator;
};
}
return iterator;
}
function Headers(headers) {
this.map = {};
if (headers instanceof Headers) {
headers.forEach(function(value, name) {
this.append(name, value);
}, this);
} else if (Array.isArray(headers)) {
headers.forEach(function(header) {
this.append(header[0], header[1]);
}, this);
} else if (headers) {
Object.getOwnPropertyNames(headers).forEach(function(name) {
this.append(name, headers[name]);
}, this);
}
}
Headers.prototype.append = function(name, value) {
name = normalizeName(name);
value = normalizeValue(value);
var oldValue = this.map[name];
this.map[name] = oldValue ? oldValue + ',' + value : value;
};
Headers.prototype['delete'] = function(name) {
delete this.map[normalizeName(name)];
};
Headers.prototype.get = function(name) {
name = normalizeName(name);
return this.has(name) ? this.map[name] : null;
};
Headers.prototype.has = function(name) {
return this.map.hasOwnProperty(normalizeName(name));
};
Headers.prototype.set = function(name, value) {
this.map[normalizeName(name)] = normalizeValue(value);
};
Headers.prototype.forEach = function(callback, thisArg) {
for (var name in this.map) {
if (this.map.hasOwnProperty(name)) {
callback.call(thisArg, this.map[name], name, this);
}
}
};
Headers.prototype.keys = function() {
var items = [];
this.forEach(function(value, name) {
items.push(name);
});
return iteratorFor(items);
};
Headers.prototype.values = function() {
var items = [];
this.forEach(function(value) {
items.push(value);
});
return iteratorFor(items);
};
Headers.prototype.entries = function() {
var items = [];
this.forEach(function(value, name) {
items.push([name, value]);
});
return iteratorFor(items);
};
if (support.iterable) {
Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
}
function consumed(body) {
if (body.bodyUsed) {
return Promise.reject(new TypeError('Already read'));
}
body.bodyUsed = true;
}
function fileReaderReady(reader) {
return new Promise(function(resolve, reject) {
reader.onload = function() {
resolve(reader.result);
};
reader.onerror = function() {
reject(reader.error);
};
});
}
function readBlobAsArrayBuffer(blob) {
var reader = new FileReader();
var promise = fileReaderReady(reader);
reader.readAsArrayBuffer(blob);
return promise;
}
function readBlobAsText(blob) {
var reader = new FileReader();
var promise = fileReaderReady(reader);
reader.readAsText(blob);
return promise;
}
function readArrayBufferAsText(buf) {
var view = new Uint8Array(buf);
var chars = new Array(view.length);
for (var i = 0; i < view.length; i++) {
chars[i] = String.fromCharCode(view[i]);
}
return chars.join('');
}
function bufferClone(buf) {
if (buf.slice) {
return buf.slice(0);
} else {
var view = new Uint8Array(buf.byteLength);
view.set(new Uint8Array(buf));
return view.buffer;
}
}
function Body() {
this.bodyUsed = false;
this._initBody = function(body) {
this._bodyInit = body;
if (!body) {
this._bodyText = '';
} else if (typeof body === 'string') {
this._bodyText = body;
} else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
this._bodyBlob = body;
} else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
this._bodyFormData = body;
} else if (
support.searchParams &&
URLSearchParams.prototype.isPrototypeOf(body)
) {
this._bodyText = body.toString();
} else if (support.arrayBuffer && support.blob && isDataView(body)) {
this._bodyArrayBuffer = bufferClone(body.buffer);
// IE 10-11 can't handle a DataView body.
this._bodyInit = new Blob([this._bodyArrayBuffer]);
} else if (
support.arrayBuffer &&
(ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))
) {
this._bodyArrayBuffer = bufferClone(body);
} else {
throw new Error('unsupported BodyInit type');
}
if (!this.headers.get('content-type')) {
if (typeof body === 'string') {
this.headers.set('content-type', 'text/plain;charset=UTF-8');
} else if (this._bodyBlob && this._bodyBlob.type) {
this.headers.set('content-type', this._bodyBlob.type);
} else if (
support.searchParams &&
URLSearchParams.prototype.isPrototypeOf(body)
) {
this.headers.set(
'content-type',
'application/x-www-form-urlencoded;charset=UTF-8',
);
}
}
};
if (support.blob) {
this.blob = function() {
var rejected = consumed(this);
if (rejected) {
return rejected;
}
if (this._bodyBlob) {
return Promise.resolve(this._bodyBlob);
} else if (this._bodyArrayBuffer) {
return Promise.resolve(new Blob([this._bodyArrayBuffer]));
} else if (this._bodyFormData) {
throw new Error('could not read FormData body as blob');
} else {
return Promise.resolve(new Blob([this._bodyText]));
}
};
this.arrayBuffer = function() {
if (this._bodyArrayBuffer) {
return consumed(this) || Promise.resolve(this._bodyArrayBuffer);
} else {
return this.blob().then(readBlobAsArrayBuffer);
}
};
}
this.text = function() {
var rejected = consumed(this);
if (rejected) {
return rejected;
}
if (this._bodyBlob) {
return readBlobAsText(this._bodyBlob);
} else if (this._bodyArrayBuffer) {
return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer));
} else if (this._bodyFormData) {
throw new Error('could not read FormData body as text');
} else {
return Promise.resolve(this._bodyText);
}
};
if (support.formData) {
this.formData = function() {
return this.text().then(decode);
};
}
this.json = function() {
return this.text().then(JSON.parse);
};
return this;
}
// HTTP methods whose capitalization should be normalized
var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];
function normalizeMethod(method) {
var upcased = method.toUpperCase();
return methods.indexOf(upcased) > -1 ? upcased : method;
}
function Request(input, options) {
options = options || {};
var body = options.body;
if (input instanceof Request) {
if (input.bodyUsed) {
throw new TypeError('Already read');
}
this.url = input.url;
this.credentials = input.credentials;
if (!options.headers) {
this.headers = new Headers(input.headers);
}
this.method = input.method;
this.mode = input.mode;
if (!body && input._bodyInit != null) {
body = input._bodyInit;
input.bodyUsed = true;
}
} else {
this.url = String(input);
}
this.credentials = options.credentials || this.credentials || 'omit';
if (options.headers || !this.headers) {
this.headers = new Headers(options.headers);
}
this.method = normalizeMethod(options.method || this.method || 'GET');
this.mode = options.mode || this.mode || null;
this.referrer = null;
if ((this.method === 'GET' || this.method === 'HEAD') && body) {
throw new TypeError('Body not allowed for GET or HEAD requests');
}
this._initBody(body);
}
Request.prototype.clone = function() {
return new Request(this, {body: this._bodyInit});
};
function decode(body) {
var form = new FormData();
body
.trim()
.split('&')
.forEach(function(bytes) {
if (bytes) {
var split = bytes.split('=');
var name = split.shift().replace(/\+/g, ' ');
var value = split.join('=').replace(/\+/g, ' ');
form.append(decodeURIComponent(name), decodeURIComponent(value));
}
});
return form;
}
function parseHeaders(rawHeaders) {
var headers = new Headers();
// Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
// https://tools.ietf.org/html/rfc7230#section-3.2
var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' ');
preProcessedHeaders.split(/\r?\n/).forEach(function(line) {
var parts = line.split(':');
var key = parts.shift().trim();
if (key) {
var value = parts.join(':').trim();
headers.append(key, value);
}
});
return headers;
}
Body.call(Request.prototype);
function Response(bodyInit, options) {
if (!options) {
options = {};
}
this.type = 'default';
this.status = options.status === undefined ? 200 : options.status;
this.ok = this.status >= 200 && this.status < 300;
this.statusText = 'statusText' in options ? options.statusText : 'OK';
this.headers = new Headers(options.headers);
this.url = options.url || '';
this._initBody(bodyInit);
}
Body.call(Response.prototype);
Response.prototype.clone = function() {
return new Response(this._bodyInit, {
status: this.status,
statusText: this.statusText,
headers: new Headers(this.headers),
url: this.url,
});
};
Response.error = function() {
var response = new Response(null, {status: 0, statusText: ''});
response.type = 'error';
return response;
};
var redirectStatuses = [301, 302, 303, 307, 308];
Response.redirect = function(url, status) {
if (redirectStatuses.indexOf(status) === -1) {
throw new RangeError('Invalid status code');
}
return new Response(null, {status: status, headers: {location: url}});
};
self.Headers = Headers;
self.Request = Request;
self.Response = Response;
self.fetch = function(input, init) {
return new Promise(function(resolve, reject) {
var request = new Request(input, init);
var xhr = new XMLHttpRequest();
xhr.onload = function() {
var options = {
status: xhr.status,
statusText: xhr.statusText,
headers: parseHeaders(xhr.getAllResponseHeaders() || ''),
};
options.url =
'responseURL' in xhr
? xhr.responseURL
: options.headers.get('X-Request-URL');
var body = 'response' in xhr ? xhr.response : xhr.responseText;
resolve(new Response(body, options));
};
xhr.onerror = function() {
reject(new TypeError('Network request failed'));
};
xhr.ontimeout = function() {
reject(new TypeError('Network request failed'));
};
xhr.open(request.method, request.url, true);
if (request.credentials === 'include') {
xhr.withCredentials = true;
} else if (request.credentials === 'omit') {
xhr.withCredentials = false;
}
if ('responseType' in xhr && support.blob) {
xhr.responseType = 'blob';
}
request.headers.forEach(function(value, name) {
xhr.setRequestHeader(name, value);
});
xhr.send(
typeof request._bodyInit === 'undefined' ? null : request._bodyInit,
);
});
};
self.fetch.polyfill = true;
})(typeof self !== 'undefined' ? self : this);
Binary file not shown.

Before

Width:  |  Height:  |  Size: 315 KiB

After

Width:  |  Height:  |  Size: 315 KiB

@@ -47,7 +47,7 @@ public class RNTesterApplication extends Application implements ReactApplication
@Override
public void onCreate() {
ReactFontManager.getInstance().addCustomFont(this, "Srisakdi", R.font.srisakdi);
ReactFontManager.getInstance().addCustomFont(this, "Rubik", R.font.rubik);
super.onCreate();
}
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font app:fontStyle="normal" app:fontWeight="300" app:font="@font/rubik_light"/>
<font app:fontStyle="normal" app:fontWeight="400" app:font="@font/rubik_regular"/>
<font app:fontStyle="normal" app:fontWeight="500" app:font="@font/rubik_medium" />
<font app:fontStyle="normal" app:fontWeight="700" app:font="@font/rubik_bold" />
<font app:fontStyle="italic" app:fontWeight="500" app:font="@font/rubik_medium_italic" />
</font-family>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font app:fontStyle="normal" app:fontWeight="400" app:font="@font/srisakdi_regular"/>
<font app:fontStyle="normal" app:fontWeight="700" app:font="@font/srisakdi_bold" />
</font-family>
+36 -8
View File
@@ -183,13 +183,41 @@ class TextExample extends React.Component<{}> {
<Text style={{fontFamily: 'notoserif', fontStyle: 'italic'}}>
NotoSerif Italic (Missing Font file)
</Text>
<Text style={{fontFamily: 'Srisakdi'}}>Srisakdi Regular</Text>
<Text
style={{
fontFamily: 'Srisakdi',
fontWeight: 'bold',
fontFamily: 'Rubik',
fontWeight: 'normal',
}}>
Srisakdi Bold
Rubik Regular
</Text>
<Text
style={{
fontFamily: 'Rubik',
fontWeight: '300',
}}>
Rubik Light
</Text>
<Text
style={{
fontFamily: 'Rubik',
fontWeight: '700',
}}>
Rubik Bold
</Text>
<Text
style={{
fontFamily: 'Rubik',
fontWeight: '500',
}}>
Rubik Medium
</Text>
<Text
style={{
fontFamily: 'Rubik',
fontStyle: 'italic',
fontWeight: '500',
}}>
Rubik Medium Italic
</Text>
</View>
</View>
@@ -205,15 +233,15 @@ class TextExample extends React.Component<{}> {
</RNTesterBlock>
<RNTesterBlock title="Font Weight">
<Text style={{fontWeight: 'bold'}}>Move fast and be bold</Text>
<Text style={{fontWeight: 'normal'}}>Move fast and be bold</Text>
<Text style={{fontWeight: 'normal'}}>Move fast and be normal</Text>
</RNTesterBlock>
<RNTesterBlock title="Font Style">
<Text style={{fontStyle: 'italic'}}>Move fast and be bold</Text>
<Text style={{fontStyle: 'normal'}}>Move fast and be bold</Text>
<Text style={{fontStyle: 'italic'}}>Move fast and be italic</Text>
<Text style={{fontStyle: 'normal'}}>Move fast and be normal</Text>
</RNTesterBlock>
<RNTesterBlock title="Font Style and Weight">
<Text style={{fontStyle: 'italic', fontWeight: 'bold'}}>
Move fast and be bold
Move fast and be both bold and italic
</Text>
</RNTesterBlock>
<RNTesterBlock title="Text Decoration">
+23
View File
@@ -453,6 +453,23 @@ class TextWithCapBaseBox extends React.Component<*, *> {
}
}
function LongTextExample() {
const [collapsed, setCollapsed] = React.useState(true);
return (
<View>
<Button
onPress={() => setCollapsed(state => !state)}
title="Toggle long text"
/>
<Text>
{Array.from({length: collapsed ? 5 : 5000})
.map((_, i) => i)
.join('\n')}
</Text>
</View>
);
}
exports.title = '<Text>';
exports.description = 'Base component for rendering styled text.';
exports.displayName = 'TextExample';
@@ -1125,4 +1142,10 @@ exports.examples = [
);
},
},
{
title: 'Async rendering for long text',
render: function() {
return <LongTextExample />;
},
},
];
+1
View File
@@ -91,6 +91,7 @@ static BOOL RCTParseSelectorPart(const char **input, NSMutableString *selector)
static BOOL RCTParseUnused(const char **input)
{
return RCTReadString(input, "__attribute__((unused))") ||
RCTReadString(input, "__attribute__((__unused__))") ||
RCTReadString(input, "__unused");
}
+2 -2
View File
@@ -21,9 +21,9 @@ static void __makeVersion()
{
__rnVersion = @{
RCTVersionMajor: @(0),
RCTVersionMinor: @(0),
RCTVersionMinor: @(60),
RCTVersionPatch: @(0),
RCTVersionPrerelease: [NSNull null],
RCTVersionPrerelease: @"rc.3",
};
}
-2
View File
@@ -129,8 +129,6 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:coder)
[subview addGestureRecognizer:_menuButtonGestureRecognizer];
}
#endif
subview.autoresizingMask = UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleWidth;
[_modalViewController.view insertSubview:subview atIndex:0];
_reactSubview = subview;
+2 -2
View File
@@ -297,12 +297,12 @@
return self;
}
- (NSArray<NSString *> *)accessibilityActions
- (NSArray<NSDictionary *> *)accessibilityActions
{
return objc_getAssociatedObject(self, _cmd);
}
- (void)setAccessibilityActions:(NSArray<NSString *> *)accessibilityActions
- (void)setAccessibilityActions:(NSArray<NSDictionary *> *)accessibilityActions
{
objc_setAssociatedObject(self, @selector(accessibilityActions), accessibilityActions, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
+15 -1
View File
@@ -193,13 +193,23 @@ def findNdkBuildFullPath() {
def ndkDir = android.hasProperty("plugin") ? android.plugin.ndkFolder :
plugins.getPlugin("com.android.library").hasProperty("sdkHandler") ?
plugins.getPlugin("com.android.library").sdkHandler.getNdkFolder() :
android.ndkDirectory.absolutePath
android.ndkDirectory ? android.ndkDirectory.absolutePath : null
if (ndkDir) {
return new File(ndkDir, getNdkBuildName()).getAbsolutePath()
}
return null
}
def reactNativeDevServerPort() {
def value = project.getProperties().get("reactNativeDevServerPort")
return value != null ? value : "8081"
}
def reactNativeInspectorProxyPort() {
def value = project.getProperties().get("reactNativeInspectorProxyPort")
return value != null ? value : reactNativeDevServerPort()
}
def getNdkBuildFullPath() {
def ndkBuildFullPath = findNdkBuildFullPath()
if (ndkBuildFullPath == null) {
@@ -284,6 +294,10 @@ android {
buildConfigField("boolean", "IS_INTERNAL_BUILD", "false")
buildConfigField("int", "EXOPACKAGE_FLAGS", "0")
resValue "integer", "react_native_dev_server_port", reactNativeDevServerPort()
resValue "integer", "react_native_inspector_proxy_port", reactNativeInspectorProxyPort()
testApplicationId("com.facebook.react.tests.gradle")
testInstrumentationRunner("androidx.test.runner.AndroidJUnitRunner")
}
+2 -2
View File
@@ -1,4 +1,4 @@
VERSION_NAME=1000.0.0-master
VERSION_NAME=0.60.0-rc.3
GROUP=com.facebook.react
POM_NAME=ReactNative
@@ -12,7 +12,7 @@ JUNIT_VERSION=4.12
FEST_ASSERT_CORE_VERSION=2.0M10
ANDROID_SUPPORT_TEST_VERSION=1.0.2
FRESCO_VERSION=1.13.0
FRESCO_VERSION=2.0.0
OKHTTP_VERSION=3.12.1
SO_LOADER_VERSION=0.6.0
@@ -72,7 +72,7 @@ public abstract class JSBundleLoader {
delegate.loadScriptFromFile(cachedFileLocation, sourceURL, false);
return sourceURL;
} catch (Exception e) {
throw DebugServerException.makeGeneric(e.getMessage(), e);
throw DebugServerException.makeGeneric(sourceURL, e.getMessage(), e);
}
}
};
@@ -94,7 +94,7 @@ public abstract class JSBundleLoader {
delegate.loadScriptFromDeltaBundle(sourceURL, nativeDeltaClient, false);
return sourceURL;
} catch (Exception e) {
throw DebugServerException.makeGeneric(e.getMessage(), e);
throw DebugServerException.makeGeneric(sourceURL, e.getMessage(), e);
}
}
};
@@ -11,6 +11,7 @@ import javax.annotation.Nullable;
import java.io.IOException;
import android.net.Uri;
import android.text.TextUtils;
import com.facebook.common.logging.FLog;
@@ -28,15 +29,19 @@ public class DebugServerException extends RuntimeException {
"\u2022 Ensure that the packager server is running\n" +
"\u2022 Ensure that your device/emulator is connected to your machine and has USB debugging enabled - run 'adb devices' to see a list of connected devices\n" +
"\u2022 Ensure Airplane Mode is disabled\n" +
"\u2022 If you're on a physical device connected to the same machine, run 'adb reverse tcp:8081 tcp:8081' to forward requests from your device\n" +
"\u2022 If your device is on the same Wi-Fi network, set 'Debug server host & port for device' in 'Dev settings' to your machine's IP address and the port of the local dev server - e.g. 10.0.1.1:8081\n\n";
"\u2022 If you're on a physical device connected to the same machine, run 'adb reverse tcp:<PORT> tcp:<PORT>' to forward requests from your device\n" +
"\u2022 If your device is on the same Wi-Fi network, set 'Debug server host & port for device' in 'Dev settings' to your machine's IP address and the port of the local dev server - e.g. 10.0.1.1:<PORT>\n\n";
public static DebugServerException makeGeneric(String reason, Throwable t) {
return makeGeneric(reason, "", t);
public static DebugServerException makeGeneric(String url, String reason, Throwable t) {
return makeGeneric(url, reason, "", t);
}
public static DebugServerException makeGeneric(String reason, String extra, Throwable t) {
return new DebugServerException(reason + GENERIC_ERROR_MESSAGE + extra, t);
public static DebugServerException makeGeneric(String url, String reason, String extra, Throwable t) {
Uri uri = Uri.parse(url);
String message = GENERIC_ERROR_MESSAGE.replace("<PORT>", String.valueOf(uri.getPort()));
return new DebugServerException(reason + message + extra, t);
}
private DebugServerException(String description, String fileName, int lineNumber, int column) {
@@ -56,7 +61,7 @@ public class DebugServerException extends RuntimeException {
* @param str json string returned by the debug server
* @return A DebugServerException or null if the string is not of proper form.
*/
@Nullable public static DebugServerException parse(String str) {
@Nullable public static DebugServerException parse(String url, String str) {
if (TextUtils.isEmpty(str)) {
return null;
}
@@ -142,10 +142,12 @@ public class BundleDownloader {
}
mDownloadBundleFromURLCall = null;
String url = call.request().url().toString();
callback.onFailure(
DebugServerException.makeGeneric(
DebugServerException.makeGeneric(url,
"Could not connect to development server.",
"URL: " + call.request().url().toString(),
"URL: " + url,
e));
}
@@ -284,7 +286,7 @@ public class BundleDownloader {
// Check for server errors. If the server error has the expected form, fail with more info.
if (statusCode != 200) {
String bodyString = body.readUtf8();
DebugServerException debugServerException = DebugServerException.parse(bodyString);
DebugServerException debugServerException = DebugServerException.parse(url, bodyString);
if (debugServerException != null) {
callback.onFailure(debugServerException);
} else {
@@ -8,6 +8,7 @@
package com.facebook.react.devsupport;
import android.content.Context;
import android.content.res.Resources;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
@@ -261,7 +262,7 @@ public class DevServerHelper {
public boolean doSync() {
try {
String attachToNuclideUrl = getInspectorAttachUrl(title);
String attachToNuclideUrl = getInspectorAttachUrl(context, title);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(attachToNuclideUrl).build();
client.newCall(request).execute();
@@ -367,11 +368,11 @@ public class DevServerHelper {
mPackageName);
}
private String getInspectorAttachUrl(String title) {
private String getInspectorAttachUrl(Context context, String title) {
return String.format(
Locale.US,
"http://%s/nuclide/attach-debugger-nuclide?title=%s&app=%s&device=%s",
AndroidInfoHelpers.getServerHost(),
AndroidInfoHelpers.getServerHost(context),
title,
mPackageName,
AndroidInfoHelpers.getFriendlyDeviceName());
@@ -12,6 +12,7 @@ import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.nfc.NfcAdapter;
import android.provider.Settings;
import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
@@ -59,7 +60,7 @@ public class IntentModule extends ReactContextBaseJavaModule {
String action = intent.getAction();
Uri uri = intent.getData();
if (Intent.ACTION_VIEW.equals(action) && uri != null) {
if (uri != null && (Intent.ACTION_VIEW.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action))) {
initialURL = uri.toString();
}
}
@@ -8,12 +8,14 @@ package com.facebook.react.modules.systeminfo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Locale;
import android.content.Context;
import android.content.res.Resources;
import android.os.Build;
import com.facebook.common.logging.FLog;
import com.facebook.react.R;
public class AndroidInfoHelpers {
@@ -23,9 +25,6 @@ public class AndroidInfoHelpers {
public static final String METRO_HOST_PROP_NAME = "metro.host";
private static final int DEBUG_SERVER_HOST_PORT = 8081;
private static final int INSPECTOR_PROXY_PORT = 8081;
private static final String TAG = AndroidInfoHelpers.class.getSimpleName();
private static boolean isRunningOnGenymotion() {
@@ -36,12 +35,24 @@ public class AndroidInfoHelpers {
return Build.FINGERPRINT.contains("generic");
}
public static String getServerHost() {
return getServerIpAddress(DEBUG_SERVER_HOST_PORT);
public static String getServerHost(Integer port) {
return getServerIpAddress(port);
}
public static String getInspectorProxyHost() {
return getServerIpAddress(INSPECTOR_PROXY_PORT);
public static String getServerHost(Context context) {
return getServerIpAddress(getDevServerPort(context));
}
public static String getAdbReverseTcpCommand(Integer port) {
return "adb reverse tcp:" + port + " tcp:" + port;
}
public static String getAdbReverseTcpCommand(Context context) {
return getAdbReverseTcpCommand(getDevServerPort(context));
}
public static String getInspectorProxyHost(Context context) {
return getServerIpAddress(getInspectorProxyPort(context));
}
// WARNING(festevezga): This RN helper method has been copied to another FB-only target. Any changes should be applied to both.
@@ -54,6 +65,16 @@ public class AndroidInfoHelpers {
}
}
private static Integer getDevServerPort(Context context) {
Resources resources = context.getResources();
return resources.getInteger(R.integer.react_native_dev_server_port);
}
private static Integer getInspectorProxyPort(Context context) {
Resources resources = context.getResources();
return resources.getInteger(R.integer.react_native_dev_server_port);
}
private static String getServerIpAddress(int port) {
// Since genymotion runs in vbox it use different hostname to refer to adb host.
// We detect whether app runs on genymotion and replace js bundle server hostname accordingly
@@ -9,10 +9,13 @@ package com.facebook.react.modules.systeminfo;
import android.annotation.SuppressLint;
import android.app.UiModeManager;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.provider.Settings.Secure;
import com.facebook.react.R;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.common.build.ReactBuildConfig;
@@ -35,9 +38,7 @@ public class AndroidInfoModule extends ReactContextBaseJavaModule {
public static final String NAME = "PlatformConstants";
private static final String IS_TESTING = "IS_TESTING";
public AndroidInfoModule(ReactApplicationContext reactContext) {
super(reactContext);
}
public AndroidInfoModule(ReactApplicationContext reactContext) { super(reactContext); }
/**
* See: https://developer.android.com/reference/android/app/UiModeManager.html#getCurrentModeType()
@@ -74,7 +75,7 @@ public class AndroidInfoModule extends ReactContextBaseJavaModule {
constants.put("Fingerprint", Build.FINGERPRINT);
constants.put("Model", Build.MODEL);
if (ReactBuildConfig.DEBUG) {
constants.put("ServerHost", AndroidInfoHelpers.getServerHost());
constants.put("ServerHost", getServerHost());
}
constants.put("isTesting", "true".equals(System.getProperty(IS_TESTING))
|| isRunningScreenshotTest());
@@ -96,4 +97,12 @@ public class AndroidInfoModule extends ReactContextBaseJavaModule {
return false;
}
}
private String getServerHost() {
Resources resources = getReactApplicationContext().getApplicationContext().getResources();
Integer devServerPort = resources.getInteger(R.integer.react_native_dev_server_port);
return AndroidInfoHelpers.getServerHost(devServerPort);
}
}
@@ -14,6 +14,7 @@ rn_android_library(
react_native_target("java/com/facebook/react/bridge:bridge"),
react_native_target("java/com/facebook/react/common:common"),
react_native_target("java/com/facebook/react/module/annotations:annotations"),
react_native_target("res:systeminfo"),
],
exported_deps = [
":systeminfo-moduleless",
@@ -29,8 +30,10 @@ rn_android_library(
"PUBLIC",
],
deps = [
react_native_target("java/com/facebook/react/common:common"),
react_native_dep("libraries/fbcore/src/main/java/com/facebook/common/logging:logging"),
react_native_dep("third-party/java/infer-annotations:infer-annotations"),
react_native_dep("third-party/java/jsr-305:jsr-305"),
react_native_target("res:systeminfo"),
],
)
@@ -16,7 +16,7 @@ import java.util.Map;
public class ReactNativeVersion {
public static final Map<String, Object> VERSION = MapBuilder.<String, Object>of(
"major", 0,
"minor", 0,
"minor", 60,
"patch", 0,
"prerelease", null);
"prerelease", "rc.3");
}
@@ -7,13 +7,13 @@
package com.facebook.react.packagerconnection;
import javax.annotation.Nullable;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import javax.annotation.Nullable;
import com.facebook.common.logging.FLog;
import com.facebook.infer.annotation.Assertions;
import com.facebook.react.modules.systeminfo.AndroidInfoHelpers;
@@ -24,10 +24,12 @@ public class PackagerConnectionSettings {
private final SharedPreferences mPreferences;
private final String mPackageName;
private final Context mAppContext;
public PackagerConnectionSettings(Context applicationContext) {
mPreferences = PreferenceManager.getDefaultSharedPreferences(applicationContext);
mPackageName = applicationContext.getPackageName();
mAppContext = applicationContext;
}
public String getDebugServerHost() {
@@ -39,12 +41,12 @@ public class PackagerConnectionSettings {
return Assertions.assertNotNull(hostFromSettings);
}
String host = AndroidInfoHelpers.getServerHost();
String host = AndroidInfoHelpers.getServerHost(mAppContext);
if (host.equals(AndroidInfoHelpers.DEVICE_LOCALHOST)) {
FLog.w(
TAG,
"You seem to be running on device. Run 'adb reverse tcp:8081 tcp:8081' " +
"You seem to be running on device. Run '" + AndroidInfoHelpers.getAdbReverseTcpCommand(mAppContext) + "' " +
"to forward the debug server's port to the device.");
}
@@ -52,7 +54,7 @@ public class PackagerConnectionSettings {
}
public String getInspectorServerHost() {
return AndroidInfoHelpers.getInspectorProxyHost();
return AndroidInfoHelpers.getInspectorProxyHost(mAppContext);
}
public @Nullable String getPackageName() {
@@ -104,7 +104,7 @@ public class CustomStyleSpan extends MetricAffectingSpan implements ReactSpan {
}
if (family != null) {
typeface = ReactFontManager.getInstance().getTypeface(family, want, assetManager);
typeface = ReactFontManager.getInstance().getTypeface(family, want, weight, assetManager);
} else if (typeface != null) {
// TODO(t9055065): Fix custom fonts getting applied to text children with different style
typeface = Typeface.create(typeface, want);
@@ -309,7 +309,7 @@ public abstract class ReactBaseTextShadowNode extends LayoutShadowNode {
&& fontWeightString.charAt(0) <= '9'
&& fontWeightString.charAt(0) >= '1'
? 100 * (fontWeightString.charAt(0) - '0')
: -1;
: UNSET;
}
protected TextAttributes mTextAttributes;
@@ -459,8 +459,8 @@ public abstract class ReactBaseTextShadowNode extends LayoutShadowNode {
markUpdated();
}
@ReactProp(name = ViewProps.BACKGROUND_COLOR)
public void setBackgroundColor(Integer color) {
@ReactProp(name = ViewProps.BACKGROUND_COLOR, customType = "Color")
public void setBackgroundColor(@Nullable Integer color) {
// Background color needs to be handled here for virtual nodes so it can be incorporated into
// the span. However, it doesn't need to be applied to non-virtual nodes because non-virtual
// nodes get mapped to native views and native views get their background colors get set via
@@ -487,14 +487,12 @@ public abstract class ReactBaseTextShadowNode extends LayoutShadowNode {
@ReactProp(name = ViewProps.FONT_WEIGHT)
public void setFontWeight(@Nullable String fontWeightString) {
int fontWeightNumeric =
fontWeightString != null ? parseNumericFontWeight(fontWeightString) : -1;
int fontWeight = UNSET;
if (fontWeightNumeric >= 500 || "bold".equals(fontWeightString)) {
fontWeight = Typeface.BOLD;
} else if ("normal".equals(fontWeightString)
|| (fontWeightNumeric != -1 && fontWeightNumeric < 500)) {
fontWeight = Typeface.NORMAL;
}
fontWeightString != null ? parseNumericFontWeight(fontWeightString) : UNSET;
int fontWeight = fontWeightNumeric != UNSET ? fontWeightNumeric : Typeface.NORMAL;
if (fontWeight == 700 || "bold".equals(fontWeightString)) fontWeight = Typeface.BOLD;
else if (fontWeight == 400 || "normal".equals(fontWeightString)) fontWeight = Typeface.NORMAL;
if (fontWeight != mFontWeight) {
mFontWeight = fontWeight;
markUpdated();
@@ -13,6 +13,7 @@ import java.util.Map;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Typeface;
import android.os.Build;
import android.util.SparseArray;
import androidx.annotation.NonNull;
@@ -54,23 +55,32 @@ public class ReactFontManager {
return sReactFontManagerInstance;
}
public @Nullable Typeface getTypeface(
String fontFamilyName,
int style,
AssetManager assetManager) {
return getTypeface(fontFamilyName, style, 0, assetManager);
}
public @Nullable Typeface getTypeface(
String fontFamilyName,
int style,
int weight,
AssetManager assetManager) {
if(mCustomTypefaceCache.containsKey(fontFamilyName)) {
Typeface typeface = mCustomTypefaceCache.get(fontFamilyName);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && weight >= 100 && weight <= 1000) {
return Typeface.create(typeface, weight, (style & Typeface.ITALIC) != 0);
}
return Typeface.create(typeface, style);
}
FontFamily fontFamily = mFontCache.get(fontFamilyName);
if (fontFamily == null) {
fontFamily = new FontFamily();
mFontCache.put(fontFamilyName, fontFamily);
}
if(mCustomTypefaceCache.containsKey(fontFamilyName)) {
return Typeface.create(
mCustomTypefaceCache.get(fontFamilyName),
style
);
}
Typeface typeface = fontFamily.getTypeface(style);
if (typeface == null) {
typeface = createTypeface(fontFamilyName, style, assetManager);
@@ -115,6 +115,9 @@ public class ReactTextShadowNode extends ReactBaseTextShadowNode {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
builder.setJustificationMode(mJustificationMode);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
builder.setUseLineSpacingFromFallbacks(true);
}
layout = builder.build();
}
@@ -139,14 +142,18 @@ public class ReactTextShadowNode extends ReactBaseTextShadowNode {
new StaticLayout(
text, textPaint, (int) width, alignment, 1.f, 0.f, mIncludeFontPadding);
} else {
layout =
StaticLayout.Builder builder =
StaticLayout.Builder.obtain(text, 0, text.length(), textPaint, (int) width)
.setAlignment(alignment)
.setLineSpacing(0.f, 1.f)
.setIncludePad(mIncludeFontPadding)
.setBreakStrategy(mTextBreakStrategy)
.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL)
.build();
.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
builder.setUseLineSpacingFromFallbacks(true);
}
layout = builder.build();
}
}
@@ -199,6 +199,8 @@ void CatalystInstanceImpl::jniLoadScriptFromAssets(
sourceURL,
loadSynchronously);
return;
} else if (Instance::isIndexedRAMBundle(&script)) {
instance_->loadRAMBundleFromString(std::move(script), sourceURL);
} else {
instance_->loadScriptFromString(std::move(script), sourceURL, loadSynchronously);
}
@@ -9,8 +9,8 @@ rn_android_prebuilt_aar(
fb_native.remote_file(
name = "fresco-binary-aar",
sha1 = "0369d4ac5a48cbd748854ea9043c88b807940fb3",
url = "mvn:com.facebook.fresco:fresco:aar:1.13.0",
sha1 = "d473020b37b7cdd3171154942b55021a55a9d990",
url = "mvn:com.facebook.fresco:fresco:aar:2.0.0",
)
rn_android_prebuilt_aar(
@@ -21,8 +21,8 @@ rn_android_prebuilt_aar(
fb_native.remote_file(
name = "drawee-binary-aar",
sha1 = "b846ceec4b708b630693fedb79c85aabd1dbdeed",
url = "mvn:com.facebook.fresco:drawee:aar:1.13.0",
sha1 = "a85bfaeb87a9c8d1521c70edf6ded91ff9999475",
url = "mvn:com.facebook.fresco:drawee:aar:2.0.0",
)
rn_android_library(
@@ -44,8 +44,8 @@ rn_android_prebuilt_aar(
fb_native.remote_file(
name = "imagepipeline-base-aar",
sha1 = "3c4b6613a59825951d3c2b3a5accdbdfd667d9cb",
url = "mvn:com.facebook.fresco:imagepipeline-base:aar:1.13.0",
sha1 = "d27635390665d433f987177c548d25d0473eadbe",
url = "mvn:com.facebook.fresco:imagepipeline-base:aar:2.0.0",
)
rn_android_prebuilt_aar(
@@ -56,8 +56,8 @@ rn_android_prebuilt_aar(
fb_native.remote_file(
name = "imagepipeline-aar",
sha1 = "405fa064f139b495e0e857661a5706cfb22eafdf",
url = "mvn:com.facebook.fresco:imagepipeline:aar:1.13.0",
sha1 = "7bc59327fb4895c465cbfeede700daf349ea56da",
url = "mvn:com.facebook.fresco:imagepipeline:aar:2.0.0",
)
rn_android_prebuilt_aar(
@@ -69,7 +69,7 @@ rn_android_prebuilt_aar(
remote_file(
name = "nativeimagefilters-aar",
sha1 = "f49525db580abc4d2fb0a74fac771fc6c69f2adb",
url = "mvn:com.facebook.fresco:nativeimagefilters:aar:1.13.0",
url = "mvn:com.facebook.fresco:nativeimagefilters:aar:2.0.0",
)
rn_prebuilt_jar(
@@ -92,8 +92,8 @@ rn_android_prebuilt_aar(
fb_native.remote_file(
name = "fbcore-aar",
sha1 = "f8dd8ba9d7ea60dc54b5fba4ed5f6feacc5e596f",
url = "mvn:com.facebook.fresco:fbcore:aar:1.13.0",
sha1 = "8de91f71e8aa84a4d9be4dd88d1a0ac51600ad60",
url = "mvn:com.facebook.fresco:fbcore:aar:2.0.0",
)
rn_android_prebuilt_aar(
@@ -105,5 +105,5 @@ rn_android_prebuilt_aar(
fb_native.remote_file(
name = "imagepipeline-okhttp3-binary-aar",
sha1 = "bc1212ca66cd09678b416894ea8bd04102d26c5f",
url = "mvn:com.facebook.fresco:imagepipeline-okhttp3:aar:1.13.0",
url = "mvn:com.facebook.fresco:imagepipeline-okhttp3:aar:2.0.0",
)
+9
View File
@@ -36,4 +36,13 @@ rn_android_resource(
],
)
rn_android_resource(
name = "systeminfo",
package = "com.facebook.react",
res = "systeminfo",
visibility = [
"PUBLIC",
],
)
# New resource directories must be added to react-native-github/ReactAndroid/build.gradle
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="react_native_dev_server_port">8081</integer>
<integer name="react_native_inspector_proxy_port">@integer/react_native_dev_server_port</integer>
</resources>
+18
View File
@@ -108,6 +108,24 @@ bool Instance::isIndexedRAMBundle(const char *sourcePath) {
return parseTypeFromHeader(header) == ScriptTag::RAMBundle;
}
bool Instance::isIndexedRAMBundle(std::unique_ptr<const JSBigString>* script) {
BundleHeader header;
strncpy(reinterpret_cast<char *>(&header), script->get()->c_str(), sizeof(header));
return parseTypeFromHeader(header) == ScriptTag::RAMBundle;
}
void Instance::loadRAMBundleFromString(std::unique_ptr<const JSBigString> script, const std::string& sourceURL) {
auto bundle = folly::make_unique<JSIndexedRAMBundle>(std::move(script));
auto startupScript = bundle->getStartupCode();
auto registry = RAMBundleRegistry::singleBundleRegistry(std::move(bundle));
loadRAMBundle(
std::move(registry),
std::move(startupScript),
sourceURL,
true);
}
void Instance::loadRAMBundleFromFile(const std::string& sourcePath,
const std::string& sourceURL,
bool loadSynchronously) {
+2
View File
@@ -47,6 +47,8 @@ public:
void loadScriptFromString(std::unique_ptr<const JSBigString> string,
std::string sourceURL, bool loadSynchronously);
static bool isIndexedRAMBundle(const char *sourcePath);
static bool isIndexedRAMBundle(std::unique_ptr<const JSBigString>* string);
void loadRAMBundleFromString(std::unique_ptr<const JSBigString> script, const std::string& sourceURL);
void loadRAMBundleFromFile(const std::string& sourcePath,
const std::string& sourceURL,
bool loadSynchronously);
+26 -9
View File
@@ -6,7 +6,8 @@
#include "JSIndexedRAMBundle.h"
#include <glog/logging.h>
#include <fstream>
#include <sstream>
#include <folly/Memory.h>
namespace facebook {
@@ -18,14 +19,30 @@ std::function<std::unique_ptr<JSModulesUnbundle>(std::string)> JSIndexedRAMBundl
};
}
JSIndexedRAMBundle::JSIndexedRAMBundle(const char *sourcePath) :
m_bundle (sourcePath, std::ios_base::in) {
JSIndexedRAMBundle::JSIndexedRAMBundle(const char *sourcePath) {
m_bundle = std::make_unique<std::ifstream>(sourcePath, std::ifstream::binary);
if (!m_bundle) {
throw std::ios_base::failure(
folly::to<std::string>("Bundle ", sourcePath,
"cannot be opened: ", m_bundle.rdstate()));
"cannot be opened: ", m_bundle->rdstate()));
}
init();
}
JSIndexedRAMBundle::JSIndexedRAMBundle(std::unique_ptr<const JSBigString> script) {
// tmpStream is needed because m_bundle is std::istream type
// which has no member 'write'
std::unique_ptr<std::stringstream> tmpStream = std::make_unique<std::stringstream>();
tmpStream->write(script->c_str(), script->size());
m_bundle = std::move(tmpStream);
if (!m_bundle) {
throw std::ios_base::failure(
folly::to<std::string>("Bundle from string cannot be opened: ", m_bundle->rdstate()));
}
init();
}
void JSIndexedRAMBundle::init() {
// read in magic header, number of entries, and length of the startup section
uint32_t header[3];
static_assert(
@@ -78,12 +95,12 @@ std::string JSIndexedRAMBundle::getModuleCode(const uint32_t id) const {
}
void JSIndexedRAMBundle::readBundle(char *buffer, const std::streamsize bytes) const {
if (!m_bundle.read(buffer, bytes)) {
if (m_bundle.rdstate() & std::ios::eofbit) {
if (!m_bundle->read(buffer, bytes)) {
if (m_bundle->rdstate() & std::ios::eofbit) {
throw std::ios_base::failure("Unexpected end of RAM Bundle file");
}
throw std::ios_base::failure(
folly::to<std::string>("Error reading RAM Bundle: ", m_bundle.rdstate()));
folly::to<std::string>("Error reading RAM Bundle: ", m_bundle->rdstate()));
}
}
@@ -92,9 +109,9 @@ void JSIndexedRAMBundle::readBundle(
const std::streamsize bytes,
const std::ifstream::pos_type position) const {
if (!m_bundle.seekg(position)) {
if (!m_bundle->seekg(position)) {
throw std::ios_base::failure(
folly::to<std::string>("Error reading RAM Bundle: ", m_bundle.rdstate()));
folly::to<std::string>("Error reading RAM Bundle: ", m_bundle->rdstate()));
}
readBundle(buffer, bytes);
}
+5 -3
View File
@@ -5,7 +5,7 @@
#pragma once
#include <fstream>
#include <istream>
#include <memory>
#include <cxxreact/JSBigString.h>
@@ -24,6 +24,7 @@ public:
// Throws std::runtime_error on failure.
JSIndexedRAMBundle(const char *sourceURL);
JSIndexedRAMBundle(std::unique_ptr<const JSBigString> script);
// Throws std::runtime_error on failure.
std::unique_ptr<const JSBigString> getStartupCode();
@@ -51,14 +52,15 @@ private:
}
};
void init();
std::string getModuleCode(const uint32_t id) const;
void readBundle(char *buffer, const std::streamsize bytes) const;
void readBundle(
char *buffer, const
std::streamsize bytes,
const std::ifstream::pos_type position) const;
const std::istream::pos_type position) const;
mutable std::ifstream m_bundle;
mutable std::unique_ptr<std::istream> m_bundle;
ModuleTable m_table;
size_t m_baseOffset;
std::unique_ptr<JSBigBufferString> m_startupCode;
+1 -1
View File
@@ -10,7 +10,7 @@ buildscript {
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:3.4.0")
classpath("com.android.tools.build:gradle:3.4.1")
classpath("de.undercouch:gradle-download-task:3.4.3")
// NOTE: Do not place your application dependencies here; they belong
+9 -8
View File
@@ -1,6 +1,6 @@
{
"name": "react-native",
"version": "1000.0.0",
"version": "0.60.0-rc.3",
"bin": "./cli.js",
"description": "A framework for building native apps using React",
"license": "MIT",
@@ -79,9 +79,9 @@
},
"dependencies": {
"@babel/runtime": "^7.0.0",
"@react-native-community/cli": "2.0.0-alpha.20",
"@react-native-community/cli-platform-android": "2.0.0-alpha.20",
"@react-native-community/cli-platform-ios": "2.0.0-alpha.20",
"@react-native-community/cli": "2.0.0-rc.3",
"@react-native-community/cli-platform-android": "2.0.0-rc.3",
"@react-native-community/cli-platform-ios": "2.0.0-rc.3",
"abort-controller": "^3.0.0",
"art": "^0.10.0",
"base64-js": "^1.1.2",
@@ -92,7 +92,7 @@
"fbjs": "^1.0.0",
"fbjs-scripts": "^1.1.0",
"invariant": "^2.2.4",
"jsc-android": "^241213.1.0",
"jsc-android": "245459.0.0",
"metro-babel-register": "0.54.1",
"metro-react-native-babel-transformer": "0.54.1",
"nullthrows": "^1.1.0",
@@ -101,7 +101,9 @@
"prop-types": "^15.7.2",
"react-devtools-core": "^3.6.0",
"regenerator-runtime": "^0.13.2",
"stacktrace-parser": "^0.1.3"
"scheduler": "0.14.0",
"stacktrace-parser": "^0.1.3",
"whatwg-fetch": "^3.0.0"
},
"devDependencies": {
"@babel/core": "^7.0.0",
@@ -134,7 +136,6 @@
"prettier": "1.17.0",
"react": "16.8.6",
"react-test-renderer": "16.8.6",
"scheduler": "0.14.0",
"shelljs": "^0.7.8",
"ws": "^6.1.4",
"yargs": "^9.0.0"
@@ -158,4 +159,4 @@
}
}
}
}
}
+16 -27
View File
@@ -15,6 +15,22 @@ def reactRoot = file(config.root ?: "../../")
def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
def bundleConfig = config.bundleConfig ? "${reactRoot}/${config.bundleConfig}" : null ;
def reactNativeDevServerPort() {
def value = project.getProperties().get("reactNativeDevServerPort")
return value != null ? value : "8081"
}
def reactNativeInspectorProxyPort() {
def value = project.getProperties().get("reactNativeInspectorProxyPort")
return value != null ? value : reactNativeDevServerPort()
}
android {
buildTypes.all {
resValue "integer", "react_native_dev_server_port", reactNativeDevServerPort()
resValue "integer", "react_native_inspector_proxy_port", reactNativeInspectorProxyPort()
}
}
afterEvaluate {
def isAndroidLibrary = plugins.hasPlugin("com.android.library")
@@ -48,33 +64,6 @@ afterEvaluate {
resourcesDir.mkdirs()
}
// If there are flavors, remember the current flavor for use in the resource path we move from
def flavorPathSegment = ""
android.productFlavors.all { flavor ->
if (targetName.toLowerCase().contains(flavor.name)) {
flavorPathSegment = flavor.name + "/"
}
}
// Address issue #22234 by moving generated resources into build dir so they are in one spot, not duplicated
doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/${resSuffix}")
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/${resSuffix}")
ant.move(file: originalDir, tofile: destDir);
}
}
moveFunc.curry("drawable-ldpi").call()
moveFunc.curry("drawable-mdpi").call()
moveFunc.curry("drawable-hdpi").call()
moveFunc.curry("drawable-xhdpi").call()
moveFunc.curry("drawable-xxhdpi").call()
moveFunc.curry("drawable-xxxhdpi").call()
moveFunc.curry("raw").call()
}
// Set up inputs and outputs so gradle can cache the result
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
outputs.dir(jsBundleDir)
+1 -1
View File
@@ -13,7 +13,7 @@ buildscript {
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:3.4.0")
classpath("com.android.tools.build:gradle:3.4.1")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
+2
View File
@@ -1,4 +1,5 @@
platform :ios, '9.0'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
target 'HelloWorld' do
# Pods for HelloWorld
@@ -32,6 +33,7 @@ target 'HelloWorld' do
# Pods for testing
end
use_native_modules!
end
target 'HelloWorld-tvOS' do
+4 -4
View File
@@ -7,8 +7,8 @@
"test": "jest"
},
"dependencies": {
"react": "16.8.1",
"react-native": "1000.0.0"
"react": "16.8.6",
"react-native": "0.60.0-rc.3"
},
"devDependencies": {
"@babel/core": "^7.3.3",
@@ -16,8 +16,8 @@
"@react-native-community/eslint-config": "^0.0.3",
"babel-jest": "^24.1.0",
"jest": "^24.1.0",
"metro-react-native-babel-preset": "^0.51.1",
"react-test-renderer": "16.8.1"
"metro-react-native-babel-preset": "^0.54.1",
"react-test-renderer": "16.8.6"
},
"jest": {
"preset": "react-native"
+184 -346
View File
@@ -909,16 +909,6 @@
dependencies:
"@hapi/hoek" "6.x.x"
"@jest/console@^24.3.0":
version "24.3.0"
resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.3.0.tgz#7bd920d250988ba0bf1352c4493a48e1cb97671e"
integrity sha512-NaCty/OOei6rSDcbPdMiCbYCI0KGFGPgGO6B09lwWt5QTxnkuhKYET9El5u5z1GAcSxkQmSMtM63e24YabCWqA==
dependencies:
"@jest/source-map" "^24.3.0"
"@types/node" "*"
chalk "^2.0.1"
slash "^2.0.0"
"@jest/console@^24.7.1":
version "24.7.1"
resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545"
@@ -971,16 +961,6 @@
"@jest/types" "^24.7.0"
jest-mock "^24.7.0"
"@jest/fake-timers@^24.5.0":
version "24.5.0"
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.5.0.tgz#4a29678b91fd0876144a58f8d46e6c62de0266f0"
integrity sha512-i59KVt3QBz9d+4Qr4QxsKgsIg+NjfuCjSOWj3RQhjF5JNy+eVJDhANQ4WzulzNCHd72srMAykwtRn5NYDGVraw==
dependencies:
"@jest/types" "^24.5.0"
"@types/node" "*"
jest-message-util "^24.5.0"
jest-mock "^24.5.0"
"@jest/fake-timers@^24.7.1":
version "24.7.1"
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.7.1.tgz#56e5d09bdec09ee81050eaff2794b26c71d19db2"
@@ -990,6 +970,15 @@
jest-message-util "^24.7.1"
jest-mock "^24.7.0"
"@jest/fake-timers@^24.8.0":
version "24.8.0"
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.8.0.tgz#2e5b80a4f78f284bcb4bd5714b8e10dd36a8d3d1"
integrity sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==
dependencies:
"@jest/types" "^24.8.0"
jest-message-util "^24.8.0"
jest-mock "^24.8.0"
"@jest/reporters@^24.7.1":
version "24.7.1"
resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.7.1.tgz#38ac0b096cd691bbbe3051ddc25988d42e37773a"
@@ -1025,15 +1014,6 @@
graceful-fs "^4.1.15"
source-map "^0.6.0"
"@jest/test-result@^24.5.0":
version "24.5.0"
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.5.0.tgz#ab66fb7741a04af3363443084e72ea84861a53f2"
integrity sha512-u66j2vBfa8Bli1+o3rCaVnVYa9O8CAFZeqiqLVhnarXtreSXG33YQ6vNYBogT7+nYiFNOohTU21BKiHlgmxD5A==
dependencies:
"@jest/console" "^24.3.0"
"@jest/types" "^24.5.0"
"@types/istanbul-lib-coverage" "^1.1.0"
"@jest/test-result@^24.7.1":
version "24.7.1"
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.7.1.tgz#19eacdb29a114300aed24db651e5d975f08b6bbe"
@@ -1043,6 +1023,15 @@
"@jest/types" "^24.7.0"
"@types/istanbul-lib-coverage" "^2.0.0"
"@jest/test-result@^24.8.0":
version "24.8.0"
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.8.0.tgz#7675d0aaf9d2484caa65e048d9b467d160f8e9d3"
integrity sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==
dependencies:
"@jest/console" "^24.7.1"
"@jest/types" "^24.8.0"
"@types/istanbul-lib-coverage" "^2.0.0"
"@jest/test-sequencer@^24.7.1":
version "24.7.1"
resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.7.1.tgz#9c18e428e1ad945fa74f6233a9d35745ca0e63e0"
@@ -1074,14 +1063,6 @@
source-map "^0.6.1"
write-file-atomic "2.4.1"
"@jest/types@^24.5.0":
version "24.5.0"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.5.0.tgz#feee214a4d0167b0ca447284e95a57aa10b3ee95"
integrity sha512-kN7RFzNMf2R8UDadPOl6ReyI+MT8xfqRuAnuVL+i4gwjv/zubdDK+EDeLHYwq1j0CSSR2W/MmgaRlMZJzXdmVA==
dependencies:
"@types/istanbul-lib-coverage" "^1.1.0"
"@types/yargs" "^12.0.9"
"@jest/types@^24.7.0":
version "24.7.0"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.7.0.tgz#c4ec8d1828cdf23234d9b4ee31f5482a3f04f48b"
@@ -1090,44 +1071,53 @@
"@types/istanbul-lib-coverage" "^2.0.0"
"@types/yargs" "^12.0.9"
"@react-native-community/cli-platform-android@2.0.0-alpha.20", "@react-native-community/cli-platform-android@^2.0.0-alpha.20":
version "2.0.0-alpha.20"
resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-2.0.0-alpha.20.tgz#a3b5aceae38bd3c930f0801b721d44551fe98dc2"
integrity sha512-Z1eWiK4/oZlKvZTPYnORW6uAZ4rgBFMvswldwdy6r9CnjLTZsgw3aGN6r5TUNSCwbZy4p2l5J1pTELl2Ors24g==
"@jest/types@^24.8.0":
version "24.8.0"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.8.0.tgz#f31e25948c58f0abd8c845ae26fcea1491dea7ad"
integrity sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==
dependencies:
"@react-native-community/cli-tools" "^2.0.0-alpha.20"
"@types/istanbul-lib-coverage" "^2.0.0"
"@types/istanbul-reports" "^1.1.1"
"@types/yargs" "^12.0.9"
"@react-native-community/cli-platform-android@2.0.0-rc.2", "@react-native-community/cli-platform-android@^2.0.0-rc.2":
version "2.0.0-rc.2"
resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-2.0.0-rc.2.tgz#78eba602aaccde906dbe8d0c48f2497900be3b3f"
integrity sha512-pZQ3W8vYqSP2hNTfhhZ2/VU2+7WVXB0dBTPU1wrNtWjxxzCYwpx6l3YM2Bjffwx5yGUJ/FpIrhKXGXZzXdAH9A==
dependencies:
"@react-native-community/cli-tools" "^2.0.0-rc.2"
logkitty "^0.4.0"
node-fetch "^2.2.0"
slash "^2.0.0"
xmldoc "^0.4.0"
"@react-native-community/cli-platform-ios@2.0.0-alpha.20", "@react-native-community/cli-platform-ios@^2.0.0-alpha.20":
version "2.0.0-alpha.20"
resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-2.0.0-alpha.20.tgz#66eda705b0522b44818806910bbf2b7d47d41b56"
integrity sha512-ZDvx2YU/1cFp5/ADbPUwnlvs5D0RIeEZK4Ddskd2Sx7KIq5jLnQbXW+JDOqie5wQgQQ+eCmebCHnCFBWIGXdMQ==
"@react-native-community/cli-platform-ios@2.0.0-rc.2", "@react-native-community/cli-platform-ios@^2.0.0-rc.2":
version "2.0.0-rc.2"
resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-2.0.0-rc.2.tgz#3c73982363b5a07a5159da9ef04c6f3e45551467"
integrity sha512-4ruii2d0ISM0IpzX8o9C/uRdw4UnUDiWDLkLzEObpNjDpOjS3jl+lFJ+S4hW6U/bldl6ahj7CJeMmXiAsTrZWQ==
dependencies:
"@react-native-community/cli-tools" "^2.0.0-alpha.20"
"@react-native-community/cli-tools" "^2.0.0-rc.2"
chalk "^1.1.1"
xcode "^2.0.0"
"@react-native-community/cli-tools@^2.0.0-alpha.20":
version "2.0.0-alpha.20"
resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-2.0.0-alpha.20.tgz#7762205a701ffabe6aa0b08d9202dd3d101297d7"
integrity sha512-G2VcBUuG/WmtbgHA4wTPkYqhuRhzE9EH8+4/WnCQmxSi7bfIYAzyVxgpBLCGzFv4liPmtoVuhcsapVeAMOdSlQ==
"@react-native-community/cli-tools@^2.0.0-rc.2":
version "2.0.0-rc.2"
resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-2.0.0-rc.2.tgz#4308b24de4fe0b4699c2cea687e938e7a8c62c86"
integrity sha512-B0l9k43MkLgrnZs+Z7EZ9Xmb4YYi51Ifj/pabM8EklZJPnLzjWdfvuY64NJBQf4prOg2cTXqh8s9iO/jrsgU3Q==
dependencies:
chalk "^1.1.1"
lodash "^4.17.5"
mime "^1.3.4"
mime "^2.4.1"
node-fetch "^2.5.0"
"@react-native-community/cli@2.0.0-alpha.20":
version "2.0.0-alpha.20"
resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-2.0.0-alpha.20.tgz#611fe4ad483755ae10d3f7f915e1ed527f4a9bf8"
integrity sha512-H71a8gYhhI/7F6UzN3vrzQMtl9dmV/iDf55QeRqWEIU1i+SOpXXk5cmcL7hFY4FBUAkjn4o7GAd089RstGIOeA==
"@react-native-community/cli@2.0.0-rc.2":
version "2.0.0-rc.2"
resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-2.0.0-rc.2.tgz#8bb3c07a58056b0af5474782bedc457184b42595"
integrity sha512-G0NrMfJ6bcXfJKLijQmxuTV4S22pXfp8c5XI7L1i+b5Vu34IvR6xvKVPT9leYEEI/bg/ZuyguDZuVecycJb63A==
dependencies:
"@hapi/joi" "^15.0.3"
"@react-native-community/cli-platform-android" "^2.0.0-alpha.20"
"@react-native-community/cli-platform-ios" "^2.0.0-alpha.20"
"@react-native-community/cli-tools" "^2.0.0-alpha.20"
"@react-native-community/cli-platform-android" "^2.0.0-rc.2"
"@react-native-community/cli-platform-ios" "^2.0.0-rc.2"
"@react-native-community/cli-tools" "^2.0.0-rc.2"
chalk "^1.1.1"
command-exists "^1.2.8"
commander "^2.19.0"
@@ -1143,14 +1133,13 @@
graceful-fs "^4.1.3"
inquirer "^3.0.6"
lodash "^4.17.5"
metro "^0.53.1"
metro-config "^0.53.1"
metro-core "^0.53.1"
metro-react-native-babel-transformer "^0.53.1"
metro "^0.54.1"
metro-config "^0.54.1"
metro-core "^0.54.1"
metro-react-native-babel-transformer "^0.54.1"
minimist "^1.2.0"
mkdirp "^0.5.1"
morgan "^1.9.0"
node-fetch "^2.2.0"
node-notifier "^5.2.1"
open "^6.2.0"
ora "^3.4.0"
@@ -1197,20 +1186,30 @@
dependencies:
"@babel/types" "^7.3.0"
"@types/istanbul-lib-coverage@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#2cc2ca41051498382b43157c8227fea60363f94a"
integrity sha512-ohkhb9LehJy+PA40rDtGAji61NCgdtKLAlFoYp4cnuuQEswwdK3vz9SOIkkyc3wrk8dzjphQApNs56yyXLStaQ==
"@types/istanbul-lib-coverage@*":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==
"@types/istanbul-lib-coverage@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.0.tgz#1eb8c033e98cf4e1a4cedcaf8bcafe8cb7591e85"
integrity sha512-eAtOAFZefEnfJiRFQBGw1eYqa5GTLCZ1y86N0XSI/D6EB+E8z6VPV/UL7Gi5UEclFqoQk+6NRqEDsfmDLXn8sg==
"@types/node@*":
version "11.11.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.2.tgz#873d2c3f3824212cc16130074699e1bcb38c0231"
integrity sha512-iEaHiDNkHv4Jrm9O5T37OYEUwjJesiyt6ZlhLFK0sbo4CLD0jyCOB4Pc2F9iD3MbW2397SLNxZKdDGntGaBjQQ==
"@types/istanbul-lib-report@*":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c"
integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==
dependencies:
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-reports@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a"
integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==
dependencies:
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*"
"@types/stack-utils@^1.0.1":
version "1.0.1"
@@ -2894,13 +2893,6 @@ exception-formatter@^1.0.4:
dependencies:
colors "^1.0.3"
exec-sh@^0.2.0:
version "0.2.2"
resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36"
integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==
dependencies:
merge "^1.2.0"
exec-sh@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b"
@@ -3286,14 +3278,6 @@ fs.realpath@^1.0.0:
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
fsevents@^1.2.3:
version "1.2.4"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==
dependencies:
nan "^2.9.2"
node-pre-gyp "^0.10.0"
fsevents@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4"
@@ -4079,32 +4063,18 @@ jest-get-type@^24.3.0:
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.3.0.tgz#582cfd1a4f91b5cdad1d43d2932f816d543c65da"
integrity sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow==
jest-haste-map@24.0.0:
version "24.0.0"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.0.0.tgz#e9ef51b2c9257384b4d6beb83bd48c65b37b5e6e"
integrity sha512-CcViJyUo41IQqttLxXVdI41YErkzBKbE6cS6dRAploCeutePYfUimWd3C9rQEWhX0YBOQzvNsC0O9nYxK2nnxQ==
dependencies:
fb-watchman "^2.0.0"
graceful-fs "^4.1.15"
invariant "^2.2.4"
jest-serializer "^24.0.0"
jest-util "^24.0.0"
jest-worker "^24.0.0"
micromatch "^3.1.10"
sane "^3.0.0"
jest-haste-map@^24.7.1:
version "24.7.1"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.7.1.tgz#772e215cd84080d4bbcb759cfb668ad649a21471"
integrity sha512-g0tWkzjpHD2qa03mTKhlydbmmYiA2KdcJe762SbfFo/7NIMgBWAA0XqQlApPwkWOF7Cxoi/gUqL0i6DIoLpMBw==
version "24.8.1"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.8.1.tgz#f39cc1d2b1d907e014165b4bd5a957afcb992982"
integrity sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==
dependencies:
"@jest/types" "^24.7.0"
"@jest/types" "^24.8.0"
anymatch "^2.0.0"
fb-watchman "^2.0.0"
graceful-fs "^4.1.15"
invariant "^2.2.4"
jest-serializer "^24.4.0"
jest-util "^24.7.1"
jest-util "^24.8.0"
jest-worker "^24.6.0"
micromatch "^3.1.10"
sane "^4.0.3"
@@ -4161,20 +4131,6 @@ jest-matcher-utils@^24.7.0:
jest-get-type "^24.3.0"
pretty-format "^24.7.0"
jest-message-util@^24.5.0:
version "24.5.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.5.0.tgz#181420a65a7ef2e8b5c2f8e14882c453c6d41d07"
integrity sha512-6ZYgdOojowCGiV0D8WdgctZEAe+EcFU+KrVds+0ZjvpZurUW2/oKJGltJ6FWY2joZwYXN5VL36GPV6pNVRqRnQ==
dependencies:
"@babel/code-frame" "^7.0.0"
"@jest/test-result" "^24.5.0"
"@jest/types" "^24.5.0"
"@types/stack-utils" "^1.0.1"
chalk "^2.0.1"
micromatch "^3.1.10"
slash "^2.0.0"
stack-utils "^1.0.1"
jest-message-util@^24.7.1:
version "24.7.1"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.7.1.tgz#f1dc3a6c195647096a99d0f1dadbc447ae547018"
@@ -4189,12 +4145,19 @@ jest-message-util@^24.7.1:
slash "^2.0.0"
stack-utils "^1.0.1"
jest-mock@^24.5.0:
version "24.5.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.5.0.tgz#976912c99a93f2a1c67497a9414aa4d9da4c7b76"
integrity sha512-ZnAtkWrKf48eERgAOiUxVoFavVBziO2pAi2MfZ1+bGXVkDfxWLxU0//oJBkgwbsv6OAmuLBz4XFFqvCFMqnGUw==
jest-message-util@^24.8.0:
version "24.8.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.8.0.tgz#0d6891e72a4beacc0292b638685df42e28d6218b"
integrity sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==
dependencies:
"@jest/types" "^24.5.0"
"@babel/code-frame" "^7.0.0"
"@jest/test-result" "^24.8.0"
"@jest/types" "^24.8.0"
"@types/stack-utils" "^1.0.1"
chalk "^2.0.1"
micromatch "^3.1.10"
slash "^2.0.0"
stack-utils "^1.0.1"
jest-mock@^24.7.0:
version "24.7.0"
@@ -4203,6 +4166,13 @@ jest-mock@^24.7.0:
dependencies:
"@jest/types" "^24.7.0"
jest-mock@^24.8.0:
version "24.8.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.8.0.tgz#2f9d14d37699e863f1febf4e4d5a33b7fdbbde56"
integrity sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==
dependencies:
"@jest/types" "^24.8.0"
jest-pnp-resolver@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a"
@@ -4287,12 +4257,7 @@ jest-runtime@^24.7.1:
strip-bom "^3.0.0"
yargs "^12.0.2"
jest-serializer@24.0.0:
version "24.0.0"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.0.0.tgz#522c44a332cdd194d8c0531eb06a1ee5afb4256b"
integrity sha512-9FKxQyrFgHtx3ozU+1a8v938ILBE7S8Ko3uiAVjT8Yfi2o91j/fj81jacCQZ/Ihjiff/VsUCXVgQ+iF1XdImOw==
jest-serializer@^24.0.0, jest-serializer@^24.4.0:
jest-serializer@^24.4.0:
version "24.4.0"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3"
integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==
@@ -4315,25 +4280,6 @@ jest-snapshot@^24.7.1:
pretty-format "^24.7.0"
semver "^5.5.0"
jest-util@^24.0.0:
version "24.5.0"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.5.0.tgz#9d9cb06d9dcccc8e7cc76df91b1635025d7baa84"
integrity sha512-Xy8JsD0jvBz85K7VsTIQDuY44s+hYJyppAhcsHsOsGisVtdhar6fajf2UOf2mEVEgh15ZSdA0zkCuheN8cbr1Q==
dependencies:
"@jest/console" "^24.3.0"
"@jest/fake-timers" "^24.5.0"
"@jest/source-map" "^24.3.0"
"@jest/test-result" "^24.5.0"
"@jest/types" "^24.5.0"
"@types/node" "*"
callsites "^3.0.0"
chalk "^2.0.1"
graceful-fs "^4.1.15"
is-ci "^2.0.0"
mkdirp "^0.5.1"
slash "^2.0.0"
source-map "^0.6.0"
jest-util@^24.7.1:
version "24.7.1"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.7.1.tgz#b4043df57b32a23be27c75a2763d8faf242038ff"
@@ -4352,6 +4298,24 @@ jest-util@^24.7.1:
slash "^2.0.0"
source-map "^0.6.0"
jest-util@^24.8.0:
version "24.8.0"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.8.0.tgz#41f0e945da11df44cc76d64ffb915d0716f46cd1"
integrity sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==
dependencies:
"@jest/console" "^24.7.1"
"@jest/fake-timers" "^24.8.0"
"@jest/source-map" "^24.3.0"
"@jest/test-result" "^24.8.0"
"@jest/types" "^24.8.0"
callsites "^3.0.0"
chalk "^2.0.1"
graceful-fs "^4.1.15"
is-ci "^2.0.0"
mkdirp "^0.5.1"
slash "^2.0.0"
source-map "^0.6.0"
jest-validate@^24.0.0:
version "24.0.0"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.0.0.tgz#aa8571a46983a6538328fef20406b4a496b6c020"
@@ -4388,23 +4352,6 @@ jest-watcher@^24.7.1:
jest-util "^24.7.1"
string-length "^2.0.0"
jest-worker@24.0.0:
version "24.0.0"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.0.0.tgz#3d3483b077bf04f412f47654a27bba7e947f8b6d"
integrity sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg==
dependencies:
merge-stream "^1.0.1"
supports-color "^6.1.0"
jest-worker@^24.0.0:
version "24.4.0"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.4.0.tgz#fbc452b0120bb5c2a70cdc88fa132b48eeb11dd0"
integrity sha512-BH9X/klG9vxwoO99ZBUbZFfV8qO0XNZ5SIiCyYK2zOuJBl6YJVAeNIQjcoOVNu4HGEHeYEKsUWws8kSlSbZ9YQ==
dependencies:
"@types/node" "*"
merge-stream "^1.0.1"
supports-color "^6.1.0"
jest-worker@^24.6.0:
version "24.6.0"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3"
@@ -4841,29 +4788,6 @@ merge-stream@^1.0.1:
dependencies:
readable-stream "^2.0.1"
merge@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
integrity sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=
metro-babel-register@0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.53.1.tgz#41c73313ff882d28d8f7df072d2c7a6b7b314ac8"
integrity sha512-kDu7mktGCVdpa2islDzmNXZ0sGQjUvIEcQkmO9pt4b4d8QVecEHyHSZB9jvWnE2w9lADzvnERmZLHS2iDDYOyw==
dependencies:
"@babel/core" "^7.0.0"
"@babel/plugin-proposal-class-properties" "^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-transform-async-to-generator" "^7.0.0"
"@babel/plugin-transform-flow-strip-types" "^7.0.0"
"@babel/plugin-transform-modules-commonjs" "^7.0.0"
"@babel/register" "^7.0.0"
core-js "^2.2.2"
escape-string-regexp "^1.0.5"
metro-babel-register@0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.54.1.tgz#7d2bfe444b1ccef8de99aedc7d9330891d806076"
@@ -4882,13 +4806,6 @@ metro-babel-register@0.54.1:
core-js "^2.2.2"
escape-string-regexp "^1.0.5"
metro-babel-transformer@0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.53.1.tgz#a076fd77a9a7aef8004706edf537dcd1fec4a79e"
integrity sha512-cgZj9KK/SLxsO/rAmrlnZpaBlLhxuWxGrQkkiWxV/OjfbW8nvodozfZ3Euxvh4Ytf0e8qgTFG3JpQf8EGSDp7w==
dependencies:
"@babel/core" "^7.0.0"
metro-babel-transformer@0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.54.1.tgz#371ffa2d1118b22cc9e40b3c3ea6738c49dae9dc"
@@ -4896,13 +4813,6 @@ metro-babel-transformer@0.54.1:
dependencies:
"@babel/core" "^7.0.0"
metro-babel7-plugin-react-transform@0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.53.1.tgz#9ad31e5c84f5003333a6a3cf79f2d093cd3b2ddc"
integrity sha512-98lEpTu7mox/7QurxVuLnbjrGDdayjpS2Z1T4vkLcP+mBxzloKJuTRnmtyWC8cNlx9qjimHGDlqtNY78rQ8rsA==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
metro-babel7-plugin-react-transform@0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.54.1.tgz#5335b810284789724886dc483d5bde9c149a1996"
@@ -4910,97 +4820,56 @@ metro-babel7-plugin-react-transform@0.54.1:
dependencies:
"@babel/helper-module-imports" "^7.0.0"
metro-cache@0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.53.1.tgz#38d73c441771bdd2437a55d50943e346e1897108"
integrity sha512-27Cbo32nabef/P+y5s3cpaIUWa7Hpql2xD0HqQD8AbCfSG4xraEoBOLCmvB6wusvDAnQAcuglLq9AUbTvcSebA==
metro-cache@0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.54.1.tgz#2e9017cbd11106837b8c385c9eb8c8175469a8c1"
integrity sha512-RxCFoNcANHXZYi4MIQNnqh68gUnC3bMpzCFJY5pBoqqdrkkn8ibYglBweA0/DW7hx1OZTJWelwS1Dp8xxmE2CA==
dependencies:
jest-serializer "24.0.0"
metro-core "0.53.1"
jest-serializer "^24.4.0"
metro-core "0.54.1"
mkdirp "^0.5.1"
rimraf "^2.5.4"
metro-config@0.53.1, metro-config@^0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.53.1.tgz#a522beec446187b010c0e68273015818d1c6dfb9"
integrity sha512-3hRweWmrGs8NOjQXLsg/FHAEWqCnfNKLXM4BcI8RXQFvrQQRqhoXCuhcTfM9lSfNkefJiRp+4wW6cHXgo/TP6w==
metro-config@0.54.1, metro-config@^0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.54.1.tgz#808b4e17625d9f4e9afa34232778fdf8e63cc8dd"
integrity sha512-FpxrA+63rGkPGvGI653dvuSreJzU+eOTILItVnnhmqwn2SAK5V00N/qGTOIJe2YIuWEFXwCzw9lXmANrXbwuGg==
dependencies:
cosmiconfig "^5.0.5"
metro "0.53.1"
metro-cache "0.53.1"
metro-core "0.53.1"
pretty-format "24.0.0-alpha.6"
jest-validate "^24.7.0"
metro "0.54.1"
metro-cache "0.54.1"
metro-core "0.54.1"
pretty-format "^24.7.0"
metro-core@0.53.1, metro-core@^0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.53.1.tgz#350211c6327ccf307270199bb1c04012ec2d7d96"
integrity sha512-bBK0GMZWsZrdBGi+jh/87g0VvItT2jez6aj+vRw8AcBataT81SZ5WsSAw3CtbivBXXR7x3oK49T6ZZ+D79VZAw==
metro-core@0.54.1, metro-core@^0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.54.1.tgz#17f6ecc167918da8819d4af5726349e55714954b"
integrity sha512-8oz3Ck7QFBzW9dG9tKFhrXHKPu2Ajx3R7eatf61Gl6Jf/tF7PNouv3wHxPsJW3oXDFiwKLszd89+OgleTGkB5g==
dependencies:
jest-haste-map "24.0.0"
jest-haste-map "^24.7.1"
lodash.throttle "^4.1.1"
metro-resolver "0.53.1"
metro-resolver "0.54.1"
wordwrap "^1.0.0"
metro-inspector-proxy@0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.53.1.tgz#cff4b9fa8b9e5598c034469bd30ef07093f75b28"
integrity sha512-4q5WIFFmpjtKbY2vze3tNI3hPUFrvv1iwTrpz3DMdQ+NYZO6aEwCxtgZAt8N4HC3xZMdECL+DDKKAJu+4jsiEA==
metro-inspector-proxy@0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.54.1.tgz#0ef48ee3feb11c6da47aa100151a9bf2a7c358ee"
integrity sha512-sf6kNu7PgFW6U+hU7YGZfbAUKAPVvCJhY8YVu/A1RMKH9nNULrCo+jlWh0gWgmFfWRQiAPCElevROg+5somk8A==
dependencies:
chalk "^2.4.1"
connect "^3.6.5"
debug "^2.2.0"
rxjs "^5.4.3"
ws "^1.1.5"
yargs "^9.0.0"
metro-minify-uglify@0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.53.1.tgz#145b6e37c09e3ff8fb1bbd3221e5a3fded044904"
integrity sha512-uTdsoACy0WP51qDNrKcLILcpZOMLGyi2B9j3pu9zVRts7hlfVQGxBg4v3uDZ+L7zJ7TKR15p4iMXFmTAkRBpdA==
metro-minify-uglify@0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.54.1.tgz#54ed1cb349245ce82dba8cc662bbf69fbca142c3"
integrity sha512-z+pOPna/8IxD4OhjW6Xo1mV2EszgqqQHqBm1FdmtdF6IpWkQp33qpDBNEi9NGZTOr7pp2bvcxZnvNJdC2lrK9Q==
dependencies:
uglify-es "^3.1.9"
metro-react-native-babel-preset@0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.53.1.tgz#6cd9e41a1b9a6e210e71ef2adf114219b4eaf2ec"
integrity sha512-Uf8EGL8kIPhDkoSdAAysNPxPQclUS2R1QC4cwnc8bkk2f6yqGn+1CorfiY9AaqlLEth5mKQqdtRYFDTFfB9QyA==
dependencies:
"@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-transform-arrow-functions" "^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-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.0.0"
"@babel/plugin-transform-unicode-regex" "^7.0.0"
"@babel/template" "^7.0.0"
metro-babel7-plugin-react-transform "0.53.1"
react-transform-hmr "^1.0.4"
metro-react-native-babel-preset@0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.54.1.tgz#b8f03865c381841d7f8912e7ba46804ea3a928b8"
@@ -5043,7 +4912,7 @@ metro-react-native-babel-preset@0.54.1:
metro-babel7-plugin-react-transform "0.54.1"
react-transform-hmr "^1.0.4"
metro-react-native-babel-transformer@0.54.1:
metro-react-native-babel-transformer@0.54.1, metro-react-native-babel-transformer@^0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.54.1.tgz#45b56db004421134e10e739f69e8de50775fef17"
integrity sha512-ECw7xG91t8dk/PHdiyoC5SP1s9OQzfmJzG5m0YOZaKtHMe534qTDbncxaKfTI3CP99yti2maXFBRVj+xyvph/g==
@@ -5053,34 +4922,26 @@ metro-react-native-babel-transformer@0.54.1:
metro-babel-transformer "0.54.1"
metro-react-native-babel-preset "0.54.1"
metro-react-native-babel-transformer@^0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.53.1.tgz#addf31b3a9b5fc512b9ff6967d923dcfcda56394"
integrity sha512-UB64jN/akuTdDmoQlw+yLBifJhQzJr7QPP3cwitwM5XD4d9M+12pZreeFn66oMakTy4pNx4jkaYEJ5rLyh/b0Q==
dependencies:
"@babel/core" "^7.0.0"
babel-preset-fbjs "^3.1.2"
metro-babel-transformer "0.53.1"
metro-react-native-babel-preset "0.53.1"
metro-resolver@0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.53.1.tgz#e21df30c0b9913c7cbeeda9c28d8ffe0ae58cd53"
integrity sha512-UOL2AY3HF3kyuwO+SXceA7MvVbxGZTwRmWOcRl2mYMZ66osSygFgR0WoYFAlxoW83c1ZDYXMIg78ob8bs0lSAg==
metro-resolver@0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.54.1.tgz#0295b38624b678b88b16bf11d47288845132b087"
integrity sha512-Byv1LIawYAASy9CFRwzrncYnqaFGLe8vpw178EtzStqP05Hu6hXSqkNTrfoXa+3V9bPFGCrVzFx2NY3gFp2btg==
dependencies:
absolute-path "^0.0.0"
metro-source-map@0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.53.1.tgz#61d915720eb90722d55252f3bd014ba0ce8fabfd"
integrity sha512-mZ8NJMq5lKE9+0gfhpYFVqK3z4wng6xCzOMXoROjkOsO/exbHGK4oSfOzEnVl6oCRBTGMfaeB32ZeECwZ9O0jw==
metro-source-map@0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.54.1.tgz#e17bad53c11978197d3c05c9168d799c2e04dcc5"
integrity sha512-E9iSYMSUSq5qYi1R2hTQtxH4Mxjzfgr/jaSmQIWi7h3fG2P1qOZNNSzeaeUeTK+s2N/ksVlkcL5kMikol8CDrQ==
dependencies:
"@babel/traverse" "^7.0.0"
"@babel/types" "^7.0.0"
source-map "^0.5.6"
metro@0.53.1, metro@^0.53.1:
version "0.53.1"
resolved "https://registry.yarnpkg.com/metro/-/metro-0.53.1.tgz#23fb558eb22e8de8d84fa3f456adfdedec435021"
integrity sha512-Q2iVHfUu5NO2o0dZukBkWrW5s2LiResQuK5KalomNsOHLguOYI5r1nR5QdznZ05GI96iR0fgNvFWfPMyIhtKvw==
metro@0.54.1, metro@^0.54.1:
version "0.54.1"
resolved "https://registry.yarnpkg.com/metro/-/metro-0.54.1.tgz#a629be00abee5a450a25a8f71c24745f70cc9b44"
integrity sha512-6ODPT4mEo4FCpbExRNnQAcZmf1VeNvYOTMj2Na03FjGqhNODHhI2U/wF/Ul5gqTyJ2dVdkXeyvKW3gl/LrnJRg==
dependencies:
"@babel/core" "^7.0.0"
"@babel/generator" "^7.0.0"
@@ -5104,21 +4965,21 @@ metro@0.53.1, metro@^0.53.1:
graceful-fs "^4.1.3"
image-size "^0.6.0"
invariant "^2.2.4"
jest-haste-map "24.0.0"
jest-worker "24.0.0"
jest-haste-map "^24.7.1"
jest-worker "^24.6.0"
json-stable-stringify "^1.0.1"
lodash.throttle "^4.1.1"
merge-stream "^1.0.1"
metro-babel-register "0.53.1"
metro-babel-transformer "0.53.1"
metro-cache "0.53.1"
metro-config "0.53.1"
metro-core "0.53.1"
metro-inspector-proxy "0.53.1"
metro-minify-uglify "0.53.1"
metro-react-native-babel-preset "0.53.1"
metro-resolver "0.53.1"
metro-source-map "0.53.1"
metro-babel-register "0.54.1"
metro-babel-transformer "0.54.1"
metro-cache "0.54.1"
metro-config "0.54.1"
metro-core "0.54.1"
metro-inspector-proxy "0.54.1"
metro-minify-uglify "0.54.1"
metro-react-native-babel-preset "0.54.1"
metro-resolver "0.54.1"
metro-source-map "0.54.1"
mime-types "2.1.11"
mkdirp "^0.5.1"
node-fetch "^2.2.0"
@@ -5179,11 +5040,16 @@ mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.19:
dependencies:
mime-db "~1.36.0"
mime@1.4.1, mime@^1.3.4:
mime@1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
mime@^2.4.1:
version "2.4.3"
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.3.tgz#229687331e86f68924e6cb59e1cdd937f18275fe"
integrity sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==
mimic-fn@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
@@ -5364,6 +5230,11 @@ node-fetch@^2.2.0:
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.2.0.tgz#4ee79bde909262f9775f731e3656d0db55ced5b5"
integrity sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA==
node-fetch@^2.5.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-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -5887,14 +5758,6 @@ prettier@1.17.0:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.0.tgz#53b303676eed22cc14a9f0cec09b477b3026c008"
integrity sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw==
pretty-format@24.0.0-alpha.6:
version "24.0.0-alpha.6"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0-alpha.6.tgz#25ad2fa46b342d6278bf241c5d2114d4376fbac1"
integrity sha512-zG2m6YJeuzwBFqb5EIdmwYVf30sap+iMRuYNPytOccEXZMAJbPIFGKVJ/U0WjQegmnQbRo9CI7j6j3HtDaifiA==
dependencies:
ansi-regex "^4.0.0"
ansi-styles "^3.2.0"
pretty-format@^24.0.0:
version "24.0.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0.tgz#cb6599fd73ac088e37ed682f61291e4678f48591"
@@ -6447,23 +6310,6 @@ safe-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sane@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/sane/-/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6"
integrity sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q==
dependencies:
anymatch "^2.0.0"
capture-exit "^1.2.0"
exec-sh "^0.2.0"
execa "^1.0.0"
fb-watchman "^2.0.0"
micromatch "^3.1.4"
minimist "^1.1.1"
walker "~1.0.5"
watch "~0.18.0"
optionalDependencies:
fsevents "^1.2.3"
sane@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/sane/-/sane-4.0.3.tgz#e878c3f19e25cc57fbb734602f48f8a97818b181"
@@ -7315,14 +7161,6 @@ walker@^1.0.7, walker@~1.0.5:
dependencies:
makeerror "1.0.x"
watch@~0.18.0:
version "0.18.0"
resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986"
integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY=
dependencies:
exec-sh "^0.2.0"
minimist "^1.2.0"
wcwidth@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
@@ -7342,7 +7180,7 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
dependencies:
iconv-lite "0.4.24"
whatwg-fetch@>=0.10.0:
whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==