mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Compare commits
35
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7f38795c8a | ||
|
|
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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
*
|
||||
|
||||
+7
-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<<f45b66a7bbafef525b79c657522d062e>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
+11
-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<<455793458c7d1f7c3efb33a3ae2c017c>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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
|
||||
@@ -105,15 +104,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 +194,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 +302,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) {
|
||||
|
||||
+3
-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<<9588b972841baa23bd3bb3b7326b4710>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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
|
||||
|
||||
+3
-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<<7b6a844d99839c72647d6685d72f6896>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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
|
||||
|
||||
+12
-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<<d6024891cd1852741976e94cd6d637c6>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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
|
||||
@@ -112,16 +111,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 +211,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 +331,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) {
|
||||
|
||||
+3
-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<<391d35ccb9b7004fd8d9643df9a08ab5>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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
|
||||
|
||||
+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 {
|
||||
|
||||
+15
-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<<62ecfcd8d00ce03d659715bbb3f4a235>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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");
|
||||
@@ -400,11 +394,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 +444,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 +504,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();
|
||||
@@ -710,9 +699,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
||||
makeNativeMethod(
|
||||
"cxxNativeAnimatedRemoveJsSync",
|
||||
JReactNativeFeatureFlagsCxxInterop::cxxNativeAnimatedRemoveJsSync),
|
||||
makeNativeMethod(
|
||||
"disableMainQueueSyncDispatchIOS",
|
||||
JReactNativeFeatureFlagsCxxInterop::disableMainQueueSyncDispatchIOS),
|
||||
makeNativeMethod(
|
||||
"disableMountItemReorderingAndroid",
|
||||
JReactNativeFeatureFlagsCxxInterop::disableMountItemReorderingAndroid),
|
||||
@@ -743,6 +729,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
||||
makeNativeMethod(
|
||||
"enableDoubleMeasurementFixAndroid",
|
||||
JReactNativeFeatureFlagsCxxInterop::enableDoubleMeasurementFixAndroid),
|
||||
makeNativeMethod(
|
||||
"enableEagerMainQueueModulesOnIOS",
|
||||
JReactNativeFeatureFlagsCxxInterop::enableEagerMainQueueModulesOnIOS),
|
||||
makeNativeMethod(
|
||||
"enableEagerRootViewAttachment",
|
||||
JReactNativeFeatureFlagsCxxInterop::enableEagerRootViewAttachment),
|
||||
@@ -776,9 +765,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
||||
makeNativeMethod(
|
||||
"enableMainQueueCoordinatorOnIOS",
|
||||
JReactNativeFeatureFlagsCxxInterop::enableMainQueueCoordinatorOnIOS),
|
||||
makeNativeMethod(
|
||||
"enableMainQueueModulesOnIOS",
|
||||
JReactNativeFeatureFlagsCxxInterop::enableMainQueueModulesOnIOS),
|
||||
makeNativeMethod(
|
||||
"enableModuleArgumentNSNullConversionIOS",
|
||||
JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS),
|
||||
|
||||
+4
-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<<ec300827bf856bec4f381351be4fae21>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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>);
|
||||
|
||||
|
||||
@@ -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<<03e0a51aa0f46ee7ad956b2a02192c2e>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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<<e6c1138d3b50c0a8db0194828b448741>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
+60
-78
@@ -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<<8dc8477fa5453260c803e37fb8c7f47c>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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;
|
||||
@@ -866,7 +848,7 @@ bool ReactNativeFeatureFlagsAccessor::traceTurboModulePromiseRejectionsOnAndroid
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(46, "traceTurboModulePromiseRejectionsOnAndroid");
|
||||
markFlagAsAccessed(45, "traceTurboModulePromiseRejectionsOnAndroid");
|
||||
|
||||
flagValue = currentProvider_->traceTurboModulePromiseRejectionsOnAndroid();
|
||||
traceTurboModulePromiseRejectionsOnAndroid_ = flagValue;
|
||||
@@ -884,7 +866,7 @@ bool ReactNativeFeatureFlagsAccessor::updateRuntimeShadowNodeReferencesOnCommit(
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(47, "updateRuntimeShadowNodeReferencesOnCommit");
|
||||
markFlagAsAccessed(46, "updateRuntimeShadowNodeReferencesOnCommit");
|
||||
|
||||
flagValue = currentProvider_->updateRuntimeShadowNodeReferencesOnCommit();
|
||||
updateRuntimeShadowNodeReferencesOnCommit_ = flagValue;
|
||||
@@ -902,7 +884,7 @@ bool ReactNativeFeatureFlagsAccessor::useAlwaysAvailableJSErrorHandling() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(48, "useAlwaysAvailableJSErrorHandling");
|
||||
markFlagAsAccessed(47, "useAlwaysAvailableJSErrorHandling");
|
||||
|
||||
flagValue = currentProvider_->useAlwaysAvailableJSErrorHandling();
|
||||
useAlwaysAvailableJSErrorHandling_ = flagValue;
|
||||
@@ -920,7 +902,7 @@ bool ReactNativeFeatureFlagsAccessor::useFabricInterop() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(49, "useFabricInterop");
|
||||
markFlagAsAccessed(48, "useFabricInterop");
|
||||
|
||||
flagValue = currentProvider_->useFabricInterop();
|
||||
useFabricInterop_ = flagValue;
|
||||
@@ -938,7 +920,7 @@ bool ReactNativeFeatureFlagsAccessor::useNativeViewConfigsInBridgelessMode() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(50, "useNativeViewConfigsInBridgelessMode");
|
||||
markFlagAsAccessed(49, "useNativeViewConfigsInBridgelessMode");
|
||||
|
||||
flagValue = currentProvider_->useNativeViewConfigsInBridgelessMode();
|
||||
useNativeViewConfigsInBridgelessMode_ = flagValue;
|
||||
@@ -956,7 +938,7 @@ bool ReactNativeFeatureFlagsAccessor::useOptimizedEventBatchingOnAndroid() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(51, "useOptimizedEventBatchingOnAndroid");
|
||||
markFlagAsAccessed(50, "useOptimizedEventBatchingOnAndroid");
|
||||
|
||||
flagValue = currentProvider_->useOptimizedEventBatchingOnAndroid();
|
||||
useOptimizedEventBatchingOnAndroid_ = flagValue;
|
||||
@@ -974,7 +956,7 @@ bool ReactNativeFeatureFlagsAccessor::useRawPropsJsiValue() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(52, "useRawPropsJsiValue");
|
||||
markFlagAsAccessed(51, "useRawPropsJsiValue");
|
||||
|
||||
flagValue = currentProvider_->useRawPropsJsiValue();
|
||||
useRawPropsJsiValue_ = flagValue;
|
||||
@@ -992,7 +974,7 @@ bool ReactNativeFeatureFlagsAccessor::useShadowNodeStateOnClone() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(53, "useShadowNodeStateOnClone");
|
||||
markFlagAsAccessed(52, "useShadowNodeStateOnClone");
|
||||
|
||||
flagValue = currentProvider_->useShadowNodeStateOnClone();
|
||||
useShadowNodeStateOnClone_ = flagValue;
|
||||
@@ -1010,7 +992,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModuleInterop() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(54, "useTurboModuleInterop");
|
||||
markFlagAsAccessed(53, "useTurboModuleInterop");
|
||||
|
||||
flagValue = currentProvider_->useTurboModuleInterop();
|
||||
useTurboModuleInterop_ = flagValue;
|
||||
@@ -1028,7 +1010,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModules() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(55, "useTurboModules");
|
||||
markFlagAsAccessed(54, "useTurboModules");
|
||||
|
||||
flagValue = currentProvider_->useTurboModules();
|
||||
useTurboModules_ = flagValue;
|
||||
@@ -1046,7 +1028,7 @@ double ReactNativeFeatureFlagsAccessor::virtualViewPrerenderRatio() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(56, "virtualViewPrerenderRatio");
|
||||
markFlagAsAccessed(55, "virtualViewPrerenderRatio");
|
||||
|
||||
flagValue = currentProvider_->virtualViewPrerenderRatio();
|
||||
virtualViewPrerenderRatio_ = flagValue;
|
||||
|
||||
+4
-6
@@ -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<<4e06f35e1af18fbf5219f7fd2f79767d>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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();
|
||||
@@ -100,12 +99,11 @@ class ReactNativeFeatureFlagsAccessor {
|
||||
std::unique_ptr<ReactNativeFeatureFlagsProvider> currentProvider_;
|
||||
bool wasOverridden_;
|
||||
|
||||
std::array<std::atomic<const char*>, 57> accessedFeatureFlags_;
|
||||
std::array<std::atomic<const char*>, 56> accessedFeatureFlags_;
|
||||
|
||||
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 +114,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 +126,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_;
|
||||
|
||||
+5
-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<<a16b227254e43d57c46479d87bc45bf2>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
+10
-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<<015e26c40f3a6bef540d8c4ca43b8502>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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()) {
|
||||
|
||||
+2
-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<<f3e838bc19232c5b2bb539133c825a71>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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;
|
||||
|
||||
+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();
|
||||
}
|
||||
|
||||
+6
-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<<09ffa5d69974c01761505c26a61ce865>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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();
|
||||
|
||||
+3
-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<<736f6e9a9941d0a9a6fbde5c038f1622>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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);
|
||||
|
||||
-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,
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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<<b680260e184df469f918d2bf4a3a4e65>>
|
||||
* @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>,
|
||||
@@ -206,10 +205,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 +245,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 +293,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
|
||||
*/
|
||||
|
||||
+2
-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<<a0c97a9338cbe91cc3de4db2fa5f27d2>>
|
||||
* @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;
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -6675,7 +6675,7 @@ class JReactNativeFeatureFlagsCxxInterop
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
static bool enableMainQueueCoordinatorOnIOS(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
static bool enableMainQueueModulesOnIOS(
|
||||
static bool enableEagerMainQueueModulesOnIOS(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
static bool enableModuleArgumentNSNullConversionIOS(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
@@ -16872,7 +16872,7 @@ class NativeReactNativeFeatureFlags
|
||||
bool enableLayoutAnimationsOnAndroid(jsi::Runtime& runtime);
|
||||
bool enableLayoutAnimationsOnIOS(jsi::Runtime& runtime);
|
||||
bool enableMainQueueCoordinatorOnIOS(jsi::Runtime& runtime);
|
||||
bool enableMainQueueModulesOnIOS(jsi::Runtime& runtime);
|
||||
bool enableEagerMainQueueModulesOnIOS(jsi::Runtime& runtime);
|
||||
bool enableModuleArgumentNSNullConversionIOS(jsi::Runtime& runtime);
|
||||
bool enableNativeCSSParsing(jsi::Runtime& runtime);
|
||||
bool enableNetworkEventReporting(jsi::Runtime& runtime);
|
||||
|
||||
@@ -6,10 +6,10 @@ Scripts supporting local manual release testing. See also [How to Test a Release
|
||||
|
||||
For information on command arguments, run `node <command> --help`.
|
||||
|
||||
### `test-e2e-local`
|
||||
### `test-release-local`
|
||||
|
||||
Set up, build, and install a given test app configuration.
|
||||
|
||||
### `test-e2e-local-clean`
|
||||
### `test-release-local-clean`
|
||||
|
||||
Clean up all file system and cache state between tests.
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
* This script, paired with test-e2e-local.js, is the full suite of
|
||||
* This script, paired with test-release-local.js, is the full suite of
|
||||
* tooling needed for a successful local testing experience.
|
||||
* This script is an helper to clean up the environment fully
|
||||
* before running the test suite.
|
||||
@@ -41,7 +41,8 @@ function registerForMonorepo() {
|
||||
// $FlowExpectedError[cannot-resolve-module] - Won't resolve in OSS
|
||||
require('@fb-tools/babel-register');
|
||||
} else {
|
||||
require('metro-babel-register')([
|
||||
const {register} = require('metro-babel-register');
|
||||
register([
|
||||
PACKAGES_DIR,
|
||||
PRIVATE_DIR,
|
||||
SCRIPTS_DIR,
|
||||
|
||||
@@ -1359,13 +1359,20 @@
|
||||
minimist "^1.2.8"
|
||||
postject "^1.0.0-alpha.6"
|
||||
|
||||
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
|
||||
"@eslint-community/eslint-utils@^4.2.0":
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
|
||||
integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
|
||||
dependencies:
|
||||
eslint-visitor-keys "^3.3.0"
|
||||
|
||||
"@eslint-community/eslint-utils@^4.7.0":
|
||||
version "4.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a"
|
||||
integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==
|
||||
dependencies:
|
||||
eslint-visitor-keys "^3.4.3"
|
||||
|
||||
"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1":
|
||||
version "4.11.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae"
|
||||
@@ -2495,20 +2502,20 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@typescript-eslint/eslint-plugin@^7.1.1":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3"
|
||||
integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==
|
||||
"@typescript-eslint/eslint-plugin@^8.36.0":
|
||||
version "8.36.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.36.0.tgz#880ce277f8a30ccf539ec027acac157088f131ae"
|
||||
integrity sha512-lZNihHUVB6ZZiPBNgOQGSxUASI7UJWhT8nHyUGCnaQ28XFCw98IfrMCG3rUl1uwUWoAvodJQby2KTs79UTcrAg==
|
||||
dependencies:
|
||||
"@eslint-community/regexpp" "^4.10.0"
|
||||
"@typescript-eslint/scope-manager" "7.18.0"
|
||||
"@typescript-eslint/type-utils" "7.18.0"
|
||||
"@typescript-eslint/utils" "7.18.0"
|
||||
"@typescript-eslint/visitor-keys" "7.18.0"
|
||||
"@typescript-eslint/scope-manager" "8.36.0"
|
||||
"@typescript-eslint/type-utils" "8.36.0"
|
||||
"@typescript-eslint/utils" "8.36.0"
|
||||
"@typescript-eslint/visitor-keys" "8.36.0"
|
||||
graphemer "^1.4.0"
|
||||
ignore "^5.3.1"
|
||||
ignore "^7.0.0"
|
||||
natural-compare "^1.4.0"
|
||||
ts-api-utils "^1.3.0"
|
||||
ts-api-utils "^2.1.0"
|
||||
|
||||
"@typescript-eslint/parser@7.2.0":
|
||||
version "7.2.0"
|
||||
@@ -2521,15 +2528,24 @@
|
||||
"@typescript-eslint/visitor-keys" "7.2.0"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/parser@^7.1.1":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0"
|
||||
integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==
|
||||
"@typescript-eslint/parser@^8.36.0":
|
||||
version "8.36.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.36.0.tgz#003007fe2030013936b6634b9cf52c457d36ed42"
|
||||
integrity sha512-FuYgkHwZLuPbZjQHzJXrtXreJdFMKl16BFYyRrLxDhWr6Qr7Kbcu2s1Yhu8tsiMXw1S0W1pjfFfYEt+R604s+Q==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "7.18.0"
|
||||
"@typescript-eslint/types" "7.18.0"
|
||||
"@typescript-eslint/typescript-estree" "7.18.0"
|
||||
"@typescript-eslint/visitor-keys" "7.18.0"
|
||||
"@typescript-eslint/scope-manager" "8.36.0"
|
||||
"@typescript-eslint/types" "8.36.0"
|
||||
"@typescript-eslint/typescript-estree" "8.36.0"
|
||||
"@typescript-eslint/visitor-keys" "8.36.0"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/project-service@8.36.0":
|
||||
version "8.36.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.36.0.tgz#0c4acdcbe56476a43cdabaac1f08819424a379fd"
|
||||
integrity sha512-JAhQFIABkWccQYeLMrHadu/fhpzmSQ1F1KXkpzqiVxA/iYI6UnRt2trqXHt1sYEcw1mxLnB9rKMsOxXPxowN/g==
|
||||
dependencies:
|
||||
"@typescript-eslint/tsconfig-utils" "^8.36.0"
|
||||
"@typescript-eslint/types" "^8.36.0"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/scope-manager@5.62.0":
|
||||
@@ -2540,14 +2556,6 @@
|
||||
"@typescript-eslint/types" "5.62.0"
|
||||
"@typescript-eslint/visitor-keys" "5.62.0"
|
||||
|
||||
"@typescript-eslint/scope-manager@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83"
|
||||
integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "7.18.0"
|
||||
"@typescript-eslint/visitor-keys" "7.18.0"
|
||||
|
||||
"@typescript-eslint/scope-manager@7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz#cfb437b09a84f95a0930a76b066e89e35d94e3da"
|
||||
@@ -2556,31 +2564,44 @@
|
||||
"@typescript-eslint/types" "7.2.0"
|
||||
"@typescript-eslint/visitor-keys" "7.2.0"
|
||||
|
||||
"@typescript-eslint/type-utils@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b"
|
||||
integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==
|
||||
"@typescript-eslint/scope-manager@8.36.0":
|
||||
version "8.36.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.36.0.tgz#23e4196ed07d7ea3737a584fbebc9a79c3835168"
|
||||
integrity sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==
|
||||
dependencies:
|
||||
"@typescript-eslint/typescript-estree" "7.18.0"
|
||||
"@typescript-eslint/utils" "7.18.0"
|
||||
"@typescript-eslint/types" "8.36.0"
|
||||
"@typescript-eslint/visitor-keys" "8.36.0"
|
||||
|
||||
"@typescript-eslint/tsconfig-utils@8.36.0", "@typescript-eslint/tsconfig-utils@^8.36.0":
|
||||
version "8.36.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.36.0.tgz#63ef8a20ae9b5754c6ceacbe87b2fe1aab12ba13"
|
||||
integrity sha512-Nhh3TIEgN18mNbdXpd5Q8mSCBnrZQeY9V7Ca3dqYvNDStNIGRmJA6dmrIPMJ0kow3C7gcQbpsG2rPzy1Ks/AnA==
|
||||
|
||||
"@typescript-eslint/type-utils@8.36.0":
|
||||
version "8.36.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.36.0.tgz#16b092c2cbbb5549f6a4df1382a481586850502f"
|
||||
integrity sha512-5aaGYG8cVDd6cxfk/ynpYzxBRZJk7w/ymto6uiyUFtdCozQIsQWh7M28/6r57Fwkbweng8qAzoMCPwSJfWlmsg==
|
||||
dependencies:
|
||||
"@typescript-eslint/typescript-estree" "8.36.0"
|
||||
"@typescript-eslint/utils" "8.36.0"
|
||||
debug "^4.3.4"
|
||||
ts-api-utils "^1.3.0"
|
||||
ts-api-utils "^2.1.0"
|
||||
|
||||
"@typescript-eslint/types@5.62.0":
|
||||
version "5.62.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
|
||||
integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==
|
||||
|
||||
"@typescript-eslint/types@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9"
|
||||
integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==
|
||||
|
||||
"@typescript-eslint/types@7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.2.0.tgz#0feb685f16de320e8520f13cca30779c8b7c403f"
|
||||
integrity sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==
|
||||
|
||||
"@typescript-eslint/types@8.36.0", "@typescript-eslint/types@^8.36.0":
|
||||
version "8.36.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.36.0.tgz#d3d184adc2899e2912c13b17c1590486ef37c7ac"
|
||||
integrity sha512-xGms6l5cTJKQPZOKM75Dl9yBfNdGeLRsIyufewnxT4vZTrjC0ImQT4fj8QmtJK84F58uSh5HVBSANwcfiXxABQ==
|
||||
|
||||
"@typescript-eslint/typescript-estree@5.62.0":
|
||||
version "5.62.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b"
|
||||
@@ -2594,20 +2615,6 @@
|
||||
semver "^7.3.7"
|
||||
tsutils "^3.21.0"
|
||||
|
||||
"@typescript-eslint/typescript-estree@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931"
|
||||
integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "7.18.0"
|
||||
"@typescript-eslint/visitor-keys" "7.18.0"
|
||||
debug "^4.3.4"
|
||||
globby "^11.1.0"
|
||||
is-glob "^4.0.3"
|
||||
minimatch "^9.0.4"
|
||||
semver "^7.6.0"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
"@typescript-eslint/typescript-estree@7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz#5beda2876c4137f8440c5a84b4f0370828682556"
|
||||
@@ -2622,15 +2629,31 @@
|
||||
semver "^7.5.4"
|
||||
ts-api-utils "^1.0.1"
|
||||
|
||||
"@typescript-eslint/utils@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f"
|
||||
integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==
|
||||
"@typescript-eslint/typescript-estree@8.36.0":
|
||||
version "8.36.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.36.0.tgz#344857fa79f71715369554a3cbb6b4ff8695a7bc"
|
||||
integrity sha512-JaS8bDVrfVJX4av0jLpe4ye0BpAaUW7+tnS4Y4ETa3q7NoZgzYbN9zDQTJ8kPb5fQ4n0hliAt9tA4Pfs2zA2Hg==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.4.0"
|
||||
"@typescript-eslint/scope-manager" "7.18.0"
|
||||
"@typescript-eslint/types" "7.18.0"
|
||||
"@typescript-eslint/typescript-estree" "7.18.0"
|
||||
"@typescript-eslint/project-service" "8.36.0"
|
||||
"@typescript-eslint/tsconfig-utils" "8.36.0"
|
||||
"@typescript-eslint/types" "8.36.0"
|
||||
"@typescript-eslint/visitor-keys" "8.36.0"
|
||||
debug "^4.3.4"
|
||||
fast-glob "^3.3.2"
|
||||
is-glob "^4.0.3"
|
||||
minimatch "^9.0.4"
|
||||
semver "^7.6.0"
|
||||
ts-api-utils "^2.1.0"
|
||||
|
||||
"@typescript-eslint/utils@8.36.0":
|
||||
version "8.36.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.36.0.tgz#2c9af5292f14e0aa4b0e9c7ac0406afafb299acf"
|
||||
integrity sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.7.0"
|
||||
"@typescript-eslint/scope-manager" "8.36.0"
|
||||
"@typescript-eslint/types" "8.36.0"
|
||||
"@typescript-eslint/typescript-estree" "8.36.0"
|
||||
|
||||
"@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.47.1":
|
||||
version "5.62.0"
|
||||
@@ -2654,14 +2677,6 @@
|
||||
"@typescript-eslint/types" "5.62.0"
|
||||
eslint-visitor-keys "^3.3.0"
|
||||
|
||||
"@typescript-eslint/visitor-keys@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7"
|
||||
integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "7.18.0"
|
||||
eslint-visitor-keys "^3.4.3"
|
||||
|
||||
"@typescript-eslint/visitor-keys@7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz#5035f177752538a5750cca1af6044b633610bf9e"
|
||||
@@ -2670,6 +2685,14 @@
|
||||
"@typescript-eslint/types" "7.2.0"
|
||||
eslint-visitor-keys "^3.4.1"
|
||||
|
||||
"@typescript-eslint/visitor-keys@8.36.0":
|
||||
version "8.36.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.36.0.tgz#7dc6ba4dd037979eb3a3bdd2093aa3604bb73674"
|
||||
integrity sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.36.0"
|
||||
eslint-visitor-keys "^4.2.1"
|
||||
|
||||
"@ungap/structured-clone@^1.2.0":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
|
||||
@@ -4501,6 +4524,11 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4
|
||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
|
||||
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
|
||||
|
||||
eslint-visitor-keys@^4.2.1:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1"
|
||||
integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==
|
||||
|
||||
eslint@^8.19.0, eslint@^8.57.0:
|
||||
version "8.57.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
|
||||
@@ -5359,11 +5387,16 @@ ieee754@^1.1.13:
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
||||
|
||||
ignore@^5.0.5, ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1:
|
||||
ignore@^5.0.5, ignore@^5.2.0, ignore@^5.2.4:
|
||||
version "5.3.2"
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
|
||||
integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
|
||||
|
||||
ignore@^7.0.0:
|
||||
version "7.0.5"
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9"
|
||||
integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==
|
||||
|
||||
image-size@^1.0.2:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.1.1.tgz#ddd67d4dc340e52ac29ce5f546a09f4e29e840ac"
|
||||
@@ -6790,6 +6823,13 @@ memfs-or-file-map-to-github-branch@^1.3.0:
|
||||
dependencies:
|
||||
"@octokit/rest" "*"
|
||||
|
||||
memfs@^4.7.7:
|
||||
version "4.7.7"
|
||||
resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.7.7.tgz#bcf09cab1646d655f659e7cf832dfc75ccb95b2d"
|
||||
integrity sha512-x9qc6k88J/VVwnfTkJV8pRRswJ2156Rc4w5rciRqKceFDZ0y1MqsNL9pkg5sE0GOcDzZYbonreALhaHzg1siFw==
|
||||
dependencies:
|
||||
tslib "^2.0.0"
|
||||
|
||||
memoize-one@^5.0.0:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
|
||||
@@ -6805,10 +6845,10 @@ merge2@^1.3.0, merge2@^1.4.1:
|
||||
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
|
||||
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
|
||||
|
||||
metro-babel-register@^0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.82.5.tgz#897c2021e6c44b18b533338d420fcacd5e9807c4"
|
||||
integrity sha512-pWGLHX1ggicEu6UvF3Pe7E7xY7812u/EaY1OiR7f9ooy5s/W20OQsvkNshQ68j9v1yvFkckgzB2YCTYiklSsIg==
|
||||
metro-babel-register@^0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.83.0.tgz#04fb08f2cd64018e2ad19b4a64e710d912e923c8"
|
||||
integrity sha512-HfMrNvBbZSy8Sbf5aVlTub2PW86bPgp6oVOiHQ0kKLRl5+lMcvY9Tm8M5/5fZ8+TJAGOXgA9E0GNfgcSb99VLw==
|
||||
dependencies:
|
||||
"@babel/core" "^7.25.2"
|
||||
"@babel/plugin-proposal-export-namespace-from" "^7.18.9"
|
||||
@@ -6822,60 +6862,60 @@ metro-babel-register@^0.82.5:
|
||||
escape-string-regexp "^1.0.5"
|
||||
flow-enums-runtime "^0.0.6"
|
||||
|
||||
metro-babel-transformer@0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.82.5.tgz#a65ed29265d8257109ab8c37884e6e3a2edee86d"
|
||||
integrity sha512-W/scFDnwJXSccJYnOFdGiYr9srhbHPdxX9TvvACOFsIXdLilh3XuxQl/wXW6jEJfgIb0jTvoTlwwrqvuwymr6Q==
|
||||
metro-babel-transformer@0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.83.0.tgz#933839d581e61a2f107c708e0fbf4379a83fa1ca"
|
||||
integrity sha512-ncYhd1WWElJj6W+uMgoi57mUgdWm8UZBLUg9/TYh6iFipJ6A78IuztOFbohAk+Zh5S376bF86TSDaeRouAzJkg==
|
||||
dependencies:
|
||||
"@babel/core" "^7.25.2"
|
||||
flow-enums-runtime "^0.0.6"
|
||||
hermes-parser "0.29.1"
|
||||
nullthrows "^1.1.1"
|
||||
|
||||
metro-cache-key@0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.82.5.tgz#290a0054b28a708266fb91c8028cf94be04f99c9"
|
||||
integrity sha512-qpVmPbDJuRLrT4kcGlUouyqLGssJnbTllVtvIgXfR7ZuzMKf0mGS+8WzcqzNK8+kCyakombQWR0uDd8qhWGJcA==
|
||||
metro-cache-key@0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.83.0.tgz#73d6c4810454092ad833706ce39e3111171892c5"
|
||||
integrity sha512-T0WmTe0NRt/7/kaWuDoUbeF5xlfqzLyVg5MO6X2XnXT8le42S2UxRWJgZOtojOXGvthdQhzdxZM2GCd+BQLfAQ==
|
||||
dependencies:
|
||||
flow-enums-runtime "^0.0.6"
|
||||
|
||||
metro-cache@0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.82.5.tgz#4c8fe58cd5fa30b87db0b2b6a650a771ec6fe162"
|
||||
integrity sha512-AwHV9607xZpedu1NQcjUkua8v7HfOTKfftl6Vc9OGr/jbpiJX6Gpy8E/V9jo/U9UuVYX2PqSUcVNZmu+LTm71Q==
|
||||
metro-cache@0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.83.0.tgz#595d9be2cc0e4bc674088a79965fb61ab6e54b36"
|
||||
integrity sha512-t5ExK5od6PcI7Zc441oRNdnYoxWb9EuqBsgoVQUG2/DRsEAHCkK6EqwLYForgMABYwJOpBTGMw74f7EQMKakuw==
|
||||
dependencies:
|
||||
exponential-backoff "^3.1.1"
|
||||
flow-enums-runtime "^0.0.6"
|
||||
https-proxy-agent "^7.0.5"
|
||||
metro-core "0.82.5"
|
||||
metro-core "0.83.0"
|
||||
|
||||
metro-config@0.82.5, metro-config@^0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.82.5.tgz#07366f32c3fe6203d630af7df4781900816c7c85"
|
||||
integrity sha512-/r83VqE55l0WsBf8IhNmc/3z71y2zIPe5kRSuqA5tY/SL/ULzlHUJEMd1szztd0G45JozLwjvrhAzhDPJ/Qo/g==
|
||||
metro-config@0.83.0, metro-config@^0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.83.0.tgz#43bb29db0247c6b990993672b6acba52b67c36d5"
|
||||
integrity sha512-fkuXgw8KXMOOGfPVwE1xULTeW2kfpyp8dtfD96PcBZHPxv8Pu0EAihTXkCPaKk1PKqIHenzEdW9s2MRUWvyRPA==
|
||||
dependencies:
|
||||
connect "^3.6.5"
|
||||
cosmiconfig "^5.0.5"
|
||||
flow-enums-runtime "^0.0.6"
|
||||
jest-validate "^29.7.0"
|
||||
metro "0.82.5"
|
||||
metro-cache "0.82.5"
|
||||
metro-core "0.82.5"
|
||||
metro-runtime "0.82.5"
|
||||
metro "0.83.0"
|
||||
metro-cache "0.83.0"
|
||||
metro-core "0.83.0"
|
||||
metro-runtime "0.83.0"
|
||||
|
||||
metro-core@0.82.5, metro-core@^0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.82.5.tgz#fda1b2f7365e3a09055dd72ba1681f8fc1f6f492"
|
||||
integrity sha512-OJL18VbSw2RgtBm1f2P3J5kb892LCVJqMvslXxuxjAPex8OH7Eb8RBfgEo7VZSjgb/LOf4jhC4UFk5l5tAOHHA==
|
||||
metro-core@0.83.0, metro-core@^0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.83.0.tgz#d9fb3dffea49b07db75d735e23cd2528a0a66db5"
|
||||
integrity sha512-LeWfVWejZVx/cEkOYrgQ11A+2cTPdq30Xm4SM31SfA64teKCnaUPa4k6CxU65AUou5EF4nCFo7B2XE5Q2jwBvg==
|
||||
dependencies:
|
||||
flow-enums-runtime "^0.0.6"
|
||||
lodash.throttle "^4.1.1"
|
||||
metro-resolver "0.82.5"
|
||||
metro-resolver "0.83.0"
|
||||
|
||||
metro-file-map@0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.82.5.tgz#3e47410a9ce8f6c913480970226a17371c2d2974"
|
||||
integrity sha512-vpMDxkGIB+MTN8Af5hvSAanc6zXQipsAUO+XUx3PCQieKUfLwdoa8qaZ1WAQYRpaU+CJ8vhBcxtzzo3d9IsCIQ==
|
||||
metro-file-map@0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.83.0.tgz#6b1bc47848caccc403896eb8c81a4699c39c934c"
|
||||
integrity sha512-vWbimPJ/sPwSFfYJcwSbgsM+x3E6mELFnm8WqwrvTvRm55NR05noAzx1HG/X0PJUylptHlQAbguPEA7F4jd/ug==
|
||||
dependencies:
|
||||
debug "^4.4.0"
|
||||
fb-watchman "^2.0.0"
|
||||
@@ -6887,68 +6927,61 @@ metro-file-map@0.82.5:
|
||||
nullthrows "^1.1.1"
|
||||
walker "^1.0.7"
|
||||
|
||||
metro-memory-fs@^0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-memory-fs/-/metro-memory-fs-0.82.5.tgz#ae6c4c251cd6dc9cf44540c3b1356cff54db875e"
|
||||
integrity sha512-yMYtBwDtG84vnDfQDEGZ3EUYbHng4dMZX2AKSQFQOMdd34lyQcD1yV5yrrUTG/DqMKDxJGqmxDkeyqTlKwwuUA==
|
||||
dependencies:
|
||||
flow-enums-runtime "^0.0.6"
|
||||
|
||||
metro-minify-terser@0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.82.5.tgz#5dc77d53b6ef4079bd9c752ae046d557df4ae584"
|
||||
integrity sha512-v6Nx7A4We6PqPu/ta1oGTqJ4Usz0P7c+3XNeBxW9kp8zayS3lHUKR0sY0wsCHInxZlNAEICx791x+uXytFUuwg==
|
||||
metro-minify-terser@0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.83.0.tgz#c84c0eae701ecd7e4cf3c595e1f483e8a5e813ad"
|
||||
integrity sha512-jsVzWnkl43Kb18iQvEn0Keq0n5WQwAiAHn9vCFE6roM6E4fVLDKlzDNoWyFzs9GyodlVYkbjAuz9PCpEzBfq5Q==
|
||||
dependencies:
|
||||
flow-enums-runtime "^0.0.6"
|
||||
terser "^5.15.0"
|
||||
|
||||
metro-resolver@0.82.5, metro-resolver@^0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.82.5.tgz#cb810038d488a47334df444312b23f0090eca5c3"
|
||||
integrity sha512-kFowLnWACt3bEsuVsaRNgwplT8U7kETnaFHaZePlARz4Fg8tZtmRDUmjaD68CGAwc0rwdwNCkWizLYpnyVcs2g==
|
||||
metro-resolver@0.83.0, metro-resolver@^0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.83.0.tgz#a4dc88b192c886c02343703127fef80e3a03ca83"
|
||||
integrity sha512-TGwPrU4lpKwmvpfnN9WA4RMECpSsZ+GAtiKQRjNh6ek0f7XUR8RuGPTWc4VidTo973C0syfbYVoD/iv1hFgAiw==
|
||||
dependencies:
|
||||
flow-enums-runtime "^0.0.6"
|
||||
|
||||
metro-runtime@0.82.5, metro-runtime@^0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.82.5.tgz#97840760e4cee49f08948dd918dbeba08dd0d0ec"
|
||||
integrity sha512-rQZDoCUf7k4Broyw3Ixxlq5ieIPiR1ULONdpcYpbJQ6yQ5GGEyYjtkztGD+OhHlw81LCR2SUAoPvtTus2WDK5g==
|
||||
metro-runtime@0.83.0, metro-runtime@^0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.83.0.tgz#495d28160784c303c98c1d32ef936b2e5524c445"
|
||||
integrity sha512-35q73Hz4X8JcNa2jgHdRy7zLggyEM2tPhkw+xjfuoRXO8TtFLGl7gKug/lF3GVYWEI6I9wEf5BGsnAoE5MZ4tQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.25.0"
|
||||
flow-enums-runtime "^0.0.6"
|
||||
|
||||
metro-source-map@0.82.5, metro-source-map@^0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.82.5.tgz#85e2e9672bff6d6cefb3b65b96fcc69f929c69c6"
|
||||
integrity sha512-wH+awTOQJVkbhn2SKyaw+0cd+RVSCZ3sHVgyqJFQXIee/yLs3dZqKjjeKKhhVeudgjXo7aE/vSu/zVfcQEcUfw==
|
||||
metro-source-map@0.83.0, metro-source-map@^0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.83.0.tgz#a9c807a6c7cf43448e6f55e280dab8aafadf0586"
|
||||
integrity sha512-XsQl5MhXo249q0ImDCFatBaWzU4K6ksso9n2MKoreuMPrgmVwzOAkVvJRUxuPvjW0DzBZKwqpk3ubC5MYRalfQ==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.25.3"
|
||||
"@babel/traverse--for-generate-function-map" "npm:@babel/traverse@^7.25.3"
|
||||
"@babel/types" "^7.25.2"
|
||||
flow-enums-runtime "^0.0.6"
|
||||
invariant "^2.2.4"
|
||||
metro-symbolicate "0.82.5"
|
||||
metro-symbolicate "0.83.0"
|
||||
nullthrows "^1.1.1"
|
||||
ob1 "0.82.5"
|
||||
ob1 "0.83.0"
|
||||
source-map "^0.5.6"
|
||||
vlq "^1.0.0"
|
||||
|
||||
metro-symbolicate@0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.82.5.tgz#b53255cad11f1e6795f319ca4b41857bfe295d65"
|
||||
integrity sha512-1u+07gzrvYDJ/oNXuOG1EXSvXZka/0JSW1q2EYBWerVKMOhvv9JzDGyzmuV7hHbF2Hg3T3S2uiM36sLz1qKsiw==
|
||||
metro-symbolicate@0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.83.0.tgz#05938d2ecbf6c8318185d7b631f9938dcaa115d5"
|
||||
integrity sha512-pPu73T3y4TWpmGgUIJBF8b4bPjxV9LHcqEqAc6Gd7xqN1Wquu6onhdmi72XLHxhk+mZBF2mtVIr/QKI3tOyRLg==
|
||||
dependencies:
|
||||
flow-enums-runtime "^0.0.6"
|
||||
invariant "^2.2.4"
|
||||
metro-source-map "0.82.5"
|
||||
metro-source-map "0.83.0"
|
||||
nullthrows "^1.1.1"
|
||||
source-map "^0.5.6"
|
||||
vlq "^1.0.0"
|
||||
|
||||
metro-transform-plugins@0.82.5, metro-transform-plugins@^0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.82.5.tgz#678da4d0f9085b2a3fc0b4350062f19cc625c5fc"
|
||||
integrity sha512-57Bqf3rgq9nPqLrT2d9kf/2WVieTFqsQ6qWHpEng5naIUtc/Iiw9+0bfLLWSAw0GH40iJ4yMjFcFJDtNSYynMA==
|
||||
metro-transform-plugins@0.83.0, metro-transform-plugins@^0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.83.0.tgz#0204405be0f5ffbcd73443ac15408b1285052894"
|
||||
integrity sha512-HLUB+CduKt9KOUwW6zS3YezcIAUal3mmxEi6PW6/SqpqQIqR7Ij83UswCy/LRhY2Lx6IwucR8Zg9Oo+d0cCvzA==
|
||||
dependencies:
|
||||
"@babel/core" "^7.25.2"
|
||||
"@babel/generator" "^7.25.0"
|
||||
@@ -6957,29 +6990,29 @@ metro-transform-plugins@0.82.5, metro-transform-plugins@^0.82.5:
|
||||
flow-enums-runtime "^0.0.6"
|
||||
nullthrows "^1.1.1"
|
||||
|
||||
metro-transform-worker@0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.82.5.tgz#aabdccf17aaa584ec0fd97b5283e806958fb3418"
|
||||
integrity sha512-mx0grhAX7xe+XUQH6qoHHlWedI8fhSpDGsfga7CpkO9Lk9W+aPitNtJWNGrW8PfjKEWbT9Uz9O50dkI8bJqigw==
|
||||
metro-transform-worker@0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.83.0.tgz#40822fdaf7b37ed18478948e1714acbd4c2c8a92"
|
||||
integrity sha512-z9ZGlVMcw562mFqcJrU12yAgjntdRCsQV98rOyIOLF00/ui9un+xbQjqarjYmXpO3fM8SMGD1EjhuSGFN6MmWA==
|
||||
dependencies:
|
||||
"@babel/core" "^7.25.2"
|
||||
"@babel/generator" "^7.25.0"
|
||||
"@babel/parser" "^7.25.3"
|
||||
"@babel/types" "^7.25.2"
|
||||
flow-enums-runtime "^0.0.6"
|
||||
metro "0.82.5"
|
||||
metro-babel-transformer "0.82.5"
|
||||
metro-cache "0.82.5"
|
||||
metro-cache-key "0.82.5"
|
||||
metro-minify-terser "0.82.5"
|
||||
metro-source-map "0.82.5"
|
||||
metro-transform-plugins "0.82.5"
|
||||
metro "0.83.0"
|
||||
metro-babel-transformer "0.83.0"
|
||||
metro-cache "0.83.0"
|
||||
metro-cache-key "0.83.0"
|
||||
metro-minify-terser "0.83.0"
|
||||
metro-source-map "0.83.0"
|
||||
metro-transform-plugins "0.83.0"
|
||||
nullthrows "^1.1.1"
|
||||
|
||||
metro@0.82.5, metro@^0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/metro/-/metro-0.82.5.tgz#a27fbc08dd283a14ae58496288c10adaae65f461"
|
||||
integrity sha512-8oAXxL7do8QckID/WZEKaIFuQJFUTLzfVcC48ghkHhNK2RGuQq8Xvf4AVd+TUA0SZtX0q8TGNXZ/eba1ckeGCg==
|
||||
metro@0.83.0, metro@^0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/metro/-/metro-0.83.0.tgz#0837569b1c34e543fc3d4af262863c49725d9398"
|
||||
integrity sha512-qQoLKhFzZH1AjO81BDftQBUUI5FNzpKC6Bv9QGcZf1YiK034yl6aLQWg6HnNEkKkGNiMwgGlEJAzn40HjQtZmw==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.24.7"
|
||||
"@babel/core" "^7.25.2"
|
||||
@@ -7002,18 +7035,18 @@ metro@0.82.5, metro@^0.82.5:
|
||||
jest-worker "^29.7.0"
|
||||
jsc-safe-url "^0.2.2"
|
||||
lodash.throttle "^4.1.1"
|
||||
metro-babel-transformer "0.82.5"
|
||||
metro-cache "0.82.5"
|
||||
metro-cache-key "0.82.5"
|
||||
metro-config "0.82.5"
|
||||
metro-core "0.82.5"
|
||||
metro-file-map "0.82.5"
|
||||
metro-resolver "0.82.5"
|
||||
metro-runtime "0.82.5"
|
||||
metro-source-map "0.82.5"
|
||||
metro-symbolicate "0.82.5"
|
||||
metro-transform-plugins "0.82.5"
|
||||
metro-transform-worker "0.82.5"
|
||||
metro-babel-transformer "0.83.0"
|
||||
metro-cache "0.83.0"
|
||||
metro-cache-key "0.83.0"
|
||||
metro-config "0.83.0"
|
||||
metro-core "0.83.0"
|
||||
metro-file-map "0.83.0"
|
||||
metro-resolver "0.83.0"
|
||||
metro-runtime "0.83.0"
|
||||
metro-source-map "0.83.0"
|
||||
metro-symbolicate "0.83.0"
|
||||
metro-transform-plugins "0.83.0"
|
||||
metro-transform-worker "0.83.0"
|
||||
mime-types "^2.1.27"
|
||||
nullthrows "^1.1.1"
|
||||
serialize-error "^2.1.0"
|
||||
@@ -7498,10 +7531,10 @@ nullthrows@^1.1.1:
|
||||
resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
|
||||
integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
|
||||
|
||||
ob1@0.82.5:
|
||||
version "0.82.5"
|
||||
resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.82.5.tgz#a2860e39385f4602bc2666c46f331b7531b94a8b"
|
||||
integrity sha512-QyQQ6e66f+Ut/qUVjEce0E/wux5nAGLXYZDn1jr15JWstHsCH3l6VVrg8NKDptW9NEiBXKOJeGF/ydxeSDF3IQ==
|
||||
ob1@0.83.0:
|
||||
version "0.83.0"
|
||||
resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.83.0.tgz#4c3dda1fa32ae3ccfa2cf34a73624648b458c307"
|
||||
integrity sha512-uLomnfaQcMEvUnvnf7frI8YO6qe8F4pDPvatBxqLuams9BYVA9YvZqM7xJjx7cw+nYgXjreOxsIJjNsM4a6A1A==
|
||||
dependencies:
|
||||
flow-enums-runtime "^0.0.6"
|
||||
|
||||
@@ -9143,16 +9176,26 @@ trim-repeated@^1.0.0:
|
||||
dependencies:
|
||||
escape-string-regexp "^1.0.2"
|
||||
|
||||
ts-api-utils@^1.0.1, ts-api-utils@^1.3.0:
|
||||
ts-api-utils@^1.0.1:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1"
|
||||
integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
|
||||
|
||||
ts-api-utils@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91"
|
||||
integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==
|
||||
|
||||
tslib@^1.8.1, tslib@^1.9.0:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
|
||||
|
||||
tslib@^2.0.0:
|
||||
version "2.8.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
|
||||
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
|
||||
|
||||
tslib@^2.1.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01"
|
||||
|
||||
Reference in New Issue
Block a user