mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Compare commits
41
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4ff3eb7a30 | ||
|
|
1d452b17bf | ||
|
|
6747f2b118 | ||
|
|
79ca9036d3 | ||
|
|
e7d9e0d197 | ||
|
|
b18cd587dc | ||
|
|
cf45aa9dbc | ||
|
|
60b1b7a301 | ||
|
|
42ea4bc594 | ||
|
|
24777bba07 | ||
|
|
8083cb4ab1 | ||
|
|
77db9343b1 | ||
|
|
ec5bde62b6 | ||
|
|
bb3ef784e3 | ||
|
|
b8550251d8 | ||
|
|
5dc3e18671 | ||
|
|
e79808fa4b | ||
|
|
9747c955ac | ||
|
|
6f6945e64f | ||
|
|
0021dafc51 | ||
|
|
e69777d258 | ||
|
|
dc5110a8f2 | ||
|
|
3de1dc0fd1 | ||
|
|
88cb7832ea | ||
|
|
aa2a5a682f | ||
|
|
a0543b773c | ||
|
|
f5abce0932 | ||
|
|
38cf247c63 | ||
|
|
1fc168f005 | ||
|
|
5e0eb0a17c | ||
|
|
acd07c7e1c | ||
|
|
ff38d59cff | ||
|
|
7bbb13c9be | ||
|
|
d4b36b0300 | ||
|
|
84a2765c2a | ||
|
|
6b8bc5a1d0 | ||
|
|
0144798e25 | ||
|
|
263ccad3c5 | ||
|
|
c2a3e4420e | ||
|
|
5d4c22b4a7 | ||
|
|
b0606ba041 |
@@ -48,6 +48,14 @@ runs:
|
||||
- name: Print third-party folder
|
||||
shell: bash
|
||||
run: ls -lR /tmp/third-party
|
||||
- name: Download React Native Prebuilds
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ReactCore${{ inputs.flavor }}.xcframework.tar.gz
|
||||
path: /tmp/ReactCore
|
||||
- name: Print ReactCore folder
|
||||
shell: bash
|
||||
run: ls -lR /tmp/ReactCore
|
||||
- name: Install iOS dependencies - Configuration ${{ inputs.flavor }};
|
||||
shell: bash
|
||||
run: |
|
||||
@@ -73,6 +81,7 @@ runs:
|
||||
TARBALL_FILENAME=$(node ../../packages/react-native/scripts/hermes/get-tarball-name.js --buildType "$BUILD_TYPE")
|
||||
export HERMES_ENGINE_TARBALL_PATH="$HERMES_WS_DIR/hermes-runtime-darwin/$TARBALL_FILENAME"
|
||||
export RCT_USE_LOCAL_RN_DEP="/tmp/third-party/ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz"
|
||||
export RCT_TESTONLY_RNCORE_TARBALL_PATH="/tmp/ReactCore/ReactCore${{ inputs.flavor }}.xcframework.tar.gz"
|
||||
|
||||
yarn bootstrap ios "${args[@]}" | cat
|
||||
|
||||
|
||||
@@ -94,6 +94,14 @@ runs:
|
||||
- name: Print third-party folder
|
||||
shell: bash
|
||||
run: ls -lR /tmp/third-party
|
||||
- name: Download React Native Prebuilds
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ReactCore${{ inputs.flavor }}.xcframework.tar.gz
|
||||
path: /tmp/ReactCore
|
||||
- name: Print ReactCore folder
|
||||
shell: bash
|
||||
run: ls -lR /tmp/ReactCore
|
||||
- name: Setup xcode build cache
|
||||
uses: ./.github/actions/setup-xcode-build-cache
|
||||
with:
|
||||
@@ -105,12 +113,13 @@ runs:
|
||||
shell: bash
|
||||
run: |
|
||||
export HERMES_ENGINE_TARBALL_PATH=$HERMES_ENGINE_TARBALL_PATH
|
||||
export RCT_USE_LOCAL_RN_DEP="/tmp/third-party/ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz"
|
||||
export RCT_TESTONLY_RNCORE_TARBALL_PATH="/tmp/ReactCore/ReactCore${{ inputs.flavor }}.xcframework.tar.gz"
|
||||
|
||||
if [[ ${{ inputs.use-frameworks }} == "DynamicFrameworks" ]]; then
|
||||
export USE_FRAMEWORKS=dynamic
|
||||
fi
|
||||
|
||||
export RCT_USE_LOCAL_RN_DEP="/tmp/third-party/ReactNativeDependencies${{ inputs.flavor }}.xcframework.tar.gz"
|
||||
cd packages/rn-tester
|
||||
|
||||
bundle install
|
||||
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
id: restore-ios-slice
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
key: v3-ios-core-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift') }}-${{ hashFiles('packages/react-native/scripts/ios-prebuild/setup.js') }}
|
||||
key: v3-ios-core-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/setup.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }}
|
||||
path: packages/react-native/
|
||||
- name: Setup node.js
|
||||
if: steps.restore-ios-slice.outputs.cache-hit != 'true'
|
||||
@@ -117,7 +117,7 @@ jobs:
|
||||
uses: actions/cache/save@v4
|
||||
if: ${{ github.ref == 'refs/heads/main' }} # To avoid that the cache explode
|
||||
with:
|
||||
key: v3-ios-core-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift') }}-${{ hashFiles('packages/react-native/scripts/ios-prebuild/setup.js') }}
|
||||
key: v3-ios-core-${{ matrix.slice }}-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/setup.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }}
|
||||
path: |
|
||||
packages/react-native/.build/output/spm/${{ matrix.flavor }}/Build/Products
|
||||
packages/react-native/.build/headers
|
||||
@@ -140,7 +140,7 @@ jobs:
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: packages/react-native/.build/output/xcframeworks
|
||||
key: v2-ios-core-xcframework-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift') }}-${{ hashFiles('packages/react-native/scripts/ios-prebuild/setup.js') }}
|
||||
key: v2-ios-core-xcframework-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/setup.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }}
|
||||
- name: Setup node.js
|
||||
if: steps.restore-ios-xcframework.outputs.cache-hit != 'true'
|
||||
uses: ./.github/actions/setup-node
|
||||
@@ -209,4 +209,4 @@ jobs:
|
||||
path: |
|
||||
packages/react-native/.build/output/xcframeworks/ReactCore${{matrix.flavor}}.xcframework.tar.gz
|
||||
packages/react-native/.build/output/xcframeworks/ReactCore${{matrix.flavor}}.framework.dSYM.tar.gz
|
||||
key: v2-ios-core-xcframework-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift') }}-${{ hashFiles('packages/react-native/scripts/ios-prebuild/setup.js') }}
|
||||
key: v2-ios-core-xcframework-${{ matrix.flavor }}-${{ hashFiles('packages/react-native/Package.swift', 'packages/react-native/scripts/ios-prebuild/setup.js', 'packages/react-native/React/**/*', 'packages/react-native/ReactCommon/**/*', 'packages/react-native/Libraries/**/*') }}
|
||||
|
||||
@@ -128,7 +128,7 @@ jobs:
|
||||
test_ios_rntester_ruby_3_2_0:
|
||||
runs-on: macos-14
|
||||
needs:
|
||||
[build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies]
|
||||
[build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies, prebuild_react_native_core]
|
||||
env:
|
||||
HERMES_WS_DIR: /tmp/hermes
|
||||
HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
|
||||
@@ -141,31 +141,12 @@ jobs:
|
||||
ruby-version: "3.2.0"
|
||||
hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
|
||||
react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
|
||||
|
||||
test_ios_rntester_dynamic_frameworks:
|
||||
runs-on: macos-14
|
||||
needs:
|
||||
[build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies]
|
||||
env:
|
||||
HERMES_WS_DIR: /tmp/hermes
|
||||
HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
|
||||
continue-on-error: true
|
||||
strategy:
|
||||
fail-fast: false
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Run it
|
||||
uses: ./.github/actions/test-ios-rntester
|
||||
with:
|
||||
use-frameworks: DynamicFrameworks
|
||||
hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
|
||||
react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
|
||||
flavor: Debug
|
||||
|
||||
test_ios_rntester:
|
||||
runs-on: macos-14-large
|
||||
needs:
|
||||
[build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies]
|
||||
[build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies, prebuild_react_native_core]
|
||||
env:
|
||||
HERMES_WS_DIR: /tmp/hermes
|
||||
HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin
|
||||
@@ -174,14 +155,14 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
flavor: [Debug, Release]
|
||||
frameworks: [StaticLibraries, DynamicFrameworks]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Run it
|
||||
uses: ./.github/actions/test-ios-rntester
|
||||
with:
|
||||
run-unit-tests: "false"
|
||||
use-frameworks: StaticLibraries
|
||||
use-frameworks: ${{ matrix.frameworks }}
|
||||
hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }}
|
||||
react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }}
|
||||
flavor: ${{ matrix.flavor }}
|
||||
@@ -264,6 +245,14 @@ jobs:
|
||||
- name: Print third-party folder
|
||||
shell: bash
|
||||
run: ls -lR /tmp/third-party
|
||||
- name: Download React Native Prebuilds
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ReactCore${{ matrix.flavor }}.xcframework.tar.gz
|
||||
path: /tmp/ReactCore
|
||||
- name: Print ReactCore folder
|
||||
shell: bash
|
||||
run: ls -lR /tmp/ReactCore
|
||||
- name: Prepare artifacts
|
||||
run: |
|
||||
REACT_NATIVE_PKG=$(find /tmp/react-native-tmp -type f -name "*.tgz")
|
||||
@@ -286,6 +275,7 @@ jobs:
|
||||
NEW_ARCH_ENABLED=1
|
||||
|
||||
export RCT_USE_LOCAL_RN_DEP=/tmp/third-party/ReactNativeDependencies${{ matrix.flavor }}.xcframework.tar.gz
|
||||
export RCT_TESTONLY_RNCORE_TARBALL_PATH="/tmp/ReactCore/ReactCore${{ matrix.flavor }}.xcframework.tar.gz"
|
||||
HERMES_ENGINE_TARBALL_PATH=$HERMES_PATH RCT_NEW_ARCH_ENABLED=$NEW_ARCH_ENABLED bundle exec pod install
|
||||
|
||||
xcodebuild \
|
||||
@@ -548,7 +538,7 @@ jobs:
|
||||
|
||||
test_ios_helloworld_with_ruby_3_2_0:
|
||||
runs-on: macos-14
|
||||
needs: [prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies] # prepare_hermes_workspace must be there because we need its reference to retrieve a couple of outputs
|
||||
needs: [prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies, prebuild_react_native_core] # prepare_hermes_workspace must be there because we need its reference to retrieve a couple of outputs
|
||||
env:
|
||||
PROJECT_NAME: iOSTemplateProject
|
||||
HERMES_WS_DIR: /tmp/hermes
|
||||
@@ -565,7 +555,7 @@ jobs:
|
||||
|
||||
test_ios_helloworld:
|
||||
runs-on: macos-14
|
||||
needs: [prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies] # prepare_hermes_workspace must be there because we need its reference to retrieve a couple of outputs
|
||||
needs: [prepare_hermes_workspace, build_hermes_macos, prebuild_apple_dependencies, prebuild_react_native_core] # prepare_hermes_workspace must be there because we need its reference to retrieve a couple of outputs
|
||||
strategy:
|
||||
matrix:
|
||||
flavor: [Debug, Release]
|
||||
|
||||
+6
-6
@@ -28,8 +28,8 @@
|
||||
"set-version": "node ./scripts/releases/set-version.js",
|
||||
"test-android": "./gradlew :packages:react-native:ReactAndroid:test",
|
||||
"test-ci": "jest --maxWorkers=2 --ci --reporters=\"default\" --reporters=\"jest-junit\"",
|
||||
"test-e2e-local-clean": "node ./scripts/release-testing/test-e2e-local-clean.js",
|
||||
"test-e2e-local": "node ./scripts/release-testing/test-e2e-local.js",
|
||||
"test-release-local-clean": "node ./scripts/release-testing/test-release-local-clean.js",
|
||||
"test-release-local": "node ./scripts/release-testing/test-release-local.js",
|
||||
"test-ios": "./scripts/objc-test.sh test",
|
||||
"test-typescript": "tsc -p packages/react-native/types/tsconfig.json",
|
||||
"test-generated-typescript": "tsc -p packages/react-native/types_generated/tsconfig.test.json",
|
||||
@@ -58,7 +58,7 @@
|
||||
"@react-native/metro-config": "0.81.0-main",
|
||||
"@tsconfig/node22": "22.0.2",
|
||||
"@types/react": "^19.1.0",
|
||||
"@typescript-eslint/parser": "^7.1.1",
|
||||
"@typescript-eslint/parser": "^8.36.0",
|
||||
"ansi-styles": "^4.2.1",
|
||||
"babel-plugin-minify-dead-code-elimination": "^0.5.2",
|
||||
"babel-plugin-syntax-hermes-parser": "0.29.1",
|
||||
@@ -93,9 +93,9 @@
|
||||
"jest-snapshot": "^29.7.0",
|
||||
"markdownlint-cli2": "^0.17.2",
|
||||
"markdownlint-rule-relative-links": "^3.0.0",
|
||||
"metro-babel-register": "^0.82.5",
|
||||
"metro-memory-fs": "^0.82.5",
|
||||
"metro-transform-plugins": "^0.82.5",
|
||||
"memfs": "^4.7.7",
|
||||
"metro-babel-register": "^0.83.0",
|
||||
"metro-transform-plugins": "^0.83.0",
|
||||
"micromatch": "^4.0.4",
|
||||
"node-fetch": "^2.2.0",
|
||||
"nullthrows": "^1.1.1",
|
||||
|
||||
@@ -25,13 +25,13 @@
|
||||
"@react-native/dev-middleware": "0.81.0-main",
|
||||
"debug": "^4.4.0",
|
||||
"invariant": "^2.2.4",
|
||||
"metro": "^0.82.5",
|
||||
"metro-config": "^0.82.5",
|
||||
"metro-core": "^0.82.5",
|
||||
"metro": "^0.83.0",
|
||||
"metro-config": "^0.83.0",
|
||||
"metro-core": "^0.83.0",
|
||||
"semver": "^7.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"metro-resolver": "^0.82.5"
|
||||
"metro-resolver": "^0.83.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@react-native-community/cli": "*",
|
||||
|
||||
@@ -147,7 +147,7 @@ async function runServer(
|
||||
// $FlowIgnore[cannot-write] Assigning to readonly property
|
||||
metroConfig.reporter = reporter;
|
||||
|
||||
const serverInstance = await Metro.runServer(metroConfig, {
|
||||
await Metro.runServer(metroConfig, {
|
||||
host: args.host,
|
||||
secure: args.https,
|
||||
secureCert: args.cert,
|
||||
@@ -161,18 +161,6 @@ async function runServer(
|
||||
|
||||
reportEvent = eventsSocketEndpoint.reportEvent;
|
||||
|
||||
// In Node 8, the default keep-alive for an HTTP connection is 5 seconds. In
|
||||
// early versions of Node 8, this was implemented in a buggy way which caused
|
||||
// some HTTP responses (like those containing large JS bundles) to be
|
||||
// terminated early.
|
||||
//
|
||||
// As a workaround, arbitrarily increase the keep-alive from 5 to 30 seconds,
|
||||
// which should be enough to send even the largest of JS bundles.
|
||||
//
|
||||
// For more info: https://github.com/nodejs/node/issues/13391
|
||||
//
|
||||
serverInstance.keepAliveTimeout = 30000;
|
||||
|
||||
await version.logIfUpdateAvailable(cliConfig, terminalReporter);
|
||||
}
|
||||
|
||||
|
||||
@@ -76,9 +76,8 @@ function getNodePackagePath(packageName: string): string {
|
||||
}
|
||||
|
||||
function metro(...args: $ReadOnlyArray<string>): ExecaPromise {
|
||||
const metroPath = getNodePackagePath(path.join('metro', 'src', 'cli.js'));
|
||||
log(`🚇 ${metroPath} ${args.join(' ')} `);
|
||||
return execa('node', [metroPath, ...args]);
|
||||
log(`🚇 metro ${args.join(' ')} `);
|
||||
return execa('npx', ['--offline', 'metro', ...args]);
|
||||
}
|
||||
|
||||
export const tasks = {
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
"@babel/core": "^7.25.2",
|
||||
"@babel/eslint-parser": "^7.25.1",
|
||||
"@react-native/eslint-plugin": "0.81.0-main",
|
||||
"@typescript-eslint/eslint-plugin": "^7.1.1",
|
||||
"@typescript-eslint/parser": "^7.1.1",
|
||||
"@typescript-eslint/eslint-plugin": "^8.36.0",
|
||||
"@typescript-eslint/parser": "^8.36.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-plugin-eslint-comments": "^3.2.0",
|
||||
"eslint-plugin-ft-flow": "^2.0.1",
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
"dependencies": {
|
||||
"@react-native/js-polyfills": "0.81.0-main",
|
||||
"@react-native/metro-babel-transformer": "0.81.0-main",
|
||||
"metro-config": "^0.82.5",
|
||||
"metro-runtime": "^0.82.5"
|
||||
"metro-config": "^0.83.0",
|
||||
"metro-runtime": "^0.83.0"
|
||||
}
|
||||
}
|
||||
|
||||
+98
-110
@@ -2,7 +2,7 @@
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'ArrayPropsNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/ArrayPropsNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/ArrayPropsNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -11,27 +11,26 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableArray;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ArrayPropsNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setNames(T view, @Nullable ReadableArray value);
|
||||
void setDisableds(T view, @Nullable ReadableArray value);
|
||||
void setProgress(T view, @Nullable ReadableArray value);
|
||||
void setRadii(T view, @Nullable ReadableArray value);
|
||||
void setColors(T view, @Nullable ReadableArray value);
|
||||
void setSrcs(T view, @Nullable ReadableArray value);
|
||||
void setPoints(T view, @Nullable ReadableArray value);
|
||||
void setEdgeInsets(T view, @Nullable ReadableArray value);
|
||||
void setDimensions(T view, @Nullable ReadableArray value);
|
||||
void setSizes(T view, @Nullable ReadableArray value);
|
||||
void setObject(T view, @Nullable ReadableArray value);
|
||||
void setArrayOfObjects(T view, @Nullable ReadableArray value);
|
||||
void setArrayOfMixed(T view, @Nullable ReadableArray value);
|
||||
public interface ArrayPropsNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setNames(view: T, value: ReadableArray?): Unit
|
||||
public fun setDisableds(view: T, value: ReadableArray?): Unit
|
||||
public fun setProgress(view: T, value: ReadableArray?): Unit
|
||||
public fun setRadii(view: T, value: ReadableArray?): Unit
|
||||
public fun setColors(view: T, value: ReadableArray?): Unit
|
||||
public fun setSrcs(view: T, value: ReadableArray?): Unit
|
||||
public fun setPoints(view: T, value: ReadableArray?): Unit
|
||||
public fun setEdgeInsets(view: T, value: ReadableArray?): Unit
|
||||
public fun setDimensions(view: T, value: ReadableArray?): Unit
|
||||
public fun setSizes(view: T, value: ReadableArray?): Unit
|
||||
public fun setObject(view: T, value: ReadableArray?): Unit
|
||||
public fun setArrayOfObjects(view: T, value: ReadableArray?): Unit
|
||||
public fun setArrayOfMixed(view: T, value: ReadableArray?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -39,7 +38,7 @@ public interface ArrayPropsNativeComponentViewManagerInterface<T extends View> e
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'BooleanPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/BooleanPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/BooleanPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -48,15 +47,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface BooleanPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
void setDisabledNullable(T view, @Nullable Boolean value);
|
||||
public interface BooleanPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
public fun setDisabledNullable(view: T, value: Boolean?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -64,7 +62,7 @@ public interface BooleanPropNativeComponentViewManagerInterface<T extends View>
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'ColorPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/ColorPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/ColorPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -73,14 +71,13 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ColorPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setTintColor(T view, @Nullable Integer value);
|
||||
public interface ColorPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setTintColor(view: T, value: Int?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -88,7 +85,7 @@ public interface ColorPropNativeComponentViewManagerInterface<T extends View> ex
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'DimensionPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/DimensionPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/DimensionPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -97,15 +94,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
import com.facebook.yoga.YogaValue;
|
||||
|
||||
public interface DimensionPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setMarginBack(T view, @Nullable YogaValue value);
|
||||
public interface DimensionPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setMarginBack(view: T, value: YogaValue?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -113,7 +109,7 @@ public interface DimensionPropNativeComponentViewManagerInterface<T extends View
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'EdgeInsetsPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/EdgeInsetsPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/EdgeInsetsPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -122,12 +118,12 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface EdgeInsetsPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
public interface EdgeInsetsPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
// No props
|
||||
}
|
||||
",
|
||||
@@ -136,7 +132,7 @@ public interface EdgeInsetsPropNativeComponentViewManagerInterface<T extends Vie
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'EnumPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/EnumPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/EnumPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -145,15 +141,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface EnumPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setAlignment(T view, @Nullable String value);
|
||||
void setIntervals(T view, @Nullable Integer value);
|
||||
public interface EnumPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setAlignment(view: T, value: String?): Unit
|
||||
public fun setIntervals(view: T, value: Int?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -161,7 +156,7 @@ public interface EnumPropNativeComponentViewManagerInterface<T extends View> ext
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'EventNestedObjectPropsNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/EventNestedObjectPropsNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/EventNestedObjectPropsNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -170,13 +165,13 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface EventNestedObjectPropsNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
public interface EventNestedObjectPropsNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -184,7 +179,7 @@ public interface EventNestedObjectPropsNativeComponentViewManagerInterface<T ext
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'EventPropsNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/EventPropsNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/EventPropsNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -193,13 +188,13 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface EventPropsNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
public interface EventPropsNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -207,7 +202,7 @@ public interface EventPropsNativeComponentViewManagerInterface<T extends View> e
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'FloatPropsNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/FloatPropsNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/FloatPropsNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -216,20 +211,19 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface FloatPropsNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setBlurRadius(T view, float value);
|
||||
void setBlurRadius2(T view, float value);
|
||||
void setBlurRadius3(T view, float value);
|
||||
void setBlurRadius4(T view, float value);
|
||||
void setBlurRadius5(T view, float value);
|
||||
void setBlurRadius6(T view, float value);
|
||||
void setBlurRadiusNullable(T view, @Nullable Float value);
|
||||
public interface FloatPropsNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setBlurRadius(view: T, value: Float): Unit
|
||||
public fun setBlurRadius2(view: T, value: Float): Unit
|
||||
public fun setBlurRadius3(view: T, value: Float): Unit
|
||||
public fun setBlurRadius4(view: T, value: Float): Unit
|
||||
public fun setBlurRadius5(view: T, value: Float): Unit
|
||||
public fun setBlurRadius6(view: T, value: Float): Unit
|
||||
public fun setBlurRadiusNullable(view: T, value: Float?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -237,7 +231,7 @@ public interface FloatPropsNativeComponentViewManagerInterface<T extends View> e
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'ImagePropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/ImagePropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/ImagePropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -246,15 +240,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ImagePropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setThumbImage(T view, @Nullable ReadableMap value);
|
||||
public interface ImagePropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setThumbImage(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -262,7 +255,7 @@ public interface ImagePropNativeComponentViewManagerInterface<T extends View> ex
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'IntegerPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/IntegerPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/IntegerPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -271,15 +264,15 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface IntegerPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setProgress1(T view, int value);
|
||||
void setProgress2(T view, int value);
|
||||
void setProgress3(T view, int value);
|
||||
public interface IntegerPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setProgress1(view: T, value: Int): Unit
|
||||
public fun setProgress2(view: T, value: Int): Unit
|
||||
public fun setProgress3(view: T, value: Int): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -287,7 +280,7 @@ public interface IntegerPropNativeComponentViewManagerInterface<T extends View>
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'InterfaceOnlyNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/InterfaceOnlyNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/InterfaceOnlyNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -296,14 +289,13 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface InterfaceOnlyNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setTitle(T view, @Nullable String value);
|
||||
public interface InterfaceOnlyNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setTitle(view: T, value: String?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -311,7 +303,7 @@ public interface InterfaceOnlyNativeComponentViewManagerInterface<T extends View
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'MixedPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/MixedPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/MixedPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -320,14 +312,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.bridge.Dynamic;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface MixedPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setMixedProp(T view, Dynamic value);
|
||||
public interface MixedPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setMixedProp(view: T, value: Dynamic): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -335,7 +327,7 @@ public interface MixedPropNativeComponentViewManagerInterface<T extends View> ex
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'MultiNativePropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/MultiNativePropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/MultiNativePropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -344,18 +336,17 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface MultiNativePropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setThumbImage(T view, @Nullable ReadableMap value);
|
||||
void setColor(T view, @Nullable Integer value);
|
||||
void setThumbTintColor(T view, @Nullable Integer value);
|
||||
void setPoint(T view, @Nullable ReadableMap value);
|
||||
public interface MultiNativePropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setThumbImage(view: T, value: ReadableMap?): Unit
|
||||
public fun setColor(view: T, value: Int?): Unit
|
||||
public fun setThumbTintColor(view: T, value: Int?): Unit
|
||||
public fun setPoint(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -363,7 +354,7 @@ public interface MultiNativePropNativeComponentViewManagerInterface<T extends Vi
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'NoPropsNoEventsNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/NoPropsNoEventsNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/NoPropsNoEventsNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -372,12 +363,12 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface NoPropsNoEventsNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
public interface NoPropsNoEventsNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
// No props
|
||||
}
|
||||
",
|
||||
@@ -386,7 +377,7 @@ public interface NoPropsNoEventsNativeComponentViewManagerInterface<T extends Vi
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'ObjectPropsNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/ObjectPropsNativeComponentManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/ObjectPropsNativeComponentManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -395,17 +386,16 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ObjectPropsNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setObjectProp(T view, @Nullable ReadableMap value);
|
||||
void setObjectArrayProp(T view, @Nullable ReadableMap value);
|
||||
void setObjectPrimitiveRequiredProp(T view, @Nullable ReadableMap value);
|
||||
public interface ObjectPropsNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setObjectProp(view: T, value: ReadableMap?): Unit
|
||||
public fun setObjectArrayProp(view: T, value: ReadableMap?): Unit
|
||||
public fun setObjectPrimitiveRequiredProp(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -413,7 +403,7 @@ public interface ObjectPropsNativeComponentManagerInterface<T extends View> exte
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'PointPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/PointPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/PointPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -422,15 +412,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface PointPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setStartPoint(T view, @Nullable ReadableMap value);
|
||||
public interface PointPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setStartPoint(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -438,7 +427,7 @@ public interface PointPropNativeComponentViewManagerInterface<T extends View> ex
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'StringPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/StringPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/StringPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -447,15 +436,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface StringPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setPlaceholder(T view, @Nullable String value);
|
||||
void setDefaultValue(T view, @Nullable String value);
|
||||
public interface StringPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setPlaceholder(view: T, value: String?): Unit
|
||||
public fun setDefaultValue(view: T, value: String?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
|
||||
+98
-110
@@ -2,7 +2,7 @@
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'ArrayPropsNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/ArrayPropsNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/ArrayPropsNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -11,27 +11,26 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableArray;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ArrayPropsNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setNames(T view, @Nullable ReadableArray value);
|
||||
void setDisableds(T view, @Nullable ReadableArray value);
|
||||
void setProgress(T view, @Nullable ReadableArray value);
|
||||
void setRadii(T view, @Nullable ReadableArray value);
|
||||
void setColors(T view, @Nullable ReadableArray value);
|
||||
void setSrcs(T view, @Nullable ReadableArray value);
|
||||
void setPoints(T view, @Nullable ReadableArray value);
|
||||
void setEdgeInsets(T view, @Nullable ReadableArray value);
|
||||
void setDimensions(T view, @Nullable ReadableArray value);
|
||||
void setSizes(T view, @Nullable ReadableArray value);
|
||||
void setObject(T view, @Nullable ReadableArray value);
|
||||
void setArrayOfObjects(T view, @Nullable ReadableArray value);
|
||||
void setArrayOfMixed(T view, @Nullable ReadableArray value);
|
||||
public interface ArrayPropsNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setNames(view: T, value: ReadableArray?): Unit
|
||||
public fun setDisableds(view: T, value: ReadableArray?): Unit
|
||||
public fun setProgress(view: T, value: ReadableArray?): Unit
|
||||
public fun setRadii(view: T, value: ReadableArray?): Unit
|
||||
public fun setColors(view: T, value: ReadableArray?): Unit
|
||||
public fun setSrcs(view: T, value: ReadableArray?): Unit
|
||||
public fun setPoints(view: T, value: ReadableArray?): Unit
|
||||
public fun setEdgeInsets(view: T, value: ReadableArray?): Unit
|
||||
public fun setDimensions(view: T, value: ReadableArray?): Unit
|
||||
public fun setSizes(view: T, value: ReadableArray?): Unit
|
||||
public fun setObject(view: T, value: ReadableArray?): Unit
|
||||
public fun setArrayOfObjects(view: T, value: ReadableArray?): Unit
|
||||
public fun setArrayOfMixed(view: T, value: ReadableArray?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -39,7 +38,7 @@ public interface ArrayPropsNativeComponentViewManagerInterface<T extends View> e
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'BooleanPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/BooleanPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/BooleanPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -48,15 +47,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface BooleanPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
void setDisabledNullable(T view, @Nullable Boolean value);
|
||||
public interface BooleanPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
public fun setDisabledNullable(view: T, value: Boolean?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -64,7 +62,7 @@ public interface BooleanPropNativeComponentViewManagerInterface<T extends View>
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'ColorPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/ColorPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/ColorPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -73,14 +71,13 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ColorPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setTintColor(T view, @Nullable Integer value);
|
||||
public interface ColorPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setTintColor(view: T, value: Int?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -88,7 +85,7 @@ public interface ColorPropNativeComponentViewManagerInterface<T extends View> ex
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'DimensionPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/DimensionPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/DimensionPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -97,15 +94,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
import com.facebook.yoga.YogaValue;
|
||||
|
||||
public interface DimensionPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setMarginBack(T view, @Nullable YogaValue value);
|
||||
public interface DimensionPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setMarginBack(view: T, value: YogaValue?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -113,7 +109,7 @@ public interface DimensionPropNativeComponentViewManagerInterface<T extends View
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'EdgeInsetsPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/EdgeInsetsPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/EdgeInsetsPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -122,12 +118,12 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface EdgeInsetsPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
public interface EdgeInsetsPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
// No props
|
||||
}
|
||||
",
|
||||
@@ -136,7 +132,7 @@ public interface EdgeInsetsPropNativeComponentViewManagerInterface<T extends Vie
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'EnumPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/EnumPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/EnumPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -145,15 +141,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface EnumPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setAlignment(T view, @Nullable String value);
|
||||
void setIntervals(T view, @Nullable Integer value);
|
||||
public interface EnumPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setAlignment(view: T, value: String?): Unit
|
||||
public fun setIntervals(view: T, value: Int?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -161,7 +156,7 @@ public interface EnumPropNativeComponentViewManagerInterface<T extends View> ext
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'EventNestedObjectPropsNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/EventNestedObjectPropsNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/EventNestedObjectPropsNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -170,13 +165,13 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface EventNestedObjectPropsNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
public interface EventNestedObjectPropsNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -184,7 +179,7 @@ public interface EventNestedObjectPropsNativeComponentViewManagerInterface<T ext
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'EventPropsNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/EventPropsNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/EventPropsNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -193,13 +188,13 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface EventPropsNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
public interface EventPropsNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -207,7 +202,7 @@ public interface EventPropsNativeComponentViewManagerInterface<T extends View> e
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'FloatPropsNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/FloatPropsNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/FloatPropsNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -216,20 +211,19 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface FloatPropsNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setBlurRadius(T view, float value);
|
||||
void setBlurRadius2(T view, float value);
|
||||
void setBlurRadius3(T view, float value);
|
||||
void setBlurRadius4(T view, float value);
|
||||
void setBlurRadius5(T view, float value);
|
||||
void setBlurRadius6(T view, float value);
|
||||
void setBlurRadiusNullable(T view, @Nullable Float value);
|
||||
public interface FloatPropsNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setBlurRadius(view: T, value: Float): Unit
|
||||
public fun setBlurRadius2(view: T, value: Float): Unit
|
||||
public fun setBlurRadius3(view: T, value: Float): Unit
|
||||
public fun setBlurRadius4(view: T, value: Float): Unit
|
||||
public fun setBlurRadius5(view: T, value: Float): Unit
|
||||
public fun setBlurRadius6(view: T, value: Float): Unit
|
||||
public fun setBlurRadiusNullable(view: T, value: Float?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -237,7 +231,7 @@ public interface FloatPropsNativeComponentViewManagerInterface<T extends View> e
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'ImagePropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/ImagePropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/ImagePropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -246,15 +240,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ImagePropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setThumbImage(T view, @Nullable ReadableMap value);
|
||||
public interface ImagePropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setThumbImage(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -262,7 +255,7 @@ public interface ImagePropNativeComponentViewManagerInterface<T extends View> ex
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'IntegerPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/IntegerPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/IntegerPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -271,15 +264,15 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface IntegerPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setProgress1(T view, int value);
|
||||
void setProgress2(T view, int value);
|
||||
void setProgress3(T view, int value);
|
||||
public interface IntegerPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setProgress1(view: T, value: Int): Unit
|
||||
public fun setProgress2(view: T, value: Int): Unit
|
||||
public fun setProgress3(view: T, value: Int): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -287,7 +280,7 @@ public interface IntegerPropNativeComponentViewManagerInterface<T extends View>
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'InterfaceOnlyNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/InterfaceOnlyNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/InterfaceOnlyNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -296,14 +289,13 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface InterfaceOnlyNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setTitle(T view, @Nullable String value);
|
||||
public interface InterfaceOnlyNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setTitle(view: T, value: String?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -311,7 +303,7 @@ public interface InterfaceOnlyNativeComponentViewManagerInterface<T extends View
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'MixedPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/MixedPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/MixedPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -320,14 +312,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.bridge.Dynamic;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface MixedPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setMixedProp(T view, Dynamic value);
|
||||
public interface MixedPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setMixedProp(view: T, value: Dynamic): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -335,7 +327,7 @@ public interface MixedPropNativeComponentViewManagerInterface<T extends View> ex
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'MultiNativePropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/MultiNativePropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/MultiNativePropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -344,18 +336,17 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface MultiNativePropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setThumbImage(T view, @Nullable ReadableMap value);
|
||||
void setColor(T view, @Nullable Integer value);
|
||||
void setThumbTintColor(T view, @Nullable Integer value);
|
||||
void setPoint(T view, @Nullable ReadableMap value);
|
||||
public interface MultiNativePropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setThumbImage(view: T, value: ReadableMap?): Unit
|
||||
public fun setColor(view: T, value: Int?): Unit
|
||||
public fun setThumbTintColor(view: T, value: Int?): Unit
|
||||
public fun setPoint(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -363,7 +354,7 @@ public interface MultiNativePropNativeComponentViewManagerInterface<T extends Vi
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'NoPropsNoEventsNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/NoPropsNoEventsNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/NoPropsNoEventsNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -372,12 +363,12 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface NoPropsNoEventsNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
public interface NoPropsNoEventsNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
// No props
|
||||
}
|
||||
",
|
||||
@@ -386,7 +377,7 @@ public interface NoPropsNoEventsNativeComponentViewManagerInterface<T extends Vi
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'ObjectPropsNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/ObjectPropsNativeComponentManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/ObjectPropsNativeComponentManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -395,17 +386,16 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ObjectPropsNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setObjectProp(T view, @Nullable ReadableMap value);
|
||||
void setObjectArrayProp(T view, @Nullable ReadableMap value);
|
||||
void setObjectPrimitiveRequiredProp(T view, @Nullable ReadableMap value);
|
||||
public interface ObjectPropsNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setObjectProp(view: T, value: ReadableMap?): Unit
|
||||
public fun setObjectArrayProp(view: T, value: ReadableMap?): Unit
|
||||
public fun setObjectPrimitiveRequiredProp(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -413,7 +403,7 @@ public interface ObjectPropsNativeComponentManagerInterface<T extends View> exte
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'PointPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/PointPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/PointPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -422,15 +412,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface PointPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setStartPoint(T view, @Nullable ReadableMap value);
|
||||
public interface PointPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setStartPoint(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -438,7 +427,7 @@ public interface PointPropNativeComponentViewManagerInterface<T extends View> ex
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate for 'StringPropNativeComponent.js' 1`] = `
|
||||
Object {
|
||||
"java/com/facebook/react/viewmanagers/StringPropNativeComponentViewManagerInterface.java": "/**
|
||||
"java/com/facebook/react/viewmanagers/StringPropNativeComponentViewManagerInterface.kt": "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -447,15 +436,14 @@ Object {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface StringPropNativeComponentViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setPlaceholder(T view, @Nullable String value);
|
||||
void setDefaultValue(T view, @Nullable String value);
|
||||
public interface StringPropNativeComponentViewManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setPlaceholder(view: T, value: String?): Unit
|
||||
public fun setDefaultValue(view: T, value: String?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
|
||||
+32
-49
@@ -48,19 +48,15 @@ const FileTemplate = ({
|
||||
* ${'@'}generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package ${packageName};
|
||||
package ${packageName}
|
||||
|
||||
${imports}
|
||||
|
||||
public interface ${className}<T extends ${extendClasses}> extends ViewManagerWithGeneratedInterface {
|
||||
public interface ${className}<T: ${extendClasses}>: ViewManagerWithGeneratedInterface {
|
||||
${methods}
|
||||
}
|
||||
`;
|
||||
|
||||
function addNullable(imports: Set<string>) {
|
||||
imports.add('import androidx.annotation.Nullable;');
|
||||
}
|
||||
|
||||
function getJavaValueForProp(
|
||||
prop: NamedShape<PropTypeAnnotation>,
|
||||
imports: Set<string>,
|
||||
@@ -70,65 +66,52 @@ function getJavaValueForProp(
|
||||
switch (typeAnnotation.type) {
|
||||
case 'BooleanTypeAnnotation':
|
||||
if (typeAnnotation.default === null) {
|
||||
addNullable(imports);
|
||||
return '@Nullable Boolean value';
|
||||
return 'value: Boolean?';
|
||||
} else {
|
||||
return 'boolean value';
|
||||
return 'value: Boolean';
|
||||
}
|
||||
case 'StringTypeAnnotation':
|
||||
addNullable(imports);
|
||||
return '@Nullable String value';
|
||||
return 'value: String?';
|
||||
case 'Int32TypeAnnotation':
|
||||
return 'int value';
|
||||
return 'value: Int';
|
||||
case 'DoubleTypeAnnotation':
|
||||
return 'double value';
|
||||
return 'value: Double';
|
||||
case 'FloatTypeAnnotation':
|
||||
if (typeAnnotation.default === null) {
|
||||
addNullable(imports);
|
||||
return '@Nullable Float value';
|
||||
return 'value: Float?';
|
||||
} else {
|
||||
return 'float value';
|
||||
return 'value: Float';
|
||||
}
|
||||
case 'ReservedPropTypeAnnotation':
|
||||
switch (typeAnnotation.name) {
|
||||
case 'ColorPrimitive':
|
||||
addNullable(imports);
|
||||
return '@Nullable Integer value';
|
||||
return 'value: Int?';
|
||||
case 'ImageSourcePrimitive':
|
||||
addNullable(imports);
|
||||
return '@Nullable ReadableMap value';
|
||||
return 'value: ReadableMap?';
|
||||
case 'ImageRequestPrimitive':
|
||||
addNullable(imports);
|
||||
return '@Nullable ReadableMap value';
|
||||
return 'value: ReadableMap?';
|
||||
case 'PointPrimitive':
|
||||
addNullable(imports);
|
||||
return '@Nullable ReadableMap value';
|
||||
return 'value: ReadableMap?';
|
||||
case 'EdgeInsetsPrimitive':
|
||||
addNullable(imports);
|
||||
return '@Nullable ReadableMap value';
|
||||
return 'value: ReadableMap?';
|
||||
case 'DimensionPrimitive':
|
||||
addNullable(imports);
|
||||
return '@Nullable YogaValue value';
|
||||
return 'value: YogaValue?';
|
||||
default:
|
||||
(typeAnnotation.name: empty);
|
||||
throw new Error('Received unknown ReservedPropTypeAnnotation');
|
||||
}
|
||||
case 'ArrayTypeAnnotation': {
|
||||
addNullable(imports);
|
||||
return '@Nullable ReadableArray value';
|
||||
return 'value: ReadableArray?';
|
||||
}
|
||||
case 'ObjectTypeAnnotation': {
|
||||
addNullable(imports);
|
||||
return '@Nullable ReadableMap value';
|
||||
return 'value: ReadableMap?';
|
||||
}
|
||||
case 'StringEnumTypeAnnotation':
|
||||
addNullable(imports);
|
||||
return '@Nullable String value';
|
||||
return 'value: String?';
|
||||
case 'Int32EnumTypeAnnotation':
|
||||
addNullable(imports);
|
||||
return '@Nullable Integer value';
|
||||
return 'value: Int?';
|
||||
case 'MixedTypeAnnotation':
|
||||
return 'Dynamic value';
|
||||
return 'value: Dynamic';
|
||||
default:
|
||||
(typeAnnotation: empty);
|
||||
throw new Error('Received invalid typeAnnotation');
|
||||
@@ -142,9 +125,9 @@ function generatePropsString(component: ComponentShape, imports: Set<string>) {
|
||||
|
||||
return component.props
|
||||
.map(prop => {
|
||||
return `void set${toSafeJavaString(
|
||||
return `public fun set${toSafeJavaString(
|
||||
prop.name,
|
||||
)}(T view, ${getJavaValueForProp(prop, imports)});`;
|
||||
)}(view: T, ${getJavaValueForProp(prop, imports)}): Unit`;
|
||||
})
|
||||
.join('\n' + ' ');
|
||||
}
|
||||
@@ -156,19 +139,19 @@ function getCommandArgJavaType(param: NamedShape<CommandParamTypeAnnotation>) {
|
||||
case 'ReservedTypeAnnotation':
|
||||
switch (typeAnnotation.name) {
|
||||
case 'RootTag':
|
||||
return 'double';
|
||||
return 'Double';
|
||||
default:
|
||||
(typeAnnotation.name: empty);
|
||||
throw new Error(`Receieved invalid type: ${typeAnnotation.name}`);
|
||||
}
|
||||
case 'BooleanTypeAnnotation':
|
||||
return 'boolean';
|
||||
return 'Boolean';
|
||||
case 'DoubleTypeAnnotation':
|
||||
return 'double';
|
||||
return 'Double';
|
||||
case 'FloatTypeAnnotation':
|
||||
return 'float';
|
||||
return 'Float';
|
||||
case 'Int32TypeAnnotation':
|
||||
return 'int';
|
||||
return 'Int';
|
||||
case 'StringTypeAnnotation':
|
||||
return 'String';
|
||||
case 'ArrayTypeAnnotation':
|
||||
@@ -184,11 +167,11 @@ function getCommandArguments(
|
||||
componentName: string,
|
||||
): string {
|
||||
return [
|
||||
'T view',
|
||||
'view: T',
|
||||
...command.typeAnnotation.params.map(param => {
|
||||
const commandArgJavaType = getCommandArgJavaType(param);
|
||||
|
||||
return `${commandArgJavaType} ${param.name}`;
|
||||
return `${param.name}: ${commandArgJavaType}`;
|
||||
}),
|
||||
].join(', ');
|
||||
}
|
||||
@@ -201,10 +184,10 @@ function generateCommandsString(
|
||||
.map(command => {
|
||||
const safeJavaName = toSafeJavaString(command.name, false);
|
||||
|
||||
return `void ${safeJavaName}(${getCommandArguments(
|
||||
return `public fun ${safeJavaName}(${getCommandArguments(
|
||||
command,
|
||||
componentName,
|
||||
)});`;
|
||||
)}): Unit`;
|
||||
})
|
||||
.join('\n' + ' ');
|
||||
}
|
||||
@@ -287,7 +270,7 @@ module.exports = {
|
||||
.trimRight(),
|
||||
});
|
||||
|
||||
files.set(`${outputDir}/${className}.java`, replacedTemplate);
|
||||
files.set(`${outputDir}/${className}.kt`, replacedTemplate);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
+149
-163
@@ -2,7 +2,7 @@
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture ARRAY_PROPS 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/ArrayPropsNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/ArrayPropsNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -11,27 +11,26 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableArray;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ArrayPropsNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setNames(T view, @Nullable ReadableArray value);
|
||||
void setDisableds(T view, @Nullable ReadableArray value);
|
||||
void setProgress(T view, @Nullable ReadableArray value);
|
||||
void setRadii(T view, @Nullable ReadableArray value);
|
||||
void setColors(T view, @Nullable ReadableArray value);
|
||||
void setSrcs(T view, @Nullable ReadableArray value);
|
||||
void setPoints(T view, @Nullable ReadableArray value);
|
||||
void setDimensions(T view, @Nullable ReadableArray value);
|
||||
void setSizes(T view, @Nullable ReadableArray value);
|
||||
void setObject(T view, @Nullable ReadableArray value);
|
||||
void setArray(T view, @Nullable ReadableArray value);
|
||||
void setArrayOfArrayOfObject(T view, @Nullable ReadableArray value);
|
||||
void setArrayOfMixed(T view, @Nullable ReadableArray value);
|
||||
public interface ArrayPropsNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setNames(view: T, value: ReadableArray?): Unit
|
||||
public fun setDisableds(view: T, value: ReadableArray?): Unit
|
||||
public fun setProgress(view: T, value: ReadableArray?): Unit
|
||||
public fun setRadii(view: T, value: ReadableArray?): Unit
|
||||
public fun setColors(view: T, value: ReadableArray?): Unit
|
||||
public fun setSrcs(view: T, value: ReadableArray?): Unit
|
||||
public fun setPoints(view: T, value: ReadableArray?): Unit
|
||||
public fun setDimensions(view: T, value: ReadableArray?): Unit
|
||||
public fun setSizes(view: T, value: ReadableArray?): Unit
|
||||
public fun setObject(view: T, value: ReadableArray?): Unit
|
||||
public fun setArray(view: T, value: ReadableArray?): Unit
|
||||
public fun setArrayOfArrayOfObject(view: T, value: ReadableArray?): Unit
|
||||
public fun setArrayOfMixed(view: T, value: ReadableArray?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -39,7 +38,7 @@ public interface ArrayPropsNativeComponentManagerInterface<T extends View> exten
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture ARRAY_PROPS_WITH_NESTED_OBJECT 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/ArrayPropsNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/ArrayPropsNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -48,15 +47,14 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableArray;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ArrayPropsNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setNativePrimitives(T view, @Nullable ReadableArray value);
|
||||
public interface ArrayPropsNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setNativePrimitives(view: T, value: ReadableArray?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -64,7 +62,7 @@ public interface ArrayPropsNativeComponentManagerInterface<T extends View> exten
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture BOOLEAN_PROP 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/BooleanPropNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/BooleanPropNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -73,13 +71,13 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface BooleanPropNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
public interface BooleanPropNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -87,7 +85,7 @@ public interface BooleanPropNativeComponentManagerInterface<T extends View> exte
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture COLOR_PROP 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/ColorPropNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/ColorPropNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -96,14 +94,13 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ColorPropNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setTintColor(T view, @Nullable Integer value);
|
||||
public interface ColorPropNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setTintColor(view: T, value: Int?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -111,7 +108,7 @@ public interface ColorPropNativeComponentManagerInterface<T extends View> extend
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture COMMANDS 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/CommandNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/CommandNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -120,16 +117,16 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.bridge.ReadableArray;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface CommandNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
public interface CommandNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
// No props
|
||||
void flashScrollIndicators(T view);
|
||||
void allTypes(T view, int x, float y, double z, String message, boolean animated, ReadableArray locations);
|
||||
public fun flashScrollIndicators(view: T): Unit
|
||||
public fun allTypes(view: T, x: Int, y: Float, z: Double, message: String, animated: Boolean, locations: ReadableArray): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -137,7 +134,7 @@ public interface CommandNativeComponentManagerInterface<T extends View> extends
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture COMMANDS_AND_PROPS 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/CommandNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/CommandNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -146,18 +143,17 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableArray;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface CommandNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setAccessibilityHint(T view, @Nullable String value);
|
||||
void handleRootTag(T view, double rootTag);
|
||||
void hotspotUpdate(T view, int x, int y);
|
||||
void addItems(T view, ReadableArray items);
|
||||
public interface CommandNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setAccessibilityHint(view: T, value: String?): Unit
|
||||
public fun handleRootTag(view: T, rootTag: Double): Unit
|
||||
public fun hotspotUpdate(view: T, x: Int, y: Int): Unit
|
||||
public fun addItems(view: T, items: ReadableArray): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -165,7 +161,7 @@ public interface CommandNativeComponentManagerInterface<T extends View> extends
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture DIMENSION_PROP 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/DimensionPropNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/DimensionPropNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -174,15 +170,14 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
import com.facebook.yoga.YogaValue;
|
||||
|
||||
public interface DimensionPropNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setMarginBack(T view, @Nullable YogaValue value);
|
||||
public interface DimensionPropNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setMarginBack(view: T, value: YogaValue?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -190,7 +185,7 @@ public interface DimensionPropNativeComponentManagerInterface<T extends View> ex
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture DOUBLE_PROPS 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/DoublePropNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/DoublePropNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -199,18 +194,18 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface DoublePropNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setBlurRadius(T view, double value);
|
||||
void setBlurRadius2(T view, double value);
|
||||
void setBlurRadius3(T view, double value);
|
||||
void setBlurRadius4(T view, double value);
|
||||
void setBlurRadius5(T view, double value);
|
||||
void setBlurRadius6(T view, double value);
|
||||
public interface DoublePropNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setBlurRadius(view: T, value: Double): Unit
|
||||
public fun setBlurRadius2(view: T, value: Double): Unit
|
||||
public fun setBlurRadius3(view: T, value: Double): Unit
|
||||
public fun setBlurRadius4(view: T, value: Double): Unit
|
||||
public fun setBlurRadius5(view: T, value: Double): Unit
|
||||
public fun setBlurRadius6(view: T, value: Double): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -218,7 +213,7 @@ public interface DoublePropNativeComponentManagerInterface<T extends View> exten
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture EVENT_NESTED_OBJECT_PROPS 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/EventsNestedObjectNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/EventsNestedObjectNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -227,13 +222,13 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface EventsNestedObjectNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
public interface EventsNestedObjectNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -241,7 +236,7 @@ public interface EventsNestedObjectNativeComponentManagerInterface<T extends Vie
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture EVENT_PROPS 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/EventsNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/EventsNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -250,13 +245,13 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface EventsNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
public interface EventsNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -264,7 +259,7 @@ public interface EventsNativeComponentManagerInterface<T extends View> extends V
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture EVENTS_WITH_PAPER_NAME 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/InterfaceOnlyComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/InterfaceOnlyComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -273,12 +268,12 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface InterfaceOnlyComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
public interface InterfaceOnlyComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
// No props
|
||||
}
|
||||
",
|
||||
@@ -291,7 +286,7 @@ exports[`GeneratePropsJavaInterface can generate fixture EXCLUDE_ANDROID_IOS 1`]
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture EXCLUDE_IOS_TWO_COMPONENTS_DIFFERENT_FILES 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/ExcludedIosComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/ExcludedIosComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -300,16 +295,16 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ExcludedIosComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
public interface ExcludedIosComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
// No props
|
||||
}
|
||||
",
|
||||
"java/com/facebook/react/viewmanagers/MultiFileIncludedNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/MultiFileIncludedNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -318,13 +313,13 @@ public interface ExcludedIosComponentManagerInterface<T extends View> extends Vi
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface MultiFileIncludedNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
public interface MultiFileIncludedNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -332,7 +327,7 @@ public interface MultiFileIncludedNativeComponentManagerInterface<T extends View
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture FLOAT_PROPS 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/FloatPropNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/FloatPropNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -341,18 +336,18 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface FloatPropNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setBlurRadius(T view, float value);
|
||||
void setBlurRadius2(T view, float value);
|
||||
void setBlurRadius3(T view, float value);
|
||||
void setBlurRadius4(T view, float value);
|
||||
void setBlurRadius5(T view, float value);
|
||||
void setBlurRadius6(T view, float value);
|
||||
public interface FloatPropNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setBlurRadius(view: T, value: Float): Unit
|
||||
public fun setBlurRadius2(view: T, value: Float): Unit
|
||||
public fun setBlurRadius3(view: T, value: Float): Unit
|
||||
public fun setBlurRadius4(view: T, value: Float): Unit
|
||||
public fun setBlurRadius5(view: T, value: Float): Unit
|
||||
public fun setBlurRadius6(view: T, value: Float): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -360,7 +355,7 @@ public interface FloatPropNativeComponentManagerInterface<T extends View> extend
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture IMAGE_PROP 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/ImagePropNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/ImagePropNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -369,15 +364,14 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ImagePropNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setThumbImage(T view, @Nullable ReadableMap value);
|
||||
public interface ImagePropNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setThumbImage(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -385,7 +379,7 @@ public interface ImagePropNativeComponentManagerInterface<T extends View> extend
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture INSETS_PROP 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/InsetsPropNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/InsetsPropNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -394,15 +388,14 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface InsetsPropNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setContentInset(T view, @Nullable ReadableMap value);
|
||||
public interface InsetsPropNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setContentInset(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -410,7 +403,7 @@ public interface InsetsPropNativeComponentManagerInterface<T extends View> exten
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture INT32_ENUM_PROP 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/Int32EnumPropsNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/Int32EnumPropsNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -419,14 +412,13 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface Int32EnumPropsNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setMaxInterval(T view, @Nullable Integer value);
|
||||
public interface Int32EnumPropsNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setMaxInterval(view: T, value: Int?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -434,7 +426,7 @@ public interface Int32EnumPropsNativeComponentManagerInterface<T extends View> e
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture INTEGER_PROPS 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/IntegerPropNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/IntegerPropNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -443,15 +435,15 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface IntegerPropNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setProgress1(T view, int value);
|
||||
void setProgress2(T view, int value);
|
||||
void setProgress3(T view, int value);
|
||||
public interface IntegerPropNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setProgress1(view: T, value: Int): Unit
|
||||
public fun setProgress2(view: T, value: Int): Unit
|
||||
public fun setProgress3(view: T, value: Int): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -459,7 +451,7 @@ public interface IntegerPropNativeComponentManagerInterface<T extends View> exte
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture INTERFACE_ONLY 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/InterfaceOnlyComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/InterfaceOnlyComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -468,14 +460,13 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface InterfaceOnlyComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setAccessibilityHint(T view, @Nullable String value);
|
||||
public interface InterfaceOnlyComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setAccessibilityHint(view: T, value: String?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -483,7 +474,7 @@ public interface InterfaceOnlyComponentManagerInterface<T extends View> extends
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture MIXED_PROP 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/MixedPropNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/MixedPropNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -492,14 +483,14 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.bridge.Dynamic;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface MixedPropNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setMixedProp(T view, Dynamic value);
|
||||
public interface MixedPropNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setMixedProp(view: T, value: Dynamic): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -507,7 +498,7 @@ public interface MixedPropNativeComponentManagerInterface<T extends View> extend
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture MULTI_NATIVE_PROP 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/ImageColorPropNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/ImageColorPropNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -516,18 +507,17 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ImageColorPropNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setThumbImage(T view, @Nullable ReadableMap value);
|
||||
void setColor(T view, @Nullable Integer value);
|
||||
void setThumbTintColor(T view, @Nullable Integer value);
|
||||
void setPoint(T view, @Nullable ReadableMap value);
|
||||
public interface ImageColorPropNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setThumbImage(view: T, value: ReadableMap?): Unit
|
||||
public fun setColor(view: T, value: Int?): Unit
|
||||
public fun setThumbTintColor(view: T, value: Int?): Unit
|
||||
public fun setPoint(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -535,7 +525,7 @@ public interface ImageColorPropNativeComponentManagerInterface<T extends View> e
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture NO_PROPS_NO_EVENTS 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/NoPropsNoEventsComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/NoPropsNoEventsComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -544,12 +534,12 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface NoPropsNoEventsComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
public interface NoPropsNoEventsComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
// No props
|
||||
}
|
||||
",
|
||||
@@ -558,7 +548,7 @@ public interface NoPropsNoEventsComponentManagerInterface<T extends View> extend
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture OBJECT_PROPS 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/ObjectPropsManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/ObjectPropsManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -567,15 +557,14 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface ObjectPropsManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setObjectProp(T view, @Nullable ReadableMap value);
|
||||
public interface ObjectPropsManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setObjectProp(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -583,7 +572,7 @@ public interface ObjectPropsManagerInterface<T extends View> extends ViewManager
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture POINT_PROP 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/PointPropNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/PointPropNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -592,15 +581,14 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface PointPropNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setStartPoint(T view, @Nullable ReadableMap value);
|
||||
public interface PointPropNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setStartPoint(view: T, value: ReadableMap?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -608,7 +596,7 @@ public interface PointPropNativeComponentManagerInterface<T extends View> extend
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture STRING_ENUM_PROP 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/StringEnumPropsNativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/StringEnumPropsNativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -617,14 +605,13 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface StringEnumPropsNativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setAlignment(T view, @Nullable String value);
|
||||
public interface StringEnumPropsNativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setAlignment(view: T, value: String?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -632,7 +619,7 @@ public interface StringEnumPropsNativeComponentManagerInterface<T extends View>
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture STRING_PROP 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/StringPropComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/StringPropComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -641,15 +628,14 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface StringPropComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setAccessibilityHint(T view, @Nullable String value);
|
||||
void setAccessibilityRole(T view, @Nullable String value);
|
||||
public interface StringPropComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setAccessibilityHint(view: T, value: String?): Unit
|
||||
public fun setAccessibilityRole(view: T, value: String?): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -657,7 +643,7 @@ public interface StringPropComponentManagerInterface<T extends View> extends Vie
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture TWO_COMPONENTS_DIFFERENT_FILES 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/MultiFile1NativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/MultiFile1NativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -666,16 +652,16 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface MultiFile1NativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
public interface MultiFile1NativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
}
|
||||
",
|
||||
"java/com/facebook/react/viewmanagers/MultiFile2NativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/MultiFile2NativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -684,13 +670,13 @@ public interface MultiFile1NativeComponentManagerInterface<T extends View> exten
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface MultiFile2NativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
public interface MultiFile2NativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
@@ -698,7 +684,7 @@ public interface MultiFile2NativeComponentManagerInterface<T extends View> exten
|
||||
|
||||
exports[`GeneratePropsJavaInterface can generate fixture TWO_COMPONENTS_SAME_FILE 1`] = `
|
||||
Map {
|
||||
"java/com/facebook/react/viewmanagers/MultiComponent1NativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/MultiComponent1NativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -707,16 +693,16 @@ Map {
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface MultiComponent1NativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
public interface MultiComponent1NativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
}
|
||||
",
|
||||
"java/com/facebook/react/viewmanagers/MultiComponent2NativeComponentManagerInterface.java" => "/**
|
||||
"java/com/facebook/react/viewmanagers/MultiComponent2NativeComponentManagerInterface.kt" => "/**
|
||||
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
||||
*
|
||||
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
||||
@@ -725,13 +711,13 @@ public interface MultiComponent1NativeComponentManagerInterface<T extends View>
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
package com.facebook.react.viewmanagers
|
||||
|
||||
import android.view.View;
|
||||
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
||||
|
||||
public interface MultiComponent2NativeComponentManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
||||
void setDisabled(T view, boolean value);
|
||||
public interface MultiComponent2NativeComponentManagerInterface<T: View>: ViewManagerWithGeneratedInterface {
|
||||
public fun setDisabled(view: T, value: Boolean): Unit
|
||||
}
|
||||
",
|
||||
}
|
||||
|
||||
@@ -537,3 +537,160 @@ test('animate layout props', () => {
|
||||
<rn-view height="100.000000" />,
|
||||
);
|
||||
});
|
||||
|
||||
test('AnimatedValue.interpolate', () => {
|
||||
let _valueX;
|
||||
let _interpolatedValueX;
|
||||
const viewRef = createRef<HostInstance>();
|
||||
|
||||
function MyApp({outputRangeX}: $ReadOnly<{outputRangeX: number}>) {
|
||||
const valueX = useAnimatedValue(0.5, {useNativeDriver: true});
|
||||
_valueX = valueX;
|
||||
const offset = outputRangeX - 1;
|
||||
const interpolatedValueX = valueX.interpolate({
|
||||
inputRange: [0, 1],
|
||||
outputRange: [offset, 100],
|
||||
});
|
||||
_interpolatedValueX = interpolatedValueX;
|
||||
return (
|
||||
<Animated.View
|
||||
ref={viewRef}
|
||||
style={[
|
||||
{
|
||||
width: 100,
|
||||
height: 100,
|
||||
},
|
||||
{transform: [{translateX: valueX}, {translateY: interpolatedValueX}]},
|
||||
]}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
const root = Fantom.createRoot();
|
||||
|
||||
Fantom.runTask(() => {
|
||||
root.render(<MyApp outputRangeX={1} />);
|
||||
});
|
||||
|
||||
const viewElement = ensureInstance(viewRef.current, ReactNativeElement);
|
||||
|
||||
expect(_valueX?.__getValue()).toBe(0.5);
|
||||
expect(_interpolatedValueX?.__getValue()).toBe(50);
|
||||
expect(
|
||||
JSON.stringify(
|
||||
Fantom.unstable_getDirectManipulationProps(viewElement).transform,
|
||||
),
|
||||
).toBe('[{"translateX":0.5},{"translateY":50}]');
|
||||
expect(viewElement.getBoundingClientRect().x).toBe(0.5);
|
||||
expect(viewElement.getBoundingClientRect().y).toBe(50);
|
||||
|
||||
Fantom.runTask(() => {
|
||||
root.render(<MyApp outputRangeX={51} />);
|
||||
});
|
||||
|
||||
expect(_valueX?.__getValue()).toBe(0.5);
|
||||
expect(_interpolatedValueX?.__getValue()).toBe(75);
|
||||
expect(
|
||||
JSON.stringify(
|
||||
Fantom.unstable_getDirectManipulationProps(viewElement).transform,
|
||||
),
|
||||
).toBe('[{"translateX":0.5},{"translateY":75}]');
|
||||
expect(viewElement.getBoundingClientRect().x).toBe(0.5);
|
||||
expect(viewElement.getBoundingClientRect().y).toBe(75);
|
||||
});
|
||||
|
||||
test('Animated.sequence', () => {
|
||||
let _translateY;
|
||||
let _isSequenceFinished = false;
|
||||
const elementRef = createRef<HostInstance>();
|
||||
|
||||
function MyApp() {
|
||||
const translateY = useAnimatedValue(0, {useNativeDriver: true});
|
||||
_translateY = translateY;
|
||||
|
||||
return (
|
||||
<View>
|
||||
<Animated.View
|
||||
ref={elementRef}
|
||||
style={[
|
||||
{
|
||||
position: 'absolute',
|
||||
width: 100,
|
||||
height: 100,
|
||||
},
|
||||
{
|
||||
transform: [
|
||||
{
|
||||
translateY: translateY.interpolate({
|
||||
inputRange: [0, 1],
|
||||
outputRange: [0, -16],
|
||||
}),
|
||||
},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
const root = Fantom.createRoot();
|
||||
|
||||
Fantom.runTask(() => {
|
||||
root.render(<MyApp />);
|
||||
});
|
||||
|
||||
const element = ensureInstance(elementRef.current, ReactNativeElement);
|
||||
|
||||
expect(element.getBoundingClientRect().y).toBe(0);
|
||||
|
||||
Fantom.runTask(() => {
|
||||
Animated.sequence([
|
||||
Animated.timing(_translateY, {
|
||||
toValue: 1,
|
||||
duration: 500,
|
||||
useNativeDriver: true,
|
||||
}),
|
||||
Animated.timing(_translateY, {
|
||||
toValue: 0,
|
||||
duration: 0,
|
||||
useNativeDriver: true,
|
||||
}),
|
||||
]).start(({finished}) => {
|
||||
if (finished) {
|
||||
_isSequenceFinished = true;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Fantom.unstable_produceFramesForDuration(500);
|
||||
|
||||
expect(
|
||||
// $FlowFixMe[incompatible-use]
|
||||
Fantom.unstable_getDirectManipulationProps(element).transform[0].translateY,
|
||||
).toBeCloseTo(-16, 0.001);
|
||||
|
||||
if (!ReactNativeFeatureFlags.cxxNativeAnimatedRemoveJsSync()) {
|
||||
Fantom.runWorkLoop(); // React update to sync end state of 1st timing animation in sequence
|
||||
}
|
||||
expect(_isSequenceFinished).toBe(false);
|
||||
expect(element.getBoundingClientRect().y).toBe(-16);
|
||||
|
||||
Fantom.runWorkLoop(); // React render
|
||||
|
||||
expect(
|
||||
// $FlowFixMe[incompatible-use]
|
||||
Fantom.unstable_getDirectManipulationProps(element).transform[0].translateY,
|
||||
).toBeCloseTo(0, 0.001);
|
||||
|
||||
if (!ReactNativeFeatureFlags.cxxNativeAnimatedRemoveJsSync()) {
|
||||
Fantom.runWorkLoop(); // React update to sync end state of 2nd timing animation in sequence
|
||||
}
|
||||
expect(element.getBoundingClientRect().y).toBe(0);
|
||||
|
||||
if (ReactNativeFeatureFlags.cxxNativeAnimatedRemoveJsSync()) {
|
||||
expect(_isSequenceFinished).toBe(false);
|
||||
Fantom.runWorkLoop();
|
||||
}
|
||||
expect(_isSequenceFinished).toBe(true);
|
||||
});
|
||||
|
||||
+20
-5
@@ -34,6 +34,9 @@ const RCTNetworking = require('./RCTNetworking').default;
|
||||
const base64 = require('base64-js');
|
||||
const invariant = require('invariant');
|
||||
|
||||
const PERFORMANCE_TRACK_NAME = 'Network (JS-initiated only)';
|
||||
const PERFORMANCE_TRACK_GROUP = 'Chrome DevTools Temp Compat';
|
||||
|
||||
declare var performance: Performance;
|
||||
|
||||
const DEBUG_NETWORK_SEND_DELAY: false = false; // Set to a number of milliseconds when debugging
|
||||
@@ -385,6 +388,9 @@ class XMLHttpRequest extends EventTarget {
|
||||
if (requestId !== this._requestId) {
|
||||
return;
|
||||
}
|
||||
|
||||
const start = XMLHttpRequest._profiling ? performance.now() : undefined;
|
||||
|
||||
if (!this._response) {
|
||||
this._response = responseText;
|
||||
} else {
|
||||
@@ -392,8 +398,13 @@ class XMLHttpRequest extends EventTarget {
|
||||
}
|
||||
|
||||
if (XMLHttpRequest._profiling) {
|
||||
performance.mark(
|
||||
'Track:XMLHttpRequest:Incremental Data: ' + this._getMeasureURL(),
|
||||
console.timeStamp(
|
||||
'Incremental Data: ' + this._getMeasureURL(),
|
||||
// $FlowFixMe[extra-arg] Add correct typing for `console.timeStamp`
|
||||
start,
|
||||
undefined,
|
||||
PERFORMANCE_TRACK_NAME,
|
||||
PERFORMANCE_TRACK_GROUP,
|
||||
);
|
||||
}
|
||||
XMLHttpRequest._interceptor &&
|
||||
@@ -442,10 +453,14 @@ class XMLHttpRequest extends EventTarget {
|
||||
this.setReadyState(this.DONE);
|
||||
if (XMLHttpRequest._profiling && this._startTime != null) {
|
||||
const start = this._startTime;
|
||||
performance.measure('Track:XMLHttpRequest:' + this._getMeasureURL(), {
|
||||
console.timeStamp(
|
||||
this._getMeasureURL(),
|
||||
// $FlowFixMe[extra-arg] Add correct typing for `console.timeStamp`
|
||||
start,
|
||||
end: performance.now(),
|
||||
});
|
||||
undefined,
|
||||
PERFORMANCE_TRACK_NAME,
|
||||
PERFORMANCE_TRACK_GROUP,
|
||||
);
|
||||
}
|
||||
if (error) {
|
||||
XMLHttpRequest._interceptor &&
|
||||
|
||||
+4
-1
@@ -18,6 +18,7 @@ end
|
||||
|
||||
header_search_paths = [
|
||||
"\"${PODS_ROOT}/Headers/Public/ReactCodegen/react/renderer/components\"",
|
||||
"\"${PODS_ROOT}/Headers/Public/React-RCTFBReactNativeSpec/FBReactNativeSpec\"",
|
||||
]
|
||||
|
||||
Pod::Spec.new do |s|
|
||||
@@ -45,7 +46,9 @@ Pod::Spec.new do |s|
|
||||
s.dependency "React-Core/RCTPushNotificationHeaders"
|
||||
s.dependency "React-jsi"
|
||||
|
||||
add_dependency(s, "React-RCTFBReactNativeSpec")
|
||||
add_dependency(s, "React-RCTFBReactNativeSpec", :additional_framework_paths => ['FBReactNativeSpec'])
|
||||
add_dependency(s, "ReactCommon", :subspec => "turbomodule/core", :additional_framework_paths => ["react/nativemodule/core"])
|
||||
add_dependency(s, "React-NativeModulesApple")
|
||||
|
||||
add_rncore_dependency(s)
|
||||
end
|
||||
|
||||
@@ -166,7 +166,7 @@ let reactJsInspector = RNTarget(
|
||||
name: .reactJsInspector,
|
||||
path: "ReactCommon/jsinspector-modern",
|
||||
excludedPaths: ["tracing", "network", "tests"],
|
||||
dependencies: [.reactNativeDependencies, .reactFeatureFlags, .jsi, .reactJsInspectorTracing, .reactJsInspectorNetwork, .reactRuntimeExecutor],
|
||||
dependencies: [.reactNativeDependencies, .reactFeatureFlags, .jsi, .reactJsInspectorTracing, .reactJsInspectorNetwork, .reactRuntimeExecutor, .reactPerfLogger],
|
||||
defines: [
|
||||
CXXSetting.define("REACT_NATIVE_DEBUGGER_ENABLED", to: "1", .when(configuration: BuildConfiguration.debug)),
|
||||
CXXSetting.define("REACT_NATIVE_DEBUGGER_ENABLED_DEVONLY", to: "1", .when(configuration: BuildConfiguration.debug)),
|
||||
|
||||
@@ -47,7 +47,6 @@ RCT_EXTERN void RCTExecuteOnMainQueue(dispatch_block_t block);
|
||||
// Legacy function to execute the specified block on the main queue synchronously.
|
||||
// Please do not use this unless you know what you're doing.
|
||||
RCT_EXTERN void RCTUnsafeExecuteOnMainQueueSync(dispatch_block_t block);
|
||||
RCT_EXTERN void RCTUnsafeExecuteOnMainQueueSyncWithError(dispatch_block_t block, NSString *context);
|
||||
|
||||
// Get screen metrics in a thread-safe way
|
||||
RCT_EXTERN CGFloat RCTScreenScale(void);
|
||||
|
||||
@@ -304,13 +304,6 @@ void RCTExecuteOnMainQueue(dispatch_block_t block)
|
||||
// Please do not use this method
|
||||
// unless you know what you are doing.
|
||||
void RCTUnsafeExecuteOnMainQueueSync(dispatch_block_t block)
|
||||
{
|
||||
RCTUnsafeExecuteOnMainQueueSyncWithError(block, @"Sync dispatches to the main queue can deadlock React Native.");
|
||||
}
|
||||
|
||||
// Please do not use this method
|
||||
// unless you know what you are doing.
|
||||
void RCTUnsafeExecuteOnMainQueueSyncWithError(dispatch_block_t block, NSString *context)
|
||||
{
|
||||
if (RCTIsMainQueue()) {
|
||||
block();
|
||||
@@ -322,10 +315,6 @@ void RCTUnsafeExecuteOnMainQueueSyncWithError(dispatch_block_t block, NSString *
|
||||
return;
|
||||
}
|
||||
|
||||
if (ReactNativeFeatureFlags::disableMainQueueSyncDispatchIOS()) {
|
||||
RCTLogError(@"RCTUnsafeExecuteOnMainQueueSync: %@", context);
|
||||
}
|
||||
|
||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||
block();
|
||||
});
|
||||
@@ -354,10 +343,6 @@ static void RCTUnsafeExecuteOnMainQueueOnceSync(dispatch_once_t *onceToken, disp
|
||||
return;
|
||||
}
|
||||
|
||||
if (ReactNativeFeatureFlags::disableMainQueueSyncDispatchIOS()) {
|
||||
RCTLogError(@"RCTUnsafeExecuteOnMainQueueOnceSync: Sync dispatches to the main queue can deadlock React Native.");
|
||||
}
|
||||
|
||||
dispatch_sync(dispatch_get_main_queue(), executeOnce);
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ static NSString *const RCTPerfMonitorCellIdentifier = @"RCTPerfMonitorCellIdenti
|
||||
static const CGFloat RCTPerfMonitorBarHeight = 50;
|
||||
static const CGFloat RCTPerfMonitorExpandHeight = 250;
|
||||
|
||||
typedef BOOL (*RCTJSCSetOptionType)(const char *);
|
||||
using RCTJSCSetOptionType = BOOL (*)(const char *);
|
||||
|
||||
NSArray<NSString *> *LabelsForRCTPerformanceLoggerTags();
|
||||
|
||||
|
||||
+1
@@ -117,6 +117,7 @@ public class ReactActivityDelegate {
|
||||
* going away in the New Architecture. You should access {@link ReactHost} instead."
|
||||
* @noinspection deprecation
|
||||
*/
|
||||
@Deprecated
|
||||
public ReactInstanceManager getReactInstanceManager() {
|
||||
return Objects.requireNonNull(mReactDelegate).getReactInstanceManager();
|
||||
}
|
||||
|
||||
+4
-1
@@ -83,6 +83,9 @@ internal class ReactAndroidHWInputDeviceHelper(private val reactRootView: ReactR
|
||||
KeyEvent.KEYCODE_DPAD_DOWN to "down",
|
||||
KeyEvent.KEYCODE_DPAD_LEFT to "left",
|
||||
KeyEvent.KEYCODE_INFO to "info",
|
||||
KeyEvent.KEYCODE_MENU to "menu")
|
||||
KeyEvent.KEYCODE_MENU to "menu",
|
||||
KeyEvent.KEYCODE_CHANNEL_UP to "channelUp",
|
||||
KeyEvent.KEYCODE_CHANNEL_DOWN to "channelDown",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
-10
@@ -7,21 +7,11 @@
|
||||
|
||||
package com.facebook.react.bridge
|
||||
|
||||
import com.facebook.react.common.annotations.internal.LegacyArchitecture
|
||||
import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel
|
||||
import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONException
|
||||
import org.json.JSONObject
|
||||
|
||||
@LegacyArchitecture(logLevel = LegacyArchitectureLogLevel.ERROR)
|
||||
public object JSONArguments {
|
||||
|
||||
init {
|
||||
LegacyArchitectureLogger.assertLegacyArchitecture(
|
||||
"JSONArguments", LegacyArchitectureLogLevel.ERROR)
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse JSONObject to ReadableMap
|
||||
*
|
||||
|
||||
+13
-13
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<48a25f3bf3e45c8864f84a8cccca473d>>
|
||||
* @generated SignedSource<<64faf70fad18019fc27e77681ff41d05>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -48,12 +48,6 @@ public object ReactNativeFeatureFlags {
|
||||
@JvmStatic
|
||||
public fun cxxNativeAnimatedRemoveJsSync(): Boolean = accessor.cxxNativeAnimatedRemoveJsSync()
|
||||
|
||||
/**
|
||||
* Disable sync dispatch on the main queue on iOS
|
||||
*/
|
||||
@JvmStatic
|
||||
public fun disableMainQueueSyncDispatchIOS(): Boolean = accessor.disableMainQueueSyncDispatchIOS()
|
||||
|
||||
/**
|
||||
* Prevent FabricMountingManager from reordering mountItems, which may lead to invalid state on the UI thread
|
||||
*/
|
||||
@@ -114,6 +108,12 @@ public object ReactNativeFeatureFlags {
|
||||
@JvmStatic
|
||||
public fun enableDoubleMeasurementFixAndroid(): Boolean = accessor.enableDoubleMeasurementFixAndroid()
|
||||
|
||||
/**
|
||||
* This infra allows native modules to initialize on the main thread, during React Native init.
|
||||
*/
|
||||
@JvmStatic
|
||||
public fun enableEagerMainQueueModulesOnIOS(): Boolean = accessor.enableEagerMainQueueModulesOnIOS()
|
||||
|
||||
/**
|
||||
* Feature flag to configure eager attachment of the root view/initialisation of the JS code.
|
||||
*/
|
||||
@@ -180,12 +180,6 @@ public object ReactNativeFeatureFlags {
|
||||
@JvmStatic
|
||||
public fun enableMainQueueCoordinatorOnIOS(): Boolean = accessor.enableMainQueueCoordinatorOnIOS()
|
||||
|
||||
/**
|
||||
* Makes modules requiring main queue setup initialize on the main thread, during React Native init.
|
||||
*/
|
||||
@JvmStatic
|
||||
public fun enableMainQueueModulesOnIOS(): Boolean = accessor.enableMainQueueModulesOnIOS()
|
||||
|
||||
/**
|
||||
* Enable NSNull conversion when handling module arguments on iOS
|
||||
*/
|
||||
@@ -306,6 +300,12 @@ public object ReactNativeFeatureFlags {
|
||||
@JvmStatic
|
||||
public fun preparedTextCacheSize(): Double = accessor.preparedTextCacheSize()
|
||||
|
||||
/**
|
||||
* Releases the cached image data when it is consumed by the observers.
|
||||
*/
|
||||
@JvmStatic
|
||||
public fun releaseImageDataWhenConsumed(): Boolean = accessor.releaseImageDataWhenConsumed()
|
||||
|
||||
/**
|
||||
* Enables storing js caller stack when creating promise in native module. This is useful in case of Promise rejection and tracing the cause.
|
||||
*/
|
||||
|
||||
+21
-21
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<a2faaafc4bf1b41b69ea4341a16eeb76>>
|
||||
* @generated SignedSource<<d09b78184190ec69fcaa937031cd7f04>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -23,7 +23,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
||||
private var commonTestFlagCache: Boolean? = null
|
||||
private var cxxNativeAnimatedEnabledCache: Boolean? = null
|
||||
private var cxxNativeAnimatedRemoveJsSyncCache: Boolean? = null
|
||||
private var disableMainQueueSyncDispatchIOSCache: Boolean? = null
|
||||
private var disableMountItemReorderingAndroidCache: Boolean? = null
|
||||
private var disableTextLayoutManagerCacheAndroidCache: Boolean? = null
|
||||
private var enableAccessibilityOrderCache: Boolean? = null
|
||||
@@ -34,6 +33,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
||||
private var enableCustomFocusSearchOnClippedElementsAndroidCache: Boolean? = null
|
||||
private var enableDestroyShadowTreeRevisionAsyncCache: Boolean? = null
|
||||
private var enableDoubleMeasurementFixAndroidCache: Boolean? = null
|
||||
private var enableEagerMainQueueModulesOnIOSCache: Boolean? = null
|
||||
private var enableEagerRootViewAttachmentCache: Boolean? = null
|
||||
private var enableFabricLogsCache: Boolean? = null
|
||||
private var enableFabricRendererCache: Boolean? = null
|
||||
@@ -45,7 +45,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
||||
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
|
||||
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
|
||||
private var enableMainQueueCoordinatorOnIOSCache: Boolean? = null
|
||||
private var enableMainQueueModulesOnIOSCache: Boolean? = null
|
||||
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
|
||||
private var enableNativeCSSParsingCache: Boolean? = null
|
||||
private var enableNetworkEventReportingCache: Boolean? = null
|
||||
@@ -66,6 +65,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
||||
private var fuseboxNetworkInspectionEnabledCache: Boolean? = null
|
||||
private var hideOffscreenVirtualViewsOnIOSCache: Boolean? = null
|
||||
private var preparedTextCacheSizeCache: Double? = null
|
||||
private var releaseImageDataWhenConsumedCache: Boolean? = null
|
||||
private var traceTurboModulePromiseRejectionsOnAndroidCache: Boolean? = null
|
||||
private var updateRuntimeShadowNodeReferencesOnCommitCache: Boolean? = null
|
||||
private var useAlwaysAvailableJSErrorHandlingCache: Boolean? = null
|
||||
@@ -105,15 +105,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun disableMainQueueSyncDispatchIOS(): Boolean {
|
||||
var cached = disableMainQueueSyncDispatchIOSCache
|
||||
if (cached == null) {
|
||||
cached = ReactNativeFeatureFlagsCxxInterop.disableMainQueueSyncDispatchIOS()
|
||||
disableMainQueueSyncDispatchIOSCache = cached
|
||||
}
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun disableMountItemReorderingAndroid(): Boolean {
|
||||
var cached = disableMountItemReorderingAndroidCache
|
||||
if (cached == null) {
|
||||
@@ -204,6 +195,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun enableEagerMainQueueModulesOnIOS(): Boolean {
|
||||
var cached = enableEagerMainQueueModulesOnIOSCache
|
||||
if (cached == null) {
|
||||
cached = ReactNativeFeatureFlagsCxxInterop.enableEagerMainQueueModulesOnIOS()
|
||||
enableEagerMainQueueModulesOnIOSCache = cached
|
||||
}
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun enableEagerRootViewAttachment(): Boolean {
|
||||
var cached = enableEagerRootViewAttachmentCache
|
||||
if (cached == null) {
|
||||
@@ -303,15 +303,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun enableMainQueueModulesOnIOS(): Boolean {
|
||||
var cached = enableMainQueueModulesOnIOSCache
|
||||
if (cached == null) {
|
||||
cached = ReactNativeFeatureFlagsCxxInterop.enableMainQueueModulesOnIOS()
|
||||
enableMainQueueModulesOnIOSCache = cached
|
||||
}
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun enableModuleArgumentNSNullConversionIOS(): Boolean {
|
||||
var cached = enableModuleArgumentNSNullConversionIOSCache
|
||||
if (cached == null) {
|
||||
@@ -492,6 +483,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun releaseImageDataWhenConsumed(): Boolean {
|
||||
var cached = releaseImageDataWhenConsumedCache
|
||||
if (cached == null) {
|
||||
cached = ReactNativeFeatureFlagsCxxInterop.releaseImageDataWhenConsumed()
|
||||
releaseImageDataWhenConsumedCache = cached
|
||||
}
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean {
|
||||
var cached = traceTurboModulePromiseRejectionsOnAndroidCache
|
||||
if (cached == null) {
|
||||
|
||||
+5
-5
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<e72a46d573dedebd70f763843eb459fa>>
|
||||
* @generated SignedSource<<b9aa0387de9705e781bac7e522461224>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -34,8 +34,6 @@ public object ReactNativeFeatureFlagsCxxInterop {
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun cxxNativeAnimatedRemoveJsSync(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun disableMainQueueSyncDispatchIOS(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun disableMountItemReorderingAndroid(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun disableTextLayoutManagerCacheAndroid(): Boolean
|
||||
@@ -56,6 +54,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun enableDoubleMeasurementFixAndroid(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun enableEagerMainQueueModulesOnIOS(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun enableEagerRootViewAttachment(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun enableFabricLogs(): Boolean
|
||||
@@ -78,8 +78,6 @@ public object ReactNativeFeatureFlagsCxxInterop {
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun enableMainQueueCoordinatorOnIOS(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun enableMainQueueModulesOnIOS(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun enableModuleArgumentNSNullConversionIOS(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun enableNativeCSSParsing(): Boolean
|
||||
@@ -120,6 +118,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun preparedTextCacheSize(): Double
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun releaseImageDataWhenConsumed(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun updateRuntimeShadowNodeReferencesOnCommit(): Boolean
|
||||
|
||||
+5
-5
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<c7dc0406f2a4e8b4bedde09e8dec5b07>>
|
||||
* @generated SignedSource<<fdcaa94192d003c28fa3a1d538fc859c>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -29,8 +29,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
|
||||
|
||||
override fun cxxNativeAnimatedRemoveJsSync(): Boolean = false
|
||||
|
||||
override fun disableMainQueueSyncDispatchIOS(): Boolean = false
|
||||
|
||||
override fun disableMountItemReorderingAndroid(): Boolean = false
|
||||
|
||||
override fun disableTextLayoutManagerCacheAndroid(): Boolean = false
|
||||
@@ -51,6 +49,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
|
||||
|
||||
override fun enableDoubleMeasurementFixAndroid(): Boolean = false
|
||||
|
||||
override fun enableEagerMainQueueModulesOnIOS(): Boolean = false
|
||||
|
||||
override fun enableEagerRootViewAttachment(): Boolean = false
|
||||
|
||||
override fun enableFabricLogs(): Boolean = false
|
||||
@@ -73,8 +73,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
|
||||
|
||||
override fun enableMainQueueCoordinatorOnIOS(): Boolean = false
|
||||
|
||||
override fun enableMainQueueModulesOnIOS(): Boolean = false
|
||||
|
||||
override fun enableModuleArgumentNSNullConversionIOS(): Boolean = false
|
||||
|
||||
override fun enableNativeCSSParsing(): Boolean = false
|
||||
@@ -115,6 +113,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
|
||||
|
||||
override fun preparedTextCacheSize(): Double = 200.0
|
||||
|
||||
override fun releaseImageDataWhenConsumed(): Boolean = false
|
||||
|
||||
override fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean = false
|
||||
|
||||
override fun updateRuntimeShadowNodeReferencesOnCommit(): Boolean = false
|
||||
|
||||
+23
-23
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<5e082a56b9e6594828e50e2dfef76ea9>>
|
||||
* @generated SignedSource<<d645897d5c2e27e7de611605686d8413>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -27,7 +27,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
||||
private var commonTestFlagCache: Boolean? = null
|
||||
private var cxxNativeAnimatedEnabledCache: Boolean? = null
|
||||
private var cxxNativeAnimatedRemoveJsSyncCache: Boolean? = null
|
||||
private var disableMainQueueSyncDispatchIOSCache: Boolean? = null
|
||||
private var disableMountItemReorderingAndroidCache: Boolean? = null
|
||||
private var disableTextLayoutManagerCacheAndroidCache: Boolean? = null
|
||||
private var enableAccessibilityOrderCache: Boolean? = null
|
||||
@@ -38,6 +37,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
||||
private var enableCustomFocusSearchOnClippedElementsAndroidCache: Boolean? = null
|
||||
private var enableDestroyShadowTreeRevisionAsyncCache: Boolean? = null
|
||||
private var enableDoubleMeasurementFixAndroidCache: Boolean? = null
|
||||
private var enableEagerMainQueueModulesOnIOSCache: Boolean? = null
|
||||
private var enableEagerRootViewAttachmentCache: Boolean? = null
|
||||
private var enableFabricLogsCache: Boolean? = null
|
||||
private var enableFabricRendererCache: Boolean? = null
|
||||
@@ -49,7 +49,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
||||
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
|
||||
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
|
||||
private var enableMainQueueCoordinatorOnIOSCache: Boolean? = null
|
||||
private var enableMainQueueModulesOnIOSCache: Boolean? = null
|
||||
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
|
||||
private var enableNativeCSSParsingCache: Boolean? = null
|
||||
private var enableNetworkEventReportingCache: Boolean? = null
|
||||
@@ -70,6 +69,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
||||
private var fuseboxNetworkInspectionEnabledCache: Boolean? = null
|
||||
private var hideOffscreenVirtualViewsOnIOSCache: Boolean? = null
|
||||
private var preparedTextCacheSizeCache: Double? = null
|
||||
private var releaseImageDataWhenConsumedCache: Boolean? = null
|
||||
private var traceTurboModulePromiseRejectionsOnAndroidCache: Boolean? = null
|
||||
private var updateRuntimeShadowNodeReferencesOnCommitCache: Boolean? = null
|
||||
private var useAlwaysAvailableJSErrorHandlingCache: Boolean? = null
|
||||
@@ -112,16 +112,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun disableMainQueueSyncDispatchIOS(): Boolean {
|
||||
var cached = disableMainQueueSyncDispatchIOSCache
|
||||
if (cached == null) {
|
||||
cached = currentProvider.disableMainQueueSyncDispatchIOS()
|
||||
accessedFeatureFlags.add("disableMainQueueSyncDispatchIOS")
|
||||
disableMainQueueSyncDispatchIOSCache = cached
|
||||
}
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun disableMountItemReorderingAndroid(): Boolean {
|
||||
var cached = disableMountItemReorderingAndroidCache
|
||||
if (cached == null) {
|
||||
@@ -222,6 +212,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun enableEagerMainQueueModulesOnIOS(): Boolean {
|
||||
var cached = enableEagerMainQueueModulesOnIOSCache
|
||||
if (cached == null) {
|
||||
cached = currentProvider.enableEagerMainQueueModulesOnIOS()
|
||||
accessedFeatureFlags.add("enableEagerMainQueueModulesOnIOS")
|
||||
enableEagerMainQueueModulesOnIOSCache = cached
|
||||
}
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun enableEagerRootViewAttachment(): Boolean {
|
||||
var cached = enableEagerRootViewAttachmentCache
|
||||
if (cached == null) {
|
||||
@@ -332,16 +332,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun enableMainQueueModulesOnIOS(): Boolean {
|
||||
var cached = enableMainQueueModulesOnIOSCache
|
||||
if (cached == null) {
|
||||
cached = currentProvider.enableMainQueueModulesOnIOS()
|
||||
accessedFeatureFlags.add("enableMainQueueModulesOnIOS")
|
||||
enableMainQueueModulesOnIOSCache = cached
|
||||
}
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun enableModuleArgumentNSNullConversionIOS(): Boolean {
|
||||
var cached = enableModuleArgumentNSNullConversionIOSCache
|
||||
if (cached == null) {
|
||||
@@ -542,6 +532,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun releaseImageDataWhenConsumed(): Boolean {
|
||||
var cached = releaseImageDataWhenConsumedCache
|
||||
if (cached == null) {
|
||||
cached = currentProvider.releaseImageDataWhenConsumed()
|
||||
accessedFeatureFlags.add("releaseImageDataWhenConsumed")
|
||||
releaseImageDataWhenConsumedCache = cached
|
||||
}
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean {
|
||||
var cached = traceTurboModulePromiseRejectionsOnAndroidCache
|
||||
if (cached == null) {
|
||||
|
||||
+5
-5
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<d6de753a08bc272f918066ad90fda301>>
|
||||
* @generated SignedSource<<8168412a7d792853fa19e10a621012c4>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -29,8 +29,6 @@ public interface ReactNativeFeatureFlagsProvider {
|
||||
|
||||
@DoNotStrip public fun cxxNativeAnimatedRemoveJsSync(): Boolean
|
||||
|
||||
@DoNotStrip public fun disableMainQueueSyncDispatchIOS(): Boolean
|
||||
|
||||
@DoNotStrip public fun disableMountItemReorderingAndroid(): Boolean
|
||||
|
||||
@DoNotStrip public fun disableTextLayoutManagerCacheAndroid(): Boolean
|
||||
@@ -51,6 +49,8 @@ public interface ReactNativeFeatureFlagsProvider {
|
||||
|
||||
@DoNotStrip public fun enableDoubleMeasurementFixAndroid(): Boolean
|
||||
|
||||
@DoNotStrip public fun enableEagerMainQueueModulesOnIOS(): Boolean
|
||||
|
||||
@DoNotStrip public fun enableEagerRootViewAttachment(): Boolean
|
||||
|
||||
@DoNotStrip public fun enableFabricLogs(): Boolean
|
||||
@@ -73,8 +73,6 @@ public interface ReactNativeFeatureFlagsProvider {
|
||||
|
||||
@DoNotStrip public fun enableMainQueueCoordinatorOnIOS(): Boolean
|
||||
|
||||
@DoNotStrip public fun enableMainQueueModulesOnIOS(): Boolean
|
||||
|
||||
@DoNotStrip public fun enableModuleArgumentNSNullConversionIOS(): Boolean
|
||||
|
||||
@DoNotStrip public fun enableNativeCSSParsing(): Boolean
|
||||
@@ -115,6 +113,8 @@ public interface ReactNativeFeatureFlagsProvider {
|
||||
|
||||
@DoNotStrip public fun preparedTextCacheSize(): Double
|
||||
|
||||
@DoNotStrip public fun releaseImageDataWhenConsumed(): Boolean
|
||||
|
||||
@DoNotStrip public fun traceTurboModulePromiseRejectionsOnAndroid(): Boolean
|
||||
|
||||
@DoNotStrip public fun updateRuntimeShadowNodeReferencesOnCommit(): Boolean
|
||||
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* 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.modules.network
|
||||
|
||||
import com.facebook.proguard.annotations.DoNotStripAny
|
||||
|
||||
/**
|
||||
* [Experimental] An interface for reporting network events to the modern debugger server and Web
|
||||
* Performance APIs.
|
||||
*
|
||||
* In a production (non dev or profiling) build, CDP reporting is disabled.
|
||||
*
|
||||
* This is a helper class wrapping `facebook::react::jsinspector_modern::NetworkReporter`.
|
||||
*/
|
||||
@DoNotStripAny
|
||||
internal object InspectorNetworkReporter {
|
||||
/**
|
||||
* Report a network request that is about to be sent.
|
||||
* - Corresponds to `Network.requestWillBeSent` in CDP.
|
||||
* - Corresponds to `PerformanceResourceTiming.requestStart` (specifically, marking when the
|
||||
* native request was initiated).
|
||||
*/
|
||||
@JvmStatic
|
||||
external fun reportRequestStart(
|
||||
requestId: Int,
|
||||
requestUrl: String,
|
||||
requestMethod: String,
|
||||
requestHeaders: Map<String, String>,
|
||||
requestBody: String,
|
||||
encodedDataLength: Long
|
||||
)
|
||||
|
||||
/**
|
||||
* Report detailed timing info, such as DNS lookup, when a request has started.
|
||||
* - Corresponds to `Network.requestWillBeSentExtraInfo` in CDP.
|
||||
* - Corresponds to `PerformanceResourceTiming.domainLookupStart`,
|
||||
* `PerformanceResourceTiming.connectStart`.
|
||||
*/
|
||||
@JvmStatic external fun reportConnectionTiming(requestId: Int, headers: Map<String, String>)
|
||||
|
||||
/**
|
||||
* Report when HTTP response headers have been received, corresponding to when the first byte of
|
||||
* the response is available.
|
||||
* - Corresponds to `Network.responseReceived` in CDP.
|
||||
* - Corresponds to `PerformanceResourceTiming.responseStart`.
|
||||
*/
|
||||
@JvmStatic
|
||||
external fun reportResponseStart(
|
||||
requestId: Int,
|
||||
requestUrl: String,
|
||||
responseStatus: Int,
|
||||
responseHeaders: Map<String, String>,
|
||||
expectedDataLength: Long
|
||||
)
|
||||
|
||||
/**
|
||||
* Report when a network request is complete and we are no longer receiving response data.
|
||||
* - Corresponds to `Network.loadingFinished` in CDP.
|
||||
* - Corresponds to `PerformanceResourceTiming.responseEnd`.
|
||||
*/
|
||||
@JvmStatic external fun reportResponseEnd(requestId: Int, encodedDataLength: Long)
|
||||
}
|
||||
+227
@@ -0,0 +1,227 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION_ERROR") // Conflicting okhttp versions
|
||||
|
||||
package com.facebook.react.modules.network
|
||||
|
||||
import android.os.Bundle
|
||||
import com.facebook.react.bridge.Arguments
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridge.WritableMap
|
||||
import com.facebook.react.bridge.buildReadableArray
|
||||
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
|
||||
import java.net.SocketTimeoutException
|
||||
import okhttp3.Headers
|
||||
import okhttp3.Protocol
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
|
||||
/**
|
||||
* Utility class for reporting network lifecycle events to JavaScript and InspectorNetworkReporter.
|
||||
*/
|
||||
internal object NetworkEventUtil {
|
||||
@JvmStatic
|
||||
fun onCreateRequest(requestId: Int, request: Request) {
|
||||
if (ReactNativeFeatureFlags.enableNetworkEventReporting()) {
|
||||
val headersMap = okHttpHeadersToMap(request.headers())
|
||||
InspectorNetworkReporter.reportRequestStart(
|
||||
requestId,
|
||||
request.url().toString(),
|
||||
request.method(),
|
||||
headersMap,
|
||||
request.body()?.toString().orEmpty(),
|
||||
request.body()?.contentLength() ?: 0,
|
||||
)
|
||||
InspectorNetworkReporter.reportConnectionTiming(requestId, headersMap)
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onDataSend(
|
||||
reactContext: ReactApplicationContext?,
|
||||
requestId: Int,
|
||||
progress: Long,
|
||||
total: Long
|
||||
) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didSendNetworkData",
|
||||
buildReadableArray {
|
||||
add(requestId)
|
||||
add(progress.toInt())
|
||||
add(total.toInt())
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onIncrementalDataReceived(
|
||||
reactContext: ReactApplicationContext?,
|
||||
requestId: Int,
|
||||
data: String?,
|
||||
progress: Long,
|
||||
total: Long
|
||||
) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didReceiveNetworkIncrementalData",
|
||||
buildReadableArray {
|
||||
add(requestId)
|
||||
add(data)
|
||||
add(progress.toInt())
|
||||
add(total.toInt())
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onDataReceivedProgress(
|
||||
reactContext: ReactApplicationContext?,
|
||||
requestId: Int,
|
||||
progress: Long,
|
||||
total: Long
|
||||
) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didReceiveNetworkDataProgress",
|
||||
buildReadableArray {
|
||||
add(requestId)
|
||||
add(progress.toInt())
|
||||
add(total.toInt())
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onDataReceived(reactContext: ReactApplicationContext?, requestId: Int, data: String?) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didReceiveNetworkData",
|
||||
buildReadableArray {
|
||||
add(requestId)
|
||||
add(data)
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onDataReceived(reactContext: ReactApplicationContext?, requestId: Int, data: WritableMap?) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didReceiveNetworkData",
|
||||
Arguments.createArray().apply {
|
||||
pushInt(requestId)
|
||||
pushMap(data)
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onRequestError(
|
||||
reactContext: ReactApplicationContext?,
|
||||
requestId: Int,
|
||||
error: String?,
|
||||
e: Throwable?
|
||||
) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didCompleteNetworkResponse",
|
||||
buildReadableArray {
|
||||
add(requestId)
|
||||
add(error)
|
||||
if (e?.javaClass == SocketTimeoutException::class.java) {
|
||||
add(true) // last argument is a time out boolean
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onRequestSuccess(
|
||||
reactContext: ReactApplicationContext?,
|
||||
requestId: Int,
|
||||
encodedDataLength: Long
|
||||
) {
|
||||
if (ReactNativeFeatureFlags.enableNetworkEventReporting()) {
|
||||
InspectorNetworkReporter.reportResponseEnd(requestId, encodedDataLength)
|
||||
}
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didCompleteNetworkResponse",
|
||||
buildReadableArray {
|
||||
add(requestId)
|
||||
addNull()
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onResponseReceived(
|
||||
reactContext: ReactApplicationContext?,
|
||||
requestId: Int,
|
||||
requestUrl: String?,
|
||||
response: Response,
|
||||
) {
|
||||
val headersMap = okHttpHeadersToMap(response.headers())
|
||||
val headersBundle = Bundle()
|
||||
for ((headerName, headerValue) in headersMap) {
|
||||
headersBundle.putString(headerName, headerValue)
|
||||
}
|
||||
|
||||
if (ReactNativeFeatureFlags.enableNetworkEventReporting()) {
|
||||
InspectorNetworkReporter.reportResponseStart(
|
||||
requestId,
|
||||
requestUrl.orEmpty(),
|
||||
response.code(),
|
||||
headersMap,
|
||||
response.body()?.contentLength() ?: 0,
|
||||
)
|
||||
}
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didReceiveNetworkResponse",
|
||||
Arguments.createArray().apply {
|
||||
pushInt(requestId)
|
||||
pushInt(response.code())
|
||||
pushMap(Arguments.fromBundle(headersBundle))
|
||||
pushString(requestUrl)
|
||||
})
|
||||
}
|
||||
|
||||
@Deprecated("Compatibility overload")
|
||||
@JvmStatic
|
||||
fun onResponseReceived(
|
||||
reactContext: ReactApplicationContext?,
|
||||
requestId: Int,
|
||||
statusCode: Int,
|
||||
headers: WritableMap?,
|
||||
url: String?
|
||||
) {
|
||||
val headersBuilder = Headers.Builder()
|
||||
headers?.let { map ->
|
||||
val iterator = map.keySetIterator()
|
||||
while (iterator.hasNextKey()) {
|
||||
val key = iterator.nextKey()
|
||||
val value = map.getString(key)
|
||||
if (value != null) {
|
||||
headersBuilder.add(key, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
onResponseReceived(
|
||||
reactContext,
|
||||
requestId,
|
||||
url,
|
||||
Response.Builder()
|
||||
.protocol(Protocol.HTTP_1_1)
|
||||
.request(Request.Builder().url(url.orEmpty()).build())
|
||||
.headers(headersBuilder.build())
|
||||
.code(statusCode)
|
||||
.message("")
|
||||
.build())
|
||||
}
|
||||
|
||||
private fun okHttpHeadersToMap(headers: Headers): Map<String, String> {
|
||||
val responseHeaders = mutableMapOf<String, String>()
|
||||
for (i in 0 until headers.size()) {
|
||||
val headerName = headers.name(i)
|
||||
// multiple values for the same header
|
||||
if (responseHeaders.containsKey(headerName)) {
|
||||
responseHeaders[headerName] = "${responseHeaders[headerName]}, ${headers.value(i)}"
|
||||
} else {
|
||||
responseHeaders[headerName] = headers.value(i)
|
||||
}
|
||||
}
|
||||
return responseHeaders
|
||||
}
|
||||
}
|
||||
+57
-61
@@ -11,11 +11,9 @@
|
||||
package com.facebook.react.modules.network
|
||||
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.util.Base64
|
||||
import com.facebook.common.logging.FLog
|
||||
import com.facebook.fbreact.specs.NativeNetworkingAndroidSpec
|
||||
import com.facebook.react.bridge.Arguments
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridge.ReactMethod
|
||||
import com.facebook.react.bridge.ReadableArray
|
||||
@@ -36,6 +34,7 @@ import okhttp3.JavaNetCookieJar
|
||||
import okhttp3.MediaType
|
||||
import okhttp3.MultipartBody
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Protocol
|
||||
import okhttp3.Request
|
||||
import okhttp3.RequestBody
|
||||
import okhttp3.Response
|
||||
@@ -231,7 +230,7 @@ public class NetworkingModule(
|
||||
} catch (th: Throwable) {
|
||||
FLog.e(TAG, "Failed to send url request: $url", th)
|
||||
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
getReactApplicationContextIfActiveOrWarn(), requestId, th.message, th)
|
||||
}
|
||||
}
|
||||
@@ -256,17 +255,25 @@ public class NetworkingModule(
|
||||
for (handler in uriHandlers) {
|
||||
if (handler.supports(uri, responseType)) {
|
||||
val res = handler.fetch(uri)
|
||||
val encodedDataLength = res.toString().toByteArray().size
|
||||
// fix: UriHandlers which are not using file:// scheme fail in whatwg-fetch at this line
|
||||
// https://github.com/JakeChampion/fetch/blob/main/fetch.js#L547
|
||||
ResponseUtil.onResponseReceived(
|
||||
reactApplicationContext, requestId, 200, Arguments.createMap(), url)
|
||||
ResponseUtil.onDataReceived(reactApplicationContext, requestId, res)
|
||||
ResponseUtil.onRequestSuccess(reactApplicationContext, requestId)
|
||||
val response =
|
||||
Response.Builder()
|
||||
.protocol(Protocol.HTTP_1_1)
|
||||
.request(Request.Builder().url(url.orEmpty()).build())
|
||||
.code(200)
|
||||
.message("OK")
|
||||
.build()
|
||||
NetworkEventUtil.onResponseReceived(reactApplicationContext, requestId, url, response)
|
||||
NetworkEventUtil.onDataReceived(reactApplicationContext, requestId, res)
|
||||
NetworkEventUtil.onRequestSuccess(
|
||||
reactApplicationContext, requestId, encodedDataLength.toLong())
|
||||
return
|
||||
}
|
||||
}
|
||||
} catch (e: IOException) {
|
||||
ResponseUtil.onRequestError(reactApplicationContext, requestId, e.message, e)
|
||||
NetworkEventUtil.onRequestError(reactApplicationContext, requestId, e.message, e)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -274,7 +281,7 @@ public class NetworkingModule(
|
||||
try {
|
||||
requestBuilder = Request.Builder().url(url.orEmpty())
|
||||
} catch (e: Exception) {
|
||||
ResponseUtil.onRequestError(reactApplicationContext, requestId, e.message, null)
|
||||
NetworkEventUtil.onRequestError(reactApplicationContext, requestId, e.message, e)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -313,7 +320,7 @@ public class NetworkingModule(
|
||||
// JS below, so no need to do anything here.
|
||||
return
|
||||
}
|
||||
ResponseUtil.onDataReceivedProgress(
|
||||
NetworkEventUtil.onDataReceivedProgress(
|
||||
reactApplicationContext, requestId, bytesWritten, contentLength)
|
||||
last = now
|
||||
}
|
||||
@@ -333,7 +340,7 @@ public class NetworkingModule(
|
||||
|
||||
val requestHeaders = extractHeaders(headers, data)
|
||||
if (requestHeaders == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, "Unrecognized headers format", null)
|
||||
return
|
||||
}
|
||||
@@ -359,7 +366,7 @@ public class NetworkingModule(
|
||||
handler != null -> requestBody = handler.toRequestBody(data, contentType)
|
||||
data.hasKey(REQUEST_BODY_KEY_STRING) -> {
|
||||
if (contentType == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext,
|
||||
requestId,
|
||||
"Payload is set but no content-type header specified",
|
||||
@@ -374,7 +381,7 @@ public class NetworkingModule(
|
||||
requestBody = RequestBodyUtil.createGzip(contentMediaType, body)
|
||||
}
|
||||
if (requestBody == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, "Failed to gzip request body", null)
|
||||
return
|
||||
}
|
||||
@@ -389,7 +396,7 @@ public class NetworkingModule(
|
||||
checkNotNull(contentMediaType.charset(StandardCharsets.UTF_8))
|
||||
}
|
||||
if (body == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, "Received request but body was empty", null)
|
||||
return
|
||||
}
|
||||
@@ -399,7 +406,7 @@ public class NetworkingModule(
|
||||
}
|
||||
data.hasKey(REQUEST_BODY_KEY_BASE64) -> {
|
||||
if (contentType == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext,
|
||||
requestId,
|
||||
"Payload is set but no content-type header specified",
|
||||
@@ -411,7 +418,7 @@ public class NetworkingModule(
|
||||
|
||||
val contentMediaType = MediaType.parse(contentType)
|
||||
if (contentMediaType == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext,
|
||||
requestId,
|
||||
"Invalid content type specified: $contentType",
|
||||
@@ -420,7 +427,7 @@ public class NetworkingModule(
|
||||
}
|
||||
val base64DecodedString = ByteString.decodeBase64(base64String)
|
||||
if (base64DecodedString == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, "Request body base64 string was invalid", null)
|
||||
return
|
||||
}
|
||||
@@ -429,7 +436,7 @@ public class NetworkingModule(
|
||||
}
|
||||
data.hasKey(REQUEST_BODY_KEY_URI) -> {
|
||||
if (contentType == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext,
|
||||
requestId,
|
||||
"Payload is set but no content-type header specified",
|
||||
@@ -438,13 +445,13 @@ public class NetworkingModule(
|
||||
}
|
||||
val uri = data.getString(REQUEST_BODY_KEY_URI)
|
||||
if (uri == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, "Request body URI field was set but null", null)
|
||||
return
|
||||
}
|
||||
val fileInputStream = RequestBodyUtil.getFileInputStream(getReactApplicationContext(), uri)
|
||||
if (fileInputStream == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, "Could not retrieve file for uri $uri", null)
|
||||
return
|
||||
}
|
||||
@@ -456,7 +463,7 @@ public class NetworkingModule(
|
||||
}
|
||||
val parts = data.getArray(REQUEST_BODY_KEY_FORMDATA)
|
||||
if (parts == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, "Received request but form data was empty", null)
|
||||
return
|
||||
}
|
||||
@@ -472,8 +479,11 @@ public class NetworkingModule(
|
||||
requestBuilder.method(method, wrapRequestBodyWithProgressEmitter(requestBody, requestId))
|
||||
|
||||
addRequest(requestId)
|
||||
val request = requestBuilder.build()
|
||||
NetworkEventUtil.onCreateRequest(requestId, request)
|
||||
|
||||
client
|
||||
.newCall(requestBuilder.build())
|
||||
.newCall(request)
|
||||
.enqueue(
|
||||
object : Callback {
|
||||
override fun onFailure(call: Call, e: IOException) {
|
||||
@@ -483,7 +493,7 @@ public class NetworkingModule(
|
||||
removeRequest(requestId)
|
||||
val errorMessage =
|
||||
e.message ?: ("Error while executing request: ${e.javaClass.simpleName}")
|
||||
ResponseUtil.onRequestError(reactApplicationContext, requestId, errorMessage, e)
|
||||
NetworkEventUtil.onRequestError(reactApplicationContext, requestId, errorMessage, e)
|
||||
}
|
||||
|
||||
@Throws(IOException::class)
|
||||
@@ -493,12 +503,8 @@ public class NetworkingModule(
|
||||
}
|
||||
removeRequest(requestId)
|
||||
// Before we touch the body send headers to JS
|
||||
ResponseUtil.onResponseReceived(
|
||||
reactApplicationContext,
|
||||
requestId,
|
||||
response.code(),
|
||||
translateHeaders(response.headers()),
|
||||
response.request().url().toString())
|
||||
NetworkEventUtil.onResponseReceived(
|
||||
reactApplicationContext, requestId, url, response)
|
||||
|
||||
try {
|
||||
// OkHttp implements something called transparent gzip, which mean that it will
|
||||
@@ -517,7 +523,7 @@ public class NetworkingModule(
|
||||
// https://github.com/square/okhttp/blob/5b37cda9e00626f43acf354df145fd452c3031f1/okhttp/src/main/java/okhttp3/internal/http/BridgeInterceptor.java#L76-L111
|
||||
var responseBody: ResponseBody? = response.body()
|
||||
if (responseBody == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, "Response body is null", null)
|
||||
return
|
||||
}
|
||||
@@ -538,8 +544,9 @@ public class NetworkingModule(
|
||||
for (responseHandler in responseHandlers) {
|
||||
if (responseHandler.supports(responseType)) {
|
||||
val res = responseHandler.toResponseData(responseBody)
|
||||
ResponseUtil.onDataReceived(reactApplicationContext, requestId, res)
|
||||
ResponseUtil.onRequestSuccess(reactApplicationContext, requestId)
|
||||
NetworkEventUtil.onDataReceived(reactApplicationContext, requestId, res)
|
||||
NetworkEventUtil.onRequestSuccess(
|
||||
reactApplicationContext, requestId, responseBody.contentLength())
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -549,7 +556,8 @@ public class NetworkingModule(
|
||||
// periodically send response data updates to JS.
|
||||
if (useIncrementalUpdates && responseType == "text") {
|
||||
readWithProgress(requestId, responseBody)
|
||||
ResponseUtil.onRequestSuccess(reactApplicationContext, requestId)
|
||||
NetworkEventUtil.onRequestSuccess(
|
||||
reactApplicationContext, requestId, responseBody.contentLength())
|
||||
return
|
||||
}
|
||||
|
||||
@@ -566,17 +574,19 @@ public class NetworkingModule(
|
||||
// Javascript layer.
|
||||
// Introduced to fix issue #7463.
|
||||
} else {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, e.message, e)
|
||||
}
|
||||
}
|
||||
} else if (responseType == "base64") {
|
||||
responseString = Base64.encodeToString(responseBody.bytes(), Base64.NO_WRAP)
|
||||
}
|
||||
ResponseUtil.onDataReceived(reactApplicationContext, requestId, responseString)
|
||||
ResponseUtil.onRequestSuccess(reactApplicationContext, requestId)
|
||||
NetworkEventUtil.onDataReceived(
|
||||
reactApplicationContext, requestId, responseString)
|
||||
NetworkEventUtil.onRequestSuccess(
|
||||
reactApplicationContext, requestId, responseBody.contentLength())
|
||||
} catch (e: IOException) {
|
||||
ResponseUtil.onRequestError(reactApplicationContext, requestId, e.message, e)
|
||||
NetworkEventUtil.onRequestError(reactApplicationContext, requestId, e.message, e)
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -598,7 +608,7 @@ public class NetworkingModule(
|
||||
override fun onProgress(bytesWritten: Long, contentLength: Long, done: Boolean) {
|
||||
val now = System.nanoTime()
|
||||
if (done || shouldDispatch(now, last)) {
|
||||
ResponseUtil.onDataSend(
|
||||
NetworkEventUtil.onDataSend(
|
||||
reactApplicationContext, requestId, bytesWritten, contentLength)
|
||||
last = now
|
||||
}
|
||||
@@ -633,7 +643,7 @@ public class NetworkingModule(
|
||||
var read: Int
|
||||
val reactApplicationContext = getReactApplicationContextIfActiveOrWarn()
|
||||
while ((inputStream.read(buffer).also { read = it }) != -1) {
|
||||
ResponseUtil.onIncrementalDataReceived(
|
||||
NetworkEventUtil.onIncrementalDataReceived(
|
||||
reactApplicationContext,
|
||||
requestId,
|
||||
streamDecoder.decodeNext(buffer, read),
|
||||
@@ -691,7 +701,8 @@ public class NetworkingModule(
|
||||
val multipartBuilder = MultipartBody.Builder()
|
||||
val mediaType = MediaType.parse(contentType)
|
||||
if (mediaType == null) {
|
||||
ResponseUtil.onRequestError(reactApplicationContext, requestId, "Invalid media type.", null)
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, "Invalid media type.", null)
|
||||
return null
|
||||
}
|
||||
multipartBuilder.setType(mediaType)
|
||||
@@ -699,7 +710,7 @@ public class NetworkingModule(
|
||||
for (i in 0 until body.size()) {
|
||||
val bodyPart = body.getMap(i)
|
||||
if (bodyPart == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, "Unrecognized FormData part.", null)
|
||||
return null
|
||||
}
|
||||
@@ -708,7 +719,7 @@ public class NetworkingModule(
|
||||
val headersArray = bodyPart.getArray("headers")
|
||||
var headers = extractHeaders(headersArray, null)
|
||||
if (headers == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext,
|
||||
requestId,
|
||||
"Missing or invalid header format for FormData part.",
|
||||
@@ -732,7 +743,7 @@ public class NetworkingModule(
|
||||
} else if (bodyPart.hasKey(REQUEST_BODY_KEY_URI) &&
|
||||
bodyPart.getString(REQUEST_BODY_KEY_URI) != null) {
|
||||
if (partContentType == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext,
|
||||
requestId,
|
||||
"Binary FormData part needs a content-type header.",
|
||||
@@ -741,14 +752,14 @@ public class NetworkingModule(
|
||||
}
|
||||
val fileContentUriStr = bodyPart.getString(REQUEST_BODY_KEY_URI)
|
||||
if (fileContentUriStr == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, "Body must have a valid file uri", null)
|
||||
return null
|
||||
}
|
||||
val fileInputStream =
|
||||
RequestBodyUtil.getFileInputStream(getReactApplicationContext(), fileContentUriStr)
|
||||
if (fileInputStream == null) {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext,
|
||||
requestId,
|
||||
"Could not retrieve file for uri $fileContentUriStr",
|
||||
@@ -757,7 +768,7 @@ public class NetworkingModule(
|
||||
}
|
||||
multipartBuilder.addPart(headers, RequestBodyUtil.create(partContentType, fileInputStream))
|
||||
} else {
|
||||
ResponseUtil.onRequestError(
|
||||
NetworkEventUtil.onRequestError(
|
||||
reactApplicationContext, requestId, "Unrecognized FormData part.", null)
|
||||
}
|
||||
}
|
||||
@@ -827,20 +838,5 @@ public class NetworkingModule(
|
||||
}
|
||||
|
||||
private fun shouldDispatch(now: Long, last: Long): Boolean = last + CHUNK_TIMEOUT_NS < now
|
||||
|
||||
private fun translateHeaders(headers: Headers): WritableMap {
|
||||
val responseHeaders = Bundle()
|
||||
for (i in 0..<headers.size()) {
|
||||
val headerName = headers.name(i)
|
||||
// multiple values for the same header
|
||||
if (responseHeaders.containsKey(headerName)) {
|
||||
responseHeaders.putString(
|
||||
headerName, "${responseHeaders.getString(headerName)}, ${headers.value(i)}")
|
||||
} else {
|
||||
responseHeaders.putString(headerName, headers.value(i))
|
||||
}
|
||||
}
|
||||
return Arguments.fromBundle(responseHeaders)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-133
@@ -1,133 +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.modules.network
|
||||
|
||||
import com.facebook.react.bridge.Arguments
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridge.WritableMap
|
||||
import com.facebook.react.bridge.buildReadableArray
|
||||
import java.net.SocketTimeoutException
|
||||
|
||||
/** Util methods to send network responses to JS. */
|
||||
internal object ResponseUtil {
|
||||
@JvmStatic
|
||||
fun onDataSend(
|
||||
reactContext: ReactApplicationContext?,
|
||||
requestId: Int,
|
||||
progress: Long,
|
||||
total: Long
|
||||
) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didSendNetworkData",
|
||||
buildReadableArray {
|
||||
add(requestId)
|
||||
add(progress.toInt())
|
||||
add(total.toInt())
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onIncrementalDataReceived(
|
||||
reactContext: ReactApplicationContext?,
|
||||
requestId: Int,
|
||||
data: String?,
|
||||
progress: Long,
|
||||
total: Long
|
||||
) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didReceiveNetworkIncrementalData",
|
||||
buildReadableArray {
|
||||
add(requestId)
|
||||
add(data)
|
||||
add(progress.toInt())
|
||||
add(total.toInt())
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onDataReceivedProgress(
|
||||
reactContext: ReactApplicationContext?,
|
||||
requestId: Int,
|
||||
progress: Long,
|
||||
total: Long
|
||||
) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didReceiveNetworkDataProgress",
|
||||
buildReadableArray {
|
||||
add(requestId)
|
||||
add(progress.toInt())
|
||||
add(total.toInt())
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onDataReceived(reactContext: ReactApplicationContext?, requestId: Int, data: String?) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didReceiveNetworkData",
|
||||
buildReadableArray {
|
||||
add(requestId)
|
||||
add(data)
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onDataReceived(reactContext: ReactApplicationContext?, requestId: Int, data: WritableMap?) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didReceiveNetworkData",
|
||||
Arguments.createArray().apply {
|
||||
pushInt(requestId)
|
||||
pushMap(data)
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onRequestError(
|
||||
reactContext: ReactApplicationContext?,
|
||||
requestId: Int,
|
||||
error: String?,
|
||||
e: Throwable?
|
||||
) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didCompleteNetworkResponse",
|
||||
buildReadableArray {
|
||||
add(requestId)
|
||||
add(error)
|
||||
if (e?.javaClass == SocketTimeoutException::class.java) {
|
||||
add(true) // last argument is a time out boolean
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onRequestSuccess(reactContext: ReactApplicationContext?, requestId: Int) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didCompleteNetworkResponse",
|
||||
buildReadableArray {
|
||||
add(requestId)
|
||||
addNull()
|
||||
})
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onResponseReceived(
|
||||
reactContext: ReactApplicationContext?,
|
||||
requestId: Int,
|
||||
statusCode: Int,
|
||||
headers: WritableMap?,
|
||||
url: String?
|
||||
) {
|
||||
reactContext?.emitDeviceEvent(
|
||||
"didReceiveNetworkResponse",
|
||||
Arguments.createArray().apply {
|
||||
pushInt(requestId)
|
||||
pushInt(statusCode)
|
||||
pushMap(headers)
|
||||
pushString(url)
|
||||
})
|
||||
}
|
||||
}
|
||||
+6
-9
@@ -30,15 +30,12 @@ internal class DebuggingOverlayManager :
|
||||
|
||||
override fun getDelegate(): ViewManagerDelegate<DebuggingOverlay> = delegate
|
||||
|
||||
override fun highlightTraceUpdates(
|
||||
view: DebuggingOverlay,
|
||||
providedTraceUpdates: ReadableArray
|
||||
): Unit {
|
||||
override fun highlightTraceUpdates(view: DebuggingOverlay, updates: ReadableArray): Unit {
|
||||
val formattedTraceUpdates = mutableListOf<TraceUpdate>()
|
||||
|
||||
var successfullyParsedPayload = true
|
||||
for (i in 0 until providedTraceUpdates.size()) {
|
||||
val traceUpdate = providedTraceUpdates.getMap(i) ?: continue
|
||||
for (i in 0 until updates.size()) {
|
||||
val traceUpdate = updates.getMap(i) ?: continue
|
||||
val serializedRectangle = traceUpdate.getMap("rectangle")
|
||||
if (serializedRectangle == null) {
|
||||
ReactSoftExceptionLogger.logSoftException(
|
||||
@@ -82,12 +79,12 @@ internal class DebuggingOverlayManager :
|
||||
}
|
||||
}
|
||||
|
||||
override fun highlightElements(view: DebuggingOverlay, providedElements: ReadableArray): Unit {
|
||||
override fun highlightElements(view: DebuggingOverlay, elements: ReadableArray): Unit {
|
||||
val elementsRectangles = mutableListOf<RectF>()
|
||||
|
||||
var successfullyParsedPayload = true
|
||||
for (i in 0 until providedElements.size()) {
|
||||
val element = providedElements.getMap(i) ?: continue
|
||||
for (i in 0 until elements.size()) {
|
||||
val element = elements.getMap(i) ?: continue
|
||||
try {
|
||||
val left = element.getDouble("x").toFloat()
|
||||
val top = element.getDouble("y").toFloat()
|
||||
|
||||
+5
-5
@@ -108,20 +108,20 @@ public class ReactDrawerLayoutManager :
|
||||
view.setDrawerWidth(widthInPx)
|
||||
}
|
||||
|
||||
public override fun setDrawerWidth(view: ReactDrawerLayout, width: Float?) {
|
||||
val widthInPx = width?.let { Math.round(it.dpToPx()) } ?: ReactDrawerLayout.DEFAULT_DRAWER_WIDTH
|
||||
public override fun setDrawerWidth(view: ReactDrawerLayout, value: Float?) {
|
||||
val widthInPx = value?.let { Math.round(it.dpToPx()) } ?: ReactDrawerLayout.DEFAULT_DRAWER_WIDTH
|
||||
view.setDrawerWidth(widthInPx)
|
||||
}
|
||||
|
||||
@ReactProp(name = "drawerLockMode")
|
||||
public override fun setDrawerLockMode(view: ReactDrawerLayout, drawerLockMode: String?) {
|
||||
when (drawerLockMode) {
|
||||
public override fun setDrawerLockMode(view: ReactDrawerLayout, value: String?) {
|
||||
when (value) {
|
||||
null,
|
||||
"unlocked" -> view.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
|
||||
"locked-closed" -> view.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
|
||||
"locked-open" -> view.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN)
|
||||
else -> {
|
||||
FLog.w(ReactConstants.TAG, "Unknown drawerLockMode $drawerLockMode")
|
||||
FLog.w(ReactConstants.TAG, "Unknown drawerLockMode $value")
|
||||
view.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
|
||||
}
|
||||
}
|
||||
|
||||
+12
-15
@@ -38,37 +38,34 @@ internal class ReactModalHostManager :
|
||||
}
|
||||
|
||||
@ReactProp(name = "animationType")
|
||||
override fun setAnimationType(view: ReactModalHostView, animationType: String?) {
|
||||
if (animationType != null) {
|
||||
view.animationType = animationType
|
||||
override fun setAnimationType(view: ReactModalHostView, value: String?) {
|
||||
if (value != null) {
|
||||
view.animationType = value
|
||||
}
|
||||
}
|
||||
|
||||
@ReactProp(name = "transparent")
|
||||
override fun setTransparent(view: ReactModalHostView, transparent: Boolean) {
|
||||
view.transparent = transparent
|
||||
override fun setTransparent(view: ReactModalHostView, value: Boolean) {
|
||||
view.transparent = value
|
||||
}
|
||||
|
||||
@ReactProp(name = "statusBarTranslucent")
|
||||
override fun setStatusBarTranslucent(view: ReactModalHostView, statusBarTranslucent: Boolean) {
|
||||
view.statusBarTranslucent = statusBarTranslucent
|
||||
override fun setStatusBarTranslucent(view: ReactModalHostView, value: Boolean) {
|
||||
view.statusBarTranslucent = value
|
||||
}
|
||||
|
||||
@ReactProp(name = "navigationBarTranslucent")
|
||||
override fun setNavigationBarTranslucent(
|
||||
view: ReactModalHostView,
|
||||
navigationBarTranslucent: Boolean
|
||||
) {
|
||||
view.navigationBarTranslucent = navigationBarTranslucent
|
||||
override fun setNavigationBarTranslucent(view: ReactModalHostView, value: Boolean) {
|
||||
view.navigationBarTranslucent = value
|
||||
}
|
||||
|
||||
@ReactProp(name = "hardwareAccelerated")
|
||||
override fun setHardwareAccelerated(view: ReactModalHostView, hardwareAccelerated: Boolean) {
|
||||
view.hardwareAccelerated = hardwareAccelerated
|
||||
override fun setHardwareAccelerated(view: ReactModalHostView, value: Boolean) {
|
||||
view.hardwareAccelerated = value
|
||||
}
|
||||
|
||||
@ReactProp(name = "visible")
|
||||
override fun setVisible(view: ReactModalHostView, visible: Boolean) {
|
||||
override fun setVisible(view: ReactModalHostView, value: Boolean) {
|
||||
// iOS only
|
||||
}
|
||||
|
||||
|
||||
+10
-10
@@ -49,28 +49,28 @@ internal class ReactProgressBarViewManager :
|
||||
}
|
||||
|
||||
@ReactProp(name = PROP_STYLE)
|
||||
override fun setStyleAttr(view: ProgressBarContainerView, styleName: String?) {
|
||||
view.setStyle(styleName)
|
||||
override fun setStyleAttr(view: ProgressBarContainerView, value: String?) {
|
||||
view.setStyle(value)
|
||||
}
|
||||
|
||||
@ReactProp(name = ViewProps.COLOR, customType = "Color")
|
||||
override fun setColor(view: ProgressBarContainerView, color: Int?) {
|
||||
view.color = color
|
||||
override fun setColor(view: ProgressBarContainerView, value: Int?) {
|
||||
view.color = value
|
||||
}
|
||||
|
||||
@ReactProp(name = PROP_INDETERMINATE)
|
||||
override fun setIndeterminate(view: ProgressBarContainerView, indeterminate: Boolean) {
|
||||
view.indeterminate = indeterminate
|
||||
override fun setIndeterminate(view: ProgressBarContainerView, value: Boolean) {
|
||||
view.indeterminate = value
|
||||
}
|
||||
|
||||
@ReactProp(name = PROP_PROGRESS)
|
||||
override fun setProgress(view: ProgressBarContainerView, progress: Double) {
|
||||
view.progress = progress
|
||||
override fun setProgress(view: ProgressBarContainerView, value: Double) {
|
||||
view.progress = value
|
||||
}
|
||||
|
||||
@ReactProp(name = PROP_ANIMATING)
|
||||
override fun setAnimating(view: ProgressBarContainerView, animating: Boolean) {
|
||||
view.animating = animating
|
||||
override fun setAnimating(view: ProgressBarContainerView, value: Boolean) {
|
||||
view.animating = value
|
||||
}
|
||||
|
||||
override fun setTestID(view: ProgressBarContainerView, value: String?) {
|
||||
|
||||
+19
-19
@@ -42,19 +42,19 @@ internal open class SwipeRefreshLayoutManager :
|
||||
override fun getName(): String = REACT_CLASS
|
||||
|
||||
@ReactProp(name = ViewProps.ENABLED, defaultBoolean = true)
|
||||
override fun setEnabled(view: ReactSwipeRefreshLayout, enabled: Boolean) {
|
||||
view.isEnabled = enabled
|
||||
override fun setEnabled(view: ReactSwipeRefreshLayout, value: Boolean) {
|
||||
view.isEnabled = value
|
||||
}
|
||||
|
||||
@ReactProp(name = "colors", customType = "ColorArray")
|
||||
override fun setColors(view: ReactSwipeRefreshLayout, colors: ReadableArray?) {
|
||||
if (colors != null) {
|
||||
val colorValues = IntArray(colors.size())
|
||||
for (i in 0..<colors.size()) {
|
||||
if (colors.getType(i) == ReadableType.Map) {
|
||||
colorValues[i] = ColorPropConverter.getColor(colors.getMap(i), view.context, 0)
|
||||
override fun setColors(view: ReactSwipeRefreshLayout, value: ReadableArray?) {
|
||||
if (value != null) {
|
||||
val colorValues = IntArray(value.size())
|
||||
for (i in 0..<value.size()) {
|
||||
if (value.getType(i) == ReadableType.Map) {
|
||||
colorValues[i] = ColorPropConverter.getColor(value.getMap(i), view.context, 0)
|
||||
} else {
|
||||
colorValues[i] = colors.getInt(i)
|
||||
colorValues[i] = value.getInt(i)
|
||||
}
|
||||
}
|
||||
view.setColorSchemeColors(*colorValues)
|
||||
@@ -64,8 +64,8 @@ internal open class SwipeRefreshLayoutManager :
|
||||
}
|
||||
|
||||
@ReactProp(name = "progressBackgroundColor", customType = "Color")
|
||||
override fun setProgressBackgroundColor(view: ReactSwipeRefreshLayout, color: Int?) {
|
||||
view.setProgressBackgroundColorSchemeColor(color ?: Color.TRANSPARENT)
|
||||
override fun setProgressBackgroundColor(view: ReactSwipeRefreshLayout, value: Int?) {
|
||||
view.setProgressBackgroundColorSchemeColor(value ?: Color.TRANSPARENT)
|
||||
}
|
||||
|
||||
// TODO(T46143833): Remove this method once the 'size' prop has been migrated to String in JS.
|
||||
@@ -73,13 +73,13 @@ internal open class SwipeRefreshLayoutManager :
|
||||
view.setSize(value)
|
||||
}
|
||||
|
||||
override fun setSize(view: ReactSwipeRefreshLayout, size: String?) {
|
||||
if (size == null || size.equals("default")) {
|
||||
override fun setSize(view: ReactSwipeRefreshLayout, value: String?) {
|
||||
if (value == null || value.equals("default")) {
|
||||
view.setSize(SwipeRefreshLayout.DEFAULT)
|
||||
} else if (size.equals("large")) {
|
||||
} else if (value.equals("large")) {
|
||||
view.setSize(SwipeRefreshLayout.LARGE)
|
||||
} else {
|
||||
throw IllegalArgumentException("Size must be 'default' or 'large', received: $size")
|
||||
throw IllegalArgumentException("Size must be 'default' or 'large', received: $value")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,13 +97,13 @@ internal open class SwipeRefreshLayoutManager :
|
||||
}
|
||||
|
||||
@ReactProp(name = "refreshing")
|
||||
override fun setRefreshing(view: ReactSwipeRefreshLayout, refreshing: Boolean) {
|
||||
view.isRefreshing = refreshing
|
||||
override fun setRefreshing(view: ReactSwipeRefreshLayout, value: Boolean) {
|
||||
view.isRefreshing = value
|
||||
}
|
||||
|
||||
@ReactProp(name = "progressViewOffset", defaultFloat = 0f)
|
||||
override fun setProgressViewOffset(view: ReactSwipeRefreshLayout, offset: Float) {
|
||||
view.setProgressViewOffset(offset)
|
||||
override fun setProgressViewOffset(view: ReactSwipeRefreshLayout, value: Float) {
|
||||
view.setProgressViewOffset(value)
|
||||
}
|
||||
|
||||
override fun setNativeRefreshing(view: ReactSwipeRefreshLayout, value: Boolean) {
|
||||
|
||||
+16
-16
@@ -46,18 +46,18 @@ internal class ReactSwitchManager :
|
||||
}
|
||||
|
||||
@ReactProp(name = "disabled", defaultBoolean = false)
|
||||
override fun setDisabled(view: ReactSwitch, disabled: Boolean) {
|
||||
view.isEnabled = !disabled
|
||||
override fun setDisabled(view: ReactSwitch, value: Boolean) {
|
||||
view.isEnabled = !value
|
||||
}
|
||||
|
||||
@ReactProp(name = ViewProps.ENABLED, defaultBoolean = true)
|
||||
override fun setEnabled(view: ReactSwitch, enabled: Boolean) {
|
||||
view.isEnabled = enabled
|
||||
override fun setEnabled(view: ReactSwitch, value: Boolean) {
|
||||
view.isEnabled = value
|
||||
}
|
||||
|
||||
@ReactProp(name = ViewProps.ON)
|
||||
override fun setOn(view: ReactSwitch, on: Boolean) {
|
||||
setValueInternal(view, on)
|
||||
override fun setOn(view: ReactSwitch, value: Boolean) {
|
||||
setValueInternal(view, value)
|
||||
}
|
||||
|
||||
@ReactProp(name = "value")
|
||||
@@ -66,28 +66,28 @@ internal class ReactSwitchManager :
|
||||
}
|
||||
|
||||
@ReactProp(name = "thumbTintColor", customType = "Color")
|
||||
override fun setThumbTintColor(view: ReactSwitch, color: Int?) {
|
||||
setThumbColor(view, color)
|
||||
override fun setThumbTintColor(view: ReactSwitch, value: Int?) {
|
||||
setThumbColor(view, value)
|
||||
}
|
||||
|
||||
@ReactProp(name = "thumbColor", customType = "Color")
|
||||
override fun setThumbColor(view: ReactSwitch, color: Int?) {
|
||||
view.setThumbColor(color)
|
||||
override fun setThumbColor(view: ReactSwitch, value: Int?) {
|
||||
view.setThumbColor(value)
|
||||
}
|
||||
|
||||
@ReactProp(name = "trackColorForFalse", customType = "Color")
|
||||
override fun setTrackColorForFalse(view: ReactSwitch, color: Int?) {
|
||||
view.setTrackColorForFalse(color)
|
||||
override fun setTrackColorForFalse(view: ReactSwitch, value: Int?) {
|
||||
view.setTrackColorForFalse(value)
|
||||
}
|
||||
|
||||
@ReactProp(name = "trackColorForTrue", customType = "Color")
|
||||
override fun setTrackColorForTrue(view: ReactSwitch, color: Int?) {
|
||||
view.setTrackColorForTrue(color)
|
||||
override fun setTrackColorForTrue(view: ReactSwitch, value: Int?) {
|
||||
view.setTrackColorForTrue(value)
|
||||
}
|
||||
|
||||
@ReactProp(name = "trackTintColor", customType = "Color")
|
||||
override fun setTrackTintColor(view: ReactSwitch, color: Int?) {
|
||||
view.setTrackColor(color)
|
||||
override fun setTrackTintColor(view: ReactSwitch, value: Int?) {
|
||||
view.setTrackColor(value)
|
||||
}
|
||||
|
||||
override fun setNativeValue(view: ReactSwitch, value: Boolean) {
|
||||
|
||||
+2
-12
@@ -10,26 +10,16 @@ package com.facebook.react.views.textinput
|
||||
import com.facebook.react.bridge.Arguments
|
||||
import com.facebook.react.bridge.WritableMap
|
||||
import com.facebook.react.bridge.buildReadableMap
|
||||
import com.facebook.react.uimanager.common.ViewUtil
|
||||
import com.facebook.react.uimanager.events.Event
|
||||
|
||||
/** Event emitted by EditText native view when content size changes. */
|
||||
internal class ReactContentSizeChangedEvent(
|
||||
internal class ReactContentSizeChangedEvent
|
||||
constructor(
|
||||
surfaceId: Int,
|
||||
viewId: Int,
|
||||
private val contentWidth: Float,
|
||||
private val contentHeight: Float
|
||||
) : Event<ReactTextChangedEvent>(surfaceId, viewId) {
|
||||
@Deprecated(
|
||||
"Use the constructor with surfaceId instead",
|
||||
ReplaceWith(
|
||||
"ReactContentSizeChangedEvent(surfaceId, viewId, contentSizeWidth, contentSizeHeight)"))
|
||||
constructor(
|
||||
viewId: Int,
|
||||
contentSizeWidth: Float,
|
||||
contentSizeHeight: Float
|
||||
) : this(ViewUtil.NO_SURFACE_ID, viewId, contentSizeWidth, contentSizeHeight)
|
||||
|
||||
override fun getEventName(): String = EVENT_NAME
|
||||
|
||||
override fun getEventData(): WritableMap {
|
||||
|
||||
-10
@@ -9,7 +9,6 @@ package com.facebook.react.views.textinput
|
||||
|
||||
import com.facebook.react.bridge.Arguments
|
||||
import com.facebook.react.bridge.WritableMap
|
||||
import com.facebook.react.uimanager.common.ViewUtil
|
||||
import com.facebook.react.uimanager.events.Event
|
||||
|
||||
/** Event emitted by EditText native view when text changes. */
|
||||
@@ -19,15 +18,6 @@ internal class ReactTextChangedEvent(
|
||||
private val text: String,
|
||||
private val eventCount: Int
|
||||
) : Event<ReactTextChangedEvent>(surfaceId, viewId) {
|
||||
@Deprecated(
|
||||
"Use the constructor with surfaceId instead",
|
||||
ReplaceWith("ReactTextChangedEvent(surfaceId, viewId, text, eventCount)"))
|
||||
constructor(
|
||||
viewId: Int,
|
||||
text: String,
|
||||
eventCount: Int
|
||||
) : this(ViewUtil.NO_SURFACE_ID, viewId, text, eventCount)
|
||||
|
||||
override fun getEventName(): String = EVENT_NAME
|
||||
|
||||
override fun getEventData(): WritableMap {
|
||||
|
||||
-6
@@ -9,7 +9,6 @@ package com.facebook.react.views.textinput
|
||||
|
||||
import com.facebook.react.bridge.Arguments
|
||||
import com.facebook.react.bridge.WritableMap
|
||||
import com.facebook.react.uimanager.common.ViewUtil
|
||||
import com.facebook.react.uimanager.events.Event
|
||||
|
||||
/**
|
||||
@@ -21,11 +20,6 @@ internal class ReactTextInputEndEditingEvent(
|
||||
viewId: Int,
|
||||
private val text: String
|
||||
) : Event<ReactTextInputEndEditingEvent>(surfaceId, viewId) {
|
||||
@Deprecated(
|
||||
"Use the constructor with surfaceId instead",
|
||||
ReplaceWith("ReactTextInputEndEditingEvent(surfaceId, viewId, text)"))
|
||||
constructor(viewId: Int, text: String) : this(ViewUtil.NO_SURFACE_ID, viewId, text)
|
||||
|
||||
override fun getEventName(): String = EVENT_NAME
|
||||
|
||||
override fun canCoalesce(): Boolean = false
|
||||
|
||||
-6
@@ -9,17 +9,11 @@ package com.facebook.react.views.textinput
|
||||
|
||||
import com.facebook.react.bridge.Arguments
|
||||
import com.facebook.react.bridge.WritableMap
|
||||
import com.facebook.react.uimanager.common.ViewUtil
|
||||
import com.facebook.react.uimanager.events.Event
|
||||
|
||||
/** Event emitted by EditText native view when key pressed. */
|
||||
internal class ReactTextInputKeyPressEvent(surfaceId: Int, viewId: Int, private val key: String) :
|
||||
Event<ReactTextInputKeyPressEvent>(surfaceId, viewId) {
|
||||
@Deprecated(
|
||||
"Use the constructor with surfaceId instead",
|
||||
ReplaceWith("ReactTextInputKeyPressEvent(surfaceId, viewId, key)"))
|
||||
constructor(viewId: Int, key: String) : this(ViewUtil.NO_SURFACE_ID, viewId, key)
|
||||
|
||||
override fun getEventName(): String = EVENT_NAME
|
||||
|
||||
override fun getEventData(): WritableMap {
|
||||
|
||||
-10
@@ -10,7 +10,6 @@ package com.facebook.react.views.textinput
|
||||
import com.facebook.react.bridge.Arguments
|
||||
import com.facebook.react.bridge.WritableMap
|
||||
import com.facebook.react.bridge.buildReadableMap
|
||||
import com.facebook.react.uimanager.common.ViewUtil
|
||||
import com.facebook.react.uimanager.events.Event
|
||||
|
||||
/** Event emitted by EditText native view when the text selection changes. */
|
||||
@@ -20,15 +19,6 @@ internal class ReactTextInputSelectionEvent(
|
||||
private val selectionStart: Int,
|
||||
private val selectionEnd: Int
|
||||
) : Event<ReactTextInputSelectionEvent>(surfaceId, viewId) {
|
||||
@Deprecated(
|
||||
"Use the constructor with surfaceId instead",
|
||||
ReplaceWith("ReactTextInputSelectionEvent(surfaceId, viewId, selectionStart, selectionEnd)"))
|
||||
constructor(
|
||||
viewId: Int,
|
||||
selectionStart: Int,
|
||||
selectionEnd: Int
|
||||
) : this(ViewUtil.NO_SURFACE_ID, viewId, selectionStart, selectionEnd)
|
||||
|
||||
override fun getEventName(): String = EVENT_NAME
|
||||
|
||||
override fun getEventData(): WritableMap {
|
||||
|
||||
-6
@@ -9,7 +9,6 @@ package com.facebook.react.views.textinput
|
||||
|
||||
import com.facebook.react.bridge.Arguments
|
||||
import com.facebook.react.bridge.WritableMap
|
||||
import com.facebook.react.uimanager.common.ViewUtil
|
||||
import com.facebook.react.uimanager.events.Event
|
||||
|
||||
/** Event emitted by EditText native view when the user submits the text. */
|
||||
@@ -18,11 +17,6 @@ internal class ReactTextInputSubmitEditingEvent(
|
||||
viewId: Int,
|
||||
private val text: String
|
||||
) : Event<ReactTextInputSubmitEditingEvent>(surfaceId, viewId) {
|
||||
@Deprecated(
|
||||
"Use the constructor with surfaceId instead",
|
||||
ReplaceWith("ReactTextInputSubmitEditingEvent(surfaceId, viewId, text)"))
|
||||
constructor(viewId: Int, text: String) : this(ViewUtil.NO_SURFACE_ID, viewId, text)
|
||||
|
||||
override fun getEventName(): String = EVENT_NAME
|
||||
|
||||
override fun getEventData(): WritableMap {
|
||||
|
||||
+2
-2
@@ -35,8 +35,8 @@ internal class ReactUnimplementedViewManager :
|
||||
override fun getName(): String = REACT_CLASS
|
||||
|
||||
@ReactProp(name = "name")
|
||||
override fun setName(view: ReactUnimplementedView, name: String?): Unit =
|
||||
view.setName(name ?: "<null component name>")
|
||||
override fun setName(view: ReactUnimplementedView, value: String?): Unit =
|
||||
view.setName(value ?: "<null component name>")
|
||||
|
||||
internal companion object {
|
||||
const val REACT_CLASS: String = "UnimplementedNativeView"
|
||||
|
||||
+29
-29
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<d2e4ec09356f6857d789cfcc44a83552>>
|
||||
* @generated SignedSource<<2a33de4ea9c5d0c332845046053a9598>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -57,12 +57,6 @@ class ReactNativeFeatureFlagsJavaProvider
|
||||
return method(javaProvider_);
|
||||
}
|
||||
|
||||
bool disableMainQueueSyncDispatchIOS() override {
|
||||
static const auto method =
|
||||
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("disableMainQueueSyncDispatchIOS");
|
||||
return method(javaProvider_);
|
||||
}
|
||||
|
||||
bool disableMountItemReorderingAndroid() override {
|
||||
static const auto method =
|
||||
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("disableMountItemReorderingAndroid");
|
||||
@@ -123,6 +117,12 @@ class ReactNativeFeatureFlagsJavaProvider
|
||||
return method(javaProvider_);
|
||||
}
|
||||
|
||||
bool enableEagerMainQueueModulesOnIOS() override {
|
||||
static const auto method =
|
||||
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableEagerMainQueueModulesOnIOS");
|
||||
return method(javaProvider_);
|
||||
}
|
||||
|
||||
bool enableEagerRootViewAttachment() override {
|
||||
static const auto method =
|
||||
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableEagerRootViewAttachment");
|
||||
@@ -189,12 +189,6 @@ class ReactNativeFeatureFlagsJavaProvider
|
||||
return method(javaProvider_);
|
||||
}
|
||||
|
||||
bool enableMainQueueModulesOnIOS() override {
|
||||
static const auto method =
|
||||
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableMainQueueModulesOnIOS");
|
||||
return method(javaProvider_);
|
||||
}
|
||||
|
||||
bool enableModuleArgumentNSNullConversionIOS() override {
|
||||
static const auto method =
|
||||
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableModuleArgumentNSNullConversionIOS");
|
||||
@@ -315,6 +309,12 @@ class ReactNativeFeatureFlagsJavaProvider
|
||||
return method(javaProvider_);
|
||||
}
|
||||
|
||||
bool releaseImageDataWhenConsumed() override {
|
||||
static const auto method =
|
||||
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("releaseImageDataWhenConsumed");
|
||||
return method(javaProvider_);
|
||||
}
|
||||
|
||||
bool traceTurboModulePromiseRejectionsOnAndroid() override {
|
||||
static const auto method =
|
||||
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("traceTurboModulePromiseRejectionsOnAndroid");
|
||||
@@ -400,11 +400,6 @@ bool JReactNativeFeatureFlagsCxxInterop::cxxNativeAnimatedRemoveJsSync(
|
||||
return ReactNativeFeatureFlags::cxxNativeAnimatedRemoveJsSync();
|
||||
}
|
||||
|
||||
bool JReactNativeFeatureFlagsCxxInterop::disableMainQueueSyncDispatchIOS(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
||||
return ReactNativeFeatureFlags::disableMainQueueSyncDispatchIOS();
|
||||
}
|
||||
|
||||
bool JReactNativeFeatureFlagsCxxInterop::disableMountItemReorderingAndroid(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
||||
return ReactNativeFeatureFlags::disableMountItemReorderingAndroid();
|
||||
@@ -455,6 +450,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableDoubleMeasurementFixAndroid(
|
||||
return ReactNativeFeatureFlags::enableDoubleMeasurementFixAndroid();
|
||||
}
|
||||
|
||||
bool JReactNativeFeatureFlagsCxxInterop::enableEagerMainQueueModulesOnIOS(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
||||
return ReactNativeFeatureFlags::enableEagerMainQueueModulesOnIOS();
|
||||
}
|
||||
|
||||
bool JReactNativeFeatureFlagsCxxInterop::enableEagerRootViewAttachment(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
||||
return ReactNativeFeatureFlags::enableEagerRootViewAttachment();
|
||||
@@ -510,11 +510,6 @@ bool JReactNativeFeatureFlagsCxxInterop::enableMainQueueCoordinatorOnIOS(
|
||||
return ReactNativeFeatureFlags::enableMainQueueCoordinatorOnIOS();
|
||||
}
|
||||
|
||||
bool JReactNativeFeatureFlagsCxxInterop::enableMainQueueModulesOnIOS(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
||||
return ReactNativeFeatureFlags::enableMainQueueModulesOnIOS();
|
||||
}
|
||||
|
||||
bool JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
||||
return ReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS();
|
||||
@@ -615,6 +610,11 @@ double JReactNativeFeatureFlagsCxxInterop::preparedTextCacheSize(
|
||||
return ReactNativeFeatureFlags::preparedTextCacheSize();
|
||||
}
|
||||
|
||||
bool JReactNativeFeatureFlagsCxxInterop::releaseImageDataWhenConsumed(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
||||
return ReactNativeFeatureFlags::releaseImageDataWhenConsumed();
|
||||
}
|
||||
|
||||
bool JReactNativeFeatureFlagsCxxInterop::traceTurboModulePromiseRejectionsOnAndroid(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
||||
return ReactNativeFeatureFlags::traceTurboModulePromiseRejectionsOnAndroid();
|
||||
@@ -710,9 +710,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
||||
makeNativeMethod(
|
||||
"cxxNativeAnimatedRemoveJsSync",
|
||||
JReactNativeFeatureFlagsCxxInterop::cxxNativeAnimatedRemoveJsSync),
|
||||
makeNativeMethod(
|
||||
"disableMainQueueSyncDispatchIOS",
|
||||
JReactNativeFeatureFlagsCxxInterop::disableMainQueueSyncDispatchIOS),
|
||||
makeNativeMethod(
|
||||
"disableMountItemReorderingAndroid",
|
||||
JReactNativeFeatureFlagsCxxInterop::disableMountItemReorderingAndroid),
|
||||
@@ -743,6 +740,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
||||
makeNativeMethod(
|
||||
"enableDoubleMeasurementFixAndroid",
|
||||
JReactNativeFeatureFlagsCxxInterop::enableDoubleMeasurementFixAndroid),
|
||||
makeNativeMethod(
|
||||
"enableEagerMainQueueModulesOnIOS",
|
||||
JReactNativeFeatureFlagsCxxInterop::enableEagerMainQueueModulesOnIOS),
|
||||
makeNativeMethod(
|
||||
"enableEagerRootViewAttachment",
|
||||
JReactNativeFeatureFlagsCxxInterop::enableEagerRootViewAttachment),
|
||||
@@ -776,9 +776,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
||||
makeNativeMethod(
|
||||
"enableMainQueueCoordinatorOnIOS",
|
||||
JReactNativeFeatureFlagsCxxInterop::enableMainQueueCoordinatorOnIOS),
|
||||
makeNativeMethod(
|
||||
"enableMainQueueModulesOnIOS",
|
||||
JReactNativeFeatureFlagsCxxInterop::enableMainQueueModulesOnIOS),
|
||||
makeNativeMethod(
|
||||
"enableModuleArgumentNSNullConversionIOS",
|
||||
JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS),
|
||||
@@ -839,6 +836,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
||||
makeNativeMethod(
|
||||
"preparedTextCacheSize",
|
||||
JReactNativeFeatureFlagsCxxInterop::preparedTextCacheSize),
|
||||
makeNativeMethod(
|
||||
"releaseImageDataWhenConsumed",
|
||||
JReactNativeFeatureFlagsCxxInterop::releaseImageDataWhenConsumed),
|
||||
makeNativeMethod(
|
||||
"traceTurboModulePromiseRejectionsOnAndroid",
|
||||
JReactNativeFeatureFlagsCxxInterop::traceTurboModulePromiseRejectionsOnAndroid),
|
||||
|
||||
+7
-7
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<a8d656adc624995ca1e6720829889cb8>>
|
||||
* @generated SignedSource<<509e0e4d8b2568e2b682797cfb83c79a>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -39,9 +39,6 @@ class JReactNativeFeatureFlagsCxxInterop
|
||||
static bool cxxNativeAnimatedRemoveJsSync(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
static bool disableMainQueueSyncDispatchIOS(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
static bool disableMountItemReorderingAndroid(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
@@ -72,6 +69,9 @@ class JReactNativeFeatureFlagsCxxInterop
|
||||
static bool enableDoubleMeasurementFixAndroid(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
static bool enableEagerMainQueueModulesOnIOS(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
static bool enableEagerRootViewAttachment(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
@@ -105,9 +105,6 @@ class JReactNativeFeatureFlagsCxxInterop
|
||||
static bool enableMainQueueCoordinatorOnIOS(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
static bool enableMainQueueModulesOnIOS(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
static bool enableModuleArgumentNSNullConversionIOS(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
@@ -168,6 +165,9 @@ class JReactNativeFeatureFlagsCxxInterop
|
||||
static double preparedTextCacheSize(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
static bool releaseImageDataWhenConsumed(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
static bool traceTurboModulePromiseRejectionsOnAndroid(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ add_library(
|
||||
OBJECT
|
||||
CatalystInstanceImpl.cpp
|
||||
InspectorNetworkRequestListener.cpp
|
||||
InspectorNetworkReporter.cpp
|
||||
JExecutor.cpp
|
||||
JInspector.cpp
|
||||
JMessageQueueThread.cpp
|
||||
@@ -80,8 +81,10 @@ target_link_libraries(reactnativejni
|
||||
fbjni
|
||||
folly_runtime
|
||||
glog_init
|
||||
jsinspector_network
|
||||
logger
|
||||
react_cxxreact
|
||||
react_featureflags
|
||||
react_renderer_runtimescheduler
|
||||
reactnativejni_common
|
||||
runtimeexecutor
|
||||
|
||||
+118
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* 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 "InspectorNetworkReporter.h"
|
||||
|
||||
#include <jsinspector-modern/network/NetworkReporter.h>
|
||||
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
|
||||
using namespace facebook::jni;
|
||||
using namespace facebook::react::jsinspector_modern;
|
||||
|
||||
namespace facebook::react {
|
||||
|
||||
namespace {
|
||||
|
||||
Headers convertJavaMapToHeaders(
|
||||
jni::alias_ref<jni::JMap<jstring, jstring>> headers) {
|
||||
Headers responseHeaders;
|
||||
|
||||
for (auto it : *headers) {
|
||||
auto key = it.first->toStdString();
|
||||
auto value = it.second->toStdString();
|
||||
responseHeaders[key] = value;
|
||||
}
|
||||
|
||||
return responseHeaders;
|
||||
}
|
||||
|
||||
std::string limitRequestBodySize(std::string requestBody) {
|
||||
const size_t maxBodySize = 1024 * 1024; // 1MB
|
||||
auto bodyLength = requestBody.size();
|
||||
auto bytesToRead = std::min(bodyLength, maxBodySize);
|
||||
|
||||
requestBody.resize(bytesToRead);
|
||||
|
||||
if (bytesToRead < bodyLength) {
|
||||
requestBody += "\n... [truncated, showing " + std::to_string(bytesToRead) +
|
||||
" of " + std::to_string(bodyLength) + " bytes]";
|
||||
}
|
||||
|
||||
return requestBody;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
/* static */ void InspectorNetworkReporter::reportRequestStart(
|
||||
const jni::alias_ref<jclass> /*unused*/,
|
||||
jint requestId,
|
||||
jni::alias_ref<jstring> requestUrl,
|
||||
jni::alias_ref<jstring> requestMethod,
|
||||
jni::alias_ref<jni::JMap<jstring, jstring>> requestHeaders,
|
||||
jni::alias_ref<jstring> requestBody,
|
||||
jlong encodedDataLength) {
|
||||
RequestInfo requestInfo;
|
||||
requestInfo.url = requestUrl->toStdString();
|
||||
requestInfo.httpMethod = requestMethod->toStdString();
|
||||
requestInfo.headers = convertJavaMapToHeaders(requestHeaders);
|
||||
requestInfo.httpBody = limitRequestBodySize(requestBody->toStdString());
|
||||
|
||||
NetworkReporter::getInstance().reportRequestStart(
|
||||
std::to_string(requestId), requestInfo, encodedDataLength, std::nullopt);
|
||||
}
|
||||
|
||||
/* static */ void InspectorNetworkReporter::reportConnectionTiming(
|
||||
jni::alias_ref<jclass> /*unused*/,
|
||||
jint requestId,
|
||||
jni::alias_ref<jni::JMap<jstring, jstring>> headers) {
|
||||
NetworkReporter::getInstance().reportConnectionTiming(
|
||||
std::to_string(requestId), convertJavaMapToHeaders(headers));
|
||||
}
|
||||
|
||||
/* static */ void InspectorNetworkReporter::reportResponseStart(
|
||||
jni::alias_ref<jclass> /*unused*/,
|
||||
jint requestId,
|
||||
jni::alias_ref<jstring> requestUrl,
|
||||
jint responseStatus,
|
||||
jni::alias_ref<jni::JMap<jstring, jstring>> responseHeaders,
|
||||
jlong encodedDataLength) {
|
||||
ResponseInfo responseInfo;
|
||||
responseInfo.url = requestUrl->toStdString();
|
||||
responseInfo.statusCode = responseStatus;
|
||||
responseInfo.headers = convertJavaMapToHeaders(responseHeaders);
|
||||
|
||||
NetworkReporter::getInstance().reportResponseStart(
|
||||
std::to_string(requestId),
|
||||
responseInfo,
|
||||
static_cast<std::int64_t>(encodedDataLength));
|
||||
}
|
||||
|
||||
/* static */ void InspectorNetworkReporter::reportResponseEnd(
|
||||
jni::alias_ref<jclass> /*unused*/,
|
||||
jint requestId,
|
||||
jlong encodedDataLength) {
|
||||
NetworkReporter::getInstance().reportResponseEnd(
|
||||
std::to_string(requestId), static_cast<std::int64_t>(encodedDataLength));
|
||||
}
|
||||
|
||||
/* static */ void InspectorNetworkReporter::registerNatives() {
|
||||
javaClassLocal()->registerNatives({
|
||||
makeNativeMethod(
|
||||
"reportRequestStart", InspectorNetworkReporter::reportRequestStart),
|
||||
makeNativeMethod(
|
||||
"reportResponseStart", InspectorNetworkReporter::reportResponseStart),
|
||||
makeNativeMethod(
|
||||
"reportResponseEnd", InspectorNetworkReporter::reportResponseEnd),
|
||||
makeNativeMethod(
|
||||
"reportConnectionTiming",
|
||||
InspectorNetworkReporter::reportConnectionTiming),
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace facebook::react
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* 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 <fbjni/fbjni.h>
|
||||
|
||||
namespace facebook::react {
|
||||
|
||||
class InspectorNetworkReporter
|
||||
: public jni::HybridClass<InspectorNetworkReporter> {
|
||||
public:
|
||||
static constexpr auto kJavaDescriptor =
|
||||
"Lcom/facebook/react/modules/network/InspectorNetworkReporter;";
|
||||
|
||||
static void reportRequestStart(
|
||||
jni::alias_ref<jclass> /*unused*/,
|
||||
jint requestId,
|
||||
jni::alias_ref<jstring> requestUrl,
|
||||
jni::alias_ref<jstring> requestMethod,
|
||||
jni::alias_ref<jni::JMap<jstring, jstring>> requestHeaders,
|
||||
jni::alias_ref<jstring> requestBody,
|
||||
jlong encodedDataLength);
|
||||
|
||||
static void reportConnectionTiming(
|
||||
jni::alias_ref<jclass> /*unused*/,
|
||||
jint requestId,
|
||||
jni::alias_ref<jni::JMap<jstring, jstring>> headers);
|
||||
|
||||
static void reportResponseStart(
|
||||
jni::alias_ref<jclass> /*unused*/,
|
||||
jint requestId,
|
||||
jni::alias_ref<jstring> requestUrl,
|
||||
jint responseStatus,
|
||||
jni::alias_ref<jni::JMap<jstring, jstring>> responseHeaders,
|
||||
jlong encodedDataLength);
|
||||
|
||||
static void reportResponseEnd(
|
||||
jni::alias_ref<jclass> /*unused*/,
|
||||
jint requestId,
|
||||
jlong encodedDataLength);
|
||||
|
||||
static void registerNatives();
|
||||
|
||||
private:
|
||||
InspectorNetworkReporter() = delete;
|
||||
};
|
||||
|
||||
} // namespace facebook::react
|
||||
@@ -5,8 +5,6 @@
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <glog/logging.h>
|
||||
|
||||
#include <fb/glog_init.h>
|
||||
@@ -14,6 +12,7 @@
|
||||
|
||||
#include "CatalystInstanceImpl.h"
|
||||
#include "CxxModuleWrapperBase.h"
|
||||
#include "InspectorNetworkReporter.h"
|
||||
#include "InspectorNetworkRequestListener.h"
|
||||
#include "JInspector.h"
|
||||
#include "JavaScriptExecutorHolder.h"
|
||||
@@ -46,6 +45,7 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
|
||||
JInspector::registerNatives();
|
||||
ReactInstanceManagerInspectorTarget::registerNatives();
|
||||
InspectorNetworkRequestListener::registerNatives();
|
||||
InspectorNetworkReporter::registerNatives();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+62
-21
@@ -11,9 +11,17 @@ import com.facebook.react.bridge.Arguments
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridge.WritableArray
|
||||
import com.facebook.react.bridge.WritableMap
|
||||
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
|
||||
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsDefaults
|
||||
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests
|
||||
import com.facebook.testutils.shadows.ShadowArguments
|
||||
import java.net.SocketTimeoutException
|
||||
import okhttp3.Headers
|
||||
import okhttp3.Protocol
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
@@ -27,12 +35,23 @@ import org.robolectric.annotation.Config
|
||||
|
||||
@Config(shadows = [ShadowArguments::class])
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
class ResponseUtilTest {
|
||||
class NetworkEventUtilTest {
|
||||
private lateinit var reactContext: ReactApplicationContext
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
reactContext = mock()
|
||||
|
||||
ReactNativeFeatureFlagsForTests.setUp()
|
||||
ReactNativeFeatureFlags.override(
|
||||
object : ReactNativeFeatureFlagsDefaults() {
|
||||
override fun enableNetworkEventReporting(): Boolean = false
|
||||
})
|
||||
}
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
ReactNativeFeatureFlags.dangerouslyReset()
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -41,7 +60,7 @@ class ResponseUtilTest {
|
||||
val progress = 100L
|
||||
val total = 1000L
|
||||
|
||||
ResponseUtil.onDataSend(reactContext, requestId, progress, total)
|
||||
NetworkEventUtil.onDataSend(reactContext, requestId, progress, total)
|
||||
|
||||
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
|
||||
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
|
||||
@@ -64,7 +83,7 @@ class ResponseUtilTest {
|
||||
val progress = 100L
|
||||
val total = 1000L
|
||||
|
||||
ResponseUtil.onIncrementalDataReceived(reactContext, requestId, data, progress, total)
|
||||
NetworkEventUtil.onIncrementalDataReceived(reactContext, requestId, data, progress, total)
|
||||
|
||||
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
|
||||
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
|
||||
@@ -87,7 +106,7 @@ class ResponseUtilTest {
|
||||
val progress = 500L
|
||||
val total = 1000L
|
||||
|
||||
ResponseUtil.onDataReceivedProgress(reactContext, requestId, progress, total)
|
||||
NetworkEventUtil.onDataReceivedProgress(reactContext, requestId, progress, total)
|
||||
|
||||
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
|
||||
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
|
||||
@@ -108,7 +127,7 @@ class ResponseUtilTest {
|
||||
val requestId = 1
|
||||
val data = "response data"
|
||||
|
||||
ResponseUtil.onDataReceived(reactContext, requestId, data)
|
||||
NetworkEventUtil.onDataReceived(reactContext, requestId, data)
|
||||
|
||||
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
|
||||
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
|
||||
@@ -128,7 +147,7 @@ class ResponseUtilTest {
|
||||
val requestId = 1
|
||||
val data: WritableMap = Arguments.createMap().apply { putString("key", "value") }
|
||||
|
||||
ResponseUtil.onDataReceived(reactContext, requestId, data)
|
||||
NetworkEventUtil.onDataReceived(reactContext, requestId, data)
|
||||
|
||||
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
|
||||
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
|
||||
@@ -149,7 +168,7 @@ class ResponseUtilTest {
|
||||
val error = "An error occurred"
|
||||
val e: Throwable? = null
|
||||
|
||||
ResponseUtil.onRequestError(reactContext, requestId, error, e)
|
||||
NetworkEventUtil.onRequestError(reactContext, requestId, error, e)
|
||||
|
||||
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
|
||||
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
|
||||
@@ -170,7 +189,7 @@ class ResponseUtilTest {
|
||||
val error = "Timeout error"
|
||||
val e: Throwable = SocketTimeoutException()
|
||||
|
||||
ResponseUtil.onRequestError(reactContext, requestId, error, e)
|
||||
NetworkEventUtil.onRequestError(reactContext, requestId, error, e)
|
||||
|
||||
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
|
||||
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
|
||||
@@ -190,7 +209,7 @@ class ResponseUtilTest {
|
||||
fun testOnRequestSuccess() {
|
||||
val requestId = 1
|
||||
|
||||
ResponseUtil.onRequestSuccess(reactContext, requestId)
|
||||
NetworkEventUtil.onRequestSuccess(reactContext, requestId, 128)
|
||||
|
||||
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
|
||||
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
|
||||
@@ -209,11 +228,19 @@ class ResponseUtilTest {
|
||||
fun testOnResponseReceived() {
|
||||
val requestId = 1
|
||||
val statusCode = 200
|
||||
val headers: WritableMap =
|
||||
Arguments.createMap().apply { putString("Content-Type", "application/json") }
|
||||
val headers = Headers.Builder().add("Content-Type", "application/json").build()
|
||||
val url = "http://example.com"
|
||||
|
||||
ResponseUtil.onResponseReceived(reactContext, requestId, statusCode, headers, url)
|
||||
val request = Request.Builder().url(url).build()
|
||||
val response =
|
||||
Response.Builder()
|
||||
.protocol(Protocol.HTTP_1_1)
|
||||
.request(request)
|
||||
.headers(headers)
|
||||
.code(statusCode)
|
||||
.message("OK")
|
||||
.build()
|
||||
NetworkEventUtil.onResponseReceived(reactContext, requestId, url, response)
|
||||
|
||||
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
|
||||
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
|
||||
@@ -222,24 +249,38 @@ class ResponseUtilTest {
|
||||
|
||||
assertThat(eventNameCaptor.value).isEqualTo("didReceiveNetworkResponse")
|
||||
|
||||
val expectedHeadersMap: WritableMap =
|
||||
Arguments.createMap().apply { putString("Content-Type", "application/json") }
|
||||
|
||||
val args = eventArgumentsCaptor.value
|
||||
assertThat(args.size()).isEqualTo(4)
|
||||
assertThat(args.getInt(0)).isEqualTo(requestId)
|
||||
assertThat(args.getInt(1)).isEqualTo(statusCode)
|
||||
assertThat(args.getMap(2)).isEqualTo(headers)
|
||||
assertThat(args.getMap(2)).isEqualTo(expectedHeadersMap)
|
||||
assertThat(args.getString(3)).isEqualTo(url)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testNullReactContext() {
|
||||
ResponseUtil.onDataSend(null, 1, 100, 1000)
|
||||
ResponseUtil.onIncrementalDataReceived(null, 1, "data", 100, 1000)
|
||||
ResponseUtil.onDataReceivedProgress(null, 1, 100, 1000)
|
||||
ResponseUtil.onDataReceived(null, 1, "data")
|
||||
ResponseUtil.onDataReceived(null, 1, Arguments.createMap())
|
||||
ResponseUtil.onRequestError(null, 1, "error", null)
|
||||
ResponseUtil.onRequestSuccess(null, 1)
|
||||
ResponseUtil.onResponseReceived(null, 1, 200, Arguments.createMap(), "http://example.com")
|
||||
val url = "http://example.com"
|
||||
val request = Request.Builder().url(url).build()
|
||||
val response =
|
||||
Response.Builder()
|
||||
.protocol(Protocol.HTTP_1_1)
|
||||
.request(request)
|
||||
.headers(Headers.Builder().build())
|
||||
.code(200)
|
||||
.message("OK")
|
||||
.build()
|
||||
|
||||
NetworkEventUtil.onDataSend(null, 1, 100, 1000)
|
||||
NetworkEventUtil.onIncrementalDataReceived(null, 1, "data", 100, 1000)
|
||||
NetworkEventUtil.onDataReceivedProgress(null, 1, 100, 1000)
|
||||
NetworkEventUtil.onDataReceived(null, 1, "data")
|
||||
NetworkEventUtil.onDataReceived(null, 1, Arguments.createMap())
|
||||
NetworkEventUtil.onRequestError(null, 1, "error", null)
|
||||
NetworkEventUtil.onRequestSuccess(null, 1, 0)
|
||||
NetworkEventUtil.onResponseReceived(null, 1, url, response)
|
||||
|
||||
verify(reactContext, never()).emitDeviceEvent(any<String>(), any())
|
||||
}
|
||||
+9
@@ -15,6 +15,9 @@ import com.facebook.react.bridge.JavaOnlyMap
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridge.WritableArray
|
||||
import com.facebook.react.common.network.OkHttpCallUtil
|
||||
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
|
||||
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsDefaults
|
||||
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests
|
||||
import com.facebook.testutils.shadows.ShadowArguments
|
||||
import java.io.InputStream
|
||||
import java.nio.charset.StandardCharsets
|
||||
@@ -72,6 +75,12 @@ class NetworkingModuleTest {
|
||||
context = mock()
|
||||
whenever(context.hasActiveReactInstance()).thenReturn(true)
|
||||
|
||||
ReactNativeFeatureFlagsForTests.setUp()
|
||||
ReactNativeFeatureFlags.override(
|
||||
object : ReactNativeFeatureFlagsDefaults() {
|
||||
override fun enableNetworkEventReporting(): Boolean = false
|
||||
})
|
||||
|
||||
networkingModule = NetworkingModule(context, "", httpClient, null)
|
||||
|
||||
okHttpCallUtil = mockStatic(OkHttpCallUtil::class.java)
|
||||
|
||||
@@ -58,7 +58,7 @@ namespace {
|
||||
|
||||
// basename_r isn't in all iOS SDKs, so use this simple version instead.
|
||||
std::string simpleBasename(const std::string& path) {
|
||||
size_t pos = path.rfind("/");
|
||||
size_t pos = path.rfind('/');
|
||||
return (pos != std::string::npos) ? path.substr(pos) : path;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ target_link_libraries(jsinspector
|
||||
jsinspector_tracing
|
||||
react_featureflags
|
||||
runtimeexecutor
|
||||
reactperflogger
|
||||
)
|
||||
target_compile_reactnative_options(jsinspector PRIVATE)
|
||||
target_compile_options(jsinspector PRIVATE
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <jsinspector-modern/RuntimeTarget.h>
|
||||
#include <jsinspector-modern/tracing/PerformanceTracer.h>
|
||||
|
||||
#include <reactperflogger/ReactPerfettoLogger.h>
|
||||
#include <concepts>
|
||||
#include <deque>
|
||||
#include <string>
|
||||
@@ -19,6 +20,20 @@ namespace facebook::react::jsinspector_modern {
|
||||
|
||||
namespace {
|
||||
|
||||
inline std::optional<HighResTimeStamp> getTimeStampForPerfetto(
|
||||
const std::optional<tracing::ConsoleTimeStampEntry>& consoleTimeStampEntry,
|
||||
const HighResTimeStamp now) {
|
||||
if (consoleTimeStampEntry) {
|
||||
if (std::holds_alternative<HighResTimeStamp>(*consoleTimeStampEntry)) {
|
||||
return std::get<HighResTimeStamp>(*consoleTimeStampEntry);
|
||||
} else {
|
||||
return std::nullopt;
|
||||
}
|
||||
} else {
|
||||
return now;
|
||||
}
|
||||
}
|
||||
|
||||
struct ConsoleState {
|
||||
/**
|
||||
* https://console.spec.whatwg.org/#counting
|
||||
@@ -376,7 +391,8 @@ void consoleTimeStamp(
|
||||
const jsi::Value* arguments,
|
||||
size_t argumentsCount) {
|
||||
auto& performanceTracer = tracing::PerformanceTracer::getInstance();
|
||||
if (!performanceTracer.isTracing() || argumentsCount == 0) {
|
||||
if ((!performanceTracer.isTracing() && !ReactPerfettoLogger::isTracing()) ||
|
||||
argumentsCount == 0) {
|
||||
// If not tracing, just early return to avoid the cost of parsing.
|
||||
return;
|
||||
}
|
||||
@@ -444,8 +460,22 @@ void consoleTimeStamp(
|
||||
}
|
||||
}
|
||||
|
||||
performanceTracer.reportTimeStamp(
|
||||
label, start, end, trackName, trackGroup, color);
|
||||
if (performanceTracer.isTracing()) {
|
||||
performanceTracer.reportTimeStamp(
|
||||
label, start, end, trackName, trackGroup, color);
|
||||
}
|
||||
|
||||
if (ReactPerfettoLogger::isTracing()) {
|
||||
std::optional<HighResTimeStamp> perfettoStart =
|
||||
getTimeStampForPerfetto(start, now);
|
||||
std::optional<HighResTimeStamp> perfettoEnd =
|
||||
getTimeStampForPerfetto(end, now);
|
||||
|
||||
if (perfettoStart && perfettoEnd) {
|
||||
ReactPerfettoLogger::measure(
|
||||
label, *perfettoStart, *perfettoEnd, trackName, trackGroup);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<1f167a2a71f07b355dc8578cb114cc6f>>
|
||||
* @generated SignedSource<<6288be2bb9b5d8fcb318ae01ab3854c3>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -38,10 +38,6 @@ bool ReactNativeFeatureFlags::cxxNativeAnimatedRemoveJsSync() {
|
||||
return getAccessor().cxxNativeAnimatedRemoveJsSync();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlags::disableMainQueueSyncDispatchIOS() {
|
||||
return getAccessor().disableMainQueueSyncDispatchIOS();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlags::disableMountItemReorderingAndroid() {
|
||||
return getAccessor().disableMountItemReorderingAndroid();
|
||||
}
|
||||
@@ -82,6 +78,10 @@ bool ReactNativeFeatureFlags::enableDoubleMeasurementFixAndroid() {
|
||||
return getAccessor().enableDoubleMeasurementFixAndroid();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlags::enableEagerMainQueueModulesOnIOS() {
|
||||
return getAccessor().enableEagerMainQueueModulesOnIOS();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlags::enableEagerRootViewAttachment() {
|
||||
return getAccessor().enableEagerRootViewAttachment();
|
||||
}
|
||||
@@ -126,10 +126,6 @@ bool ReactNativeFeatureFlags::enableMainQueueCoordinatorOnIOS() {
|
||||
return getAccessor().enableMainQueueCoordinatorOnIOS();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlags::enableMainQueueModulesOnIOS() {
|
||||
return getAccessor().enableMainQueueModulesOnIOS();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS() {
|
||||
return getAccessor().enableModuleArgumentNSNullConversionIOS();
|
||||
}
|
||||
@@ -210,6 +206,10 @@ double ReactNativeFeatureFlags::preparedTextCacheSize() {
|
||||
return getAccessor().preparedTextCacheSize();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlags::releaseImageDataWhenConsumed() {
|
||||
return getAccessor().releaseImageDataWhenConsumed();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlags::traceTurboModulePromiseRejectionsOnAndroid() {
|
||||
return getAccessor().traceTurboModulePromiseRejectionsOnAndroid();
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<eb769df330eff243aa913b79807396e7>>
|
||||
* @generated SignedSource<<133c1ad1e5f96679faeeba9e500dba33>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -54,11 +54,6 @@ class ReactNativeFeatureFlags {
|
||||
*/
|
||||
RN_EXPORT static bool cxxNativeAnimatedRemoveJsSync();
|
||||
|
||||
/**
|
||||
* Disable sync dispatch on the main queue on iOS
|
||||
*/
|
||||
RN_EXPORT static bool disableMainQueueSyncDispatchIOS();
|
||||
|
||||
/**
|
||||
* Prevent FabricMountingManager from reordering mountItems, which may lead to invalid state on the UI thread
|
||||
*/
|
||||
@@ -109,6 +104,11 @@ class ReactNativeFeatureFlags {
|
||||
*/
|
||||
RN_EXPORT static bool enableDoubleMeasurementFixAndroid();
|
||||
|
||||
/**
|
||||
* This infra allows native modules to initialize on the main thread, during React Native init.
|
||||
*/
|
||||
RN_EXPORT static bool enableEagerMainQueueModulesOnIOS();
|
||||
|
||||
/**
|
||||
* Feature flag to configure eager attachment of the root view/initialisation of the JS code.
|
||||
*/
|
||||
@@ -164,11 +164,6 @@ class ReactNativeFeatureFlags {
|
||||
*/
|
||||
RN_EXPORT static bool enableMainQueueCoordinatorOnIOS();
|
||||
|
||||
/**
|
||||
* Makes modules requiring main queue setup initialize on the main thread, during React Native init.
|
||||
*/
|
||||
RN_EXPORT static bool enableMainQueueModulesOnIOS();
|
||||
|
||||
/**
|
||||
* Enable NSNull conversion when handling module arguments on iOS
|
||||
*/
|
||||
@@ -269,6 +264,11 @@ class ReactNativeFeatureFlags {
|
||||
*/
|
||||
RN_EXPORT static double preparedTextCacheSize();
|
||||
|
||||
/**
|
||||
* Releases the cached image data when it is consumed by the observers.
|
||||
*/
|
||||
RN_EXPORT static bool releaseImageDataWhenConsumed();
|
||||
|
||||
/**
|
||||
* Enables storing js caller stack when creating promise in native module. This is useful in case of Promise rejection and tracing the cause.
|
||||
*/
|
||||
|
||||
+67
-67
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<cc56ff1d73ed66d0608c1bd5b6150810>>
|
||||
* @generated SignedSource<<60ce562d131604b030784224b0da710d>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -83,24 +83,6 @@ bool ReactNativeFeatureFlagsAccessor::cxxNativeAnimatedRemoveJsSync() {
|
||||
return flagValue.value();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlagsAccessor::disableMainQueueSyncDispatchIOS() {
|
||||
auto flagValue = disableMainQueueSyncDispatchIOS_.load();
|
||||
|
||||
if (!flagValue.has_value()) {
|
||||
// This block is not exclusive but it is not necessary.
|
||||
// If multiple threads try to initialize the feature flag, we would only
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(3, "disableMainQueueSyncDispatchIOS");
|
||||
|
||||
flagValue = currentProvider_->disableMainQueueSyncDispatchIOS();
|
||||
disableMainQueueSyncDispatchIOS_ = flagValue;
|
||||
}
|
||||
|
||||
return flagValue.value();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlagsAccessor::disableMountItemReorderingAndroid() {
|
||||
auto flagValue = disableMountItemReorderingAndroid_.load();
|
||||
|
||||
@@ -110,7 +92,7 @@ bool ReactNativeFeatureFlagsAccessor::disableMountItemReorderingAndroid() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(4, "disableMountItemReorderingAndroid");
|
||||
markFlagAsAccessed(3, "disableMountItemReorderingAndroid");
|
||||
|
||||
flagValue = currentProvider_->disableMountItemReorderingAndroid();
|
||||
disableMountItemReorderingAndroid_ = flagValue;
|
||||
@@ -128,7 +110,7 @@ bool ReactNativeFeatureFlagsAccessor::disableTextLayoutManagerCacheAndroid() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(5, "disableTextLayoutManagerCacheAndroid");
|
||||
markFlagAsAccessed(4, "disableTextLayoutManagerCacheAndroid");
|
||||
|
||||
flagValue = currentProvider_->disableTextLayoutManagerCacheAndroid();
|
||||
disableTextLayoutManagerCacheAndroid_ = flagValue;
|
||||
@@ -146,7 +128,7 @@ bool ReactNativeFeatureFlagsAccessor::enableAccessibilityOrder() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(6, "enableAccessibilityOrder");
|
||||
markFlagAsAccessed(5, "enableAccessibilityOrder");
|
||||
|
||||
flagValue = currentProvider_->enableAccessibilityOrder();
|
||||
enableAccessibilityOrder_ = flagValue;
|
||||
@@ -164,7 +146,7 @@ bool ReactNativeFeatureFlagsAccessor::enableAccumulatedUpdatesInRawPropsAndroid(
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(7, "enableAccumulatedUpdatesInRawPropsAndroid");
|
||||
markFlagAsAccessed(6, "enableAccumulatedUpdatesInRawPropsAndroid");
|
||||
|
||||
flagValue = currentProvider_->enableAccumulatedUpdatesInRawPropsAndroid();
|
||||
enableAccumulatedUpdatesInRawPropsAndroid_ = flagValue;
|
||||
@@ -182,7 +164,7 @@ bool ReactNativeFeatureFlagsAccessor::enableAndroidTextMeasurementOptimizations(
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(8, "enableAndroidTextMeasurementOptimizations");
|
||||
markFlagAsAccessed(7, "enableAndroidTextMeasurementOptimizations");
|
||||
|
||||
flagValue = currentProvider_->enableAndroidTextMeasurementOptimizations();
|
||||
enableAndroidTextMeasurementOptimizations_ = flagValue;
|
||||
@@ -200,7 +182,7 @@ bool ReactNativeFeatureFlagsAccessor::enableBridgelessArchitecture() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(9, "enableBridgelessArchitecture");
|
||||
markFlagAsAccessed(8, "enableBridgelessArchitecture");
|
||||
|
||||
flagValue = currentProvider_->enableBridgelessArchitecture();
|
||||
enableBridgelessArchitecture_ = flagValue;
|
||||
@@ -218,7 +200,7 @@ bool ReactNativeFeatureFlagsAccessor::enableCppPropsIteratorSetter() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(10, "enableCppPropsIteratorSetter");
|
||||
markFlagAsAccessed(9, "enableCppPropsIteratorSetter");
|
||||
|
||||
flagValue = currentProvider_->enableCppPropsIteratorSetter();
|
||||
enableCppPropsIteratorSetter_ = flagValue;
|
||||
@@ -236,7 +218,7 @@ bool ReactNativeFeatureFlagsAccessor::enableCustomFocusSearchOnClippedElementsAn
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(11, "enableCustomFocusSearchOnClippedElementsAndroid");
|
||||
markFlagAsAccessed(10, "enableCustomFocusSearchOnClippedElementsAndroid");
|
||||
|
||||
flagValue = currentProvider_->enableCustomFocusSearchOnClippedElementsAndroid();
|
||||
enableCustomFocusSearchOnClippedElementsAndroid_ = flagValue;
|
||||
@@ -254,7 +236,7 @@ bool ReactNativeFeatureFlagsAccessor::enableDestroyShadowTreeRevisionAsync() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(12, "enableDestroyShadowTreeRevisionAsync");
|
||||
markFlagAsAccessed(11, "enableDestroyShadowTreeRevisionAsync");
|
||||
|
||||
flagValue = currentProvider_->enableDestroyShadowTreeRevisionAsync();
|
||||
enableDestroyShadowTreeRevisionAsync_ = flagValue;
|
||||
@@ -272,7 +254,7 @@ bool ReactNativeFeatureFlagsAccessor::enableDoubleMeasurementFixAndroid() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(13, "enableDoubleMeasurementFixAndroid");
|
||||
markFlagAsAccessed(12, "enableDoubleMeasurementFixAndroid");
|
||||
|
||||
flagValue = currentProvider_->enableDoubleMeasurementFixAndroid();
|
||||
enableDoubleMeasurementFixAndroid_ = flagValue;
|
||||
@@ -281,6 +263,24 @@ bool ReactNativeFeatureFlagsAccessor::enableDoubleMeasurementFixAndroid() {
|
||||
return flagValue.value();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlagsAccessor::enableEagerMainQueueModulesOnIOS() {
|
||||
auto flagValue = enableEagerMainQueueModulesOnIOS_.load();
|
||||
|
||||
if (!flagValue.has_value()) {
|
||||
// This block is not exclusive but it is not necessary.
|
||||
// If multiple threads try to initialize the feature flag, we would only
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(13, "enableEagerMainQueueModulesOnIOS");
|
||||
|
||||
flagValue = currentProvider_->enableEagerMainQueueModulesOnIOS();
|
||||
enableEagerMainQueueModulesOnIOS_ = flagValue;
|
||||
}
|
||||
|
||||
return flagValue.value();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlagsAccessor::enableEagerRootViewAttachment() {
|
||||
auto flagValue = enableEagerRootViewAttachment_.load();
|
||||
|
||||
@@ -479,24 +479,6 @@ bool ReactNativeFeatureFlagsAccessor::enableMainQueueCoordinatorOnIOS() {
|
||||
return flagValue.value();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlagsAccessor::enableMainQueueModulesOnIOS() {
|
||||
auto flagValue = enableMainQueueModulesOnIOS_.load();
|
||||
|
||||
if (!flagValue.has_value()) {
|
||||
// This block is not exclusive but it is not necessary.
|
||||
// If multiple threads try to initialize the feature flag, we would only
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(25, "enableMainQueueModulesOnIOS");
|
||||
|
||||
flagValue = currentProvider_->enableMainQueueModulesOnIOS();
|
||||
enableMainQueueModulesOnIOS_ = flagValue;
|
||||
}
|
||||
|
||||
return flagValue.value();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlagsAccessor::enableModuleArgumentNSNullConversionIOS() {
|
||||
auto flagValue = enableModuleArgumentNSNullConversionIOS_.load();
|
||||
|
||||
@@ -506,7 +488,7 @@ bool ReactNativeFeatureFlagsAccessor::enableModuleArgumentNSNullConversionIOS()
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(26, "enableModuleArgumentNSNullConversionIOS");
|
||||
markFlagAsAccessed(25, "enableModuleArgumentNSNullConversionIOS");
|
||||
|
||||
flagValue = currentProvider_->enableModuleArgumentNSNullConversionIOS();
|
||||
enableModuleArgumentNSNullConversionIOS_ = flagValue;
|
||||
@@ -524,7 +506,7 @@ bool ReactNativeFeatureFlagsAccessor::enableNativeCSSParsing() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(27, "enableNativeCSSParsing");
|
||||
markFlagAsAccessed(26, "enableNativeCSSParsing");
|
||||
|
||||
flagValue = currentProvider_->enableNativeCSSParsing();
|
||||
enableNativeCSSParsing_ = flagValue;
|
||||
@@ -542,7 +524,7 @@ bool ReactNativeFeatureFlagsAccessor::enableNetworkEventReporting() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(28, "enableNetworkEventReporting");
|
||||
markFlagAsAccessed(27, "enableNetworkEventReporting");
|
||||
|
||||
flagValue = currentProvider_->enableNetworkEventReporting();
|
||||
enableNetworkEventReporting_ = flagValue;
|
||||
@@ -560,7 +542,7 @@ bool ReactNativeFeatureFlagsAccessor::enableNewBackgroundAndBorderDrawables() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(29, "enableNewBackgroundAndBorderDrawables");
|
||||
markFlagAsAccessed(28, "enableNewBackgroundAndBorderDrawables");
|
||||
|
||||
flagValue = currentProvider_->enableNewBackgroundAndBorderDrawables();
|
||||
enableNewBackgroundAndBorderDrawables_ = flagValue;
|
||||
@@ -578,7 +560,7 @@ bool ReactNativeFeatureFlagsAccessor::enablePreparedTextLayout() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(30, "enablePreparedTextLayout");
|
||||
markFlagAsAccessed(29, "enablePreparedTextLayout");
|
||||
|
||||
flagValue = currentProvider_->enablePreparedTextLayout();
|
||||
enablePreparedTextLayout_ = flagValue;
|
||||
@@ -596,7 +578,7 @@ bool ReactNativeFeatureFlagsAccessor::enablePropsUpdateReconciliationAndroid() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(31, "enablePropsUpdateReconciliationAndroid");
|
||||
markFlagAsAccessed(30, "enablePropsUpdateReconciliationAndroid");
|
||||
|
||||
flagValue = currentProvider_->enablePropsUpdateReconciliationAndroid();
|
||||
enablePropsUpdateReconciliationAndroid_ = flagValue;
|
||||
@@ -614,7 +596,7 @@ bool ReactNativeFeatureFlagsAccessor::enableResourceTimingAPI() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(32, "enableResourceTimingAPI");
|
||||
markFlagAsAccessed(31, "enableResourceTimingAPI");
|
||||
|
||||
flagValue = currentProvider_->enableResourceTimingAPI();
|
||||
enableResourceTimingAPI_ = flagValue;
|
||||
@@ -632,7 +614,7 @@ bool ReactNativeFeatureFlagsAccessor::enableSynchronousStateUpdates() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(33, "enableSynchronousStateUpdates");
|
||||
markFlagAsAccessed(32, "enableSynchronousStateUpdates");
|
||||
|
||||
flagValue = currentProvider_->enableSynchronousStateUpdates();
|
||||
enableSynchronousStateUpdates_ = flagValue;
|
||||
@@ -650,7 +632,7 @@ bool ReactNativeFeatureFlagsAccessor::enableViewCulling() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(34, "enableViewCulling");
|
||||
markFlagAsAccessed(33, "enableViewCulling");
|
||||
|
||||
flagValue = currentProvider_->enableViewCulling();
|
||||
enableViewCulling_ = flagValue;
|
||||
@@ -668,7 +650,7 @@ bool ReactNativeFeatureFlagsAccessor::enableViewRecycling() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(35, "enableViewRecycling");
|
||||
markFlagAsAccessed(34, "enableViewRecycling");
|
||||
|
||||
flagValue = currentProvider_->enableViewRecycling();
|
||||
enableViewRecycling_ = flagValue;
|
||||
@@ -686,7 +668,7 @@ bool ReactNativeFeatureFlagsAccessor::enableViewRecyclingForText() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(36, "enableViewRecyclingForText");
|
||||
markFlagAsAccessed(35, "enableViewRecyclingForText");
|
||||
|
||||
flagValue = currentProvider_->enableViewRecyclingForText();
|
||||
enableViewRecyclingForText_ = flagValue;
|
||||
@@ -704,7 +686,7 @@ bool ReactNativeFeatureFlagsAccessor::enableViewRecyclingForView() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(37, "enableViewRecyclingForView");
|
||||
markFlagAsAccessed(36, "enableViewRecyclingForView");
|
||||
|
||||
flagValue = currentProvider_->enableViewRecyclingForView();
|
||||
enableViewRecyclingForView_ = flagValue;
|
||||
@@ -722,7 +704,7 @@ bool ReactNativeFeatureFlagsAccessor::enableVirtualViewDebugFeatures() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(38, "enableVirtualViewDebugFeatures");
|
||||
markFlagAsAccessed(37, "enableVirtualViewDebugFeatures");
|
||||
|
||||
flagValue = currentProvider_->enableVirtualViewDebugFeatures();
|
||||
enableVirtualViewDebugFeatures_ = flagValue;
|
||||
@@ -740,7 +722,7 @@ bool ReactNativeFeatureFlagsAccessor::enableVirtualViewRenderState() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(39, "enableVirtualViewRenderState");
|
||||
markFlagAsAccessed(38, "enableVirtualViewRenderState");
|
||||
|
||||
flagValue = currentProvider_->enableVirtualViewRenderState();
|
||||
enableVirtualViewRenderState_ = flagValue;
|
||||
@@ -758,7 +740,7 @@ bool ReactNativeFeatureFlagsAccessor::enableVirtualViewWindowFocusDetection() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(40, "enableVirtualViewWindowFocusDetection");
|
||||
markFlagAsAccessed(39, "enableVirtualViewWindowFocusDetection");
|
||||
|
||||
flagValue = currentProvider_->enableVirtualViewWindowFocusDetection();
|
||||
enableVirtualViewWindowFocusDetection_ = flagValue;
|
||||
@@ -776,7 +758,7 @@ bool ReactNativeFeatureFlagsAccessor::fixMappingOfEventPrioritiesBetweenFabricAn
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(41, "fixMappingOfEventPrioritiesBetweenFabricAndReact");
|
||||
markFlagAsAccessed(40, "fixMappingOfEventPrioritiesBetweenFabricAndReact");
|
||||
|
||||
flagValue = currentProvider_->fixMappingOfEventPrioritiesBetweenFabricAndReact();
|
||||
fixMappingOfEventPrioritiesBetweenFabricAndReact_ = flagValue;
|
||||
@@ -794,7 +776,7 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxEnabledRelease() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(42, "fuseboxEnabledRelease");
|
||||
markFlagAsAccessed(41, "fuseboxEnabledRelease");
|
||||
|
||||
flagValue = currentProvider_->fuseboxEnabledRelease();
|
||||
fuseboxEnabledRelease_ = flagValue;
|
||||
@@ -812,7 +794,7 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxNetworkInspectionEnabled() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(43, "fuseboxNetworkInspectionEnabled");
|
||||
markFlagAsAccessed(42, "fuseboxNetworkInspectionEnabled");
|
||||
|
||||
flagValue = currentProvider_->fuseboxNetworkInspectionEnabled();
|
||||
fuseboxNetworkInspectionEnabled_ = flagValue;
|
||||
@@ -830,7 +812,7 @@ bool ReactNativeFeatureFlagsAccessor::hideOffscreenVirtualViewsOnIOS() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(44, "hideOffscreenVirtualViewsOnIOS");
|
||||
markFlagAsAccessed(43, "hideOffscreenVirtualViewsOnIOS");
|
||||
|
||||
flagValue = currentProvider_->hideOffscreenVirtualViewsOnIOS();
|
||||
hideOffscreenVirtualViewsOnIOS_ = flagValue;
|
||||
@@ -848,7 +830,7 @@ double ReactNativeFeatureFlagsAccessor::preparedTextCacheSize() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(45, "preparedTextCacheSize");
|
||||
markFlagAsAccessed(44, "preparedTextCacheSize");
|
||||
|
||||
flagValue = currentProvider_->preparedTextCacheSize();
|
||||
preparedTextCacheSize_ = flagValue;
|
||||
@@ -857,6 +839,24 @@ double ReactNativeFeatureFlagsAccessor::preparedTextCacheSize() {
|
||||
return flagValue.value();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlagsAccessor::releaseImageDataWhenConsumed() {
|
||||
auto flagValue = releaseImageDataWhenConsumed_.load();
|
||||
|
||||
if (!flagValue.has_value()) {
|
||||
// This block is not exclusive but it is not necessary.
|
||||
// If multiple threads try to initialize the feature flag, we would only
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(45, "releaseImageDataWhenConsumed");
|
||||
|
||||
flagValue = currentProvider_->releaseImageDataWhenConsumed();
|
||||
releaseImageDataWhenConsumed_ = flagValue;
|
||||
}
|
||||
|
||||
return flagValue.value();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlagsAccessor::traceTurboModulePromiseRejectionsOnAndroid() {
|
||||
auto flagValue = traceTurboModulePromiseRejectionsOnAndroid_.load();
|
||||
|
||||
|
||||
+5
-5
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<03ac996ff129f4ed37cad03a835008ca>>
|
||||
* @generated SignedSource<<97ea79c3e8cdf6afc4ff44018cda256d>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -35,7 +35,6 @@ class ReactNativeFeatureFlagsAccessor {
|
||||
bool commonTestFlag();
|
||||
bool cxxNativeAnimatedEnabled();
|
||||
bool cxxNativeAnimatedRemoveJsSync();
|
||||
bool disableMainQueueSyncDispatchIOS();
|
||||
bool disableMountItemReorderingAndroid();
|
||||
bool disableTextLayoutManagerCacheAndroid();
|
||||
bool enableAccessibilityOrder();
|
||||
@@ -46,6 +45,7 @@ class ReactNativeFeatureFlagsAccessor {
|
||||
bool enableCustomFocusSearchOnClippedElementsAndroid();
|
||||
bool enableDestroyShadowTreeRevisionAsync();
|
||||
bool enableDoubleMeasurementFixAndroid();
|
||||
bool enableEagerMainQueueModulesOnIOS();
|
||||
bool enableEagerRootViewAttachment();
|
||||
bool enableFabricLogs();
|
||||
bool enableFabricRenderer();
|
||||
@@ -57,7 +57,6 @@ class ReactNativeFeatureFlagsAccessor {
|
||||
bool enableLayoutAnimationsOnAndroid();
|
||||
bool enableLayoutAnimationsOnIOS();
|
||||
bool enableMainQueueCoordinatorOnIOS();
|
||||
bool enableMainQueueModulesOnIOS();
|
||||
bool enableModuleArgumentNSNullConversionIOS();
|
||||
bool enableNativeCSSParsing();
|
||||
bool enableNetworkEventReporting();
|
||||
@@ -78,6 +77,7 @@ class ReactNativeFeatureFlagsAccessor {
|
||||
bool fuseboxNetworkInspectionEnabled();
|
||||
bool hideOffscreenVirtualViewsOnIOS();
|
||||
double preparedTextCacheSize();
|
||||
bool releaseImageDataWhenConsumed();
|
||||
bool traceTurboModulePromiseRejectionsOnAndroid();
|
||||
bool updateRuntimeShadowNodeReferencesOnCommit();
|
||||
bool useAlwaysAvailableJSErrorHandling();
|
||||
@@ -105,7 +105,6 @@ class ReactNativeFeatureFlagsAccessor {
|
||||
std::atomic<std::optional<bool>> commonTestFlag_;
|
||||
std::atomic<std::optional<bool>> cxxNativeAnimatedEnabled_;
|
||||
std::atomic<std::optional<bool>> cxxNativeAnimatedRemoveJsSync_;
|
||||
std::atomic<std::optional<bool>> disableMainQueueSyncDispatchIOS_;
|
||||
std::atomic<std::optional<bool>> disableMountItemReorderingAndroid_;
|
||||
std::atomic<std::optional<bool>> disableTextLayoutManagerCacheAndroid_;
|
||||
std::atomic<std::optional<bool>> enableAccessibilityOrder_;
|
||||
@@ -116,6 +115,7 @@ class ReactNativeFeatureFlagsAccessor {
|
||||
std::atomic<std::optional<bool>> enableCustomFocusSearchOnClippedElementsAndroid_;
|
||||
std::atomic<std::optional<bool>> enableDestroyShadowTreeRevisionAsync_;
|
||||
std::atomic<std::optional<bool>> enableDoubleMeasurementFixAndroid_;
|
||||
std::atomic<std::optional<bool>> enableEagerMainQueueModulesOnIOS_;
|
||||
std::atomic<std::optional<bool>> enableEagerRootViewAttachment_;
|
||||
std::atomic<std::optional<bool>> enableFabricLogs_;
|
||||
std::atomic<std::optional<bool>> enableFabricRenderer_;
|
||||
@@ -127,7 +127,6 @@ class ReactNativeFeatureFlagsAccessor {
|
||||
std::atomic<std::optional<bool>> enableLayoutAnimationsOnAndroid_;
|
||||
std::atomic<std::optional<bool>> enableLayoutAnimationsOnIOS_;
|
||||
std::atomic<std::optional<bool>> enableMainQueueCoordinatorOnIOS_;
|
||||
std::atomic<std::optional<bool>> enableMainQueueModulesOnIOS_;
|
||||
std::atomic<std::optional<bool>> enableModuleArgumentNSNullConversionIOS_;
|
||||
std::atomic<std::optional<bool>> enableNativeCSSParsing_;
|
||||
std::atomic<std::optional<bool>> enableNetworkEventReporting_;
|
||||
@@ -148,6 +147,7 @@ class ReactNativeFeatureFlagsAccessor {
|
||||
std::atomic<std::optional<bool>> fuseboxNetworkInspectionEnabled_;
|
||||
std::atomic<std::optional<bool>> hideOffscreenVirtualViewsOnIOS_;
|
||||
std::atomic<std::optional<double>> preparedTextCacheSize_;
|
||||
std::atomic<std::optional<bool>> releaseImageDataWhenConsumed_;
|
||||
std::atomic<std::optional<bool>> traceTurboModulePromiseRejectionsOnAndroid_;
|
||||
std::atomic<std::optional<bool>> updateRuntimeShadowNodeReferencesOnCommit_;
|
||||
std::atomic<std::optional<bool>> useAlwaysAvailableJSErrorHandling_;
|
||||
|
||||
+9
-9
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<447ab7d26fc92000742788c2fba6e297>>
|
||||
* @generated SignedSource<<fbc0fe5e434b2f367ec6e73383a91d4c>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -39,10 +39,6 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool disableMainQueueSyncDispatchIOS() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool disableMountItemReorderingAndroid() override {
|
||||
return false;
|
||||
}
|
||||
@@ -83,6 +79,10 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool enableEagerMainQueueModulesOnIOS() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool enableEagerRootViewAttachment() override {
|
||||
return false;
|
||||
}
|
||||
@@ -127,10 +127,6 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool enableMainQueueModulesOnIOS() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool enableModuleArgumentNSNullConversionIOS() override {
|
||||
return false;
|
||||
}
|
||||
@@ -211,6 +207,10 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
|
||||
return 200.0;
|
||||
}
|
||||
|
||||
bool releaseImageDataWhenConsumed() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool traceTurboModulePromiseRejectionsOnAndroid() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
+19
-19
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<37da6a5b4c8f877f64d9cf1385d2a20f>>
|
||||
* @generated SignedSource<<406685c2b45e65315bb5af9b527ca681>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -72,15 +72,6 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
|
||||
return ReactNativeFeatureFlagsDefaults::cxxNativeAnimatedRemoveJsSync();
|
||||
}
|
||||
|
||||
bool disableMainQueueSyncDispatchIOS() override {
|
||||
auto value = values_["disableMainQueueSyncDispatchIOS"];
|
||||
if (!value.isNull()) {
|
||||
return value.getBool();
|
||||
}
|
||||
|
||||
return ReactNativeFeatureFlagsDefaults::disableMainQueueSyncDispatchIOS();
|
||||
}
|
||||
|
||||
bool disableMountItemReorderingAndroid() override {
|
||||
auto value = values_["disableMountItemReorderingAndroid"];
|
||||
if (!value.isNull()) {
|
||||
@@ -171,6 +162,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
|
||||
return ReactNativeFeatureFlagsDefaults::enableDoubleMeasurementFixAndroid();
|
||||
}
|
||||
|
||||
bool enableEagerMainQueueModulesOnIOS() override {
|
||||
auto value = values_["enableEagerMainQueueModulesOnIOS"];
|
||||
if (!value.isNull()) {
|
||||
return value.getBool();
|
||||
}
|
||||
|
||||
return ReactNativeFeatureFlagsDefaults::enableEagerMainQueueModulesOnIOS();
|
||||
}
|
||||
|
||||
bool enableEagerRootViewAttachment() override {
|
||||
auto value = values_["enableEagerRootViewAttachment"];
|
||||
if (!value.isNull()) {
|
||||
@@ -270,15 +270,6 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
|
||||
return ReactNativeFeatureFlagsDefaults::enableMainQueueCoordinatorOnIOS();
|
||||
}
|
||||
|
||||
bool enableMainQueueModulesOnIOS() override {
|
||||
auto value = values_["enableMainQueueModulesOnIOS"];
|
||||
if (!value.isNull()) {
|
||||
return value.getBool();
|
||||
}
|
||||
|
||||
return ReactNativeFeatureFlagsDefaults::enableMainQueueModulesOnIOS();
|
||||
}
|
||||
|
||||
bool enableModuleArgumentNSNullConversionIOS() override {
|
||||
auto value = values_["enableModuleArgumentNSNullConversionIOS"];
|
||||
if (!value.isNull()) {
|
||||
@@ -459,6 +450,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
|
||||
return ReactNativeFeatureFlagsDefaults::preparedTextCacheSize();
|
||||
}
|
||||
|
||||
bool releaseImageDataWhenConsumed() override {
|
||||
auto value = values_["releaseImageDataWhenConsumed"];
|
||||
if (!value.isNull()) {
|
||||
return value.getBool();
|
||||
}
|
||||
|
||||
return ReactNativeFeatureFlagsDefaults::releaseImageDataWhenConsumed();
|
||||
}
|
||||
|
||||
bool traceTurboModulePromiseRejectionsOnAndroid() override {
|
||||
auto value = values_["traceTurboModulePromiseRejectionsOnAndroid"];
|
||||
if (!value.isNull()) {
|
||||
|
||||
+3
-3
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<91c4cab3325d84025a789080a8b9a0c3>>
|
||||
* @generated SignedSource<<2e697819e9d5137ea0ce92275cad2943>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -28,7 +28,6 @@ class ReactNativeFeatureFlagsProvider {
|
||||
virtual bool commonTestFlag() = 0;
|
||||
virtual bool cxxNativeAnimatedEnabled() = 0;
|
||||
virtual bool cxxNativeAnimatedRemoveJsSync() = 0;
|
||||
virtual bool disableMainQueueSyncDispatchIOS() = 0;
|
||||
virtual bool disableMountItemReorderingAndroid() = 0;
|
||||
virtual bool disableTextLayoutManagerCacheAndroid() = 0;
|
||||
virtual bool enableAccessibilityOrder() = 0;
|
||||
@@ -39,6 +38,7 @@ class ReactNativeFeatureFlagsProvider {
|
||||
virtual bool enableCustomFocusSearchOnClippedElementsAndroid() = 0;
|
||||
virtual bool enableDestroyShadowTreeRevisionAsync() = 0;
|
||||
virtual bool enableDoubleMeasurementFixAndroid() = 0;
|
||||
virtual bool enableEagerMainQueueModulesOnIOS() = 0;
|
||||
virtual bool enableEagerRootViewAttachment() = 0;
|
||||
virtual bool enableFabricLogs() = 0;
|
||||
virtual bool enableFabricRenderer() = 0;
|
||||
@@ -50,7 +50,6 @@ class ReactNativeFeatureFlagsProvider {
|
||||
virtual bool enableLayoutAnimationsOnAndroid() = 0;
|
||||
virtual bool enableLayoutAnimationsOnIOS() = 0;
|
||||
virtual bool enableMainQueueCoordinatorOnIOS() = 0;
|
||||
virtual bool enableMainQueueModulesOnIOS() = 0;
|
||||
virtual bool enableModuleArgumentNSNullConversionIOS() = 0;
|
||||
virtual bool enableNativeCSSParsing() = 0;
|
||||
virtual bool enableNetworkEventReporting() = 0;
|
||||
@@ -71,6 +70,7 @@ class ReactNativeFeatureFlagsProvider {
|
||||
virtual bool fuseboxNetworkInspectionEnabled() = 0;
|
||||
virtual bool hideOffscreenVirtualViewsOnIOS() = 0;
|
||||
virtual double preparedTextCacheSize() = 0;
|
||||
virtual bool releaseImageDataWhenConsumed() = 0;
|
||||
virtual bool traceTurboModulePromiseRejectionsOnAndroid() = 0;
|
||||
virtual bool updateRuntimeShadowNodeReferencesOnCommit() = 0;
|
||||
virtual bool useAlwaysAvailableJSErrorHandling() = 0;
|
||||
|
||||
+1
-5
@@ -601,11 +601,7 @@ typedef struct {
|
||||
};
|
||||
|
||||
if ([self _requiresMainQueueSetup:moduleClass]) {
|
||||
NSString *message = [NSString
|
||||
stringWithFormat:
|
||||
@"Lazily setting up TurboModule \"%s\" on the main queue. This could deadlock react native, if it happens during sync rendering. Please fix this by avoiding lazy main queue setup.",
|
||||
moduleName];
|
||||
RCTUnsafeExecuteOnMainQueueSyncWithError(work, message);
|
||||
RCTUnsafeExecuteOnMainQueueSync(work);
|
||||
} else {
|
||||
work();
|
||||
}
|
||||
|
||||
+11
-11
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<52f80499ef40102683c343c11570badf>>
|
||||
* @generated SignedSource<<14c2e4494d0aca1228e2d7593e65fa00>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -59,11 +59,6 @@ bool NativeReactNativeFeatureFlags::cxxNativeAnimatedRemoveJsSync(
|
||||
return ReactNativeFeatureFlags::cxxNativeAnimatedRemoveJsSync();
|
||||
}
|
||||
|
||||
bool NativeReactNativeFeatureFlags::disableMainQueueSyncDispatchIOS(
|
||||
jsi::Runtime& /*runtime*/) {
|
||||
return ReactNativeFeatureFlags::disableMainQueueSyncDispatchIOS();
|
||||
}
|
||||
|
||||
bool NativeReactNativeFeatureFlags::disableMountItemReorderingAndroid(
|
||||
jsi::Runtime& /*runtime*/) {
|
||||
return ReactNativeFeatureFlags::disableMountItemReorderingAndroid();
|
||||
@@ -114,6 +109,11 @@ bool NativeReactNativeFeatureFlags::enableDoubleMeasurementFixAndroid(
|
||||
return ReactNativeFeatureFlags::enableDoubleMeasurementFixAndroid();
|
||||
}
|
||||
|
||||
bool NativeReactNativeFeatureFlags::enableEagerMainQueueModulesOnIOS(
|
||||
jsi::Runtime& /*runtime*/) {
|
||||
return ReactNativeFeatureFlags::enableEagerMainQueueModulesOnIOS();
|
||||
}
|
||||
|
||||
bool NativeReactNativeFeatureFlags::enableEagerRootViewAttachment(
|
||||
jsi::Runtime& /*runtime*/) {
|
||||
return ReactNativeFeatureFlags::enableEagerRootViewAttachment();
|
||||
@@ -169,11 +169,6 @@ bool NativeReactNativeFeatureFlags::enableMainQueueCoordinatorOnIOS(
|
||||
return ReactNativeFeatureFlags::enableMainQueueCoordinatorOnIOS();
|
||||
}
|
||||
|
||||
bool NativeReactNativeFeatureFlags::enableMainQueueModulesOnIOS(
|
||||
jsi::Runtime& /*runtime*/) {
|
||||
return ReactNativeFeatureFlags::enableMainQueueModulesOnIOS();
|
||||
}
|
||||
|
||||
bool NativeReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS(
|
||||
jsi::Runtime& /*runtime*/) {
|
||||
return ReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS();
|
||||
@@ -274,6 +269,11 @@ double NativeReactNativeFeatureFlags::preparedTextCacheSize(
|
||||
return ReactNativeFeatureFlags::preparedTextCacheSize();
|
||||
}
|
||||
|
||||
bool NativeReactNativeFeatureFlags::releaseImageDataWhenConsumed(
|
||||
jsi::Runtime& /*runtime*/) {
|
||||
return ReactNativeFeatureFlags::releaseImageDataWhenConsumed();
|
||||
}
|
||||
|
||||
bool NativeReactNativeFeatureFlags::traceTurboModulePromiseRejectionsOnAndroid(
|
||||
jsi::Runtime& /*runtime*/) {
|
||||
return ReactNativeFeatureFlags::traceTurboModulePromiseRejectionsOnAndroid();
|
||||
|
||||
+5
-5
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<f09cc734d07ec566f153e90c6d8796db>>
|
||||
* @generated SignedSource<<46d82eb7ba3a33e1411f576ef5d2f28b>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -42,8 +42,6 @@ class NativeReactNativeFeatureFlags
|
||||
|
||||
bool cxxNativeAnimatedRemoveJsSync(jsi::Runtime& runtime);
|
||||
|
||||
bool disableMainQueueSyncDispatchIOS(jsi::Runtime& runtime);
|
||||
|
||||
bool disableMountItemReorderingAndroid(jsi::Runtime& runtime);
|
||||
|
||||
bool disableTextLayoutManagerCacheAndroid(jsi::Runtime& runtime);
|
||||
@@ -64,6 +62,8 @@ class NativeReactNativeFeatureFlags
|
||||
|
||||
bool enableDoubleMeasurementFixAndroid(jsi::Runtime& runtime);
|
||||
|
||||
bool enableEagerMainQueueModulesOnIOS(jsi::Runtime& runtime);
|
||||
|
||||
bool enableEagerRootViewAttachment(jsi::Runtime& runtime);
|
||||
|
||||
bool enableFabricLogs(jsi::Runtime& runtime);
|
||||
@@ -86,8 +86,6 @@ class NativeReactNativeFeatureFlags
|
||||
|
||||
bool enableMainQueueCoordinatorOnIOS(jsi::Runtime& runtime);
|
||||
|
||||
bool enableMainQueueModulesOnIOS(jsi::Runtime& runtime);
|
||||
|
||||
bool enableModuleArgumentNSNullConversionIOS(jsi::Runtime& runtime);
|
||||
|
||||
bool enableNativeCSSParsing(jsi::Runtime& runtime);
|
||||
@@ -128,6 +126,8 @@ class NativeReactNativeFeatureFlags
|
||||
|
||||
double preparedTextCacheSize(jsi::Runtime& runtime);
|
||||
|
||||
bool releaseImageDataWhenConsumed(jsi::Runtime& runtime);
|
||||
|
||||
bool traceTurboModulePromiseRejectionsOnAndroid(jsi::Runtime& runtime);
|
||||
|
||||
bool updateRuntimeShadowNodeReferencesOnCommit(jsi::Runtime& runtime);
|
||||
|
||||
-39
@@ -491,45 +491,6 @@ inline static void updateAccessibilityStateProp(
|
||||
result["accessibilityState"] = resultState;
|
||||
}
|
||||
|
||||
static folly::dynamic toDynamic(const std::vector<BoxShadow>& boxShadow) {
|
||||
folly::dynamic boxShadowResult = folly::dynamic::array();
|
||||
for (const auto& boxShadowValue : boxShadow) {
|
||||
folly::dynamic boxShadowValueResult = folly::dynamic::object();
|
||||
boxShadowValueResult["offsetX"] = boxShadowValue.offsetX;
|
||||
boxShadowValueResult["offsetY"] = boxShadowValue.offsetY;
|
||||
boxShadowValueResult["blurRadius"] = boxShadowValue.blurRadius;
|
||||
boxShadowValueResult["spreadDistance"] = boxShadowValue.spreadDistance;
|
||||
boxShadowValueResult["color"] = *boxShadowValue.color;
|
||||
boxShadowValueResult["inset"] = boxShadowValue.inset;
|
||||
boxShadowResult.push_back(boxShadowValueResult);
|
||||
}
|
||||
return boxShadowResult;
|
||||
}
|
||||
|
||||
static folly::dynamic toDynamic(const std::vector<FilterFunction>& filter) {
|
||||
folly::dynamic filterResult = folly::dynamic::array();
|
||||
for (const auto& filterFunction : filter) {
|
||||
folly::dynamic filterFunctionResult = folly::dynamic::object();
|
||||
std::string typeKey = toString(filterFunction.type);
|
||||
if (std::holds_alternative<Float>(filterFunction.parameters)) {
|
||||
filterFunctionResult[typeKey] =
|
||||
std::get<Float>(filterFunction.parameters);
|
||||
} else if (std::holds_alternative<DropShadowParams>(
|
||||
filterFunction.parameters)) {
|
||||
const auto& parameters =
|
||||
std::get<DropShadowParams>(filterFunction.parameters);
|
||||
folly::dynamic parametersResult = folly::dynamic::object();
|
||||
parametersResult["offsetX"] = parameters.offsetX;
|
||||
parametersResult["offsetY"] = parameters.offsetY;
|
||||
parametersResult["standardDeviation"] = parameters.standardDeviation;
|
||||
parametersResult["color"] = *parameters.color;
|
||||
filterFunctionResult[typeKey] = parametersResult;
|
||||
}
|
||||
filterResult.push_back(filterFunctionResult);
|
||||
}
|
||||
return filterResult;
|
||||
}
|
||||
|
||||
ComponentName HostPlatformViewProps::getDiffPropsImplementationTarget() const {
|
||||
return "View";
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ std::optional<double> DynamicEventPayload::extractValue(
|
||||
if (dynamic.type() == folly::dynamic::Type::DOUBLE) {
|
||||
return dynamic.asDouble();
|
||||
} else if (dynamic.type() == folly::dynamic::Type::INT64) {
|
||||
return dynamic.asInt();
|
||||
return static_cast<double>(dynamic.asInt());
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
@@ -21,5 +21,25 @@ struct BoxShadow {
|
||||
Float spreadDistance{};
|
||||
SharedColor color{};
|
||||
bool inset{};
|
||||
|
||||
#ifdef RN_SERIALIZABLE_STATE
|
||||
folly::dynamic toDynamic() const {
|
||||
folly::dynamic result = folly::dynamic::object();
|
||||
result["offsetX"] = offsetX;
|
||||
result["offsetY"] = offsetY;
|
||||
result["blurRadius"] = blurRadius;
|
||||
result["spreadDistance"] = spreadDistance;
|
||||
result["color"] = *color;
|
||||
result["inset"] = inset;
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef RN_SERIALIZABLE_STATE
|
||||
inline folly::dynamic toDynamic(const BoxShadow& boxShadow) {
|
||||
return boxShadow.toDynamic();
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace facebook::react
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <functional>
|
||||
#include <limits>
|
||||
|
||||
#include <react/renderer/graphics/ColorComponents.h>
|
||||
#include <react/renderer/graphics/HostPlatformColor.h>
|
||||
|
||||
@@ -29,22 +29,6 @@ enum class FilterType {
|
||||
DropShadow
|
||||
};
|
||||
|
||||
struct DropShadowParams {
|
||||
bool operator==(const DropShadowParams& other) const = default;
|
||||
|
||||
Float offsetX{};
|
||||
Float offsetY{};
|
||||
Float standardDeviation{};
|
||||
SharedColor color{};
|
||||
};
|
||||
|
||||
struct FilterFunction {
|
||||
bool operator==(const FilterFunction& other) const = default;
|
||||
|
||||
FilterType type{};
|
||||
std::variant<Float, DropShadowParams> parameters{};
|
||||
};
|
||||
|
||||
inline FilterType filterTypeFromString(std::string_view filterName) {
|
||||
if (filterName == "blur") {
|
||||
return FilterType::Blur;
|
||||
@@ -96,4 +80,51 @@ inline std::string toString(const FilterType& filterType) {
|
||||
}
|
||||
}
|
||||
|
||||
struct DropShadowParams {
|
||||
bool operator==(const DropShadowParams& other) const = default;
|
||||
|
||||
Float offsetX{};
|
||||
Float offsetY{};
|
||||
Float standardDeviation{};
|
||||
SharedColor color{};
|
||||
|
||||
#ifdef RN_SERIALIZABLE_STATE
|
||||
folly::dynamic toDynamic() const {
|
||||
folly::dynamic result = folly::dynamic::object();
|
||||
result["offsetX"] = offsetX;
|
||||
result["offsetY"] = offsetY;
|
||||
result["standardDeviation"] = standardDeviation;
|
||||
result["color"] = *color;
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
struct FilterFunction {
|
||||
bool operator==(const FilterFunction& other) const = default;
|
||||
|
||||
FilterType type{};
|
||||
std::variant<Float, DropShadowParams> parameters{};
|
||||
|
||||
#ifdef RN_SERIALIZABLE_STATE
|
||||
folly::dynamic toDynamic() const {
|
||||
folly::dynamic result = folly::dynamic::object();
|
||||
std::string typeKey = toString(type);
|
||||
if (std::holds_alternative<Float>(parameters)) {
|
||||
result[typeKey] = std::get<Float>(parameters);
|
||||
} else if (std::holds_alternative<DropShadowParams>(parameters)) {
|
||||
const auto& dropShadowParams = std::get<DropShadowParams>(parameters);
|
||||
result[typeKey] = dropShadowParams.toDynamic();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef RN_SERIALIZABLE_STATE
|
||||
inline folly::dynamic toDynamic(const FilterFunction& filterFunction) {
|
||||
return filterFunction.toDynamic();
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace facebook::react
|
||||
|
||||
@@ -243,7 +243,7 @@ Transform::Translate(Float x, Float y, Float z) noexcept {
|
||||
if ((haveLHS &&
|
||||
lhs.operations[i].type == TransformOperationType::Arbitrary) ||
|
||||
(haveRHS &&
|
||||
rhs.operations[i].type == TransformOperationType::Arbitrary)) {
|
||||
rhs.operations[j].type == TransformOperationType::Arbitrary)) {
|
||||
return result;
|
||||
}
|
||||
if (haveLHS && lhs.operations[i].type == TransformOperationType::Identity) {
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <react/renderer/debug/flags.h>
|
||||
@@ -37,7 +36,7 @@ inline bool isZero(Float n) {
|
||||
* An "Arbitrary" operation means that the transform was seeded with some
|
||||
* arbitrary initial result.
|
||||
*/
|
||||
enum class TransformOperationType {
|
||||
enum class TransformOperationType : uint8_t {
|
||||
Arbitrary,
|
||||
Identity,
|
||||
Perspective,
|
||||
|
||||
@@ -21,6 +21,7 @@ class ImageResponse final {
|
||||
Completed,
|
||||
Failed,
|
||||
Cancelled,
|
||||
Consumed,
|
||||
};
|
||||
|
||||
ImageResponse(std::shared_ptr<void> image, std::shared_ptr<void> metadata);
|
||||
|
||||
+15
-1
@@ -10,6 +10,7 @@
|
||||
#include <algorithm>
|
||||
|
||||
#include <react/debug/react_native_assert.h>
|
||||
#include <react/featureflags/ReactNativeFeatureFlags.h>
|
||||
|
||||
namespace facebook::react {
|
||||
|
||||
@@ -31,6 +32,7 @@ void ImageResponseObserverCoordinator::addObserver(
|
||||
case ImageResponse::Status::Completed: {
|
||||
auto imageData = imageData_;
|
||||
auto imageMetadata = imageMetadata_;
|
||||
consumeResponse();
|
||||
mutex_.unlock();
|
||||
observer.didReceiveImage(ImageResponse{imageData, imageMetadata});
|
||||
break;
|
||||
@@ -41,7 +43,8 @@ void ImageResponseObserverCoordinator::addObserver(
|
||||
observer.didReceiveFailure(ImageLoadError{imageErrorData});
|
||||
break;
|
||||
}
|
||||
case ImageResponse::Status::Cancelled: {
|
||||
case ImageResponse::Status::Cancelled:
|
||||
case ImageResponse::Status::Consumed: {
|
||||
observers_.push_back(&observer);
|
||||
status_ = ImageResponse::Status::Loading;
|
||||
mutex_.unlock();
|
||||
@@ -93,6 +96,9 @@ void ImageResponseObserverCoordinator::nativeImageResponseComplete(
|
||||
status_ == ImageResponse::Status::Cancelled);
|
||||
status_ = ImageResponse::Status::Completed;
|
||||
auto observers = observers_;
|
||||
if (!observers.empty()) {
|
||||
consumeResponse();
|
||||
}
|
||||
mutex_.unlock();
|
||||
|
||||
for (auto observer : observers) {
|
||||
@@ -116,4 +122,12 @@ void ImageResponseObserverCoordinator::nativeImageResponseFailed(
|
||||
}
|
||||
}
|
||||
|
||||
void ImageResponseObserverCoordinator::consumeResponse() const {
|
||||
if (ReactNativeFeatureFlags::releaseImageDataWhenConsumed()) {
|
||||
status_ = ImageResponse::Status::Consumed;
|
||||
imageData_.reset();
|
||||
imageMetadata_.reset();
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace facebook::react
|
||||
|
||||
+5
@@ -61,6 +61,11 @@ class ImageResponseObserverCoordinator {
|
||||
void nativeImageResponseFailed(const ImageLoadError& loadError) const;
|
||||
|
||||
private:
|
||||
/*
|
||||
* Resets the cached image data pointers. Needs to be protected by mutex_.
|
||||
*/
|
||||
void consumeResponse() const;
|
||||
|
||||
/*
|
||||
* List of observers.
|
||||
* Mutable: protected by mutex_.
|
||||
|
||||
@@ -200,7 +200,7 @@ namespace {
|
||||
// Copied from JSIExecutor.cpp
|
||||
// basename_r isn't in all iOS SDKs, so use this simple version instead.
|
||||
std::string simpleBasename(const std::string& path) {
|
||||
size_t pos = path.rfind("/");
|
||||
size_t pos = path.rfind('/');
|
||||
return (pos != std::string::npos) ? path.substr(pos) : path;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -341,7 +341,7 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
|
||||
// Initialize RCTModuleRegistry so that TurboModules can require other TurboModules.
|
||||
[_bridgeModuleDecorator.moduleRegistry setTurboModuleRegistry:_turboModuleManager];
|
||||
|
||||
if (ReactNativeFeatureFlags::enableMainQueueModulesOnIOS()) {
|
||||
if (ReactNativeFeatureFlags::enableEagerMainQueueModulesOnIOS()) {
|
||||
/**
|
||||
* Some native modules need to capture uikit objects on the main thread.
|
||||
* Start initializing those modules on the main queue here. The JavaScript thread
|
||||
|
||||
+2
-4
@@ -9,8 +9,7 @@
|
||||
#import <jsi/jsi.h>
|
||||
#import <react/runtime/JSRuntimeFactory.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
namespace facebook::react {
|
||||
|
||||
class RCTJscInstance : public JSRuntimeFactory {
|
||||
public:
|
||||
@@ -21,5 +20,4 @@ class RCTJscInstance : public JSRuntimeFactory {
|
||||
|
||||
~RCTJscInstance(){};
|
||||
};
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
} // namespace facebook::react
|
||||
|
||||
+2
-4
@@ -8,8 +8,7 @@
|
||||
#import "RCTJscInstance.h"
|
||||
#include <jsc/JSCRuntime.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
namespace facebook::react {
|
||||
|
||||
RCTJscInstance::RCTJscInstance() {}
|
||||
|
||||
@@ -18,5 +17,4 @@ std::unique_ptr<JSRuntime> RCTJscInstance::createJSRuntime(std::shared_ptr<Messa
|
||||
return std::make_unique<JSIRuntimeHolder>(jsc::makeJSCRuntime());
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
} // namespace facebook::react
|
||||
|
||||
+27
-8
@@ -22,10 +22,26 @@ const std::string PERFETTO_DEFAULT_TRACK_NAME = "# Web Performance";
|
||||
const std::string PERFETTO_TRACK_NAME_PREFIX = "# Web Performance: ";
|
||||
|
||||
std::string toPerfettoTrackName(
|
||||
const std::optional<std::string_view>& trackName) {
|
||||
return trackName.has_value()
|
||||
? PERFETTO_TRACK_NAME_PREFIX + std::string(trackName.value())
|
||||
: PERFETTO_DEFAULT_TRACK_NAME;
|
||||
const std::optional<std::string_view>& trackName,
|
||||
const std::optional<std::string_view>& trackGroup) {
|
||||
std::string perfettoTrackName = PERFETTO_DEFAULT_TRACK_NAME;
|
||||
|
||||
if (trackName || trackGroup) {
|
||||
perfettoTrackName += ": ";
|
||||
|
||||
if (trackGroup) {
|
||||
perfettoTrackName += *trackGroup;
|
||||
if (trackName) {
|
||||
perfettoTrackName += " | ";
|
||||
}
|
||||
}
|
||||
|
||||
if (trackName) {
|
||||
perfettoTrackName += *trackName;
|
||||
}
|
||||
}
|
||||
|
||||
return perfettoTrackName;
|
||||
}
|
||||
#elif defined(WITH_FBSYSTRACE)
|
||||
int64_t getDeltaNanos(HighResTimeStamp jsTime) {
|
||||
@@ -50,10 +66,12 @@ int64_t getDeltaNanos(HighResTimeStamp jsTime) {
|
||||
const std::string_view& eventName,
|
||||
HighResTimeStamp startTime,
|
||||
HighResTimeStamp endTime,
|
||||
const std::optional<std::string_view>& trackName) {
|
||||
const std::optional<std::string_view>& trackName,
|
||||
const std::optional<std::string_view>& trackGroup) {
|
||||
#if defined(WITH_PERFETTO)
|
||||
if (TRACE_EVENT_CATEGORY_ENABLED("react-native")) {
|
||||
auto track = getPerfettoWebPerfTrackAsync(toPerfettoTrackName(trackName));
|
||||
auto track = getPerfettoWebPerfTrackAsync(
|
||||
toPerfettoTrackName(trackName, trackGroup));
|
||||
TRACE_EVENT_BEGIN(
|
||||
"react-native",
|
||||
perfetto::DynamicString(eventName.data(), eventName.size()),
|
||||
@@ -75,13 +93,14 @@ int64_t getDeltaNanos(HighResTimeStamp jsTime) {
|
||||
/* static */ void ReactPerfettoLogger::mark(
|
||||
const std::string_view& eventName,
|
||||
HighResTimeStamp startTime,
|
||||
const std::optional<std::string_view>& trackName) {
|
||||
const std::optional<std::string_view>& trackName,
|
||||
const std::optional<std::string_view>& trackGroup) {
|
||||
#if defined(WITH_PERFETTO)
|
||||
if (TRACE_EVENT_CATEGORY_ENABLED("react-native")) {
|
||||
TRACE_EVENT_INSTANT(
|
||||
"react-native",
|
||||
perfetto::DynamicString(eventName.data(), eventName.size()),
|
||||
getPerfettoWebPerfTrackSync(toPerfettoTrackName(trackName)),
|
||||
getPerfettoWebPerfTrackSync(toPerfettoTrackName(trackName, trackGroup)),
|
||||
highResTimeStampToPerfettoTraceTime(startTime));
|
||||
}
|
||||
#elif defined(WITH_FBSYSTRACE)
|
||||
|
||||
+5
-3
@@ -11,7 +11,7 @@
|
||||
#include <reactperflogger/ReactPerfettoCategories.h>
|
||||
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
|
||||
namespace facebook::react {
|
||||
|
||||
@@ -26,13 +26,15 @@ class ReactPerfettoLogger {
|
||||
static void mark(
|
||||
const std::string_view& eventName,
|
||||
HighResTimeStamp startTime,
|
||||
const std::optional<std::string_view>& trackName);
|
||||
const std::optional<std::string_view>& trackName = std::nullopt,
|
||||
const std::optional<std::string_view>& trackGroup = std::nullopt);
|
||||
|
||||
static void measure(
|
||||
const std::string_view& eventName,
|
||||
HighResTimeStamp startTime,
|
||||
HighResTimeStamp endTime,
|
||||
const std::optional<std::string_view>& trackName);
|
||||
const std::optional<std::string_view>& trackName = std::nullopt,
|
||||
const std::optional<std::string_view>& trackGroup = std::nullopt);
|
||||
};
|
||||
|
||||
} // namespace facebook::react
|
||||
|
||||
@@ -478,16 +478,19 @@ static void zeroOutLayoutRecursively(yoga::Node* const node) {
|
||||
}
|
||||
|
||||
static void cleanupContentsNodesRecursively(yoga::Node* const node) {
|
||||
for (auto child : node->getChildren()) {
|
||||
if (child->style().display() == Display::Contents) {
|
||||
child->getLayout() = {};
|
||||
child->setLayoutDimension(0, Dimension::Width);
|
||||
child->setLayoutDimension(0, Dimension::Height);
|
||||
child->setHasNewLayout(true);
|
||||
child->setDirty(false);
|
||||
child->cloneChildrenIfNeeded();
|
||||
if (node->hasContentsChildren()) [[unlikely]] {
|
||||
node->cloneContentsChildrenIfNeeded();
|
||||
for (auto child : node->getChildren()) {
|
||||
if (child->style().display() == Display::Contents) {
|
||||
child->getLayout() = {};
|
||||
child->setLayoutDimension(0, Dimension::Width);
|
||||
child->setLayoutDimension(0, Dimension::Height);
|
||||
child->setHasNewLayout(true);
|
||||
child->setDirty(false);
|
||||
child->cloneChildrenIfNeeded();
|
||||
|
||||
cleanupContentsNodesRecursively(child);
|
||||
cleanupContentsNodesRecursively(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,6 +181,17 @@ void Node::setDirty(bool isDirty) {
|
||||
}
|
||||
}
|
||||
|
||||
void Node::setChildren(const std::vector<Node*>& children) {
|
||||
children_ = children;
|
||||
|
||||
contentsChildrenCount_ = 0;
|
||||
for (const auto& child : children) {
|
||||
if (child->style().display() == Display::Contents) {
|
||||
contentsChildrenCount_++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Node::removeChild(Node* child) {
|
||||
auto p = std::find(children_.begin(), children_.end(), child);
|
||||
if (p != children_.end()) {
|
||||
@@ -380,6 +391,23 @@ void Node::cloneChildrenIfNeeded() {
|
||||
if (child->getOwner() != this) {
|
||||
child = resolveRef(config_->cloneNode(child, this, i));
|
||||
child->setOwner(this);
|
||||
|
||||
if (child->hasContentsChildren()) [[unlikely]] {
|
||||
child->cloneContentsChildrenIfNeeded();
|
||||
}
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
||||
void Node::cloneContentsChildrenIfNeeded() {
|
||||
size_t i = 0;
|
||||
for (Node*& child : children_) {
|
||||
if (child->style().display() == Display::Contents &&
|
||||
child->getOwner() != this) {
|
||||
child = resolveRef(config_->cloneNode(child, this, i));
|
||||
child->setOwner(this);
|
||||
child->cloneChildrenIfNeeded();
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
|
||||
@@ -96,6 +96,10 @@ class YG_EXPORT Node : public ::YGNode {
|
||||
return config_->hasErrata(errata);
|
||||
}
|
||||
|
||||
bool hasContentsChildren() const {
|
||||
return contentsChildrenCount_ != 0;
|
||||
}
|
||||
|
||||
YGDirtiedFunc getDirtiedFunc() const {
|
||||
return dirtiedFunc_;
|
||||
}
|
||||
@@ -244,15 +248,12 @@ class YG_EXPORT Node : public ::YGNode {
|
||||
owner_ = owner;
|
||||
}
|
||||
|
||||
void setChildren(const std::vector<Node*>& children) {
|
||||
children_ = children;
|
||||
}
|
||||
|
||||
// TODO: rvalue override for setChildren
|
||||
|
||||
void setConfig(Config* config);
|
||||
|
||||
void setDirty(bool isDirty);
|
||||
void setChildren(const std::vector<Node*>& children);
|
||||
void setLayoutLastOwnerDirection(Direction direction);
|
||||
void setLayoutComputedFlexBasis(FloatOptional computedFlexBasis);
|
||||
void setLayoutComputedFlexBasisGeneration(
|
||||
@@ -286,6 +287,7 @@ class YG_EXPORT Node : public ::YGNode {
|
||||
void removeChild(size_t index);
|
||||
|
||||
void cloneChildrenIfNeeded();
|
||||
void cloneContentsChildrenIfNeeded();
|
||||
void markDirtyAndPropagate();
|
||||
float resolveFlexGrow() const;
|
||||
float resolveFlexShrink() const;
|
||||
|
||||
@@ -179,8 +179,8 @@
|
||||
"invariant": "^2.2.4",
|
||||
"jest-environment-node": "^29.7.0",
|
||||
"memoize-one": "^5.0.0",
|
||||
"metro-runtime": "^0.82.5",
|
||||
"metro-source-map": "^0.82.5",
|
||||
"metro-runtime": "^0.83.0",
|
||||
"metro-source-map": "^0.83.0",
|
||||
"nullthrows": "^1.1.1",
|
||||
"pretty-format": "^29.7.0",
|
||||
"promise": "^8.3.0",
|
||||
|
||||
@@ -134,8 +134,8 @@ class ReactNativeCoreUtils
|
||||
## You can use the `ENTERPRISE_REPOSITORY` ariable to customise the base url from which artifacts will be downloaded.
|
||||
## The mirror's structure must be the same of the Maven repo the react-native core team publishes on Maven Central.
|
||||
maven_repo_url =
|
||||
ENV[ENTERPRISE_REPOSITORY] != nil && ENV[ENTERPRISE_REPOSITORY] != "" ?
|
||||
ENV[ENTERPRISE_REPOSITORY] :
|
||||
ENV['ENTERPRISE_REPOSITORY'] != nil && ENV['ENTERPRISE_REPOSITORY'] != "" ?
|
||||
ENV['ENTERPRISE_REPOSITORY'] :
|
||||
"https://repo1.maven.org/maven2"
|
||||
group = "com/facebook/react"
|
||||
# Sample url from Maven:
|
||||
|
||||
@@ -169,8 +169,8 @@ class ReactNativeDependenciesUtils
|
||||
## You can use the `ENTERPRISE_REPOSITORY` ariable to customise the base url from which artifacts will be downloaded.
|
||||
## The mirror's structure must be the same of the Maven repo the react-native core team publishes on Maven Central.
|
||||
maven_repo_url =
|
||||
ENV[ENTERPRISE_REPOSITORY] != nil && ENV[ENTERPRISE_REPOSITORY] != "" ?
|
||||
ENV[ENTERPRISE_REPOSITORY] :
|
||||
ENV['ENTERPRISE_REPOSITORY'] != nil && ENV['ENTERPRISE_REPOSITORY'] != "" ?
|
||||
ENV['ENTERPRISE_REPOSITORY'] :
|
||||
"https://repo1.maven.org/maven2"
|
||||
group = "com/facebook/react"
|
||||
# Sample url from Maven:
|
||||
|
||||
@@ -81,16 +81,6 @@ const definitions: FeatureFlagDefinitions = {
|
||||
},
|
||||
ossReleaseStage: 'none',
|
||||
},
|
||||
disableMainQueueSyncDispatchIOS: {
|
||||
defaultValue: false,
|
||||
metadata: {
|
||||
dateAdded: '2025-04-02',
|
||||
description: 'Disable sync dispatch on the main queue on iOS',
|
||||
expectedReleaseValue: true,
|
||||
purpose: 'experimentation',
|
||||
},
|
||||
ossReleaseStage: 'none',
|
||||
},
|
||||
disableMountItemReorderingAndroid: {
|
||||
defaultValue: false,
|
||||
metadata: {
|
||||
@@ -198,6 +188,16 @@ const definitions: FeatureFlagDefinitions = {
|
||||
},
|
||||
ossReleaseStage: 'none',
|
||||
},
|
||||
enableEagerMainQueueModulesOnIOS: {
|
||||
defaultValue: false,
|
||||
metadata: {
|
||||
description:
|
||||
'This infra allows native modules to initialize on the main thread, during React Native init.',
|
||||
expectedReleaseValue: true,
|
||||
purpose: 'release',
|
||||
},
|
||||
ossReleaseStage: 'none',
|
||||
},
|
||||
enableEagerRootViewAttachment: {
|
||||
defaultValue: false,
|
||||
metadata: {
|
||||
@@ -312,16 +312,6 @@ const definitions: FeatureFlagDefinitions = {
|
||||
},
|
||||
ossReleaseStage: 'none',
|
||||
},
|
||||
enableMainQueueModulesOnIOS: {
|
||||
defaultValue: false,
|
||||
metadata: {
|
||||
description:
|
||||
'Makes modules requiring main queue setup initialize on the main thread, during React Native init.',
|
||||
expectedReleaseValue: true,
|
||||
purpose: 'release',
|
||||
},
|
||||
ossReleaseStage: 'none',
|
||||
},
|
||||
enableModuleArgumentNSNullConversionIOS: {
|
||||
defaultValue: false,
|
||||
metadata: {
|
||||
@@ -533,6 +523,17 @@ const definitions: FeatureFlagDefinitions = {
|
||||
},
|
||||
ossReleaseStage: 'none',
|
||||
},
|
||||
releaseImageDataWhenConsumed: {
|
||||
defaultValue: false,
|
||||
metadata: {
|
||||
dateAdded: '2025-07-10',
|
||||
description:
|
||||
'Releases the cached image data when it is consumed by the observers.',
|
||||
expectedReleaseValue: true,
|
||||
purpose: 'experimentation',
|
||||
},
|
||||
ossReleaseStage: 'none',
|
||||
},
|
||||
traceTurboModulePromiseRejectionsOnAndroid: {
|
||||
defaultValue: false,
|
||||
metadata: {
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
* @format
|
||||
*/
|
||||
|
||||
import typeof FS from 'fs';
|
||||
|
||||
import * as path from 'path';
|
||||
|
||||
const {
|
||||
@@ -25,9 +27,12 @@ const {
|
||||
setHermesTag,
|
||||
shouldUsePrebuiltHermesC,
|
||||
} = require('../hermes-utils');
|
||||
const MemoryFs = require('metro-memory-fs');
|
||||
const os = require('os');
|
||||
|
||||
// $FlowFixMe[untyped-import] (OSS) memfs
|
||||
// $FlowFixMe[cannot-resolve-module] (Meta) memfs
|
||||
const {memfs} = require('memfs') as {memfs: () => {fs: FS}};
|
||||
|
||||
const hermesTag =
|
||||
'hermes-2022-04-28-RNv0.69.0-15d07c2edd29a4ea0b8f15ab0588a0c1adb1200f';
|
||||
const tarballContents = 'dummy string';
|
||||
@@ -147,16 +152,8 @@ describe('hermes-utils', () => {
|
||||
beforeEach(() => {
|
||||
jest.resetModules();
|
||||
|
||||
jest.mock(
|
||||
'fs',
|
||||
() =>
|
||||
new MemoryFs({
|
||||
platform: process.platform === 'win32' ? 'win32' : 'posix',
|
||||
}),
|
||||
);
|
||||
jest.mock('fs', () => memfs().fs);
|
||||
fs = require('fs');
|
||||
// $FlowFixMe[prop-missing]
|
||||
fs.reset();
|
||||
|
||||
populateMockFilesystemWithHermesBuildScripts();
|
||||
|
||||
|
||||
@@ -207,8 +207,8 @@ def release_tarball_url(version, build_type)
|
||||
## You can use the `ENTERPRISE_REPOSITORY` ariable to customise the base url from which artifacts will be downloaded.
|
||||
## The mirror's structure must be the same of the Maven repo the react-native core team publishes on Maven Central.
|
||||
maven_repo_url =
|
||||
ENV[ENTERPRISE_REPOSITORY] != nil && ENV[ENTERPRISE_REPOSITORY] != "" ?
|
||||
ENV[ENTERPRISE_REPOSITORY] :
|
||||
ENV['ENTERPRISE_REPOSITORY'] != nil && ENV['ENTERPRISE_REPOSITORY'] != "" ?
|
||||
ENV['ENTERPRISE_REPOSITORY'] :
|
||||
"https://repo1.maven.org/maven2"
|
||||
namespace = "com/facebook/react"
|
||||
# Sample url from Maven:
|
||||
|
||||
+11
-11
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<1c5a52b9ffce6f221ae263e90a79a8ab>>
|
||||
* @generated SignedSource<<4abf44d370e3056274df1ac8648c9fb2>>
|
||||
* @flow strict
|
||||
* @noformat
|
||||
*/
|
||||
@@ -54,7 +54,6 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
|
||||
commonTestFlagWithoutNativeImplementation: Getter<boolean>,
|
||||
cxxNativeAnimatedEnabled: Getter<boolean>,
|
||||
cxxNativeAnimatedRemoveJsSync: Getter<boolean>,
|
||||
disableMainQueueSyncDispatchIOS: Getter<boolean>,
|
||||
disableMountItemReorderingAndroid: Getter<boolean>,
|
||||
disableTextLayoutManagerCacheAndroid: Getter<boolean>,
|
||||
enableAccessibilityOrder: Getter<boolean>,
|
||||
@@ -65,6 +64,7 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
|
||||
enableCustomFocusSearchOnClippedElementsAndroid: Getter<boolean>,
|
||||
enableDestroyShadowTreeRevisionAsync: Getter<boolean>,
|
||||
enableDoubleMeasurementFixAndroid: Getter<boolean>,
|
||||
enableEagerMainQueueModulesOnIOS: Getter<boolean>,
|
||||
enableEagerRootViewAttachment: Getter<boolean>,
|
||||
enableFabricLogs: Getter<boolean>,
|
||||
enableFabricRenderer: Getter<boolean>,
|
||||
@@ -76,7 +76,6 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
|
||||
enableLayoutAnimationsOnAndroid: Getter<boolean>,
|
||||
enableLayoutAnimationsOnIOS: Getter<boolean>,
|
||||
enableMainQueueCoordinatorOnIOS: Getter<boolean>,
|
||||
enableMainQueueModulesOnIOS: Getter<boolean>,
|
||||
enableModuleArgumentNSNullConversionIOS: Getter<boolean>,
|
||||
enableNativeCSSParsing: Getter<boolean>,
|
||||
enableNetworkEventReporting: Getter<boolean>,
|
||||
@@ -97,6 +96,7 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
|
||||
fuseboxNetworkInspectionEnabled: Getter<boolean>,
|
||||
hideOffscreenVirtualViewsOnIOS: Getter<boolean>,
|
||||
preparedTextCacheSize: Getter<number>,
|
||||
releaseImageDataWhenConsumed: Getter<boolean>,
|
||||
traceTurboModulePromiseRejectionsOnAndroid: Getter<boolean>,
|
||||
updateRuntimeShadowNodeReferencesOnCommit: Getter<boolean>,
|
||||
useAlwaysAvailableJSErrorHandling: Getter<boolean>,
|
||||
@@ -206,10 +206,6 @@ export const cxxNativeAnimatedEnabled: Getter<boolean> = createNativeFlagGetter(
|
||||
* Removes JS sync at end of native animation
|
||||
*/
|
||||
export const cxxNativeAnimatedRemoveJsSync: Getter<boolean> = createNativeFlagGetter('cxxNativeAnimatedRemoveJsSync', false);
|
||||
/**
|
||||
* Disable sync dispatch on the main queue on iOS
|
||||
*/
|
||||
export const disableMainQueueSyncDispatchIOS: Getter<boolean> = createNativeFlagGetter('disableMainQueueSyncDispatchIOS', false);
|
||||
/**
|
||||
* Prevent FabricMountingManager from reordering mountItems, which may lead to invalid state on the UI thread
|
||||
*/
|
||||
@@ -250,6 +246,10 @@ export const enableDestroyShadowTreeRevisionAsync: Getter<boolean> = createNativ
|
||||
* When enabled a subset of components will avoid double measurement on Android.
|
||||
*/
|
||||
export const enableDoubleMeasurementFixAndroid: Getter<boolean> = createNativeFlagGetter('enableDoubleMeasurementFixAndroid', false);
|
||||
/**
|
||||
* This infra allows native modules to initialize on the main thread, during React Native init.
|
||||
*/
|
||||
export const enableEagerMainQueueModulesOnIOS: Getter<boolean> = createNativeFlagGetter('enableEagerMainQueueModulesOnIOS', false);
|
||||
/**
|
||||
* Feature flag to configure eager attachment of the root view/initialisation of the JS code.
|
||||
*/
|
||||
@@ -294,10 +294,6 @@ export const enableLayoutAnimationsOnIOS: Getter<boolean> = createNativeFlagGett
|
||||
* Make RCTUnsafeExecuteOnMainQueueSync less likely to deadlock, when used in conjuction with sync rendering/events.
|
||||
*/
|
||||
export const enableMainQueueCoordinatorOnIOS: Getter<boolean> = createNativeFlagGetter('enableMainQueueCoordinatorOnIOS', false);
|
||||
/**
|
||||
* Makes modules requiring main queue setup initialize on the main thread, during React Native init.
|
||||
*/
|
||||
export const enableMainQueueModulesOnIOS: Getter<boolean> = createNativeFlagGetter('enableMainQueueModulesOnIOS', false);
|
||||
/**
|
||||
* Enable NSNull conversion when handling module arguments on iOS
|
||||
*/
|
||||
@@ -378,6 +374,10 @@ export const hideOffscreenVirtualViewsOnIOS: Getter<boolean> = createNativeFlagG
|
||||
* Number cached PreparedLayouts in TextLayoutManager cache
|
||||
*/
|
||||
export const preparedTextCacheSize: Getter<number> = createNativeFlagGetter('preparedTextCacheSize', 200);
|
||||
/**
|
||||
* Releases the cached image data when it is consumed by the observers.
|
||||
*/
|
||||
export const releaseImageDataWhenConsumed: Getter<boolean> = createNativeFlagGetter('releaseImageDataWhenConsumed', false);
|
||||
/**
|
||||
* Enables storing js caller stack when creating promise in native module. This is useful in case of Promise rejection and tracing the cause.
|
||||
*/
|
||||
|
||||
+3
-3
@@ -4,7 +4,7 @@
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @generated SignedSource<<5935f4d8ec94954d583ad79116e8daba>>
|
||||
* @generated SignedSource<<6cac48969d6e6bc72bd7713f9aaaf86e>>
|
||||
* @flow strict
|
||||
* @noformat
|
||||
*/
|
||||
@@ -28,7 +28,6 @@ export interface Spec extends TurboModule {
|
||||
+commonTestFlagWithoutNativeImplementation?: () => boolean;
|
||||
+cxxNativeAnimatedEnabled?: () => boolean;
|
||||
+cxxNativeAnimatedRemoveJsSync?: () => boolean;
|
||||
+disableMainQueueSyncDispatchIOS?: () => boolean;
|
||||
+disableMountItemReorderingAndroid?: () => boolean;
|
||||
+disableTextLayoutManagerCacheAndroid?: () => boolean;
|
||||
+enableAccessibilityOrder?: () => boolean;
|
||||
@@ -39,6 +38,7 @@ export interface Spec extends TurboModule {
|
||||
+enableCustomFocusSearchOnClippedElementsAndroid?: () => boolean;
|
||||
+enableDestroyShadowTreeRevisionAsync?: () => boolean;
|
||||
+enableDoubleMeasurementFixAndroid?: () => boolean;
|
||||
+enableEagerMainQueueModulesOnIOS?: () => boolean;
|
||||
+enableEagerRootViewAttachment?: () => boolean;
|
||||
+enableFabricLogs?: () => boolean;
|
||||
+enableFabricRenderer?: () => boolean;
|
||||
@@ -50,7 +50,6 @@ export interface Spec extends TurboModule {
|
||||
+enableLayoutAnimationsOnAndroid?: () => boolean;
|
||||
+enableLayoutAnimationsOnIOS?: () => boolean;
|
||||
+enableMainQueueCoordinatorOnIOS?: () => boolean;
|
||||
+enableMainQueueModulesOnIOS?: () => boolean;
|
||||
+enableModuleArgumentNSNullConversionIOS?: () => boolean;
|
||||
+enableNativeCSSParsing?: () => boolean;
|
||||
+enableNetworkEventReporting?: () => boolean;
|
||||
@@ -71,6 +70,7 @@ export interface Spec extends TurboModule {
|
||||
+fuseboxNetworkInspectionEnabled?: () => boolean;
|
||||
+hideOffscreenVirtualViewsOnIOS?: () => boolean;
|
||||
+preparedTextCacheSize?: () => number;
|
||||
+releaseImageDataWhenConsumed?: () => boolean;
|
||||
+traceTurboModulePromiseRejectionsOnAndroid?: () => boolean;
|
||||
+updateRuntimeShadowNodeReferencesOnCommit?: () => boolean;
|
||||
+useAlwaysAvailableJSErrorHandling?: () => boolean;
|
||||
|
||||
@@ -15,7 +15,11 @@ import type {
|
||||
PerformanceEntryList,
|
||||
PerformanceEntryType,
|
||||
} from './PerformanceEntry';
|
||||
import type {DetailType, PerformanceMarkOptions} from './UserTiming';
|
||||
import type {
|
||||
DetailType,
|
||||
PerformanceMarkOptions,
|
||||
PerformanceMeasureInit,
|
||||
} from './UserTiming';
|
||||
|
||||
import DOMException from '../errors/DOMException';
|
||||
import structuredClone from '../structuredClone/structuredClone';
|
||||
@@ -25,35 +29,46 @@ import {
|
||||
performanceEntryTypeToRaw,
|
||||
rawToPerformanceEntry,
|
||||
} from './internals/RawPerformanceEntry';
|
||||
import {warnNoNativePerformance} from './internals/Utilities';
|
||||
import {
|
||||
getCurrentTimeStamp,
|
||||
warnNoNativePerformance,
|
||||
} from './internals/Utilities';
|
||||
import MemoryInfo from './MemoryInfo';
|
||||
import ReactNativeStartupTiming from './ReactNativeStartupTiming';
|
||||
import NativePerformance from './specs/NativePerformance';
|
||||
import {PerformanceMark, PerformanceMeasure} from './UserTiming';
|
||||
|
||||
declare var global: {
|
||||
// This value is defined directly via JSI, if available.
|
||||
+nativePerformanceNow?: ?() => number,
|
||||
};
|
||||
|
||||
const getCurrentTimeStamp: () => DOMHighResTimeStamp =
|
||||
NativePerformance?.now ?? global.nativePerformanceNow ?? (() => Date.now());
|
||||
|
||||
export type PerformanceMeasureOptions =
|
||||
| {
|
||||
| $ReadOnly<{
|
||||
detail?: DetailType,
|
||||
start?: DOMHighResTimeStamp | string,
|
||||
duration?: DOMHighResTimeStamp,
|
||||
}
|
||||
| {
|
||||
}>
|
||||
| $ReadOnly<{
|
||||
detail?: DetailType,
|
||||
start?: DOMHighResTimeStamp | string,
|
||||
end?: DOMHighResTimeStamp | string,
|
||||
};
|
||||
}>;
|
||||
|
||||
const ENTRY_TYPES_AVAILABLE_FROM_TIMELINE: $ReadOnlyArray<PerformanceEntryType> =
|
||||
['mark', 'measure'];
|
||||
|
||||
const cachedNativeMark = NativePerformance?.markWithResult;
|
||||
const cachedNativeMeasure = NativePerformance?.measure;
|
||||
const cachedNativeClearMarks = NativePerformance?.clearMarks;
|
||||
const cachedNativeClearMeasures = NativePerformance?.clearMeasures;
|
||||
|
||||
const MARK_OPTIONS_REUSABLE_OBJECT: {...PerformanceMarkOptions} = {
|
||||
startTime: 0,
|
||||
detail: undefined,
|
||||
};
|
||||
|
||||
const MEASURE_OPTIONS_REUSABLE_OBJECT: {...PerformanceMeasureInit} = {
|
||||
startTime: 0,
|
||||
duration: 0,
|
||||
detail: undefined,
|
||||
};
|
||||
|
||||
/**
|
||||
* Partial implementation of the Performance interface for RN,
|
||||
* corresponding to the standard in
|
||||
@@ -117,58 +132,68 @@ export default class Performance {
|
||||
markName: string,
|
||||
markOptions?: PerformanceMarkOptions,
|
||||
): PerformanceMark {
|
||||
if (markName == null) {
|
||||
// IMPORTANT: this method has been micro-optimized.
|
||||
// Please run the benchmarks in `Performance-benchmarks-itest` to ensure
|
||||
// changes do not regress performance.
|
||||
|
||||
if (markName === undefined) {
|
||||
throw new TypeError(
|
||||
`Failed to execute 'mark' on 'Performance': 1 argument required, but only 0 present.`,
|
||||
);
|
||||
}
|
||||
|
||||
const resolvedMarkName =
|
||||
typeof markName === 'string' ? markName : String(markName);
|
||||
|
||||
let resolvedDetail;
|
||||
if (markOptions?.detail != null) {
|
||||
resolvedDetail = structuredClone(markOptions.detail);
|
||||
const detail = markOptions?.detail;
|
||||
if (detail !== undefined) {
|
||||
resolvedDetail = structuredClone(detail);
|
||||
}
|
||||
|
||||
let computedStartTime;
|
||||
if (NativePerformance?.markWithResult) {
|
||||
if (cachedNativeMark) {
|
||||
let resolvedStartTime;
|
||||
|
||||
const startTime = markOptions?.startTime;
|
||||
if (startTime !== undefined) {
|
||||
resolvedStartTime = Number(startTime);
|
||||
resolvedStartTime =
|
||||
typeof startTime === 'number' ? startTime : Number(startTime);
|
||||
if (resolvedStartTime < 0) {
|
||||
throw new TypeError(
|
||||
`Failed to execute 'mark' on 'Performance': '${markName}' cannot have a negative start time.`,
|
||||
`Failed to execute 'mark' on 'Performance': '${resolvedMarkName}' cannot have a negative start time.`,
|
||||
);
|
||||
} else if (!Number.isFinite(resolvedStartTime)) {
|
||||
} else if (
|
||||
// This is faster than calling Number.isFinite()
|
||||
// eslint-disable-next-line no-self-compare
|
||||
resolvedStartTime !== resolvedStartTime ||
|
||||
resolvedStartTime === Infinity
|
||||
) {
|
||||
throw new TypeError(
|
||||
`Failed to execute 'mark' on 'Performance': Failed to read the 'startTime' property from 'PerformanceMarkOptions': The provided double value is non-finite.`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// $FlowExpectedError[not-a-function]
|
||||
computedStartTime = NativePerformance.markWithResult(
|
||||
markName,
|
||||
resolvedStartTime,
|
||||
);
|
||||
computedStartTime = cachedNativeMark(resolvedMarkName, resolvedStartTime);
|
||||
} else {
|
||||
warnNoNativePerformance();
|
||||
computedStartTime = performance.now();
|
||||
computedStartTime = getCurrentTimeStamp();
|
||||
}
|
||||
|
||||
return new PerformanceMark(markName, {
|
||||
startTime: computedStartTime,
|
||||
detail: resolvedDetail,
|
||||
});
|
||||
MARK_OPTIONS_REUSABLE_OBJECT.startTime = computedStartTime;
|
||||
MARK_OPTIONS_REUSABLE_OBJECT.detail = resolvedDetail;
|
||||
|
||||
return new PerformanceMark(resolvedMarkName, MARK_OPTIONS_REUSABLE_OBJECT);
|
||||
}
|
||||
|
||||
clearMarks(markName?: string): void {
|
||||
if (!NativePerformance?.clearMarks) {
|
||||
if (!cachedNativeClearMarks) {
|
||||
warnNoNativePerformance();
|
||||
return;
|
||||
}
|
||||
|
||||
NativePerformance.clearMarks(markName);
|
||||
cachedNativeClearMarks(markName);
|
||||
}
|
||||
|
||||
measure(
|
||||
@@ -176,6 +201,18 @@ export default class Performance {
|
||||
startMarkOrOptions?: string | PerformanceMeasureOptions,
|
||||
endMark?: string,
|
||||
): PerformanceMeasure {
|
||||
// IMPORTANT: this method has been micro-optimized.
|
||||
// Please run the benchmarks in `Performance-benchmarks-itest` to ensure
|
||||
// changes do not regress performance.
|
||||
|
||||
if (measureName === undefined) {
|
||||
throw new TypeError(
|
||||
`Failed to execute 'measure' on 'Performance': 1 argument required, but only 0 present.`,
|
||||
);
|
||||
}
|
||||
|
||||
let resolvedMeasureName =
|
||||
typeof measureName === 'string' ? measureName : String(measureName);
|
||||
let resolvedStartTime: number | void;
|
||||
let resolvedStartMark: string | void;
|
||||
let resolvedEndTime: number | void;
|
||||
@@ -186,7 +223,7 @@ export default class Performance {
|
||||
if (startMarkOrOptions != null) {
|
||||
switch (typeof startMarkOrOptions) {
|
||||
case 'object': {
|
||||
if (endMark != null) {
|
||||
if (endMark !== undefined) {
|
||||
throw new TypeError(
|
||||
`Failed to execute 'measure' on 'Performance': If a non-empty PerformanceMeasureOptions object was passed, |end_mark| must not be passed.`,
|
||||
);
|
||||
@@ -247,8 +284,8 @@ export default class Performance {
|
||||
}
|
||||
|
||||
if (
|
||||
resolvedDuration != null &&
|
||||
(resolvedEndMark != null || resolvedEndTime != null)
|
||||
resolvedDuration !== undefined &&
|
||||
(resolvedEndMark !== undefined || resolvedEndTime !== undefined)
|
||||
) {
|
||||
throw new TypeError(
|
||||
`Failed to execute 'measure' on 'Performance': If a non-empty PerformanceMeasureOptions object was passed, it must not have all of its 'start', 'duration', and 'end' properties defined`,
|
||||
@@ -256,7 +293,7 @@ export default class Performance {
|
||||
}
|
||||
|
||||
const detail = startMarkOrOptions.detail;
|
||||
if (detail != null) {
|
||||
if (detail !== undefined) {
|
||||
resolvedDetail = structuredClone(detail);
|
||||
}
|
||||
|
||||
@@ -279,10 +316,10 @@ export default class Performance {
|
||||
let computedStartTime = 0;
|
||||
let computedDuration = 0;
|
||||
|
||||
if (NativePerformance?.measure) {
|
||||
if (cachedNativeMeasure) {
|
||||
try {
|
||||
[computedStartTime, computedDuration] = NativePerformance.measure(
|
||||
measureName,
|
||||
[computedStartTime, computedDuration] = cachedNativeMeasure(
|
||||
resolvedMeasureName,
|
||||
resolvedStartTime,
|
||||
resolvedEndTime,
|
||||
resolvedDuration,
|
||||
@@ -299,7 +336,7 @@ export default class Performance {
|
||||
try {
|
||||
[computedStartTime, computedDuration] =
|
||||
NativePerformance.measureWithResult(
|
||||
measureName,
|
||||
resolvedMeasureName,
|
||||
resolvedStartTime ?? 0,
|
||||
resolvedEndTime ?? 0,
|
||||
resolvedDuration,
|
||||
@@ -316,22 +353,23 @@ export default class Performance {
|
||||
warnNoNativePerformance();
|
||||
}
|
||||
|
||||
const measure = new PerformanceMeasure(measureName, {
|
||||
startTime: computedStartTime,
|
||||
duration: computedDuration ?? 0,
|
||||
detail: resolvedDetail,
|
||||
});
|
||||
MEASURE_OPTIONS_REUSABLE_OBJECT.startTime = computedStartTime;
|
||||
MEASURE_OPTIONS_REUSABLE_OBJECT.duration = computedDuration ?? 0;
|
||||
MEASURE_OPTIONS_REUSABLE_OBJECT.detail = resolvedDetail;
|
||||
|
||||
return measure;
|
||||
return new PerformanceMeasure(
|
||||
resolvedMeasureName,
|
||||
MEASURE_OPTIONS_REUSABLE_OBJECT,
|
||||
);
|
||||
}
|
||||
|
||||
clearMeasures(measureName?: string): void {
|
||||
if (!NativePerformance?.clearMeasures) {
|
||||
if (!cachedNativeClearMeasures) {
|
||||
warnNoNativePerformance();
|
||||
return;
|
||||
}
|
||||
|
||||
NativePerformance?.clearMeasures(measureName);
|
||||
cachedNativeClearMeasures(measureName);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -12,44 +12,43 @@
|
||||
|
||||
import type {DOMHighResTimeStamp} from './PerformanceEntry';
|
||||
|
||||
import {getCurrentTimeStamp} from './internals/Utilities';
|
||||
import {PerformanceEntry} from './PerformanceEntry';
|
||||
|
||||
export type DetailType = mixed;
|
||||
|
||||
export type PerformanceMarkOptions = {
|
||||
export type PerformanceMarkOptions = $ReadOnly<{
|
||||
detail?: DetailType,
|
||||
startTime?: DOMHighResTimeStamp,
|
||||
};
|
||||
}>;
|
||||
|
||||
export type TimeStampOrName = DOMHighResTimeStamp | string;
|
||||
|
||||
export type PerformanceMeasureInit = {
|
||||
export type PerformanceMeasureInit = $ReadOnly<{
|
||||
detail?: DetailType,
|
||||
startTime: DOMHighResTimeStamp,
|
||||
duration: DOMHighResTimeStamp,
|
||||
};
|
||||
}>;
|
||||
|
||||
class PerformanceMarkTemplate extends PerformanceEntry {
|
||||
// We don't use private fields because they're significantly slower to
|
||||
// initialize on construction and to access.
|
||||
_detail: DetailType;
|
||||
__detail: DetailType;
|
||||
|
||||
// This constructor isn't really used. See `PerformanceMark` below.
|
||||
constructor(markName: string, markOptions?: PerformanceMarkOptions) {
|
||||
super({
|
||||
name: markName,
|
||||
entryType: 'mark',
|
||||
startTime: markOptions?.startTime ?? performance.now(),
|
||||
startTime: markOptions?.startTime ?? getCurrentTimeStamp(),
|
||||
duration: 0,
|
||||
});
|
||||
|
||||
if (markOptions) {
|
||||
this._detail = markOptions.detail;
|
||||
}
|
||||
this.__detail = markOptions?.detail ?? null;
|
||||
}
|
||||
|
||||
get detail(): DetailType {
|
||||
return this._detail;
|
||||
return this.__detail;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,12 +66,10 @@ export const PerformanceMark: typeof PerformanceMarkTemplate =
|
||||
) {
|
||||
this.__name = markName;
|
||||
this.__entryType = 'mark';
|
||||
this.__startTime = markOptions?.startTime ?? performance.now();
|
||||
this.__startTime = markOptions?.startTime ?? getCurrentTimeStamp();
|
||||
this.__duration = 0;
|
||||
|
||||
if (markOptions) {
|
||||
this._detail = markOptions.detail;
|
||||
}
|
||||
this.__detail = markOptions?.detail ?? null;
|
||||
};
|
||||
|
||||
// $FlowExpectedError[prop-missing]
|
||||
@@ -81,7 +78,7 @@ PerformanceMark.prototype = PerformanceMarkTemplate.prototype;
|
||||
class PerformanceMeasureTemplate extends PerformanceEntry {
|
||||
// We don't use private fields because they're significantly slower to
|
||||
// initialize on construction and to access.
|
||||
_detail: DetailType;
|
||||
__detail: DetailType;
|
||||
|
||||
// This constructor isn't really used. See `PerformanceMeasure` below.
|
||||
constructor(measureName: string, measureOptions: PerformanceMeasureInit) {
|
||||
@@ -92,13 +89,11 @@ class PerformanceMeasureTemplate extends PerformanceEntry {
|
||||
duration: measureOptions.duration,
|
||||
});
|
||||
|
||||
if (measureOptions) {
|
||||
this._detail = measureOptions.detail;
|
||||
}
|
||||
this.__detail = measureOptions?.detail ?? null;
|
||||
}
|
||||
|
||||
get detail(): DetailType {
|
||||
return this._detail;
|
||||
return this.__detail;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,9 +110,7 @@ export const PerformanceMeasure: typeof PerformanceMeasureTemplate =
|
||||
this.__startTime = measureOptions.startTime;
|
||||
this.__duration = measureOptions.duration;
|
||||
|
||||
if (measureOptions) {
|
||||
this._detail = measureOptions.detail;
|
||||
}
|
||||
this.__detail = measureOptions.detail ?? null;
|
||||
};
|
||||
|
||||
// $FlowExpectedError[prop-missing]
|
||||
|
||||
Vendored
+9
@@ -44,6 +44,15 @@ Fantom.unstable_benchmark
|
||||
afterEach: clearMarksAndMeasures,
|
||||
},
|
||||
)
|
||||
.test(
|
||||
'measure (default)',
|
||||
() => {
|
||||
performance.measure('measure');
|
||||
},
|
||||
{
|
||||
afterEach: clearMarksAndMeasures,
|
||||
},
|
||||
)
|
||||
.test(
|
||||
'measure (with start and end timestamps)',
|
||||
() => {
|
||||
|
||||
+51
-13
@@ -53,7 +53,7 @@ describe('Performance', () => {
|
||||
expect(mark.name).toBe('mark-now');
|
||||
expect(mark.startTime).toBe(25);
|
||||
expect(mark.duration).toBe(0);
|
||||
expect(mark.detail).toBeUndefined();
|
||||
expect(mark.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('works with custom timestamp', () => {
|
||||
@@ -64,7 +64,7 @@ describe('Performance', () => {
|
||||
expect(mark.name).toBe('mark-custom');
|
||||
expect(mark.startTime).toBe(10);
|
||||
expect(mark.duration).toBe(0);
|
||||
expect(mark.detail).toBeUndefined();
|
||||
expect(mark.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('provides detail', () => {
|
||||
@@ -78,6 +78,13 @@ describe('Performance', () => {
|
||||
expect(mark.detail).not.toBe(originalDetail);
|
||||
});
|
||||
|
||||
it('provides a null detail if it is not provided or is undefined', () => {
|
||||
expect(performance.mark('mark-without-detail').detail).toBe(null);
|
||||
expect(
|
||||
performance.mark('mark-without-detail', {detail: undefined}).detail,
|
||||
).toBe(null);
|
||||
});
|
||||
|
||||
it('throws if no name is provided', () => {
|
||||
expect(() => {
|
||||
// $FlowExpectedError[incompatible-call]
|
||||
@@ -87,6 +94,13 @@ describe('Performance', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('casts mark name to a string', () => {
|
||||
// $FlowExpectedError[incompatible-call]
|
||||
const mark = performance.mark(10);
|
||||
|
||||
expect(mark.name).toBe('10');
|
||||
});
|
||||
|
||||
it('casts startTime to a number', () => {
|
||||
const mark = performance.mark('some-mark', {
|
||||
// $FlowExpectedError[incompatible-call]
|
||||
@@ -139,7 +153,7 @@ describe('Performance', () => {
|
||||
expect(measure.name).toBe('measure-with-defaults');
|
||||
expect(measure.startTime).toBe(0);
|
||||
expect(measure.duration).toBe(25);
|
||||
expect(measure.detail).toBeUndefined();
|
||||
expect(measure.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('works with a start timestamp', () => {
|
||||
@@ -154,7 +168,7 @@ describe('Performance', () => {
|
||||
expect(measure.name).toBe('measure-with-start-timestamp');
|
||||
expect(measure.startTime).toBe(10);
|
||||
expect(measure.duration).toBe(15);
|
||||
expect(measure.detail).toBeUndefined();
|
||||
expect(measure.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('works with start mark', () => {
|
||||
@@ -173,7 +187,7 @@ describe('Performance', () => {
|
||||
expect(measure.name).toBe('measure-with-start-mark');
|
||||
expect(measure.startTime).toBe(10);
|
||||
expect(measure.duration).toBe(15);
|
||||
expect(measure.detail).toBeUndefined();
|
||||
expect(measure.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('works with end mark', () => {
|
||||
@@ -192,7 +206,7 @@ describe('Performance', () => {
|
||||
expect(measure.name).toBe('measure-with-end-mark');
|
||||
expect(measure.startTime).toBe(0);
|
||||
expect(measure.duration).toBe(50);
|
||||
expect(measure.detail).toBeUndefined();
|
||||
expect(measure.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('works with start mark and end mark', () => {
|
||||
@@ -219,7 +233,7 @@ describe('Performance', () => {
|
||||
expect(measure.name).toBe('measure-with-start-mark-and-end-mark');
|
||||
expect(measure.startTime).toBe(10);
|
||||
expect(measure.duration).toBe(40);
|
||||
expect(measure.detail).toBeUndefined();
|
||||
expect(measure.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('works with a start timestamp and an end timestamp', () => {
|
||||
@@ -238,7 +252,7 @@ describe('Performance', () => {
|
||||
);
|
||||
expect(measure.startTime).toBe(10);
|
||||
expect(measure.duration).toBe(15);
|
||||
expect(measure.detail).toBeUndefined();
|
||||
expect(measure.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('works with a start timestamp and a duration', () => {
|
||||
@@ -255,7 +269,7 @@ describe('Performance', () => {
|
||||
expect(measure.name).toBe('measure-with-start-timestamp-and-duration');
|
||||
expect(measure.startTime).toBe(10);
|
||||
expect(measure.duration).toBe(30);
|
||||
expect(measure.detail).toBeUndefined();
|
||||
expect(measure.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('works with a start mark and a duration', () => {
|
||||
@@ -276,7 +290,7 @@ describe('Performance', () => {
|
||||
expect(measure.name).toBe('measure-with-start-mark-and-duration');
|
||||
expect(measure.startTime).toBe(10);
|
||||
expect(measure.duration).toBe(30);
|
||||
expect(measure.detail).toBeUndefined();
|
||||
expect(measure.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('throws if the specified mark does NOT exist', () => {
|
||||
@@ -332,7 +346,7 @@ describe('Performance', () => {
|
||||
expect(measure.name).toBe('measure-with-defaults');
|
||||
expect(measure.startTime).toBe(0);
|
||||
expect(measure.duration).toBe(25);
|
||||
expect(measure.detail).toBeUndefined();
|
||||
expect(measure.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('works with startMark', () => {
|
||||
@@ -352,7 +366,7 @@ describe('Performance', () => {
|
||||
expect(measure.name).toBe('measure-with-start-mark');
|
||||
expect(measure.startTime).toBe(10);
|
||||
expect(measure.duration).toBe(15);
|
||||
expect(measure.detail).toBeUndefined();
|
||||
expect(measure.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('works with startMark and endMark', () => {
|
||||
@@ -376,7 +390,7 @@ describe('Performance', () => {
|
||||
expect(measure.name).toBe('measure-with-start-mark-and-end-mark');
|
||||
expect(measure.startTime).toBe(10);
|
||||
expect(measure.duration).toBe(15);
|
||||
expect(measure.detail).toBeUndefined();
|
||||
expect(measure.detail).toBe(null);
|
||||
});
|
||||
|
||||
it('throws if the specified marks do NOT exist', () => {
|
||||
@@ -424,6 +438,30 @@ describe('Performance', () => {
|
||||
expect(measure.detail).toEqual(originalDetail);
|
||||
expect(measure.detail).not.toBe(originalDetail);
|
||||
});
|
||||
|
||||
it('provides a null detail if it is not provided or is undefined', () => {
|
||||
expect(performance.measure('measure-without-detail').detail).toBe(null);
|
||||
expect(
|
||||
performance.measure('measure-without-detail', {detail: undefined})
|
||||
.detail,
|
||||
).toBe(null);
|
||||
});
|
||||
|
||||
it('casts measure name to a string', () => {
|
||||
// $FlowExpectedError[incompatible-call]
|
||||
const measure = performance.measure(10);
|
||||
|
||||
expect(measure.name).toBe('10');
|
||||
});
|
||||
|
||||
it('throws if no name is provided', () => {
|
||||
expect(() => {
|
||||
// $FlowExpectedError[incompatible-call]
|
||||
performance.measure();
|
||||
}).toThrow(
|
||||
`Failed to execute 'measure' on 'Performance': 1 argument required, but only 0 present.`,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getting and clearing marks and measures', () => {
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
*/
|
||||
|
||||
import warnOnce from '../../../../../Libraries/Utilities/warnOnce';
|
||||
import NativePerformance from '../specs/NativePerformance';
|
||||
|
||||
export function warnNoNativePerformance() {
|
||||
warnOnce(
|
||||
@@ -16,3 +17,11 @@ export function warnNoNativePerformance() {
|
||||
'Missing native implementation of Performance',
|
||||
);
|
||||
}
|
||||
|
||||
declare var global: {
|
||||
// This value is defined directly via JSI, if available.
|
||||
+nativePerformanceNow?: ?() => number,
|
||||
};
|
||||
|
||||
export const getCurrentTimeStamp: () => DOMHighResTimeStamp =
|
||||
NativePerformance?.now ?? global.nativePerformanceNow ?? (() => Date.now());
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user