diff --git a/.circleci/config.yml b/.circleci/config.yml index 093c8c399c0439..fc72d4ef87b166 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -881,24 +881,36 @@ jobs: # ------------------------- prepare_hermes_workspace: docker: - - image: debian:buster + - image: debian:bullseye environment: - HERMES_WS_DIR: *hermes_workspace_root + - HERMES_VERSION_FILE: "sdks/.hermesversion" steps: - - checkout - run: name: Install dependencies command: | - apt-get update - apt-get install -y wget git + apt update + apt install -y wget git + - checkout - run: - name: Set up Hermes workspace - command: mkdir -p "$HERMES_WS_DIR/hermes" "$HERMES_WS_DIR/download" + name: Set up Hermes workspace and caching + command: | + mkdir -p "/tmp/hermes" "/tmp/hermes/download" "/tmp/hermes/hermes" + + if [ -f "$HERMES_VERSION_FILE" ]; then + cat $HERMES_VERSION_FILE > /tmp/hermes/hermesversion + else + HERMES_TAG_SHA=$(git ls-remote https://github.com/facebook/hermes main | cut -f 1 | tr -d '[:space:]') + echo $HERMES_TAG_SHA > /tmp/hermes/hermesversion + fi + - restore_cache: + key: v1-hermes-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/hermes/hermesversion" }} - run: name: Download Hermes tarball command: | - HERMES_VERSION_FILE="sdks/.hermesversion" HERMES_TARBALL_URL="https://github.com/facebook/hermes/archive/refs/heads/main.tar.gz" + HERMES_TARBALL_PATH="$HERMES_WS_DIR/download/hermes.tar.gz" + if [ -f "$HERMES_VERSION_FILE" ]; then HERMES_TAG=$(cat $HERMES_VERSION_FILE | tr -d '[:space:]') HERMES_TARBALL_URL="https://github.com/facebook/hermes/archive/refs/tags/$HERMES_TAG.tar.gz" @@ -906,8 +918,19 @@ jobs: else echo "Using Hermes latest version from trunk" fi - wget --timestamping -O "$HERMES_WS_DIR/download/hermes.tar.gz" "$HERMES_TARBALL_URL" + + if [ -f "$HERMES_TARBALL_PATH" ]; then + echo "Skipping download; $HERMES_TARBALL_PATH already present." + else + echo "Downloading Hermes tarball from $HERMES_TARBALL_URL" + wget -O "$HERMES_TARBALL_PATH" "$HERMES_TARBALL_URL" + fi tar -xzf "$HERMES_WS_DIR/download/hermes.tar.gz" --strip-components=1 -C "$HERMES_WS_DIR/hermes" + - save_cache: + key: v1-hermes-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/hermes/hermesversion" }} + paths: + - /tmp/hermes/download/ + - /tmp/hermes/hermes/ - persist_to_workspace: root: *hermes_workspace_root paths: @@ -928,6 +951,8 @@ jobs: apt install -y git openssh-client cmake build-essential \ libreadline-dev libicu-dev zip python3 - *attach_hermes_workspace + - restore_cache: + key: v1-hermes-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/hermes/hermesversion" }} - run: name: Set up workspace command: | @@ -935,15 +960,21 @@ jobs: - run: name: Build HermesC for Linux command: | - cd /tmp/hermes - cmake -S hermes -B build -DHERMES_STATIC_LINK=ON -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=True -DCMAKE_CXX_FLAGS=-s -DCMAKE_C_FLAGS=-s \ - -DCMAKE_EXE_LINKER_FLAGS="-Wl,--whole-archive -lpthread -Wl,--no-whole-archive" - cmake --build build --target check-hermes -j 4 - - run: - name: Package HermesC for Linux - command: | - cp /tmp/hermes/build/bin/hermesc /tmp/hermes/linux64-bin/. + if [ -f /tmp/hermes/linux64-bin/hermesc ]; then + echo 'Skipping; Clean "/tmp/hermes/linux64-bin" to rebuild.' + else + cd /tmp/hermes + cmake -S hermes -B build -DHERMES_STATIC_LINK=ON -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=True -DCMAKE_CXX_FLAGS=-s -DCMAKE_C_FLAGS=-s \ + -DCMAKE_EXE_LINKER_FLAGS="-Wl,--whole-archive -lpthread -Wl,--no-whole-archive" + cmake --build build --target check-hermes -j 4 + cp /tmp/hermes/build/bin/hermesc /tmp/hermes/linux64-bin/. + fi + - save_cache: + key: v1-hermes-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/hermes/hermesversion" }} + paths: + - /tmp/hermes/linux64-bin/ + - /tmp/hermes/hermes/destroot/ - store_artifacts: path: /tmp/hermes/linux64-bin/ - persist_to_workspace: @@ -957,6 +988,8 @@ jobs: - HERMES_WS_DIR: *hermes_workspace_root steps: - *attach_hermes_workspace + - restore_cache: + key: v1-hermes-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/hermes/hermesversion" }} - run: name: Set up workspace command: | @@ -968,13 +1001,20 @@ jobs: - run: name: Build HermesC for macOS command: | - cd "$HERMES_WS_DIR/hermes" - ./utils/build-mac-framework.sh - - run: - name: Package HermesC for macOS - command: | - cd "$HERMES_WS_DIR/hermes" - cp build_macosx/bin/hermesc /tmp/hermes/osx-bin/. + if [ -f /tmp/hermes/osx-bin/hermesc ]; then + echo 'Skipping; Clean "/tmp/hermes/osx-bin" to rebuild.' + else + cd "$HERMES_WS_DIR/hermes" + ./utils/build-mac-framework.sh + cp build_macosx/bin/hermesc /tmp/hermes/osx-bin/. + fi + - save_cache: + key: v1-hermes-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/hermes/hermesversion" }} + paths: + - /tmp/hermes/osx-bin/ + - /tmp/hermes/hermes/destroot/ + - /tmp/hermes/hermes/build_host_hermesc/ + - /tmp/hermes/hermes/build_macosx/ - store_artifacts: path: /tmp/hermes/osx-bin/ - persist_to_workspace: @@ -993,6 +1033,8 @@ jobs: - CMAKE_DIR: 'C:\Program Files\CMake\bin' steps: - *attach_hermes_workspace + - restore_cache: + key: v1-hermes-{{ .Environment.CIRCLE_JOB }}-{{ checksum "tmp/hermes/hermesversion" }} - run: name: Set up workspace command: | @@ -1001,53 +1043,57 @@ jobs: New-Item -ItemType Directory $Env:HERMES_WS_DIR\deps New-Item -ItemType Directory $Env:HERMES_WS_DIR\win64-bin New-Item -ItemType SymbolicLink -Target tmp\hermes\hermes -Path $Env:HERMES_WS_DIR -Name hermes - - run: - name: Download ICU - command: | - cd $Env:HERMES_WS_DIR\icu - # If Invoke-WebRequest shows a progress bar, it will fail with - # Win32 internal error "Access is denied" 0x5 occurred [...] - $progressPreference = 'silentlyContinue' - Invoke-WebRequest -Uri "$Env:ICU_URL" -OutFile "icu.zip" - Expand-Archive -Path "icu.zip" -DestinationPath "." - - run: - name: Install dependencies - command: | - choco install --no-progress cmake --version 3.14.7 - if (-not $?) { throw "Failed to install CMake" } - choco install --no-progress python3 - if (-not $?) { throw "Failed to install Python" } - - run: - name: Assemble Windows runtime dependencies - command: | - cd $Env:HERMES_WS_DIR - Copy-Item -Path "icu\bin64\icu*.dll" -Destination "deps" - # Include MSVC++ 2015 redistributables - Copy-Item -Path "c:\windows\system32\msvcp140.dll" -Destination "deps" - Copy-Item -Path "c:\windows\system32\vcruntime140.dll" -Destination "deps" - Copy-Item -Path "c:\windows\system32\vcruntime140_1.dll" -Destination "deps" - run: name: Build HermesC for Windows command: | - $Env:PATH += ";$Env:CMAKE_DIR;$Env:MSBUILD_DIR" - $Env:ICU_ROOT = "$Env:HERMES_WS_DIR\icu" - cd $Env:HERMES_WS_DIR - cmake -S hermes -B build_release -G 'Visual Studio 16 2019' -Ax64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=True -DHERMES_ENABLE_WIN10_ICU_FALLBACK=OFF - if (-not $?) { throw "Failed to configure Hermes" } - cd build_release - cmake --build . --target hermesc --config Release - if (-not $?) { throw "Failed to build Hermes" } - - run: - name: Package HermesC for Windows - command: | - cd $Env:HERMES_WS_DIR - Copy-Item -Path "build_release\bin\Release\hermesc.exe" -Destination "win64-bin" - # Include Windows runtime dependencies - Copy-Item -Path "deps\*" -Destination "win64-bin" + if (-not(Test-Path -Path $Env:HERMES_WS_DIR\win64-bin\hermesc.exe)) { + choco install --no-progress cmake --version 3.14.7 + if (-not $?) { throw "Failed to install CMake" } + choco install --no-progress python3 + if (-not $?) { throw "Failed to install Python" } + + cd $Env:HERMES_WS_DIR\icu + # If Invoke-WebRequest shows a progress bar, it will fail with + # Win32 internal error "Access is denied" 0x5 occurred [...] + $progressPreference = 'silentlyContinue' + Invoke-WebRequest -Uri "$Env:ICU_URL" -OutFile "icu.zip" + Expand-Archive -Path "icu.zip" -DestinationPath "." + + cd $Env:HERMES_WS_DIR + Copy-Item -Path "icu\bin64\icu*.dll" -Destination "deps" + # Include MSVC++ 2015 redistributables + Copy-Item -Path "c:\windows\system32\msvcp140.dll" -Destination "deps" + Copy-Item -Path "c:\windows\system32\vcruntime140.dll" -Destination "deps" + Copy-Item -Path "c:\windows\system32\vcruntime140_1.dll" -Destination "deps" + + $Env:PATH += ";$Env:CMAKE_DIR;$Env:MSBUILD_DIR" + $Env:ICU_ROOT = "$Env:HERMES_WS_DIR\icu" + + cmake -S hermes -B build_release -G 'Visual Studio 16 2019' -Ax64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=True -DHERMES_ENABLE_WIN10_ICU_FALLBACK=OFF + if (-not $?) { throw "Failed to configure Hermes" } + cd build_release + cmake --build . --target hermesc --config Release + if (-not $?) { throw "Failed to build Hermes" } + + cd $Env:HERMES_WS_DIR + Copy-Item -Path "build_release\bin\Release\hermesc.exe" -Destination "win64-bin" + # Include Windows runtime dependencies + Copy-Item -Path "deps\*" -Destination "win64-bin" + } + else { + Write-Host "Skipping; Clean c:\tmp\hermes\win64-bin to rebuild." + } + - save_cache: + key: v1-hermes-{{ .Environment.CIRCLE_JOB }}-{{ checksum "tmp/hermes/hermesversion" }} + paths: + - C:\tmp\hermes\win64-bin\ + - C:\tmp\hermes\hermes\icu\ + - C:\tmp\hermes\hermes\deps\ + - C:\tmp\hermes\hermes\build_release\ - store_artifacts: - path: c:\tmp\hermes\win64-bin\ + path: C:\tmp\hermes\win64-bin\ - persist_to_workspace: - root: c:\tmp\hermes\ + root: C:\tmp\hermes\ paths: - win64-bin @@ -1120,6 +1166,11 @@ jobs: # END: Stables and nightlies - run: node ./scripts/publish-npm.js << parameters.publish_npm_args >> + - run: + name: Zip Hermes Native Symbols + command: zip -r /tmp/hermes-native-symbols.zip ~/react-native/ReactAndroid/hermes-engine/build/intermediates/cmake/ + - store_artifacts: + path: /tmp/hermes-native-symbols.zip # START: Commitlies # Provide a react-native package for this commit as a Circle CI release artifact. diff --git a/.flowconfig b/.flowconfig index 185349ad4ecef2..b89c9f5a9b9da6 100644 --- a/.flowconfig +++ b/.flowconfig @@ -71,4 +71,4 @@ untyped-import untyped-type-import [version] -^0.176.3 +^0.177.0 diff --git a/.flowconfig.android b/.flowconfig.android index 28405c2f5966d7..ed1a28111b4bd8 100644 --- a/.flowconfig.android +++ b/.flowconfig.android @@ -71,4 +71,4 @@ untyped-import untyped-type-import [version] -^0.176.3 +^0.177.0 diff --git a/BUCK b/BUCK index 9cfb3086b0eecf..40e85997e24de6 100644 --- a/BUCK +++ b/BUCK @@ -759,7 +759,7 @@ rn_library( "//xplat/js:node_modules__react_19shallow_19renderer", "//xplat/js:node_modules__regenerator_19runtime", "//xplat/js:node_modules__stacktrace_19parser", - "//xplat/js:node_modules__use_19subscription", + "//xplat/js:node_modules__use_19sync_19external_19store", "//xplat/js:node_modules__whatwg_19fetch", "//xplat/js/RKJSModules/Libraries/Polyfills:Polyfills", "//xplat/js/RKJSModules/Libraries/React:React", diff --git a/IntegrationTests/AsyncStorageTest.js b/IntegrationTests/AsyncStorageTest.js index 63697aedfece91..f3aa7ce8052fe3 100644 --- a/IntegrationTests/AsyncStorageTest.js +++ b/IntegrationTests/AsyncStorageTest.js @@ -207,7 +207,7 @@ class AsyncStorageTest extends React.Component<{...}, $FlowFixMeState> { this.setState({done: true}, () => { TestModule.markTestCompleted(); }); - updateMessage = msg => { + updateMessage = (msg: string) => { this.setState({messages: this.state.messages.concat('\n' + msg)}); DEBUG && console.log(msg); }; diff --git a/Libraries/Components/ScrollView/ScrollView.js b/Libraries/Components/ScrollView/ScrollView.js index c3eccd2049eded..b0de7dd98b9df7 100644 --- a/Libraries/Components/ScrollView/ScrollView.js +++ b/Libraries/Components/ScrollView/ScrollView.js @@ -1519,6 +1519,7 @@ class ScrollView extends React.Component { keyboardNeverPersistTaps && this._keyboardIsDismissible() && e.target != null && + // $FlowFixMe[incompatible-call] !TextInputState.isTextInput(e.target) ) { return true; diff --git a/Libraries/Image/Image.android.js b/Libraries/Image/Image.android.js index bce71527175924..64c5fd30c81555 100644 --- a/Libraries/Image/Image.android.js +++ b/Libraries/Image/Image.android.js @@ -123,7 +123,7 @@ export type ImageComponentStatics = $ReadOnly<{| * * See https://reactnative.dev/docs/image */ -let Image = (props: ImagePropsType, forwardedRef) => { +const BaseImage = (props: ImagePropsType, forwardedRef) => { let source = resolveAssetSource(props.source); const defaultSource = resolveAssetSource(props.defaultSource); const loadingIndicatorSource = resolveAssetSource( @@ -221,11 +221,11 @@ let Image = (props: ImagePropsType, forwardedRef) => { ); }; -Image = React.forwardRef< +let Image = React.forwardRef< ImagePropsType, | React.ElementRef | React.ElementRef, ->(Image); +>(BaseImage); if (ImageInjection.unstable_createImageComponent != null) { Image = ImageInjection.unstable_createImageComponent(Image); diff --git a/Libraries/Image/Image.ios.js b/Libraries/Image/Image.ios.js index deb54281ef21bf..b350a0f9414bc6 100644 --- a/Libraries/Image/Image.ios.js +++ b/Libraries/Image/Image.ios.js @@ -102,7 +102,7 @@ export type ImageComponentStatics = $ReadOnly<{| * * See https://reactnative.dev/docs/image */ -let Image = (props: ImagePropsType, forwardedRef) => { +const BaseImage = (props: ImagePropsType, forwardedRef) => { const source = resolveAssetSource(props.source) || { uri: undefined, width: undefined, @@ -158,11 +158,12 @@ let Image = (props: ImagePropsType, forwardedRef) => { ); }; -Image = React.forwardRef< +const ImageForwardRef = React.forwardRef< ImagePropsType, React.ElementRef, ->(Image); +>(BaseImage); +let Image = ImageForwardRef; if (ImageInjection.unstable_createImageComponent != null) { Image = ImageInjection.unstable_createImageComponent(Image); } diff --git a/Libraries/Lists/VirtualizeUtils.js b/Libraries/Lists/VirtualizeUtils.js index 6e50e62b9cabc9..85d50539db6200 100644 --- a/Libraries/Lists/VirtualizeUtils.js +++ b/Libraries/Lists/VirtualizeUtils.js @@ -25,12 +25,13 @@ export function elementsThatOverlapOffsets( offset: number, ... }, + zoomScale: number, ): Array { const out = []; let outLength = 0; for (let ii = 0; ii < itemCount; ii++) { const frame = getFrameMetrics(ii); - const trailingOffset = frame.offset + frame.length; + const trailingOffset = (frame.offset + frame.length) * zoomScale; for (let kk = 0; kk < offsets.length; kk++) { if (out[kk] == null && trailingOffset >= offsets[kk]) { out[kk] = ii; @@ -104,6 +105,7 @@ export function computeWindowedRenderLimits( offset: number, velocity: number, visibleLength: number, + zoomScale: number, ... }, ): { @@ -115,7 +117,7 @@ export function computeWindowedRenderLimits( if (itemCount === 0) { return prev; } - const {offset, velocity, visibleLength} = scrollMetrics; + const {offset, velocity, visibleLength, zoomScale} = scrollMetrics; // Start with visible area, then compute maximum overscan region by expanding from there, biased // in the direction of scroll. Total overscan area is capped, which should cap memory consumption @@ -136,7 +138,8 @@ export function computeWindowedRenderLimits( ); const overscanEnd = Math.max(0, visibleEnd + leadFactor * overscanLength); - const lastItemOffset = getFrameMetricsApprox(itemCount - 1).offset; + const lastItemOffset = + getFrameMetricsApprox(itemCount - 1).offset * zoomScale; if (lastItemOffset < overscanBegin) { // Entire list is before our overscan window return { @@ -150,6 +153,7 @@ export function computeWindowedRenderLimits( [overscanBegin, visibleBegin, visibleEnd, overscanEnd], itemCount, getFrameMetricsApprox, + zoomScale, ); overscanFirst = overscanFirst == null ? 0 : overscanFirst; first = first == null ? Math.max(0, overscanFirst) : first; diff --git a/Libraries/Lists/VirtualizedList.js b/Libraries/Lists/VirtualizedList.js index 86f45354e36e20..2043a18ba37862 100644 --- a/Libraries/Lists/VirtualizedList.js +++ b/Libraries/Lists/VirtualizedList.js @@ -1228,6 +1228,7 @@ class VirtualizedList extends React.PureComponent { timestamp: 0, velocity: 0, visibleLength: 0, + zoomScale: 1, }; _scrollRef: ?React.ElementRef = null; _sentEndForContentLength = 0; @@ -1624,6 +1625,9 @@ class VirtualizedList extends React.PureComponent { ); this._hasWarned.perf = true; } + + const zoomScale = e.nativeEvent.zoomScale; + this._scrollMetrics = { contentLength, dt, @@ -1632,6 +1636,7 @@ class VirtualizedList extends React.PureComponent { timestamp, velocity, visibleLength, + zoomScale, }; this._updateViewableItems(this.props.data); if (!this.props) { @@ -1870,15 +1875,15 @@ class VirtualizedList extends React.PureComponent { 'Tried to get frame for out of range index ' + index, ); const item = getItem(data, index); - let frame = item && this._frames[this._keyExtractor(item, index)]; + const frame = item && this._frames[this._keyExtractor(item, index)]; if (!frame || frame.index !== index) { if (getItemLayout) { - frame = getItemLayout(data, index); + /* $FlowFixMe[prop-missing] (>=0.63.0 site=react_native_fb) This comment + * suppresses an error found when Flow v0.63 was deployed. To see the error + * delete this comment and run Flow. */ + return getItemLayout(data, index); } } - /* $FlowFixMe[prop-missing] (>=0.63.0 site=react_native_fb) This comment - * suppresses an error found when Flow v0.63 was deployed. To see the error - * delete this comment and run Flow. */ return frame; }; diff --git a/Libraries/Lists/VirtualizedListContext.js b/Libraries/Lists/VirtualizedListContext.js index d51a79244a0330..308f6a20d19a54 100644 --- a/Libraries/Lists/VirtualizedListContext.js +++ b/Libraries/Lists/VirtualizedListContext.js @@ -47,6 +47,7 @@ type Context = $ReadOnly<{ timestamp: number, velocity: number, visibleLength: number, + zoomScale: number, }, horizontal: ?boolean, getOutermostParentListRef: () => VirtualizedList, diff --git a/Libraries/Lists/VirtualizedSectionList.js b/Libraries/Lists/VirtualizedSectionList.js index 20586c16b493c9..396ad7b58ca2de 100644 --- a/Libraries/Lists/VirtualizedSectionList.js +++ b/Libraries/Lists/VirtualizedSectionList.js @@ -148,6 +148,7 @@ class VirtualizedSectionList< viewOffset, index, }; + // $FlowFixMe[incompatible-use] this._listRef.scrollToIndex(toIndexParams); } diff --git a/Libraries/Lists/__tests__/VirtualizeUtils-test.js b/Libraries/Lists/__tests__/VirtualizeUtils-test.js index 88eb4f068c46a8..c700d599100e93 100644 --- a/Libraries/Lists/__tests__/VirtualizeUtils-test.js +++ b/Libraries/Lists/__tests__/VirtualizeUtils-test.js @@ -48,9 +48,9 @@ describe('elementsThatOverlapOffsets', function () { offset: 100 * index, }; } - expect(elementsThatOverlapOffsets(offsets, 100, getFrameMetrics)).toEqual([ - 0, 2, 3, 4, - ]); + expect( + elementsThatOverlapOffsets(offsets, 100, getFrameMetrics, 1), + ).toEqual([0, 2, 3, 4]); }); it('handles variable length', function () { const offsets = [150, 250, 900]; @@ -62,7 +62,7 @@ describe('elementsThatOverlapOffsets', function () { {offset: 950, length: 150}, ]; expect( - elementsThatOverlapOffsets(offsets, frames.length, ii => frames[ii]), + elementsThatOverlapOffsets(offsets, frames.length, ii => frames[ii], 1), ).toEqual([1, 1, 3]); }); it('handles out of bounds', function () { @@ -73,7 +73,7 @@ describe('elementsThatOverlapOffsets', function () { {offset: 250, length: 100}, ]; expect( - elementsThatOverlapOffsets(offsets, frames.length, ii => frames[ii]), + elementsThatOverlapOffsets(offsets, frames.length, ii => frames[ii], 1), ).toEqual([1]); }); it('errors on non-increasing offsets', function () { @@ -84,7 +84,7 @@ describe('elementsThatOverlapOffsets', function () { {offset: 250, length: 100}, ]; expect(() => { - elementsThatOverlapOffsets(offsets, frames.length, ii => frames[ii]); + elementsThatOverlapOffsets(offsets, frames.length, ii => frames[ii], 1); }).toThrowErrorMatchingSnapshot(); }); }); diff --git a/Libraries/Lists/__tests__/VirtualizedList-test.js b/Libraries/Lists/__tests__/VirtualizedList-test.js index 9f902f180c7fbc..5354df93f7f7b5 100644 --- a/Libraries/Lists/__tests__/VirtualizedList-test.js +++ b/Libraries/Lists/__tests__/VirtualizedList-test.js @@ -384,7 +384,7 @@ describe('VirtualizedList', () => { const instance = component.getInstance(); - instance._onLayout({nativeEvent: {layout}}); + instance._onLayout({nativeEvent: {layout, zoomScale: 1}}); const initialContentHeight = props.initialNumToRender * ITEM_HEIGHT; @@ -1490,7 +1490,7 @@ it('calls _onCellLayout properly', () => { ); const cell = virtualList._cellRefs.i4; const event = { - nativeEvent: {layout: {x: 0, y: 0, width: 50, height: 50}}, + nativeEvent: {layout: {x: 0, y: 0, width: 50, height: 50}, zoomScale: 1}, }; cell._onLayout(event); expect(mock).toHaveBeenCalledWith(event, 'i4', 3); @@ -1544,7 +1544,9 @@ function simulateLayout(component, args) { function simulateViewportLayout(component, dimensions) { lastViewportLayout = dimensions; - component.getInstance()._onLayout({nativeEvent: {layout: dimensions}}); + component + .getInstance() + ._onLayout({nativeEvent: {layout: dimensions}, zoomScale: 1}); } function simulateContentLayout(component, dimensions) { @@ -1558,7 +1560,7 @@ function simulateCellLayout(component, items, itemIndex, dimensions) { const instance = component.getInstance(); const cellKey = instance._keyExtractor(items[itemIndex], itemIndex); instance._onCellLayout( - {nativeEvent: {layout: dimensions}}, + {nativeEvent: {layout: dimensions, zoomScale: 1}}, cellKey, itemIndex, ); @@ -1570,6 +1572,7 @@ function simulateScroll(component, position) { contentOffset: position, contentSize: lastContentLayout, layoutMeasurement: lastViewportLayout, + zoomScale: 1, }, }); } diff --git a/Libraries/LogBox/Data/parseLogBoxLog.js b/Libraries/LogBox/Data/parseLogBoxLog.js index bf7ea56aa8197b..9771595cde4a62 100644 --- a/Libraries/LogBox/Data/parseLogBoxLog.js +++ b/Libraries/LogBox/Data/parseLogBoxLog.js @@ -316,7 +316,7 @@ export function parseLogBoxLog(args: $ReadOnlyArray): {| |} { const message = args[0]; let argsWithoutComponentStack = []; - let componentStack = []; + let componentStack: ComponentStack = []; // Extract component stack from warnings like "Some warning%s". if ( diff --git a/Libraries/LogBox/LogBox.js b/Libraries/LogBox/LogBox.js index 8a10f810694c1a..e2af653bf319bf 100644 --- a/Libraries/LogBox/LogBox.js +++ b/Libraries/LogBox/LogBox.js @@ -39,7 +39,7 @@ if (__DEV__) { let originalConsoleError; let originalConsoleWarn; let consoleErrorImpl; - let consoleWarnImpl; + let consoleWarnImpl: (...args: Array) => void; let isLogBoxInstalled: boolean = false; diff --git a/Libraries/Utilities/__tests__/setAndForwardRef-test.js b/Libraries/Utilities/__tests__/setAndForwardRef-test.js index 882b06889b5802..51c493dad3c44d 100644 --- a/Libraries/Utilities/__tests__/setAndForwardRef-test.js +++ b/Libraries/Utilities/__tests__/setAndForwardRef-test.js @@ -17,8 +17,8 @@ const ReactTestRenderer = require('react-test-renderer'); const setAndForwardRef = require('../setAndForwardRef'); describe('setAndForwardRef', () => { - let innerFuncCalled = false; - let outerFuncCalled = false; + let innerFuncCalled: ?boolean = false; + let outerFuncCalled: ?boolean = false; class ForwardedComponent extends React.Component<{||}> { testFunc() { diff --git a/Libraries/Utilities/useColorScheme.js b/Libraries/Utilities/useColorScheme.js index b79dd71c554945..b0d6eaeb22099f 100644 --- a/Libraries/Utilities/useColorScheme.js +++ b/Libraries/Utilities/useColorScheme.js @@ -8,24 +8,18 @@ * @flow strict-local */ -import {useMemo} from 'react'; -import {useSubscription} from 'use-subscription'; +'use strict'; + +import {useSyncExternalStore} from 'use-sync-external-store/shim'; import Appearance from './Appearance'; import type {ColorSchemeName} from './NativeAppearance'; export default function useColorScheme(): ?ColorSchemeName { - const subscription = useMemo( - () => ({ - getCurrentValue: () => Appearance.getColorScheme(), - subscribe: callback => { - const appearanceSubscription = Appearance.addChangeListener(callback); - return () => { - appearanceSubscription.remove(); - }; - }, - }), - [], + return useSyncExternalStore( + callback => { + const appearanceSubscription = Appearance.addChangeListener(callback); + return () => appearanceSubscription.remove(); + }, + () => Appearance.getColorScheme(), ); - - return useSubscription(subscription); } diff --git a/ReactAndroid/build.gradle b/ReactAndroid/build.gradle index b2d44d10d8cd38..01f712422b1619 100644 --- a/ReactAndroid/build.gradle +++ b/ReactAndroid/build.gradle @@ -283,6 +283,7 @@ android { cmake { arguments "-DREACT_COMMON_DIR=${reactNativeRootDir}/ReactCommon", "-DREACT_ANDROID_DIR=$projectDir", + "-DREACT_BUILD_DIR=$buildDir", "-DANDROID_STL=c++_shared", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_PLATFORM=android-21" diff --git a/ReactAndroid/src/main/java/com/facebook/react/CompositeReactPackageTurboModuleManagerDelegate.java b/ReactAndroid/src/main/java/com/facebook/react/CompositeReactPackageTurboModuleManagerDelegate.java deleted file mode 100644 index 42337bf3511898..00000000000000 --- a/ReactAndroid/src/main/java/com/facebook/react/CompositeReactPackageTurboModuleManagerDelegate.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react; - -import androidx.annotation.NonNull; -import com.facebook.jni.HybridData; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.turbomodule.core.TurboModuleManagerDelegate; -import com.facebook.soloader.SoLoader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class CompositeReactPackageTurboModuleManagerDelegate - extends ReactPackageTurboModuleManagerDelegate { - - private static volatile boolean sIsSoLibraryLoaded; - - protected native HybridData initHybrid(); - - private final List mDelegates; - - private CompositeReactPackageTurboModuleManagerDelegate( - ReactApplicationContext context, - List packages, - List delegates) { - super(context, packages); - mDelegates = delegates; - for (TurboModuleManagerDelegate delegate : delegates) { - addTurboModuleManagerDelegate(delegate); - } - } - - private native void addTurboModuleManagerDelegate(TurboModuleManagerDelegate delegates); - - public static class Builder extends ReactPackageTurboModuleManagerDelegate.Builder { - private final List mDelegatesBuilder; - - public Builder(@NonNull List delegatesBuilder) { - mDelegatesBuilder = delegatesBuilder; - } - - protected ReactPackageTurboModuleManagerDelegate build( - ReactApplicationContext context, List packages) { - List delegates = new ArrayList<>(); - for (ReactPackageTurboModuleManagerDelegate.Builder delegatesBuilder : mDelegatesBuilder) { - delegates.add(delegatesBuilder.build(context, Collections.emptyList())); - } - return new CompositeReactPackageTurboModuleManagerDelegate(context, packages, delegates); - } - } - - protected synchronized void maybeLoadOtherSoLibraries() { - // Prevents issues with initializer interruptions. See T38996825 and D13793825 for more context. - if (!sIsSoLibraryLoaded) { - SoLoader.loadLibrary("turbomodulejsijni"); - sIsSoLibraryLoaded = true; - } - } -} diff --git a/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java b/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java index 7d9c6421171dc5..a951694427ed1c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java @@ -113,7 +113,7 @@ private class ConcurrentOperationQueue { @AnyThread boolean isEmpty() { - return mQueue.isEmpty(); + return mQueue.isEmpty() && mPeekedOperation != null; } void setSynchronizedAccess(boolean isSynchronizedAccess) { @@ -150,7 +150,7 @@ void executeBatch(long maxBatchNumber, NativeAnimatedNodesManager nodesManager) @UiThread private @Nullable List drainQueueIntoList(long maxBatchNumber) { - if (mQueue.isEmpty() && mPeekedOperation == null) { + if (isEmpty()) { return null; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/Android.mk b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/Android.mk index dde630c4bf738e..5d978c9c35cabc 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/Android.mk +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/Android.mk @@ -56,12 +56,8 @@ LOCAL_SHARED_LIBRARIES = libfb libfbjni libreact_nativemodule_core libjsi LOCAL_STATIC_LIBRARIES = libcallinvokerholder libreactperfloggerjni # Compile all local c++ files -<<<<<<< HEAD -LOCAL_SRC_FILES := $(LOCAL_PATH)/ReactCommon/CompositeTurboModuleManagerDelegate.cpp $(LOCAL_PATH)/ReactCommon/OnLoad.cpp $(LOCAL_PATH)/ReactCommon/TurboModuleManager.cpp -======= LOCAL_SRC_FILES := $(LOCAL_PATH)/ReactCommon/TurboModuleManager.cpp $(LOCAL_PATH)/ReactCommon/OnLoad.cpp LOCAL_SRC_FILES := $(subst $(LOCAL_PATH)/,,$(LOCAL_SRC_FILES)) ->>>>>>> 379c1281a1d (This change is extending the changes made by alespergl to reduce the file paths and command lengths of ndk build commands) # Build the files in this directory as a shared library include $(BUILD_SHARED_LIBRARY) diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/BUCK b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/BUCK index 06ed578353b43b..741c05949a77d3 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/BUCK @@ -3,13 +3,11 @@ load("//tools/build_defs/oss:rn_defs.bzl", "ANDROID", "FBJNI_TARGET", "react_nat rn_xplat_cxx_library( name = "jni", srcs = [ - "ReactCommon/CompositeTurboModuleManagerDelegate.cpp", "ReactCommon/OnLoad.cpp", "ReactCommon/TurboModuleManager.cpp", ], header_namespace = "", exported_headers = { - "ReactCommon/CompositeTurboModuleManagerDelegate.h": "ReactCommon/CompositeTurboModuleManagerDelegate.h", "ReactCommon/TurboModuleManager.h": "ReactCommon/TurboModuleManager.h", "ReactCommon/TurboModuleManagerDelegate.h": "ReactCommon/TurboModuleManagerDelegate.h", }, diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/CMakeLists.txt b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/CMakeLists.txt index b5a9449bb9e1b1..02cfe42beeaea6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/CMakeLists.txt +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/CMakeLists.txt @@ -43,9 +43,8 @@ target_link_libraries(callinvokerholder add_library( turbomodulejsijni SHARED - ReactCommon/CompositeTurboModuleManagerDelegate.cpp - ReactCommon/OnLoad.cpp ReactCommon/TurboModuleManager.cpp + ReactCommon/OnLoad.cpp ) target_include_directories( diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/CompositeTurboModuleManagerDelegate.cpp b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/CompositeTurboModuleManagerDelegate.cpp deleted file mode 100644 index a84c819e429435..00000000000000 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/CompositeTurboModuleManagerDelegate.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#include "CompositeTurboModuleManagerDelegate.h" - -namespace facebook { -namespace react { - -jni::local_ref -CompositeTurboModuleManagerDelegate::initHybrid(jni::alias_ref) { - return makeCxxInstance(); -} - -void CompositeTurboModuleManagerDelegate::registerNatives() { - registerHybrid({ - makeNativeMethod( - "initHybrid", CompositeTurboModuleManagerDelegate::initHybrid), - makeNativeMethod( - "addTurboModuleManagerDelegate", - CompositeTurboModuleManagerDelegate::addTurboModuleManagerDelegate), - }); -} - -std::shared_ptr -CompositeTurboModuleManagerDelegate::getTurboModule( - const std::string moduleName, - const std::shared_ptr jsInvoker) { - for (auto delegate : mDelegates_) { - if (auto turboModule = delegate->getTurboModule(moduleName, jsInvoker)) { - return turboModule; - } - } - return nullptr; -} - -std::shared_ptr -CompositeTurboModuleManagerDelegate::getTurboModule( - const std::string moduleName, - const JavaTurboModule::InitParams ¶ms) { - for (auto delegate : mDelegates_) { - if (auto turboModule = delegate->getTurboModule(moduleName, params)) { - return turboModule; - } - } - return nullptr; -} - -void CompositeTurboModuleManagerDelegate::addTurboModuleManagerDelegate( - jni::alias_ref - turboModuleManagerDelegate) { - mDelegates_.insert(turboModuleManagerDelegate->cthis()); -} - -} // namespace react -} // namespace facebook diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/CompositeTurboModuleManagerDelegate.h b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/CompositeTurboModuleManagerDelegate.h deleted file mode 100644 index 12b370d66c6c83..00000000000000 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/CompositeTurboModuleManagerDelegate.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#pragma once - -#include -#include -#include -#include -#include - -namespace facebook { -namespace react { - -class CompositeTurboModuleManagerDelegate - : public jni::HybridClass< - CompositeTurboModuleManagerDelegate, - TurboModuleManagerDelegate> { - public: - static auto constexpr kJavaDescriptor = - "Lcom/facebook/react/CompositeReactPackageTurboModuleManagerDelegate;"; - - static jni::local_ref initHybrid(jni::alias_ref); - - static void registerNatives(); - - std::shared_ptr getTurboModule( - const std::string moduleName, - const std::shared_ptr jsInvoker) override; - std::shared_ptr getTurboModule( - const std::string moduleName, - const JavaTurboModule::InitParams ¶ms) override; - - private: - friend HybridBase; - using HybridBase::HybridBase; - std::unordered_set mDelegates_; - - void addTurboModuleManagerDelegate( - jni::alias_ref - turboModuleManagerDelegate); -}; - -} // namespace react -} // namespace facebook diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/OnLoad.cpp b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/OnLoad.cpp index f4c388428f20e2..ac7f63afe6cdd2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/OnLoad.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/OnLoad.cpp @@ -9,7 +9,6 @@ #include #include -#include "CompositeTurboModuleManagerDelegate.h" #include "TurboModuleManager.h" void jniEnableCppLogging( @@ -26,8 +25,6 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { // "ComponentDescriptorFactory" is defined in Fabric facebook::react::TurboModuleManager::registerNatives(); - facebook::react::CompositeTurboModuleManagerDelegate::registerNatives(); - facebook::jni::registerNatives( "com/facebook/react/turbomodule/core/TurboModulePerfLogger", {makeNativeMethod("jniEnableCppLogging", jniEnableCppLogging)}); diff --git a/ReactAndroid/src/main/jni/CMakeLists.txt b/ReactAndroid/src/main/jni/CMakeLists.txt index 9629ebf5408d0c..eb4150fa006864 100644 --- a/ReactAndroid/src/main/jni/CMakeLists.txt +++ b/ReactAndroid/src/main/jni/CMakeLists.txt @@ -16,8 +16,12 @@ function(add_react_android_subdir relative_path) add_subdirectory(${REACT_ANDROID_DIR}/${relative_path} ReactAndroid/${relative_path}) endfunction() +function(add_react_build_subdir relative_path) + add_subdirectory(${REACT_BUILD_DIR}/${relative_path} build/${relative_path}) +endfunction() + function(add_react_third_party_ndk_subdir relative_path) - add_react_android_subdir(build/third-party-ndk/${relative_path}) + add_react_build_subdir(third-party-ndk/${relative_path}) endfunction() function(add_react_common_subdir relative_path) @@ -84,7 +88,7 @@ add_react_common_subdir(react/renderer/mapbuffer) add_react_common_subdir(react/nativemodule/core) # ReactAndroid JNI targets -add_react_android_subdir(build/generated/source/codegen/jni) +add_react_build_subdir(generated/source/codegen/jni) add_react_android_subdir(src/main/java/com/facebook/hermes/reactexecutor) add_react_android_subdir(src/main/jni/first-party/fbjni) add_react_android_subdir(src/main/jni/first-party/fb) diff --git a/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt b/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt index e1a8f58857a598..e001b79550d3b8 100644 --- a/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt +++ b/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt @@ -14,7 +14,8 @@ add_compile_options( -fexceptions -frtti -Wno-unused-lambda-capture - -std=c++17) + -std=c++17 + -DWITH_INSPECTOR=1) ########################## ### React Native Utils ### diff --git a/flow/use-subscription.js b/flow/use-sync-external-store.js similarity index 74% rename from flow/use-subscription.js rename to flow/use-sync-external-store.js index fa7ef61ed118fd..4edac0dbfa6d47 100644 --- a/flow/use-subscription.js +++ b/flow/use-sync-external-store.js @@ -11,9 +11,9 @@ 'use strict'; -declare module 'use-subscription' { - declare export function useSubscription(subscription: {| - getCurrentValue: () => Value, +declare module 'use-sync-external-store/shim' { + declare export function useSyncExternalStore( subscribe: (callback: Function) => () => void, - |}): Value; + getCurrentValue: () => Value, + ): Value; } diff --git a/jest.config.js b/jest.config.js index 2561d8e2571f86..512bd1b538ef76 100644 --- a/jest.config.js +++ b/jest.config.js @@ -13,7 +13,7 @@ module.exports = { transform: { '^.+\\.(bmp|gif|jpg|jpeg|mp4|png|psd|svg|webp)$': '/jest/assetFileTransformer.js', - '.*': './jest/preprocessor_DO_NOT_USE.js', + '.*': './jest/private/preprocessor.js', }, setupFiles: ['./jest/setup.js'], timers: 'fake', diff --git a/jest/preprocessor.js b/jest/preprocessor.js deleted file mode 100644 index b63c603a940df9..00000000000000 --- a/jest/preprocessor.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and 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 - */ - -/* eslint-env node */ - -'use strict'; - -// NOTE: Avoiding using a package like 'chalk' here, for simplicity -const YELLOW = process.stderr.isTTY ? '\u001b[33m' : ''; -const BOLD = process.stderr.isTTY ? '\u001b[1m' : ''; -const RESET = process.stderr.isTTY ? '\u001b[0m' : ''; -const UNDERLINE = process.stderr.isTTY ? '\u001b[4m' : ''; - -console.warn( - '\n' + - YELLOW + - BOLD + - 'react-native/jest/preprocessor.js' + - RESET + - YELLOW + - ' is deprecated and will be removed.\n' + - 'Use "preset": "react-native" in your Jest config instead.\n' + - 'See ' + - UNDERLINE + - 'https://jestjs.io/docs/tutorial-react-native' + - RESET + - YELLOW + - ' for more setup instructions.' + - RESET + - '\n', -); - -module.exports = require('./preprocessor_DO_NOT_USE'); diff --git a/jest/preprocessor_DO_NOT_USE.js b/jest/private/preprocessor.js similarity index 100% rename from jest/preprocessor_DO_NOT_USE.js rename to jest/private/preprocessor.js diff --git a/package.json b/package.json index 532735d3c48022..5b818cea7f810e 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,6 @@ "outputName": "js-test-results.xml" }, "files": [ - "!template/node_modules", - "!template/package-lock.json", - "!template/yarn.lock", "android", "cli.js", "flow", @@ -25,6 +22,7 @@ "interface.js", "jest-preset.js", "jest", + "!jest/private", "Libraries", "LICENSE", "local-cli", @@ -60,6 +58,9 @@ "sdks/hermes-engine.podspec", "template.config.js", "template", + "!template/node_modules", + "!template/package-lock.json", + "!template/yarn.lock", "third-party-podspecs" ], "scripts": { @@ -98,7 +99,7 @@ }, "dependencies": { "@jest/create-cache-key-function": "^27.0.1", - "@react-native-community/cli": "^8.0.0-alpha.4", + "@react-native-community/cli": "^8.0.0-alpha.5", "@react-native-community/cli-platform-android": "^8.0.0-alpha.3", "@react-native-community/cli-platform-ios": "^8.0.0-alpha.3", "@react-native/assets": "1.0.0", @@ -112,9 +113,9 @@ "invariant": "^2.2.4", "jsc-android": "^250230.2.1", "memoize-one": "^5.0.0", - "metro-react-native-babel-transformer": "0.70.1", - "metro-runtime": "0.70.1", - "metro-source-map": "0.70.1", + "metro-react-native-babel-transformer": "0.70.3", + "metro-runtime": "0.70.3", + "metro-source-map": "0.70.3", "nullthrows": "^1.1.1", "pretty-format": "^26.5.2", "promise": "^8.0.3", @@ -125,12 +126,12 @@ "regenerator-runtime": "^0.13.2", "scheduler": "^0.21.0", "stacktrace-parser": "^0.1.3", - "use-subscription": ">=1.0.0 <1.6.0", + "use-sync-external-store": "^1.0.0", "whatwg-fetch": "^3.0.0", "ws": "^6.1.4" }, "devDependencies": { - "flow-bin": "^0.176.3", + "flow-bin": "^0.177.0", "react": "18.0.0", "react-test-renderer": "^18.0.0" }, diff --git a/packages/react-native-codegen/DEFS.bzl b/packages/react-native-codegen/DEFS.bzl index 6f36f86d87a4c3..6ef982c20edb74 100644 --- a/packages/react-native-codegen/DEFS.bzl +++ b/packages/react-native-codegen/DEFS.bzl @@ -28,24 +28,21 @@ load( "rn_apple_library", "rn_xplat_cxx_library", ) +load("//tools/build_defs/third_party:yarn_defs.bzl", "yarn_workspace_binary") # Call this in the react-native-codegen/BUCK file def rn_codegen_cli(): if not IS_OSS_BUILD: # FB Internal Setup - fb_native.sh_binary( + yarn_workspace_binary( name = "write_to_json", - main = "src/cli/combine/combine_js_to_schema.sh", - resources = [ - "src/cli/combine/combine-js-to-schema.js", - "src/cli/combine/combine_js_to_schema.sh", + main = "src/cli/combine/combine-js-to-schema-cli.js", + root = "//xplat/js:workspace", + deps = [ ":yarn-workspace", - "//xplat/js:setup_env", - "//xplat/js:setup_env_vars", ], visibility = ["PUBLIC"], ) - fb_native.sh_binary( name = "generate_all_from_schema", main = "src/cli/generators/generate-all.sh", diff --git a/packages/react-native-codegen/src/cli/combine/combine_js_to_schema.sh b/packages/react-native-codegen/src/cli/combine/combine_js_to_schema.sh deleted file mode 100755 index 12ecedc779c020..00000000000000 --- a/packages/react-native-codegen/src/cli/combine/combine_js_to_schema.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -# Copyright (c) Meta Platforms, Inc. and affiliates. -# -# This source code is licensed under the MIT license found in the -# LICENSE file in the root directory of this source tree. - -set -e -set -u - -THIS_DIR=$(cd -P "$(dirname "$(realpath "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd) - -SETUP_ENV_VARS_PATH="$BUCK_PROJECT_ROOT/env-utils/setup_env_vars.sh" - -# Somehow this path this doesn't work in BUCK1, so falling back to the exisiting path that we use in BUCK1. -if [ ! -f "${SETUP_ENV_VARS_PATH}" ]; then - SETUP_ENV_VARS_PATH="$BUCK_PROJECT_ROOT/xplat/js/env-utils/setup_env_vars.sh" -fi - -# shellcheck source=xplat/js/env-utils/setup_env_vars.sh -source "${SETUP_ENV_VARS_PATH}" - -pushd "$JS_DIR" >/dev/null - "$INSTALL_NODE_MODULES" -popd >/dev/null - -exec "$FLOW_NODE_BINARY" "$THIS_DIR/combine-js-to-schema-cli.js" "$@" diff --git a/packages/rn-tester/js/components/RNTesterSettingSwitchRow.js b/packages/rn-tester/js/components/RNTesterSettingSwitchRow.js index 5b84fe71acb2f2..22341cfbf28f02 100644 --- a/packages/rn-tester/js/components/RNTesterSettingSwitchRow.js +++ b/packages/rn-tester/js/components/RNTesterSettingSwitchRow.js @@ -47,15 +47,10 @@ const styles = StyleSheet.create({ justifyContent: 'space-between', }, }); -/* $FlowFixMe[cannot-reassign-export] (>=0.85.0 site=react_native_fb) This - * comment suppresses an error found when Flow v0.85 was deployed. To see the - * error, delete this comment and run Flow. */ -// $FlowFixMe[cannot-reassign] -RNTesterSettingSwitchRow = RNTesterStatePersister.createContainer( - RNTesterSettingSwitchRow, - { + +const RNTesterSettingSwitchRowContainer: React.ComponentType<$FlowFixMeProps> = + RNTesterStatePersister.createContainer(RNTesterSettingSwitchRow, { cacheKeySuffix: ({label}) => 'Switch:' + label, getInitialState: ({initialValue}) => initialValue, - }, -); -module.exports = RNTesterSettingSwitchRow; + }); +module.exports = RNTesterSettingSwitchRowContainer; diff --git a/packages/rn-tester/js/utils/RNTesterStatePersister.js b/packages/rn-tester/js/utils/RNTesterStatePersister.js index 495de54a5c0507..4839327bbe8472 100644 --- a/packages/rn-tester/js/utils/RNTesterStatePersister.js +++ b/packages/rn-tester/js/utils/RNTesterStatePersister.js @@ -57,6 +57,7 @@ function createContainer( _passSetState = (stateLamda: (state: State) => State): void => { this.setState(state => { const value = stateLamda(state.value); + // $FlowFixMe[incompatible-call] AsyncStorage.setItem(this._cacheKey, JSON.stringify(value)); return {value}; }); diff --git a/repo-config/package.json b/repo-config/package.json index 6d277e3bec6e64..adfd6c8ce966bd 100644 --- a/repo-config/package.json +++ b/repo-config/package.json @@ -34,12 +34,12 @@ "eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-react-native": "^3.11.0", "eslint-plugin-relay": "^1.8.2", - "flow-bin": "^0.176.3", + "flow-bin": "^0.177.0", "inquirer": "^7.1.0", "jest": "^26.6.3", "jest-junit": "^10.0.0", "jscodeshift": "^0.13.1", - "metro-babel-register": "0.70.1", + "metro-babel-register": "0.70.3", "mkdirp": "^0.5.1", "prettier": "^2.4.1", "react": "17.0.2", diff --git a/scripts/react_native_pods.rb b/scripts/react_native_pods.rb index a630e9bfbfd668..d95ff4ab625936 100644 --- a/scripts/react_native_pods.rb +++ b/scripts/react_native_pods.rb @@ -110,7 +110,6 @@ def use_react_native! (options={}) if hermes_enabled pod 'React-hermes', :path => "#{prefix}/ReactCommon/hermes" - Pod::UI.puts "[Hermes] Building Hermes from source" hermes_source_path = downloadAndConfigureHermesSource(prefix) pod 'hermes-engine', :path => "#{hermes_source_path}/hermes-engine.podspec" pod 'libevent', '~> 2.1.12' @@ -684,20 +683,12 @@ def downloadAndConfigureHermesSource(react_native_path) hermes_tarball_path = "#{download_dir}/hermes-#{hermes_tag_sha}.tar.gz" if (!File.exist?(hermes_tarball_path)) - Pod::UI.puts "[Hermes] Downloading Hermes source code (#{hermes_tarball_url})" + Pod::UI.puts "[Hermes] Downloading Hermes source code..." system("curl #{hermes_tarball_url} -Lo #{hermes_tarball_path}") end - Pod::UI.puts "[Hermes] Extracting Hermes (#{hermes_tag_sha})" + Pod::UI.puts "[Hermes] Extracting Hermes tarball (#{hermes_tag_sha.slice(0,6)})" system("tar -zxf #{hermes_tarball_path} --strip-components=1 --directory #{hermes_dir}") - hermesc_macos_path = "#{sdks_dir}/hermesc/macos/build_host_hermesc" - hermesc_macos_link = "#{hermes_dir}/utils/build_host_hermesc" - if (File.exist?(hermesc_macos_path)) - # If hermesc is present, create a symbolic link in the hermes source directory to avoid re-building hermesc - Pod::UI.puts "[Hermes] Using pre-compiled Hermes Compiler from #{hermesc_macos_path}" - system("ln -s #{hermesc_macos_path} #{hermesc_macos_link}") - end - # TODO: Integrate this temporary hermes-engine.podspec into the actual one located in facebook/hermes system("cp #{sdks_dir}/hermes-engine.podspec #{hermes_dir}/hermes-engine.podspec") diff --git a/sdks/hermes-engine.podspec b/sdks/hermes-engine.podspec index 32ea54764bfd70..c4b28c6071ffe8 100644 --- a/sdks/hermes-engine.podspec +++ b/sdks/hermes-engine.podspec @@ -16,9 +16,11 @@ module HermesHelper BUILD_TYPE = :release end +Pod::UI.puts '[Hermes] Hermes needs to be compiled, installing hermes-engine may take a while...'.yellow + Pod::Spec.new do |spec| spec.name = "hermes-engine" - spec.version = '1000.0.0' + spec.version = "1000.0.0-#{hermes_tag_sha.slice(0,6)}" spec.summary = "Hermes is a small and lightweight JavaScript engine optimized for running React Native." spec.description = "Hermes is a JavaScript engine optimized for fast start-up of React Native apps. It features ahead-of-time static optimization and compact bytecode." spec.homepage = "https://hermesengine.dev" diff --git a/template/_flowconfig b/template/_flowconfig index 74f3a75e7b2526..be9800d3542009 100644 --- a/template/_flowconfig +++ b/template/_flowconfig @@ -63,4 +63,4 @@ untyped-import untyped-type-import [version] -^0.176.3 +^0.177.0 diff --git a/template/ios/Podfile b/template/ios/Podfile index 06a02f936c61a0..c814edb8d9d019 100644 --- a/template/ios/Podfile +++ b/template/ios/Podfile @@ -12,7 +12,8 @@ target 'HelloWorld' do use_react_native!( :path => config[:reactNativePath], - # to enable hermes on iOS, change `false` to `true` and then install pods + # By default, Hermes is disabled on Old Architecture, and enabled on New Architecture. + # You can enabled/disable it manually by replacing `flags[:hermes_enabled]` with `true` or `false`. :hermes_enabled => flags[:hermes_enabled], :fabric_enabled => flags[:fabric_enabled], # An absolute path to your application root. diff --git a/template/package.json b/template/package.json index 33e9084df8d317..e7cafd5a1434e1 100644 --- a/template/package.json +++ b/template/package.json @@ -20,7 +20,7 @@ "babel-jest": "^26.6.3", "eslint": "^7.32.0", "jest": "^26.6.3", - "metro-react-native-babel-preset": "^0.70.1", + "metro-react-native-babel-preset": "^0.70.3", "react-test-renderer": "18.0.0" }, "jest": { diff --git a/tools/build_defs/third_party/yarn_defs.bzl b/tools/build_defs/third_party/yarn_defs.bzl index b68f9e42d12968..27a67102b36550 100644 --- a/tools/build_defs/third_party/yarn_defs.bzl +++ b/tools/build_defs/third_party/yarn_defs.bzl @@ -11,3 +11,21 @@ def yarn_workspace(name, srcs = [], transform_ignore = None, visibility = None): out = "{}.txt".format(name), visibility = visibility, ) + +def yarn_workspace_binary( + name, + main, + deps = None, + root = None, + reuse = None, + args = None, + env = None, + node_args = None, + visibility = None): + # Noop for OSS vs FB build compatibility for now + native.genrule( + name = name, + cmd = "echo {} > $OUT".format(name), + out = "{}.txt".format(name), + visibility = visibility, + ) diff --git a/yarn.lock b/yarn.lock index 85a9f802499aab..a5e5112905103d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -588,13 +588,6 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.16.7" -"@babel/plugin-transform-object-assign@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.13.tgz#d9b9200a69e03403a813e44a933ad9f4bddfd050" - integrity sha512-4QxDMc0lAOkIBSfCrnSGbAJ+4epDBF2XXwcLXuBcG1xl9u7LrktNVD4+LwhL47XuKVPQ7R25e/WdcV+h97HyZA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-transform-object-super@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" @@ -751,6 +744,13 @@ core-js-pure "^3.19.0" regenerator-runtime "^0.13.4" +"@babel/runtime@^7.0.0": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" + integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.8.4": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.0.tgz#e27b977f2e2088ba24748bf99b5e1dece64e4f0b" @@ -1183,20 +1183,20 @@ ora "^5.4.1" plist "^3.0.2" -"@react-native-community/cli-plugin-metro@^8.0.0-alpha.4": - version "8.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-8.0.0-alpha.4.tgz#3cfb468a184e4ca8e9d9d746f8334204520ece6d" - integrity sha512-PHQjR/nc/e4K1PQAsHb9P/nXgup5HjehmuGXBOKZ12POKQpVesDvLg7SJ9MrEap2FrZyrQdB60RVvv00edQFtA== +"@react-native-community/cli-plugin-metro@^8.0.0-alpha.5": + version "8.0.0-alpha.5" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-8.0.0-alpha.5.tgz#c3539cda24ece8bc3e7576196dc89161994787f8" + integrity sha512-G2ZqdX2HAokIzNpfT+hK8XNXYb1NSCzqe/ke5FobhrsRsU8S1d0/+MV+g59w34VHG5MdJXXSLl3Cq3ddDOd25w== dependencies: "@react-native-community/cli-server-api" "^8.0.0-alpha.3" "@react-native-community/cli-tools" "^8.0.0-alpha.3" chalk "^4.1.2" - metro "^0.67.0" - metro-config "^0.67.0" - metro-core "^0.67.0" - metro-react-native-babel-transformer "^0.67.0" - metro-resolver "^0.67.0" - metro-runtime "^0.67.0" + metro "^0.70.1" + metro-config "^0.70.1" + metro-core "^0.70.1" + metro-react-native-babel-transformer "^0.70.1" + metro-resolver "^0.70.1" + metro-runtime "^0.70.1" readline "^1.3.0" "@react-native-community/cli-server-api@^8.0.0-alpha.3": @@ -1236,17 +1236,17 @@ dependencies: joi "^17.2.1" -"@react-native-community/cli@^8.0.0-alpha.4": - version "8.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-8.0.0-alpha.4.tgz#f367aa47c12c11606961f4e38edb1e71c3c5cfb9" - integrity sha512-5QAo1M5ffW9rJbMMOJPbhNPWckHGBA2P03+2kgqg5PrQLOOqKCBp6JuJIn/cQf6oyW/uscoy6nAQjrW2YfLE4w== +"@react-native-community/cli@^8.0.0-alpha.5": + version "8.0.0-alpha.5" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-8.0.0-alpha.5.tgz#f727f459d1d64b44535b4250b30fbd082de297bf" + integrity sha512-9BrOcUDoob0Mp5Ml69QmBfx4SOu4Ud/ee34LxUjHwTUy22VMFvHf8sQCdJWzA7DN9rY0qL8yrjDelh8i2QRUPQ== dependencies: "@react-native-community/cli-clean" "^8.0.0-alpha.3" "@react-native-community/cli-config" "^8.0.0-alpha.3" "@react-native-community/cli-debugger-ui" "^8.0.0-alpha.3" "@react-native-community/cli-doctor" "^8.0.0-alpha.3" "@react-native-community/cli-hermes" "^8.0.0-alpha.3" - "@react-native-community/cli-plugin-metro" "^8.0.0-alpha.4" + "@react-native-community/cli-plugin-metro" "^8.0.0-alpha.5" "@react-native-community/cli-server-api" "^8.0.0-alpha.3" "@react-native-community/cli-tools" "^8.0.0-alpha.3" "@react-native-community/cli-types" "^8.0.0-alpha.3" @@ -1737,13 +1737,6 @@ async@^1.5.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.4.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== - dependencies: - lodash "^4.17.10" - async@^3.2.2: version "3.2.3" resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" @@ -3233,10 +3226,10 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== -flow-bin@^0.176.3: - version "0.176.3" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.176.3.tgz#d32de04e044ab474afe543b9fd245608bb6a6ac8" - integrity sha512-lbNqgjr2GlGLAEVp5+dhG4LdnFE7ekbvVNifAdlvTx58/nE8GrCOMiUwEQy4dLnfL2NIRMk2dbEVTrugeQJ3mA== +flow-bin@^0.177.0: + version "0.177.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.177.0.tgz#dd537424dcbdd56f3cc85fd72330840a590e4711" + integrity sha512-hEm9VDf07iGcfjiCaxZAbpp/bRcgPf/Q3f7UucWpMotrM0MmyZ2hCBvhw53XCd3M7+fP8eyZKRvUWtrMqEC/Sg== flow-parser@0.*: version "0.163.0" @@ -3525,23 +3518,11 @@ hermes-engine@~0.11.0: resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.11.0.tgz#bb224730d230a02a5af02c4e090d1f52d57dd3db" integrity sha512-7aMUlZja2IyLYAcZ69NBnwJAR5ZOYlSllj0oMpx08a8HzxHOys0eKCzfphrf6D0vX1JGO1QQvVsQKe6TkYherw== -hermes-estree@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.5.0.tgz#36432a2b12f01b217244da098924efdfdfc12327" - integrity sha512-1h8rvG23HhIR5K6Kt0e5C7BC72J1Ath/8MmSta49vxXp/j6wl7IMHvIRFYBQr35tWnQY97dSGR2uoAJ5pHUQkg== - hermes-estree@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.6.0.tgz#e866fddae1b80aec65fe2ae450a5f2070ad54033" integrity sha512-2YTGzJCkhdmT6VuNprWjXnvTvw/3iPNw804oc7yknvQpNKo+vJGZmtvLLCghOZf0OwzKaNAzeIMp71zQbNl09w== -hermes-parser@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.5.0.tgz#8b678dd8b29a08b57cbaf60adba4896494c59a53" - integrity sha512-ARnJBScKAkkq8j3BHrNGBUv/4cSpZNbKDsVizEtzmsFeqC67Dopa5s4XRe+e3wN52Dh5Mj2kDB5wJvhcxwDkPg== - dependencies: - hermes-estree "0.5.0" - hermes-parser@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.6.0.tgz#00d14e91bca830b3c1457050fa4187400cb96328" @@ -4496,7 +4477,7 @@ jest-watcher@^26.6.2: jest-util "^26.6.2" string-length "^4.0.1" -jest-worker@^26.0.0, jest-worker@^26.6.2: +jest-worker@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== @@ -4505,6 +4486,15 @@ jest-worker@^26.0.0, jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" +jest-worker@^27.2.0: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest-worker@^27.4.6: version "27.4.6" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e" @@ -4818,7 +4808,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4908,10 +4898,10 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -metro-babel-register@0.70.1: - version "0.70.1" - resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.70.1.tgz#2adf5a239a7aee3f502ef323720c74120d362893" - integrity sha512-9hfTAmdTu8cKqL1Xbl/y3kz09fse0TzAqwE7SyNSo5j42U7C6ba0JdeRIy0MSpeLFAttC7E6/ctVE3fqHpzoVA== +metro-babel-register@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.70.3.tgz#b51e881c7633f38decc9be2e25a46478af579047" + integrity sha512-ZrADEuqshCPxjPv6olM/5Hx5cOI7vnJ7DEvAIUaWRwdlonYt5lRA9hgXw8hYwwBYrclgPWW7waPdyICm70szzA== dependencies: "@babel/core" "^7.14.0" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" @@ -4924,133 +4914,76 @@ metro-babel-register@0.70.1: babel-plugin-replace-ts-export-assignment "^0.0.2" escape-string-regexp "^1.0.5" -metro-babel-transformer@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.67.0.tgz#42fe82af9953e5c62d9a8d7d544eb7be9020dd18" - integrity sha512-SBqc4nq/dgsPNFm+mpWcQQzJaXnh0nrfz2pSnZC4i6zMtIakrTWb8SQ78jOU1FZVEZ3nu9xCYVHS9Tbr/LoEuw== - dependencies: - "@babel/core" "^7.14.0" - hermes-parser "0.5.0" - metro-source-map "0.67.0" - nullthrows "^1.1.1" - -metro-babel-transformer@0.70.1: - version "0.70.1" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.70.1.tgz#532c766fc3200acdd11259c62f993ee483eab8e7" - integrity sha512-KjQt1zbjXSw40lN98YY1+MNcZzhyEobjpGKKlDo7JWEEYan4dKlRnujymdJNG8v/fXLY4WdB3vcLR/qIWHRZhQ== +metro-babel-transformer@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.70.3.tgz#dca61852be273824a4b641bd1ecafff07ff3ad1f" + integrity sha512-bWhZRMn+mIOR/s3BDpFevWScz9sV8FGktVfMlF1eJBLoX24itHDbXvTktKBYi38PWIKcHedh6THSFpJogfuwNA== dependencies: "@babel/core" "^7.14.0" hermes-parser "0.6.0" - metro-source-map "0.70.1" + metro-source-map "0.70.3" nullthrows "^1.1.1" -metro-cache-key@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.67.0.tgz#4df6a73cced199e1bddd0f3454bb931a27141eeb" - integrity sha512-FNJe5Rcb2uzY6G6tsqCf0RV4t2rCeX6vSHBxmP7k+4aI4NqX4evtPI0K82r221nBzm5DqNWCURZ0RYUT6jZMGA== +metro-cache-key@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.70.3.tgz#898803db04178a8f440598afba7d82a9cf35abf7" + integrity sha512-0zpw+IcpM3hmGd5sKMdxNv3sbOIUYnMUvx1/yaM6vNRReSPmOLX0bP8fYf3CGgk8NEreZ1OHbVsuw7bdKt40Mw== -metro-cache@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.67.0.tgz#928db5742542719677468c4d22ea29b71c7ec8fc" - integrity sha512-IY5dXiR76L75b2ue/mv+9vW8g5hdQJU6YEe81lj6gTSoUrhcONT0rzY+Gh5QOS2Kk6z9utZQMvd9PRKL9/635A== +metro-cache@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.70.3.tgz#42cf3cdf8a7b3691f3bef9a86bed38d4c5f6201f" + integrity sha512-iCix/+z812fUqa6KlOxaTkY6LQQDoXIe/VljXkGIvpygSCmYyhjQpfQVZEVVPezFmUBYXNdabdQ6cYx6JX3yMg== dependencies: - metro-core "0.67.0" - mkdirp "^0.5.1" + metro-core "0.70.3" rimraf "^2.5.4" -metro-config@0.67.0, metro-config@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.67.0.tgz#5507d3b295bd10c87bd13dbe5a3033a357418786" - integrity sha512-ThAwUmzZwTbKyyrIn2bKIcJDPDBS0LKAbqJZQioflvBGfcgA21h3fdL3IxRmvCEl6OnkEWI0Tn1Z9w2GLAjf2g== +metro-config@0.70.3, metro-config@^0.70.1: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.70.3.tgz#fe6f7330f679d5594e5724af7a69d4dbe1bb5bc3" + integrity sha512-SSCDjSTygoCgzoj61DdrBeJzZDRwQxUEfcgc6t6coxWSExXNR4mOngz0q4SAam49Bmjq9J2Jft6qUKnUTPrRgA== dependencies: cosmiconfig "^5.0.5" jest-validate "^26.5.2" - metro "0.67.0" - metro-cache "0.67.0" - metro-core "0.67.0" - metro-runtime "0.67.0" + metro "0.70.3" + metro-cache "0.70.3" + metro-core "0.70.3" + metro-runtime "0.70.3" -metro-core@0.67.0, metro-core@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.67.0.tgz#75066e11b4df220992abf9cd6200279dd87876c8" - integrity sha512-TOa/ShE1bUq83fGNfV6rFwyfZ288M8ydmWN3g9C2OW8emOHLhJslYD/SIU4DhDkP/99yaJluIALdZ2g0+pCrvQ== +metro-core@0.70.3, metro-core@^0.70.1: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.70.3.tgz#bf4dda15a5185f5a7931de463a1b97ac9ef680a0" + integrity sha512-NzfHB/w5R7yLaOeU1tzPTbBzCRsYSvpKJkLMP0yudszKZzIAZqNdjoEJ9GZ688Wi0ynZxcU0BxukXh4my80ZBw== dependencies: jest-haste-map "^27.3.1" lodash.throttle "^4.1.1" - metro-resolver "0.67.0" + metro-resolver "0.70.3" -metro-hermes-compiler@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.67.0.tgz#9c1340f1882fbf535145868d0d28211ca15b0477" - integrity sha512-X5Pr1jC8/kO6d1EBDJ6yhtuc5euHX89UDNv8qdPJHAET03xfFnlojRPwOw6il2udAH20WLBv+F5M9VY+58zspQ== +metro-hermes-compiler@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.70.3.tgz#ac7ed656fbcf0a59adcd010d3639e4cfdbc76b4f" + integrity sha512-W6WttLi4E72JL/NyteQ84uxYOFMibe0PUr9aBKuJxxfCq6QRnJKOVcNY0NLW0He2tneXGk+8ZsNz8c0flEvYqg== -metro-inspector-proxy@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.67.0.tgz#22b360a837b07e9e2bc87a71af6154dd8fcc02a5" - integrity sha512-5Ubjk94qpNaU3OT2IZa4/dec09bauic1hzWms4czorBzDenkp4kYXG9/aWTmgQLtCk92H3Q8jKl1PQRxUSkrOQ== +metro-inspector-proxy@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.70.3.tgz#321c25b2261e76d8c4bcc39e092714adfcb50a14" + integrity sha512-qQoNdPGrmyoJSWYkxSDpTaAI8xyqVdNDVVj9KRm1PG8niSuYmrCCFGLLFsMvkVYwsCWUGHoGBx0UoAzVp14ejw== dependencies: connect "^3.6.5" debug "^2.2.0" ws "^7.5.1" yargs "^15.3.1" -metro-minify-uglify@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.67.0.tgz#28a77dbd78d9e558dba8c2f31c2b9c6f939df966" - integrity sha512-4CmM5b3MTAmQ/yFEfsHOhD2SuBObB2YF6PKzXZc4agUsQVVtkrrNElaiWa8w26vrTzA9emwcyurxMf4Nl3lYPQ== +metro-minify-uglify@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.70.3.tgz#2f28129ca5b8ef958f3e3fcf004c3707c7732e1e" + integrity sha512-oHyjV9WDqOlDE1FPtvs6tIjjeY/oP1PNUPYL1wqyYtqvjN+zzAOrcbsAAL1sv+WARaeiMsWkF2bwtNo+Hghoog== dependencies: uglify-es "^3.1.9" -metro-react-native-babel-preset@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.67.0.tgz#53aec093f53a09b56236a9bb534d76658efcbec7" - integrity sha512-tgTG4j0SKwLHbLRELMmgkgkjV1biYkWlGGKOmM484/fJC6bpDikdaFhfjsyE+W+qt7I5szbCPCickMTNQ+zwig== - dependencies: - "@babel/core" "^7.14.0" - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.0.0" - "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.2.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-exponentiation-operator" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-assign" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.5.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - react-refresh "^0.4.0" - -metro-react-native-babel-preset@0.70.1: - version "0.70.1" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.70.1.tgz#d71c3630645014c7095fe94655f4c003a6a457ff" - integrity sha512-E7jCbHyb+HTA00AqO/XxURCNFc68KU9nJo7zMDGt4EjwcUP80RaBzK1O4/GborQzkWM4wjIuQMnYX6xWYuV5ag== +metro-react-native-babel-preset@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.70.3.tgz#1c77ec4544ecd5fb6c803e70b21284d7483e4842" + integrity sha512-4Nxc1zEiHEu+GTdEMEsHnRgfaBkg8f/Td3+FcQ8NTSvs+xL3LBrQy6N07idWSQZHIdGFf+tTHvRfSIWLD8u8Tg== dependencies: "@babel/core" "^7.14.0" "@babel/plugin-proposal-async-generator-functions" "^7.0.0" @@ -5092,105 +5025,63 @@ metro-react-native-babel-preset@0.70.1: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-transformer@0.70.1: - version "0.70.1" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.70.1.tgz#db41af492d3857128f8297334d2752c2efa61827" - integrity sha512-0484t7uASQX9JAIhvTfKiheaTM3hjPvPwFMP+8JpTGd/GNY0r0dPxC0XSFah5fJBA7WM6UTuaqChik3wU0JsCA== +metro-react-native-babel-transformer@0.70.3, metro-react-native-babel-transformer@^0.70.1: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.70.3.tgz#195597c32488f820aa9e441bbca7c04fe7de7a2d" + integrity sha512-WKBU6S/G50j9cfmFM4k4oRYprd8u3qjleD4so1E2zbTNILg+gYla7ZFGCAvi2G0ZcqS2XuGCR375c2hF6VVvwg== dependencies: "@babel/core" "^7.14.0" babel-preset-fbjs "^3.4.0" hermes-parser "0.6.0" - metro-babel-transformer "0.70.1" - metro-react-native-babel-preset "0.70.1" - metro-source-map "0.70.1" + metro-babel-transformer "0.70.3" + metro-react-native-babel-preset "0.70.3" + metro-source-map "0.70.3" nullthrows "^1.1.1" -metro-react-native-babel-transformer@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.67.0.tgz#756d32eb3c05cab3d72fcb1700f8fd09322bb07f" - integrity sha512-P0JT09n7T01epUtgL9mH6BPat3xn4JjBakl4lWHdL61cvEGcrxuIom1eoFFKkgU/K5AVLU4aCAttHS7nSFCcEQ== - dependencies: - "@babel/core" "^7.14.0" - babel-preset-fbjs "^3.4.0" - hermes-parser "0.5.0" - metro-babel-transformer "0.67.0" - metro-react-native-babel-preset "0.67.0" - metro-source-map "0.67.0" - nullthrows "^1.1.1" - -metro-resolver@0.67.0, metro-resolver@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.67.0.tgz#8143c716f77e468d1d42eca805243706eb349959" - integrity sha512-d2KS/zAyOA/z/q4/ff41rAp+1txF4H6qItwpsls/RHStV2j6PqgRHUzq/3ga+VIeoUJntYJ8nGW3+3qSrhFlig== +metro-resolver@0.70.3, metro-resolver@^0.70.1: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.70.3.tgz#c64fdd6d0a88fa62f3f99f87e539b5f603bd47bf" + integrity sha512-5Pc5S/Gs4RlLbziuIWtvtFd9GRoILlaRC8RZDVq5JZWcWHywKy/PjNmOBNhpyvtRlzpJfy/ssIfLhu8zINt1Mw== dependencies: absolute-path "^0.0.0" -metro-runtime@0.67.0, metro-runtime@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.67.0.tgz#a8888dfd06bcebbac3c99dcac7cd622510dd8ee0" - integrity sha512-IFtSL0JUt1xK3t9IoLflTDft82bjieSzdIJWLzrRzBMlesz8ox5bVmnpQbVQEwfYUpEOxbM3VOZauVbdCmXA7g== - -metro-runtime@0.70.1: - version "0.70.1" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.70.1.tgz#3f592a76f46b4441dc724e7e0523b531a2ac9a3e" - integrity sha512-E3aY2rGckJDgtpr2Uvlkhoadl5AF5q0OUkxgPilztj5uzK0PAqQtNn1U3kluZ4obfQGv7nBCp+CBadpsbGuO3g== - -metro-source-map@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.67.0.tgz#e28db7253b9ca688e60d5710ebdccba60b45b2df" - integrity sha512-yxypInsRo3SfS00IgTuL6a2W2tfwLY//vA2E+GeqGBF5zTbJZAhwNGIEl8S87XXZhwzJcxf5/8LjJC1YDzabww== +metro-runtime@0.70.3, metro-runtime@^0.70.1: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.70.3.tgz#09231b9d05dcbdfb5a13df0a45307273e6fe1168" + integrity sha512-22xU7UdXZacniTIDZgN2EYtmfau2pPyh97Dcs+cWrLcJYgfMKjWBtesnDcUAQy3PHekDYvBdJZkoQUeskYTM+w== dependencies: - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.0.0" - invariant "^2.2.4" - metro-symbolicate "0.67.0" - nullthrows "^1.1.1" - ob1 "0.67.0" - source-map "^0.5.6" - vlq "^1.0.0" + "@babel/runtime" "^7.0.0" -metro-source-map@0.70.1: - version "0.70.1" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.70.1.tgz#f72a21065ace07e19a3696314360d0dc65a00528" - integrity sha512-3VO6yLU0OKa7GM/FCyStT9/n+lDRIuomXbZdoE82NO2RTJfptKg1UphLcJ/wbs5GqBRT8zXyd3eRTwW7AAfeZg== +metro-source-map@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.70.3.tgz#f5976108c18d4661eaa4d188c96713e5d67a903b" + integrity sha512-zsYtZGrwRbbGEFHtmMqqeCH9K9aTGNVPsurMOWCUeQA3VGyVGXPGtLMC+CdAM9jLpUyg6jw2xh0esxi+tYH7Uw== dependencies: "@babel/traverse" "^7.14.0" "@babel/types" "^7.0.0" invariant "^2.2.4" - metro-symbolicate "0.70.1" + metro-symbolicate "0.70.3" nullthrows "^1.1.1" - ob1 "0.70.1" + ob1 "0.70.3" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.67.0.tgz#16729d05663d28176895244b3d932a898fca2b45" - integrity sha512-ZqVVcfa0xSz40eFzA5P8pCF3V6Tna9RU1prFzAJTa3j9dCGqwh0HTXC8AIkMtgX7hNdZrCJI1YipzUBlwkT0/A== +metro-symbolicate@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.70.3.tgz#b039e5629c4ed0c999ea0496d580e1c98260f5cb" + integrity sha512-JTYkF1dpeDUssQ84juE1ycnhHki2ylJBBdJE1JHtfu5oC+z1ElDbBdPHq90Uvt8HbRov/ZAnxvv7Zy6asS+WCA== dependencies: invariant "^2.2.4" - metro-source-map "0.67.0" + metro-source-map "0.70.3" nullthrows "^1.1.1" source-map "^0.5.6" through2 "^2.0.1" vlq "^1.0.0" -metro-symbolicate@0.70.1: - version "0.70.1" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.70.1.tgz#fe2098447662dd70396a33482c0961c5ab020ecb" - integrity sha512-PQDlvjLDGv9r1wa8Ykmykr0ob6bkBdcOE3oxjAGw2umi7zjINZ8mMVfmHIRDK0vEh7DNHWp/aYTX9o4BN3Fmbg== - dependencies: - invariant "^2.2.4" - metro-source-map "0.70.1" - nullthrows "^1.1.1" - source-map "^0.5.6" - through2 "^2.0.1" - vlq "^1.0.0" - -metro-transform-plugins@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.67.0.tgz#6122aa4e5e5f9a767cebcc5af6fd1695666683ce" - integrity sha512-DQFoSDIJdTMPDTUlKaCNJjEXiHGwFNneAF9wDSJ3luO5gigM7t7MuSaPzF4hpjmfmcfPnRhP6AEn9jcza2Sh8Q== +metro-transform-plugins@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.70.3.tgz#7fe87cd0d8979b4d5d6e375751d86188fff38fd9" + integrity sha512-dQRIJoTkWZN2IVS2KzgS1hs7ZdHDX3fS3esfifPkqFAEwHiLctCf0EsPgIknp0AjMLvmGWfSLJigdRB/dc0ASw== dependencies: "@babel/core" "^7.14.0" "@babel/generator" "^7.14.0" @@ -5198,29 +5089,29 @@ metro-transform-plugins@0.67.0: "@babel/traverse" "^7.14.0" nullthrows "^1.1.1" -metro-transform-worker@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.67.0.tgz#5689553c25b0657aadefdf4ea2cd8dd06e18882a" - integrity sha512-29n+JdTb80ROiv/wDiBVlY/xRAF/nrjhp/Udv/XJl1DZb+x7JEiPxpbpthPhwwl+AYxVrostGB0W06WJ61hfiw== +metro-transform-worker@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.70.3.tgz#62bfa28ebef98803531c4bcb558de5fc804c94ef" + integrity sha512-MtVVsnHhhBOp9GRLCdAb2mD1dTCsIzT4+m34KMRdBDCEbDIb90YafT5prpU8qbj5uKd0o2FOQdrJ5iy5zQilHw== dependencies: "@babel/core" "^7.14.0" "@babel/generator" "^7.14.0" "@babel/parser" "^7.14.0" "@babel/types" "^7.0.0" babel-preset-fbjs "^3.4.0" - metro "0.67.0" - metro-babel-transformer "0.67.0" - metro-cache "0.67.0" - metro-cache-key "0.67.0" - metro-hermes-compiler "0.67.0" - metro-source-map "0.67.0" - metro-transform-plugins "0.67.0" + metro "0.70.3" + metro-babel-transformer "0.70.3" + metro-cache "0.70.3" + metro-cache-key "0.70.3" + metro-hermes-compiler "0.70.3" + metro-source-map "0.70.3" + metro-transform-plugins "0.70.3" nullthrows "^1.1.1" -metro@0.67.0, metro@^0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.67.0.tgz#8007a041d22de1cdb05184431c67eb7989eef6e0" - integrity sha512-DwuBGAFcAivoac/swz8Lp7Y5Bcge1tzT7T6K0nf1ubqJP8YzBUtyR4pkjEYVUzVu/NZf7O54kHSPVu1ibYzOBQ== +metro@0.70.3, metro@^0.70.1: + version "0.70.3" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.70.3.tgz#4290f538ab5446c7050e718b5c5823eea292c5c2" + integrity sha512-uEWS7xg8oTetQDABYNtsyeUjdLhH3KAvLFpaFFoJqUpOk2A3iygszdqmjobFl6W4zrvKDJS+XxdMR1roYvUhTw== dependencies: "@babel/code-frame" "^7.0.0" "@babel/core" "^7.14.0" @@ -5231,7 +5122,7 @@ metro@0.67.0, metro@^0.67.0: "@babel/types" "^7.0.0" absolute-path "^0.0.0" accepts "^1.3.7" - async "^2.4.0" + async "^3.2.2" chalk "^4.0.0" ci-info "^2.0.0" connect "^3.6.5" @@ -5239,30 +5130,29 @@ metro@0.67.0, metro@^0.67.0: denodeify "^1.2.1" error-stack-parser "^2.0.6" fs-extra "^1.0.0" - graceful-fs "^4.1.3" - hermes-parser "0.5.0" + graceful-fs "^4.2.4" + hermes-parser "0.6.0" image-size "^0.6.0" invariant "^2.2.4" jest-haste-map "^27.3.1" - jest-worker "^26.0.0" + jest-worker "^27.2.0" lodash.throttle "^4.1.1" - metro-babel-transformer "0.67.0" - metro-cache "0.67.0" - metro-cache-key "0.67.0" - metro-config "0.67.0" - metro-core "0.67.0" - metro-hermes-compiler "0.67.0" - metro-inspector-proxy "0.67.0" - metro-minify-uglify "0.67.0" - metro-react-native-babel-preset "0.67.0" - metro-resolver "0.67.0" - metro-runtime "0.67.0" - metro-source-map "0.67.0" - metro-symbolicate "0.67.0" - metro-transform-plugins "0.67.0" - metro-transform-worker "0.67.0" + metro-babel-transformer "0.70.3" + metro-cache "0.70.3" + metro-cache-key "0.70.3" + metro-config "0.70.3" + metro-core "0.70.3" + metro-hermes-compiler "0.70.3" + metro-inspector-proxy "0.70.3" + metro-minify-uglify "0.70.3" + metro-react-native-babel-preset "0.70.3" + metro-resolver "0.70.3" + metro-runtime "0.70.3" + metro-source-map "0.70.3" + metro-symbolicate "0.70.3" + metro-transform-plugins "0.70.3" + metro-transform-worker "0.70.3" mime-types "^2.1.27" - mkdirp "^0.5.1" node-fetch "^2.2.0" nullthrows "^1.1.1" rimraf "^2.5.4" @@ -5512,15 +5402,10 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -ob1@0.67.0: - version "0.67.0" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.67.0.tgz#91f104c90641b1af8c364fc82a4b2c7d0801072d" - integrity sha512-YvZtX8HKYackQ5PwdFIuuNFVsMChRPHvnARRRT0Vk59xsBvL5t9U1Ock3M1sYrKj+Gp73+0q9xcHLAxI+xLi5g== - -ob1@0.70.1: - version "0.70.1" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.70.1.tgz#852d8907b45e86841c81b422115312642f69883f" - integrity sha512-YRqBTXhelJAke5+avvEHki7qSrjTW/FgTrOnTJMpytXnnaaJZ6EnjSFOJQwSbMktE18nVaCAvI6kbOv2K6ZqFQ== +ob1@0.70.3: + version "0.70.3" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.70.3.tgz#f48cd5a5abf54b0c423b1b06b6d4ff4d049816cb" + integrity sha512-Vy9GGhuXgDRY01QA6kdhToPd8AkLdLpX9GjH5kpqluVqTu70mgOm7tpGoJDZGaNbr9nJlJgnipqHJQRPORixIQ== object-assign@^4.1.1: version "4.1.1" @@ -7239,12 +7124,10 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -"use-subscription@>=1.0.0 <1.6.0": - version "1.5.1" - resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" - integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA== - dependencies: - object-assign "^4.1.1" +use-sync-external-store@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.0.0.tgz#d98f4a9c2e73d0f958e7e2d2c2bfb5f618cbd8fd" + integrity sha512-AFVsxg5GkFg8GDcxnl+Z0lMAz9rE8DGJCc28qnBuQF7lac57B5smLcT37aXpXIIPz75rW4g3eXHPjhHwdGskOw== use@^3.1.0: version "3.1.1"