mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Compare commits
113
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f217bce77a | ||
|
|
e2087457f8 | ||
|
|
fc5e33b582 | ||
|
|
6dfe59e1df | ||
|
|
db65cb70de | ||
|
|
a0e11904d6 | ||
|
|
120a417320 | ||
|
|
5a79ece192 | ||
|
|
f000116197 | ||
|
|
5cf4d0899f | ||
|
|
68650badd2 | ||
|
|
5ec8e60581 | ||
|
|
918f02dcc3 | ||
|
|
5fe782a800 | ||
|
|
abfb9cbd40 | ||
|
|
3bf5cb3d0e | ||
|
|
ead669ade3 | ||
|
|
625f69f284 | ||
|
|
06034554e4 | ||
|
|
298ec6ca5d | ||
|
|
c1200718a0 | ||
|
|
a3933e6878 | ||
|
|
9f8179afa7 | ||
|
|
e6bff3f1fe | ||
|
|
feeef97554 | ||
|
|
9005d93e32 | ||
|
|
74c03b67e3 | ||
|
|
34201d8387 | ||
|
|
2edda6d967 | ||
|
|
1c51d6684b | ||
|
|
9d63098520 | ||
|
|
9d4d8dcb02 | ||
|
|
caff37df5a | ||
|
|
7998914471 | ||
|
|
94aca598c7 | ||
|
|
5e650d0105 | ||
|
|
9d5033afb0 | ||
|
|
e8709355dc | ||
|
|
255977a7b9 | ||
|
|
8531015941 | ||
|
|
4e62558e43 | ||
|
|
5cdea3c295 | ||
|
|
083644647e | ||
|
|
987e3f8c00 | ||
|
|
27723c70b7 | ||
|
|
dcd430721f | ||
|
|
22ccf8a6f5 | ||
|
|
c302902b1d | ||
|
|
0666885f6a | ||
|
|
efdf73983c | ||
|
|
377baa2ef6 | ||
|
|
c9e44fbcf2 | ||
|
|
f753158da4 | ||
|
|
d2b55ad1ba | ||
|
|
962a7dda44 | ||
|
|
bc4bce61df | ||
|
|
b4dcc9831e | ||
|
|
2d0aa1a747 | ||
|
|
0e175ce5b6 | ||
|
|
2ce7eab5f9 | ||
|
|
ccb9edc717 | ||
|
|
f2ecb7e42c | ||
|
|
47fe09f505 | ||
|
|
c9f1778faf | ||
|
|
5b245767d6 | ||
|
|
76ff1aa5c6 | ||
|
|
253606239b | ||
|
|
3561791ff8 | ||
|
|
85d10ed904 | ||
|
|
facdc2f6f4 | ||
|
|
477d8df312 | ||
|
|
2e724e4743 | ||
|
|
f4a9aa3525 | ||
|
|
ebb831a0c9 | ||
|
|
68342a4d12 | ||
|
|
94c97db4da | ||
|
|
9253fc3b42 | ||
|
|
45fd7feb9f | ||
|
|
6cb8dc37c7 | ||
|
|
cec0de8f99 | ||
|
|
097d482446 | ||
|
|
508b1526d9 | ||
|
|
0d455f3272 | ||
|
|
a4b0d64395 | ||
|
|
22b8b53c77 | ||
|
|
9079b53c6f | ||
|
|
da23346c7e | ||
|
|
ceb5f1dedb | ||
|
|
faa8c7b8a1 | ||
|
|
e20bb56f3b | ||
|
|
4274d6f7c7 | ||
|
|
b578a70bd5 | ||
|
|
bf51035e04 | ||
|
|
2d68a733f8 | ||
|
|
326467c856 | ||
|
|
c1168cf919 | ||
|
|
2a6b55f0b1 | ||
|
|
b41b924b2d | ||
|
|
71f2f05f03 | ||
|
|
1c7b04db4a | ||
|
|
128f5eb9ac | ||
|
|
8f9bca5f74 | ||
|
|
dcbbf275cb | ||
|
|
da520848c9 | ||
|
|
ce306aca34 | ||
|
|
5cc4d0a086 | ||
|
|
3eeda07a69 | ||
|
|
7d01060a8b | ||
|
|
69e4252ccb | ||
|
|
69a55d7b76 | ||
|
|
5340a00ac0 | ||
|
|
b8b79a3fc1 | ||
|
|
c4325c335b |
+1
-1
@@ -104,4 +104,4 @@ untyped-import
|
||||
untyped-type-import
|
||||
|
||||
[version]
|
||||
^0.274.2
|
||||
^0.275.0
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
name: diff-js-api-breaking-changes
|
||||
description: Check for breaking changes in the public React Native JS API
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Fetch snapshot from PR head
|
||||
shell: bash
|
||||
env:
|
||||
SCRATCH_DIR: ${{ runner.temp }}/diff-js-api-breaking-changes
|
||||
run: |
|
||||
mkdir $SCRATCH_DIR
|
||||
git fetch --depth=1 origin ${{ github.event.pull_request.head.sha }}
|
||||
git show ${{ github.event.pull_request.head.sha }}:packages/react-native/ReactNativeApi.d.ts > $SCRATCH_DIR/ReactNativeApi-after.d.ts \
|
||||
|| echo "" > $SCRATCH_DIR/ReactNativeApi.d.ts
|
||||
- name: Run breaking change detection
|
||||
shell: bash
|
||||
env:
|
||||
SCRATCH_DIR: ${{ runner.temp }}/diff-js-api-breaking-changes
|
||||
run: |
|
||||
node ./scripts/js-api/diff-api-snapshot \
|
||||
${{ github.workspace }}/packages/react-native/ReactNativeApi.d.ts \
|
||||
$SCRATCH_DIR/ReactNativeApi-after.d.ts \
|
||||
> $SCRATCH_DIR/output.json
|
||||
@@ -22,6 +22,8 @@ jobs:
|
||||
uses: ./.github/actions/setup-node
|
||||
- name: Run yarn install
|
||||
uses: ./.github/actions/yarn-install
|
||||
- name: Run diff-js-api-breaking-changes
|
||||
uses: ./.github/actions/diff-js-api-breaking-changes
|
||||
- name: Danger
|
||||
run: yarn danger ci --use-github-checks --failOnErrors
|
||||
working-directory: private/react-native-bots
|
||||
|
||||
@@ -175,3 +175,6 @@ fix_*.patch
|
||||
|
||||
# [Experimental] Generated TS type definitions
|
||||
/packages/**/types_generated/
|
||||
|
||||
/packages/debugger-shell/build/
|
||||
/packages/*/dist/
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# Changelog (pre 0.80)
|
||||
|
||||
## v0.79.5
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Flow:** Publish top-level Flow types for `react-native` ([fbbd20dd63](https://github.com/facebook/react-native/commit/fbbd20dd632acd72d2abe861dd4a0e6e98437cf2) by [@buschco](https://github.com/buschco))
|
||||
|
||||
## v0.79.4
|
||||
|
||||
### Fixed
|
||||
+892
@@ -1,5 +1,21 @@
|
||||
# Changelog
|
||||
|
||||
## v0.80.1
|
||||
|
||||
### Added
|
||||
|
||||
- **Flow:** Publish top-level Flow types for `react-native` ([fbbd20dd63](https://github.com/facebook/react-native/commit/fbbd20dd632acd72d2abe861dd4a0e6e98437cf2) by [@buschco](https://github.com/buschco))
|
||||
- **Flow:** Fix typo when publishing Flow types for `react-native` ([50667eceb1](https://github.com/facebook/react-native/commit/50667eceb1be4771375d6a3cc2f4e42d4d8aad3a) by [@aswinandro](https://github.com/aswinandro))
|
||||
|
||||
### Fixed
|
||||
|
||||
- **jest:** Fix missing RefreshControlMock source in Jest preset ([6044e01460](https://github.com/facebook/react-native/commit/6044e01460a065845d4178f0fdc54a601ce4c07e) by [@huntie](https://github.com/huntie))
|
||||
|
||||
#### Android specific
|
||||
|
||||
- **runtime:** Fix crash on ReactInstance due to null returned for getViewManagerNames ([f6b7bd93d8](https://github.com/facebook/react-native/commit/f6b7bd93d8d0d2095669144c8de438cf64d8e73f) by [@cortinico](https://github.com/cortinico))
|
||||
- **TurboModules:** Emitting event from turbo module crashes on 32bit android ([36ddf853c3](https://github.com/facebook/react-native/commit/36ddf853c381966645789bc814fc2f6bb4d74cd2) by [@vladimirivanoviliev](https://github.com/vladimirivanoviliev))
|
||||
|
||||
## v0.80.0
|
||||
|
||||
### Breaking
|
||||
@@ -317,3 +333,879 @@
|
||||
- **Text:** Correctly announce "link" on nested text if its the entire text element ([bffb414291](https://github.com/facebook/react-native/commit/bffb414291cfbd3d6e3e51448dd68b7bddddf658) by [@joevilches](https://github.com/joevilches))
|
||||
- **Text:** Selection range not respected when changing text or selection when selection is forced ([d32ea66e6a](https://github.com/facebook/react-native/commit/d32ea66e6a945dd84092532401b265b12d482668) by Olivier Bouillet)
|
||||
- **TextInput:** Fix TextInput `onContentSizeChange` event being dispatched only once on iOS on the new architecture ([5fd5188172](https://github.com/facebook/react-native/commit/5fd51881727b2d86f87abf04db032940ac0ec8c4) by [@j-piasecki](https://github.com/j-piasecki))
|
||||
|
||||
## v0.79.5
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0795)
|
||||
|
||||
## v0.79.4
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0794)
|
||||
|
||||
## v0.79.3
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0793)
|
||||
|
||||
## v0.79.2
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0792)
|
||||
|
||||
## v0.79.1
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0791)
|
||||
|
||||
## v0.79.0
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0790)
|
||||
|
||||
## v0.78.2
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0782)
|
||||
|
||||
## v0.78.1
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0781)
|
||||
|
||||
## v0.78.0
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0780)
|
||||
|
||||
## v0.77.2
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0772)
|
||||
|
||||
## v0.77.1
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0771)
|
||||
|
||||
## v0.77.0
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0770)
|
||||
|
||||
## v0.76.9
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0769)
|
||||
|
||||
## v0.76.8
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0768)
|
||||
|
||||
## v0.76.7
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0767)
|
||||
|
||||
## v0.76.6
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0766)
|
||||
|
||||
## v0.76.5
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0765)
|
||||
|
||||
## v0.76.4
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0764)
|
||||
|
||||
## v0.76.3
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0763)
|
||||
|
||||
## v0.76.2
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0762)
|
||||
|
||||
## v0.76.1
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0761)
|
||||
|
||||
## v0.76.0
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0760)
|
||||
|
||||
## v0.75.5
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0755)
|
||||
|
||||
## v0.75.4
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0754)
|
||||
|
||||
## v0.75.3
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0753)
|
||||
|
||||
## v0.75.2
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0752)
|
||||
|
||||
## v0.75.1
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0751)
|
||||
|
||||
## v0.75.0
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0750)
|
||||
|
||||
## v0.74.7
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0747)
|
||||
|
||||
## v0.74.6
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0746)
|
||||
|
||||
## v0.74.5
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0745)
|
||||
|
||||
## v0.74.4
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0744)
|
||||
|
||||
## v0.74.3
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0743)
|
||||
|
||||
## v0.74.2
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0742)
|
||||
|
||||
## v0.74.1
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0741)
|
||||
|
||||
## v0.74.0
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0740)
|
||||
|
||||
## v0.73.11
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07311)
|
||||
|
||||
## v0.73.10
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07310)
|
||||
|
||||
## v0.73.9
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0739)
|
||||
|
||||
## v0.73.8
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0738)
|
||||
|
||||
## v0.73.7
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0737)
|
||||
|
||||
## v0.73.6
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0736)
|
||||
|
||||
## v0.73.5
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0735)
|
||||
|
||||
## v0.73.4
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0734)
|
||||
|
||||
## v0.73.3
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0733)
|
||||
|
||||
## v0.73.2
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0732)
|
||||
|
||||
## v0.73.1
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0731)
|
||||
|
||||
## v0.73.0
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0730)
|
||||
|
||||
## v0.72.17
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07217)
|
||||
|
||||
## v0.72.16
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07216)
|
||||
|
||||
## v0.72.15
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07215)
|
||||
|
||||
## v0.72.14
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07214)
|
||||
|
||||
## v0.72.13
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07213)
|
||||
|
||||
## v0.72.12
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07212)
|
||||
|
||||
## v0.72.11
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07211)
|
||||
|
||||
## v0.72.10
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07210)
|
||||
|
||||
## v0.72.9
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0729)
|
||||
|
||||
## v0.72.8
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0728)
|
||||
|
||||
## v0.72.7
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0727)
|
||||
|
||||
## v0.72.6
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0726)
|
||||
|
||||
## v0.72.5
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0725)
|
||||
|
||||
## v0.72.4
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0724)
|
||||
|
||||
## v0.72.3
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0723)
|
||||
|
||||
## v0.72.2
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0722)
|
||||
|
||||
## v0.72.1
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0721)
|
||||
|
||||
## v0.72.0
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0720)
|
||||
|
||||
## v0.71.19
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07119)
|
||||
|
||||
## v0.71.18
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07118)
|
||||
|
||||
## v0.71.17
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07117)
|
||||
|
||||
## v0.71.16
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07116)
|
||||
|
||||
## v0.71.15
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07115)
|
||||
|
||||
## v0.71.14
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07114)
|
||||
|
||||
## v0.71.13
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07113)
|
||||
|
||||
## v0.71.12
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07112)
|
||||
|
||||
## v0.71.11
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07111)
|
||||
|
||||
## v0.71.10
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07110)
|
||||
|
||||
## v0.71.9
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0719)
|
||||
|
||||
## v0.71.8
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0718)
|
||||
|
||||
## v0.71.7
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0717)
|
||||
|
||||
## v0.71.6
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0716)
|
||||
|
||||
## v0.71.5
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0715)
|
||||
|
||||
## v0.71.4
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0714)
|
||||
|
||||
## v0.71.3
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0713)
|
||||
|
||||
## v0.71.2
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0712)
|
||||
|
||||
## v0.71.1
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0711)
|
||||
|
||||
## v0.71.0
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0710)
|
||||
|
||||
## v0.70.15
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07015)
|
||||
|
||||
## v0.70.14
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07014)
|
||||
|
||||
## v0.70.13
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07013)
|
||||
|
||||
## v0.70.12
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07012)
|
||||
|
||||
## v0.70.11
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07011)
|
||||
|
||||
## v0.70.10
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v07010)
|
||||
|
||||
## v0.70.9
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0709)
|
||||
|
||||
## v0.70.8
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0708)
|
||||
|
||||
## v0.70.7
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0707)
|
||||
|
||||
## v0.70.6
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0706)
|
||||
|
||||
## v0.70.5
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0705)
|
||||
|
||||
## v0.70.4
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0704)
|
||||
|
||||
## v0.70.3
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0703)
|
||||
|
||||
## v0.70.2
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0702)
|
||||
|
||||
## v0.70.1
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0701)
|
||||
|
||||
## v0.70.0
|
||||
|
||||
See [CHANGELOG-0.7x](./CHANGELOG-0.7x#v0700)
|
||||
|
||||
## v0.69.12
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v06912)
|
||||
|
||||
## v0.69.11
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v06911)
|
||||
|
||||
## v0.69.10
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v06910)
|
||||
|
||||
## v0.69.9
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0699)
|
||||
|
||||
## v0.69.8
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0698)
|
||||
|
||||
## v0.69.7
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0697)
|
||||
|
||||
## v0.69.6
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0696)
|
||||
|
||||
## v0.69.5
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0695)
|
||||
|
||||
## v0.69.4
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0694)
|
||||
|
||||
## v0.69.3
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0693)
|
||||
|
||||
## v0.69.2
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0692)
|
||||
|
||||
## v0.69.1
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0691)
|
||||
|
||||
## v0.69.0
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0690)
|
||||
|
||||
## v0.68.7
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0687)
|
||||
|
||||
## v0.68.6
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0686)
|
||||
|
||||
## v0.68.5
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0685)
|
||||
|
||||
## v0.68.4
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0684)
|
||||
|
||||
## v0.68.3
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0683)
|
||||
|
||||
## v0.68.2
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0682)
|
||||
|
||||
## v0.68.1
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0681)
|
||||
|
||||
## v0.68.0
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0680)
|
||||
|
||||
## v0.67.5
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0675)
|
||||
|
||||
## v0.67.4
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0674)
|
||||
|
||||
## v0.67.3
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0673)
|
||||
|
||||
## v0.67.2
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0672)
|
||||
|
||||
## v0.67.1
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0671)
|
||||
|
||||
## v0.67.0
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0670)
|
||||
|
||||
## v0.66.5
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0665)
|
||||
|
||||
## v0.66.4
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0664)
|
||||
|
||||
## v0.66.3
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0663)
|
||||
|
||||
## v0.66.2
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0662)
|
||||
|
||||
## v0.66.1
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0661)
|
||||
|
||||
## v0.66.0
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0660)
|
||||
|
||||
## v0.65.3
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0653)
|
||||
|
||||
## v0.65.2
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0652)
|
||||
|
||||
## v0.65.1
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0651)
|
||||
|
||||
## v0.65.0
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0650)
|
||||
|
||||
## v0.64.4
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0644)
|
||||
|
||||
## v0.64.3
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0643)
|
||||
|
||||
## v0.64.2
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0642)
|
||||
|
||||
## v0.64.1
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0641)
|
||||
|
||||
## v0.64.0
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0640)
|
||||
|
||||
## v0.63.5
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0635)
|
||||
|
||||
## v0.63.4
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0634)
|
||||
|
||||
## v0.63.3
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0633)
|
||||
|
||||
## v0.63.2
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0632)
|
||||
|
||||
## v0.63.1
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0631)
|
||||
|
||||
## v0.63.0
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0630)
|
||||
|
||||
## v0.62.3
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0623)
|
||||
|
||||
## v0.62.2
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0622)
|
||||
|
||||
## v0.62.1
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0621)
|
||||
|
||||
## v0.62.0
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0620)
|
||||
|
||||
## v0.61.5
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0615)
|
||||
|
||||
## v0.61.4
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0614)
|
||||
|
||||
## v0.61.3
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0613)
|
||||
|
||||
## v0.61.2
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0612)
|
||||
|
||||
## v0.61.1
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0611)
|
||||
|
||||
## v0.61.0
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0610)
|
||||
|
||||
## v0.60.6
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0606)
|
||||
|
||||
## v0.60.5
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0605)
|
||||
|
||||
## v0.60.4
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0604)
|
||||
|
||||
## v0.60.3
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0603)
|
||||
|
||||
## v0.60.2
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0602)
|
||||
|
||||
## v0.60.1
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0601)
|
||||
|
||||
## v0.60.0
|
||||
|
||||
See [CHANGELOG-0.6x](./CHANGELOG-0.6x#v0600)
|
||||
|
||||
## v0.59.10
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v05910)
|
||||
|
||||
## v0.59.9
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0599)
|
||||
|
||||
## v0.59.8
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0598)
|
||||
|
||||
## v0.59.5
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0595)
|
||||
|
||||
## v0.59.4
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0594)
|
||||
|
||||
## v0.59.3
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0593)
|
||||
|
||||
## v0.59.2
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0592)
|
||||
|
||||
## v0.59.1
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0591)
|
||||
|
||||
## v0.59.0
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0590)
|
||||
|
||||
## v0.58.6
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0586)
|
||||
|
||||
## v0.58.5
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0585)
|
||||
|
||||
## v0.58.4
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0584)
|
||||
|
||||
## v0.58.3
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0583)
|
||||
|
||||
## v0.58.2
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0582)
|
||||
|
||||
## v0.58.1
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0581)
|
||||
|
||||
## v0.58.0
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0580)
|
||||
|
||||
## v0.57.8
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0578)
|
||||
|
||||
## v0.57.7
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0577)
|
||||
|
||||
## v0.57.6
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0576)
|
||||
|
||||
## v0.57.5
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0575)
|
||||
|
||||
## v0.57.4
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0574)
|
||||
|
||||
## v0.57.3
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0573)
|
||||
|
||||
## v0.57.2
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0572)
|
||||
|
||||
## v0.57.1
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0571)
|
||||
|
||||
## v0.57.0
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0570)
|
||||
|
||||
## v0.56.1
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0561)
|
||||
|
||||
## v0.56.0
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0560)
|
||||
|
||||
## v0.55.4
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0554)
|
||||
|
||||
## v0.55.3
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0553)
|
||||
|
||||
## v0.55.2
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0552)
|
||||
|
||||
## v0.55.1
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0551)
|
||||
|
||||
## v0.55.0
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0550)
|
||||
|
||||
## v0.54.4
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0544)
|
||||
|
||||
## v0.54.3
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0543)
|
||||
|
||||
## v0.54.2
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0542)
|
||||
|
||||
## v0.54.1
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0541)
|
||||
|
||||
## v0.54.0
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0540)
|
||||
|
||||
## v0.53.3
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0533)
|
||||
|
||||
## v0.53.2
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0532)
|
||||
|
||||
## v0.53.1
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0531)
|
||||
|
||||
## v0.53.0
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0530)
|
||||
|
||||
## v0.52.3
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0523)
|
||||
|
||||
## v0.52.2
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0522)
|
||||
|
||||
## v0.52.1
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0521)
|
||||
|
||||
## v0.52.0
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0520)
|
||||
|
||||
## v0.51.1
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0511)
|
||||
|
||||
## v0.51.0
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0510)
|
||||
|
||||
## v0.50.4
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0504)
|
||||
|
||||
## v0.50.3
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0503)
|
||||
|
||||
## v0.50.2
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0502)
|
||||
|
||||
## v0.50.1
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0501)
|
||||
|
||||
## v0.50.0
|
||||
|
||||
See [CHANGELOG-0.5x](./CHANGELOG-0.5x#v0500)
|
||||
|
||||
+149
@@ -0,0 +1,149 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict-local
|
||||
* @format
|
||||
*/
|
||||
|
||||
declare module '@electron/packager' {
|
||||
declare export type AsarOptions = $FlowFixMe;
|
||||
|
||||
declare export type ElectronDownloadRequestOptions = $FlowFixMe;
|
||||
|
||||
declare export type TargetDefinition = {
|
||||
arch: TargetArch,
|
||||
platform: TargetPlatform,
|
||||
};
|
||||
|
||||
declare export type FinalizePackageTargetsHookFunction = (
|
||||
targets: TargetDefinition[],
|
||||
callback: HookFunctionErrorCallback,
|
||||
) => void;
|
||||
|
||||
declare export type HookFunction = (
|
||||
buildPath: string,
|
||||
electronVersion: string,
|
||||
platform: TargetPlatform,
|
||||
arch: TargetArch,
|
||||
callback: HookFunctionErrorCallback,
|
||||
) => void;
|
||||
|
||||
declare export type IgnoreFunction = (path: string) => boolean;
|
||||
|
||||
declare export type HookFunctionErrorCallback = (err?: Error | null) => void;
|
||||
|
||||
declare export interface MacOSProtocol {
|
||||
name: string;
|
||||
schemes: string[];
|
||||
}
|
||||
|
||||
declare export type NotaryToolCredentials = $FlowFixMe;
|
||||
|
||||
declare export type OsxSignOptions = $FlowFixMe;
|
||||
|
||||
declare export type OsxUniversalOptions = $FlowFixMe;
|
||||
|
||||
declare export type Win32MetadataOptions = $ReadOnly<{
|
||||
CompanyName?: string,
|
||||
FileDescription?: string,
|
||||
OriginalFilename?: string,
|
||||
ProductName?: string,
|
||||
InternalName?: string,
|
||||
'requested-execution-level'?:
|
||||
| 'asInvoker'
|
||||
| 'highestAvailable'
|
||||
| 'requireAdministrator',
|
||||
'application-manifest'?: string,
|
||||
}>;
|
||||
|
||||
declare export type WindowsSignOptions = $FlowFixMe;
|
||||
|
||||
declare export type OfficialArch =
|
||||
| 'ia32'
|
||||
| 'x64'
|
||||
| 'armv7l'
|
||||
| 'arm64'
|
||||
| 'mips64el'
|
||||
| 'universal';
|
||||
|
||||
declare export type OfficialPlatform = 'linux' | 'win32' | 'darwin' | 'mas';
|
||||
|
||||
declare export type TargetArch = OfficialArch | string;
|
||||
|
||||
declare export type TargetPlatform = OfficialPlatform | string;
|
||||
|
||||
declare export type ArchOption = TargetArch | 'all';
|
||||
|
||||
declare export type PlatformOption = TargetPlatform | 'all';
|
||||
|
||||
declare export interface Options {
|
||||
dir: string;
|
||||
afterAsar?: HookFunction[];
|
||||
afterComplete?: HookFunction[];
|
||||
afterCopy?: HookFunction[];
|
||||
afterCopyExtraResources?: HookFunction[];
|
||||
afterExtract?: HookFunction[];
|
||||
afterFinalizePackageTargets?: FinalizePackageTargetsHookFunction[];
|
||||
afterInitialize?: HookFunction[];
|
||||
afterPrune?: HookFunction[];
|
||||
all?: boolean;
|
||||
appBundleId?: string;
|
||||
appCategoryType?: string;
|
||||
appCopyright?: string;
|
||||
appVersion?: string;
|
||||
arch?: ArchOption | ArchOption[];
|
||||
asar?: boolean | AsarOptions;
|
||||
beforeAsar?: HookFunction[];
|
||||
beforeCopy?: HookFunction[];
|
||||
beforeCopyExtraResources?: HookFunction[];
|
||||
buildVersion?: string;
|
||||
darwinDarkModeSupport?: boolean;
|
||||
derefSymlinks?: boolean;
|
||||
download?: ElectronDownloadRequestOptions;
|
||||
electronVersion?: string;
|
||||
electronZipDir?: string;
|
||||
executableName?: string;
|
||||
extendHelperInfo?:
|
||||
| string
|
||||
| {
|
||||
[property: string]: any,
|
||||
};
|
||||
extendInfo?:
|
||||
| string
|
||||
| {
|
||||
[property: string]: any,
|
||||
};
|
||||
extraResource?: string | string[];
|
||||
helperBundleId?: string;
|
||||
icon?: string;
|
||||
ignore?: RegExp | (string | RegExp)[] | IgnoreFunction;
|
||||
junk?: boolean;
|
||||
name?: string;
|
||||
osxNotarize?: NotaryToolCredentials;
|
||||
osxSign?: true | OsxSignOptions;
|
||||
osxUniversal?: OsxUniversalOptions;
|
||||
out?: string;
|
||||
overwrite?: boolean;
|
||||
platform?: TargetPlatform | 'all' | Array<TargetPlatform | 'all'>;
|
||||
prebuiltAsar?: string;
|
||||
protocols?: MacOSProtocol[];
|
||||
prune?: boolean;
|
||||
quiet?: boolean;
|
||||
tmpdir?: string | false;
|
||||
usageDescription?: {
|
||||
[property: string]: string,
|
||||
};
|
||||
win32metadata?: Win32MetadataOptions;
|
||||
windowsSign?: true | WindowsSignOptions;
|
||||
}
|
||||
|
||||
declare function packager(options: Options): Promise<string[]>;
|
||||
|
||||
declare module.exports: typeof packager & {
|
||||
packager: typeof packager,
|
||||
default: typeof packager,
|
||||
};
|
||||
}
|
||||
@@ -32,7 +32,7 @@ if (process.env.FBSOURCE_ENV === '1') {
|
||||
require('@fb-tools/babel-register');
|
||||
} else {
|
||||
// Register Babel to allow local packages to be loaded from source
|
||||
require('../scripts/babel-register').registerForMonorepo();
|
||||
require('../scripts/shared/babelRegister').registerForMonorepo();
|
||||
}
|
||||
|
||||
const transformer = require('@react-native/metro-babel-transformer');
|
||||
|
||||
+11
-7
@@ -8,14 +8,16 @@
|
||||
"android": "yarn --cwd packages/rn-tester android",
|
||||
"build-android": "./gradlew :packages:react-native:ReactAndroid:build",
|
||||
"build": "node ./scripts/build/build.js",
|
||||
"build-types": "node ./scripts/build-types",
|
||||
"build-types": "node ./scripts/js-api/build-types",
|
||||
"clang-format": "clang-format -i --glob=*/**/*.{h,cpp,m,mm}",
|
||||
"clean": "node ./scripts/build/clean.js",
|
||||
"cxx-api-build": "node ./scripts/cxx-api/public-api.js",
|
||||
"flow-check": "flow check",
|
||||
"flow": "flow",
|
||||
"format-check": "prettier --list-different \"./**/*.{js,md,yml,ts,tsx}\"",
|
||||
"format": "npm run prettier && npm run clang-format",
|
||||
"featureflags": "yarn --cwd packages/react-native featureflags",
|
||||
"js-api-diff": "node ./scripts/js-api/diff-api-snapshot",
|
||||
"lint-ci": "./.github/workflow-scripts/analyze_code.sh && yarn shellcheck",
|
||||
"lint-markdown": "markdownlint-cli2 2>&1",
|
||||
"lint": "eslint --max-warnings 0 .",
|
||||
@@ -49,10 +51,11 @@
|
||||
"@babel/plugin-transform-regenerator": "^7.24.7",
|
||||
"@babel/preset-env": "^7.25.3",
|
||||
"@babel/preset-flow": "^7.24.7",
|
||||
"@electron/packager": "^18.3.6",
|
||||
"@jest/create-cache-key-function": "^29.7.0",
|
||||
"@microsoft/api-extractor": "^7.52.2",
|
||||
"@react-native/metro-babel-transformer": "0.80.0-main",
|
||||
"@react-native/metro-config": "0.80.0-main",
|
||||
"@react-native/metro-babel-transformer": "0.81.0-main",
|
||||
"@react-native/metro-config": "0.81.0-main",
|
||||
"@tsconfig/node22": "22.0.2",
|
||||
"@types/react": "^19.1.0",
|
||||
"@typescript-eslint/parser": "^7.1.1",
|
||||
@@ -77,10 +80,11 @@
|
||||
"eslint-plugin-redundant-undefined": "^0.4.0",
|
||||
"eslint-plugin-relay": "^1.8.3",
|
||||
"flow-api-translator": "0.29.1",
|
||||
"flow-bin": "^0.274.2",
|
||||
"flow-bin": "^0.275.0",
|
||||
"glob": "^7.1.1",
|
||||
"hermes-eslint": "0.29.1",
|
||||
"hermes-transform": "0.29.1",
|
||||
"ini": "^5.0.0",
|
||||
"inquirer": "^7.1.0",
|
||||
"jest": "^29.7.0",
|
||||
"jest-config": "^29.7.0",
|
||||
@@ -89,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.4",
|
||||
"metro-memory-fs": "^0.82.4",
|
||||
"metro-transform-plugins": "^0.82.4",
|
||||
"metro-babel-register": "^0.82.5",
|
||||
"metro-memory-fs": "^0.82.5",
|
||||
"metro-transform-plugins": "^0.82.5",
|
||||
"micromatch": "^4.0.4",
|
||||
"node-fetch": "^2.2.0",
|
||||
"nullthrows": "^1.1.1",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/assets-registry",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Asset support code for React Native.",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/babel-plugin-codegen",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Babel plugin to generate native module and view manager code for React Native.",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
@@ -26,7 +26,7 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"@babel/traverse": "^7.25.3",
|
||||
"@react-native/codegen": "0.80.0-main"
|
||||
"@react-native/codegen": "0.81.0-main"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.25.2"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/community-cli-plugin",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Core CLI commands for React Native",
|
||||
"keywords": [
|
||||
"react-native",
|
||||
@@ -22,16 +22,16 @@
|
||||
"dist"
|
||||
],
|
||||
"dependencies": {
|
||||
"@react-native/dev-middleware": "0.80.0-main",
|
||||
"@react-native/dev-middleware": "0.81.0-main",
|
||||
"debug": "^4.4.0",
|
||||
"invariant": "^2.2.4",
|
||||
"metro": "^0.82.4",
|
||||
"metro-config": "^0.82.4",
|
||||
"metro-core": "^0.82.4",
|
||||
"metro": "^0.82.5",
|
||||
"metro-config": "^0.82.5",
|
||||
"metro-core": "^0.82.5",
|
||||
"semver": "^7.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"metro-resolver": "^0.82.4"
|
||||
"metro-resolver": "^0.82.5"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@react-native-community/cli": "*",
|
||||
|
||||
@@ -13,7 +13,7 @@ export type * from './index.flow';
|
||||
*/
|
||||
|
||||
if (!process.env.BUILD_EXCLUDE_BABEL_REGISTER) {
|
||||
require('../../../scripts/babel-register').registerForMonorepo();
|
||||
require('../../../scripts/shared/babelRegister').registerForMonorepo();
|
||||
}
|
||||
|
||||
module.exports = require('./index.flow');
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/core-cli-utils",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "React Native CLI library for Frameworks to build on",
|
||||
"license": "MIT",
|
||||
"main": "./src/index.flow.js",
|
||||
|
||||
@@ -13,7 +13,7 @@ export type * from './index.flow';
|
||||
*/
|
||||
|
||||
if (process.env.BUILD_EXCLUDE_BABEL_REGISTER == null) {
|
||||
require('../../../scripts/babel-register').registerForMonorepo();
|
||||
require('../../../scripts/shared/babelRegister').registerForMonorepo();
|
||||
}
|
||||
|
||||
module.exports = require('./index.flow');
|
||||
|
||||
@@ -13,7 +13,7 @@ export type * from './version.flow';
|
||||
*/
|
||||
|
||||
if (process.env.BUILD_EXCLUDE_BABEL_REGISTER == null) {
|
||||
require('../../../../scripts/babel-register').registerForMonorepo();
|
||||
require('../../../../scripts/shared/babelRegister').registerForMonorepo();
|
||||
}
|
||||
|
||||
module.exports = require('./version.flow');
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
@generated SignedSource<<634e06e29a06ec6a22c087e7f8b01796>>
|
||||
Git revision: 35c4630bd58bbcbc6f4c54c084b4e52994dc4940
|
||||
@generated SignedSource<<1ce3fb7dd23581737fedaf58528fe575>>
|
||||
Git revision: 844f225009e6445d088ed0e431d1fc430325ed95
|
||||
Built with --nohooks: false
|
||||
Is local checkout: false
|
||||
Remote URL: https://github.com/facebook/react-native-devtools-frontend
|
||||
|
||||
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+6
-6
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/debugger-frontend",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Debugger frontend for React Native based on Chrome DevTools",
|
||||
"keywords": [
|
||||
"react-native",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/debugger-shell",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Experimental debugger shell for React Native for use with @react-native/debugger-frontend",
|
||||
"keywords": [
|
||||
"react-native",
|
||||
@@ -8,7 +8,7 @@
|
||||
],
|
||||
"homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/debugger-shell#readme",
|
||||
"bugs": "https://github.com/facebook/react-native/issues",
|
||||
"main": "./src/node/index.js",
|
||||
"main": "./src/index.js",
|
||||
"exports": {
|
||||
".": {
|
||||
"node": "./src/node/index.js",
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
// $FlowFixMe[unclear-type] We have no Flow types for the Electron API.
|
||||
const {BrowserWindow, app, shell, ipcMain} = require('electron') as any;
|
||||
const path = require('path');
|
||||
const util = require('util');
|
||||
|
||||
const windowMetadata = new WeakMap<
|
||||
@@ -68,6 +69,8 @@ function handleLaunchArgs(argv: string[]) {
|
||||
partition: 'persist:react-native-devtools',
|
||||
preload: require.resolve('./preload.js'),
|
||||
},
|
||||
// Icon for Linux
|
||||
icon: path.join(__dirname, 'resources', 'icon.png'),
|
||||
});
|
||||
|
||||
// Open links in the default browser instead of in new Electron windows.
|
||||
@@ -90,7 +93,7 @@ function handleLaunchArgs(argv: string[]) {
|
||||
}
|
||||
|
||||
app.whenReady().then(() => {
|
||||
handleLaunchArgs(process.argv.slice(2));
|
||||
handleLaunchArgs(process.argv.slice(app.isPackaged ? 1 : 2));
|
||||
|
||||
app.on(
|
||||
'second-instance',
|
||||
|
||||
@@ -13,7 +13,7 @@ export type * from './index.flow';
|
||||
*/
|
||||
|
||||
if (!Boolean(process.env.BUILD_EXCLUDE_BABEL_REGISTER)) {
|
||||
require('../../../../scripts/babel-register').registerForMonorepo();
|
||||
require('../../../../scripts/shared/babelRegister').registerForMonorepo();
|
||||
}
|
||||
|
||||
module.exports = require('./index.flow');
|
||||
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 134 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 118 KiB |
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict-local
|
||||
* @format
|
||||
*/
|
||||
|
||||
// As far as Flow is concerned, this package is Node-only.
|
||||
/*::
|
||||
export type * from './node';
|
||||
const Node = require('./node');
|
||||
declare module.exports: typeof Node;
|
||||
*/
|
||||
|
||||
// Because Electron doesn't support package.json `exports`, we need to
|
||||
// switch at runtime.
|
||||
if ('electron' in process.versions) {
|
||||
// $FlowIgnore[invalid-export]
|
||||
module.exports = require('./electron');
|
||||
} else {
|
||||
// $FlowIgnore[invalid-export]
|
||||
module.exports = require('./node');
|
||||
}
|
||||
@@ -13,7 +13,7 @@ export type * from './index.flow';
|
||||
*/
|
||||
|
||||
if (!process.env.BUILD_EXCLUDE_BABEL_REGISTER) {
|
||||
require('../../../../scripts/babel-register').registerForMonorepo();
|
||||
require('../../../../scripts/shared/babelRegister').registerForMonorepo();
|
||||
}
|
||||
|
||||
export * from './index.flow';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/dev-middleware",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Dev server middleware for React Native",
|
||||
"keywords": [
|
||||
"react-native",
|
||||
@@ -23,7 +23,7 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"@isaacs/ttlcache": "^1.4.1",
|
||||
"@react-native/debugger-frontend": "0.80.0-main",
|
||||
"@react-native/debugger-frontend": "0.81.0-main",
|
||||
"chrome-launcher": "^0.15.2",
|
||||
"chromium-edge-launcher": "^0.2.0",
|
||||
"connect": "^3.6.5",
|
||||
|
||||
@@ -13,7 +13,7 @@ export type * from './index.flow';
|
||||
*/
|
||||
|
||||
if (!process.env.BUILD_EXCLUDE_BABEL_REGISTER) {
|
||||
require('../../../scripts/babel-register').registerForMonorepo();
|
||||
require('../../../scripts/shared/babelRegister').registerForMonorepo();
|
||||
}
|
||||
|
||||
export * from './index.flow';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/eslint-config",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "ESLint config for React Native",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
@@ -22,7 +22,7 @@
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.25.2",
|
||||
"@babel/eslint-parser": "^7.25.1",
|
||||
"@react-native/eslint-plugin": "0.80.0-main",
|
||||
"@react-native/eslint-plugin": "0.81.0-main",
|
||||
"@typescript-eslint/eslint-plugin": "^7.1.1",
|
||||
"@typescript-eslint/parser": "^7.1.1",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
|
||||
@@ -31,6 +31,8 @@ eslintTester.run('../no-deep-imports', rule, {
|
||||
"import Foo from 'react/native/Foo';",
|
||||
"import 'react-native/Libraries/Core/InitializeCore';",
|
||||
"require('react-native/Libraries/Core/InitializeCore');",
|
||||
"import Foo from 'react-native/src/fb_internal/Foo'",
|
||||
"require('react-native/src/fb_internal/Foo')",
|
||||
],
|
||||
invalid: [
|
||||
{
|
||||
@@ -103,5 +105,25 @@ eslintTester.run('../no-deep-imports', rule, {
|
||||
],
|
||||
output: null,
|
||||
},
|
||||
{
|
||||
code: "import type {RootTag} from 'react-native/Libraries/Types/RootTagTypes';",
|
||||
errors: [
|
||||
{
|
||||
messageId: 'deepImport',
|
||||
data: {importPath: 'react-native/Libraries/Types/RootTagTypes'},
|
||||
},
|
||||
],
|
||||
output: "import type {RootTag} from 'react-native';",
|
||||
},
|
||||
{
|
||||
code: "import type {ModalBaseProps, Foo} from 'react-native/Libraries/Modal/Modal';",
|
||||
errors: [
|
||||
{
|
||||
messageId: 'deepImport',
|
||||
data: {importPath: 'react-native/Libraries/Modal/Modal'},
|
||||
},
|
||||
],
|
||||
output: null,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
@@ -31,7 +31,8 @@ module.exports = {
|
||||
ImportDeclaration(node) {
|
||||
if (
|
||||
!isDeepReactNativeImport(node.source) ||
|
||||
isInitializeCoreImport(node.source)
|
||||
isInitializeCoreImport(node.source) ||
|
||||
isFbInternalImport(node.source)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
@@ -40,25 +41,55 @@ module.exports = {
|
||||
'react-native/'.length,
|
||||
);
|
||||
const publicAPIDefaultComponent = publicAPIMapping[reactNativeSource];
|
||||
if (publicAPIDefaultComponent) {
|
||||
if (publicAPIDefaultComponent && publicAPIDefaultComponent.default) {
|
||||
context.report({
|
||||
...getStandardReport(node.source),
|
||||
fix(fixer) {
|
||||
return fixer.replaceText(
|
||||
node,
|
||||
`import {${publicAPIDefaultComponent}} from 'react-native';`,
|
||||
`import {${publicAPIDefaultComponent.default}} from 'react-native';`,
|
||||
);
|
||||
},
|
||||
});
|
||||
} else {
|
||||
context.report(getStandardReport(node.source));
|
||||
}
|
||||
} else if (isTypeImport(node)) {
|
||||
const reactNativeSource = node.source.value.slice(
|
||||
'react-native/'.length,
|
||||
);
|
||||
const publicAPIDefaultComponent = publicAPIMapping[reactNativeSource];
|
||||
if (publicAPIDefaultComponent && publicAPIDefaultComponent.types) {
|
||||
const typeNames = [];
|
||||
for (const specifier of node.specifiers) {
|
||||
const importedName = specifier.imported.name;
|
||||
if (!publicAPIDefaultComponent.types.includes(importedName)) {
|
||||
context.report(getStandardReport(node.source));
|
||||
return;
|
||||
}
|
||||
typeNames.push(importedName);
|
||||
}
|
||||
|
||||
context.report({
|
||||
...getStandardReport(node.source),
|
||||
fix(fixer) {
|
||||
return fixer.replaceText(
|
||||
node,
|
||||
`import type {${typeNames.join(', ')}} from 'react-native';`,
|
||||
);
|
||||
},
|
||||
});
|
||||
}
|
||||
} else {
|
||||
context.report(getStandardReport(node.source));
|
||||
}
|
||||
},
|
||||
CallExpression(node) {
|
||||
if (!isDeepRequire(node) || isInitializeCoreImport(node.arguments[0])) {
|
||||
if (
|
||||
!isDeepRequire(node) ||
|
||||
isInitializeCoreImport(node.arguments[0]) ||
|
||||
isFbInternalImport(node.arguments[0])
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -71,13 +102,13 @@ module.exports = {
|
||||
) {
|
||||
const reactNativeSource = importPath.slice('react-native/'.length);
|
||||
const publicAPIDefaultComponent = publicAPIMapping[reactNativeSource];
|
||||
if (publicAPIDefaultComponent) {
|
||||
if (publicAPIDefaultComponent && publicAPIDefaultComponent.default) {
|
||||
context.report({
|
||||
...getStandardReport(node.arguments[0]),
|
||||
fix(fixer) {
|
||||
return fixer.replaceText(
|
||||
parent,
|
||||
`{${publicAPIDefaultComponent}} = require('react-native')`,
|
||||
`{${publicAPIDefaultComponent.default}} = require('react-native')`,
|
||||
);
|
||||
},
|
||||
});
|
||||
@@ -109,6 +140,10 @@ module.exports = {
|
||||
);
|
||||
}
|
||||
|
||||
function isTypeImport(node) {
|
||||
return node.type === 'ImportDeclaration' && node.importKind === 'type';
|
||||
}
|
||||
|
||||
function isDeepRequire(node) {
|
||||
return (
|
||||
node.callee.type === 'Identifier' &&
|
||||
@@ -137,5 +172,13 @@ module.exports = {
|
||||
|
||||
return source.value === 'react-native/Libraries/Core/InitializeCore';
|
||||
}
|
||||
|
||||
function isFbInternalImport(source) {
|
||||
if (source.type !== 'Literal' || typeof source.value !== 'string') {
|
||||
return false;
|
||||
}
|
||||
|
||||
return source.value.startsWith('react-native/src/fb_internal/');
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/eslint-plugin",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "ESLint rules for @react-native/eslint-config",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
|
||||
@@ -17,92 +17,513 @@
|
||||
* If the path is not matched, the auto-fix won't be suggested.
|
||||
*/
|
||||
const publicAPIMapping = {
|
||||
'Libraries/Components/AccessibilityInfo/AccessibilityInfo':
|
||||
'AccessibilityInfo',
|
||||
'Libraries/Components/ActivityIndicator/ActivityIndicator':
|
||||
'ActivityIndicator',
|
||||
'Libraries/Components/Button': 'Button',
|
||||
'Libraries/Components/DrawerAndroid/DrawerLayoutAndroid':
|
||||
'DrawerLayoutAndroid',
|
||||
'Libraries/Components/LayoutConformance/LayoutConformance':
|
||||
'experimental_LayoutConformance',
|
||||
'Libraries/Lists/FlatList': 'FlatList',
|
||||
'Libraries/Image/Image': 'Image',
|
||||
'Libraries/Image/ImageBackground': 'ImageBackground',
|
||||
'Libraries/Components/TextInput/InputAccessoryView': 'InputAccessoryView',
|
||||
'Libraries/Components/Keyboard/KeyboardAvoidingView': 'KeyboardAvoidingView',
|
||||
'Libraries/Modal/Modal': 'Modal',
|
||||
'Libraries/Components/Pressable/Pressable': 'Pressable',
|
||||
'Libraries/Components/ProgressBarAndroid/ProgressBarAndroid':
|
||||
'ProgressBarAndroid',
|
||||
'Libraries/Components/RefreshControl/RefreshControl': 'RefreshControl',
|
||||
'Libraries/Components/SafeAreaView/SafeAreaView': 'SafeAreaView',
|
||||
'Libraries/Components/ScrollView/ScrollView': 'ScrollView',
|
||||
'Libraries/Lists/SectionList': 'SectionList',
|
||||
'Libraries/Components/StatusBar/StatusBar': 'StatusBar',
|
||||
'Libraries/Components/Switch/Switch': 'Switch',
|
||||
'Libraries/Text/Text': 'Text',
|
||||
'Libraries/Components/TextInput/TextInput': 'TextInput',
|
||||
'Libraries/Components/Touchable/Touchable': 'Touchable',
|
||||
'Libraries/Components/Touchable/TouchableHighlight': 'TouchableHighlight',
|
||||
'Libraries/Components/Touchable/TouchableNativeFeedback':
|
||||
'TouchableNativeFeedback',
|
||||
'Libraries/Components/Touchable/TouchableOpacity': 'TouchableOpacity',
|
||||
'Libraries/Components/Touchable/TouchableWithoutFeedback':
|
||||
'TouchableWithoutFeedback',
|
||||
'Libraries/Components/View/View': 'View',
|
||||
'Libraries/Lists/VirtualizedList': 'VirtualizedList',
|
||||
'Libraries/Lists/VirtualizedSectionList': 'VirtualizedSectionList',
|
||||
'Libraries/ActionSheetIOS/ActionSheetIOS': 'ActionSheetIOS',
|
||||
'Libraries/Alert/Alert': 'Alert',
|
||||
'Libraries/Animated/Animated': 'Animated',
|
||||
'Libraries/Utilities/Appearance': 'Appearance',
|
||||
'Libraries/ReactNative/AppRegistry': 'AppRegistry',
|
||||
'Libraries/AppState/AppState': 'AppState',
|
||||
'Libraries/Utilities/BackHandler': 'BackHandler',
|
||||
'Libraries/Components/Clipboard/Clipboard': 'Clipboard',
|
||||
'Libraries/Utilities/DeviceInfo': 'DeviceInfo',
|
||||
'src/private/devsupport/devmenu/DevMenu': 'DevMenu',
|
||||
'Libraries/Utilities/DevSettings': 'DevSettings',
|
||||
'Libraries/Utilities/Dimensions': 'Dimensions',
|
||||
'Libraries/Animated/Easing': 'Easing',
|
||||
'Libraries/ReactNative/I18nManager': 'I18nManager',
|
||||
'Libraries/Interaction/InteractionManager': 'InteractionManager',
|
||||
'Libraries/Components/Keyboard/Keyboard': 'Keyboard',
|
||||
'Libraries/LayoutAnimation/LayoutAnimation': 'LayoutAnimation',
|
||||
'Libraries/Linking/Linking': 'Linking',
|
||||
'Libraries/LogBox/LogBox': 'LogBox',
|
||||
'Libraries/NativeModules/specs/NativeDialogManagerAndroid':
|
||||
'NativeDialogManagerAndroid',
|
||||
'Libraries/EventEmitter/NativeEventEmitter': 'NativeEventEmitter',
|
||||
'Libraries/Network/RCTNetworking': 'Networking',
|
||||
'Libraries/Interaction/PanResponder': 'PanResponder',
|
||||
'Libraries/PermissionsAndroid/PermissionsAndroid': 'PermissionsAndroid',
|
||||
'Libraries/Utilities/PixelRatio': 'PixelRatio',
|
||||
'Libraries/PushNotificationIOS/PushNotificationIOS': 'PushNotificationIOS',
|
||||
'Libraries/Settings/Settings': 'Settings',
|
||||
'Libraries/Share/Share': 'Share',
|
||||
'Libraries/StyleSheet/StyleSheet': 'StyleSheet',
|
||||
'Libraries/Performance/Systrace': 'Systrace',
|
||||
'Libraries/Components/ToastAndroid/ToastAndroid': 'ToastAndroid',
|
||||
'Libraries/TurboModule/TurboModuleRegistry': 'TurboModuleRegistry',
|
||||
'Libraries/ReactNative/UIManager': 'UIManager',
|
||||
'Libraries/Animated/useAnimatedValue': 'useAnimatedValue',
|
||||
'Libraries/Utilities/useColorScheme': 'useColorScheme',
|
||||
'Libraries/Utilities/useWindowDimensions': 'useWindowDimensions',
|
||||
'Libraries/UTFSequence': 'UTFSequence',
|
||||
'Libraries/Vibration/Vibration': 'Vibration',
|
||||
'Libraries/Utilities/codegenNativeComponent': 'codegenNativeComponent',
|
||||
'Libraries/Utilities/codegenNativeCommands': 'codegenNativeCommands',
|
||||
'Libraries/EventEmitter/RCTDeviceEventEmitter': 'DeviceEventEmitter',
|
||||
'Libraries/StyleSheet/PlatformColorValueTypesIOS': 'DynamicColorIOS',
|
||||
'Libraries/EventEmitter/RCTNativeAppEventEmitter': 'NativeAppEventEmitter',
|
||||
'Libraries/BatchedBridge/NativeModules': 'NativeModules',
|
||||
'Libraries/Utilities/Platform': 'Platform',
|
||||
'Libraries/StyleSheet/PlatformColorValueTypes': 'PlatformColor',
|
||||
'Libraries/StyleSheet/processColor': 'processColor',
|
||||
'Libraries/ReactNative/requireNativeComponent': 'requireNativeComponent',
|
||||
'Libraries/ReactNative/RootTag': 'RootTagContext',
|
||||
'Libraries/Components/AccessibilityInfo/AccessibilityInfo': {
|
||||
default: 'AccessibilityInfo',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Components/ActivityIndicator/ActivityIndicator': {
|
||||
default: 'ActivityIndicator',
|
||||
types: ['ActivityIndicatorProps'],
|
||||
},
|
||||
'Libraries/Components/Button': {
|
||||
default: 'Button',
|
||||
types: ['ButtonProps'],
|
||||
},
|
||||
'Libraries/Components/DrawerAndroid/DrawerLayoutAndroid': {
|
||||
default: 'DrawerLayoutAndroid',
|
||||
types: ['DrawerLayoutAndroidProps', 'DrawerSlideEvent'],
|
||||
},
|
||||
'Libraries/Components/LayoutConformance/LayoutConformance': {
|
||||
default: 'experimental_LayoutConformance',
|
||||
types: ['LayoutConformanceProps'],
|
||||
},
|
||||
'Libraries/Lists/FlatList': {
|
||||
default: 'FlatList',
|
||||
types: ['FlatListProps'],
|
||||
},
|
||||
'Libraries/Image/Image': {
|
||||
default: 'Image',
|
||||
types: [
|
||||
'ImageBackgroundProps',
|
||||
'ImageErrorEvent',
|
||||
'ImageLoadEvent',
|
||||
'ImageProgressEventIOS',
|
||||
'ImageProps',
|
||||
'ImagePropsAndroid',
|
||||
'ImagePropsBase',
|
||||
'ImagePropsIOS',
|
||||
'ImageResolvedAssetSource',
|
||||
'ImageSize',
|
||||
'ImageSourcePropType',
|
||||
],
|
||||
},
|
||||
'Libraries/Image/ImageSource': {
|
||||
default: null,
|
||||
types: ['ImageRequireSource', 'ImageSource', 'ImageURISource'],
|
||||
},
|
||||
'Libraries/Image/ImageBackground': {
|
||||
default: 'ImageBackground',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Components/TextInput/InputAccessoryView': {
|
||||
default: 'InputAccessoryView',
|
||||
types: ['InputAccessoryViewProps'],
|
||||
},
|
||||
'Libraries/Components/Keyboard/KeyboardAvoidingView': {
|
||||
default: 'KeyboardAvoidingView',
|
||||
types: ['KeyboardAvoidingViewProps'],
|
||||
},
|
||||
'Libraries/Modal/Modal': {
|
||||
default: 'Modal',
|
||||
types: [
|
||||
'ModalBaseProps',
|
||||
'ModalProps',
|
||||
'ModalPropsAndroid',
|
||||
'ModalPropsIOS',
|
||||
],
|
||||
},
|
||||
'Libraries/Components/Pressable/Pressable': {
|
||||
default: 'Pressable',
|
||||
types: [
|
||||
'PressableAndroidRippleConfig',
|
||||
'PressableProps',
|
||||
'PressableStateCallbackType',
|
||||
],
|
||||
},
|
||||
'Libraries/Components/ProgressBarAndroid/ProgressBarAndroid': {
|
||||
default: 'ProgressBarAndroid',
|
||||
types: ['ProgressBarAndroidProps'],
|
||||
},
|
||||
'Libraries/Components/RefreshControl/RefreshControl': {
|
||||
default: 'RefreshControl',
|
||||
types: [
|
||||
'RefreshControlProps',
|
||||
'RefreshControlPropsAndroid',
|
||||
'RefreshControlPropsIOS',
|
||||
],
|
||||
},
|
||||
'Libraries/Components/SafeAreaView/SafeAreaView': {
|
||||
default: 'SafeAreaView',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Components/ScrollView/ScrollView': {
|
||||
default: 'ScrollView',
|
||||
types: [
|
||||
'ScrollResponderType',
|
||||
'ScrollViewProps',
|
||||
'ScrollViewPropsAndroid',
|
||||
'ScrollViewPropsIOS',
|
||||
'ScrollViewImperativeMethods',
|
||||
'ScrollViewScrollToOptions',
|
||||
],
|
||||
},
|
||||
'Libraries/Lists/SectionList': {
|
||||
default: 'SectionList',
|
||||
types: [
|
||||
'SectionListProps',
|
||||
'SectionListRenderItem',
|
||||
'SectionListRenderItemInfo',
|
||||
'SectionListData',
|
||||
],
|
||||
},
|
||||
'Libraries/Components/StatusBar/StatusBar': {
|
||||
default: 'StatusBar',
|
||||
types: ['StatusBarAnimation', 'StatusBarProps', 'StatusBarStyle'],
|
||||
},
|
||||
'Libraries/Components/Switch/Switch': {
|
||||
default: 'Switch',
|
||||
types: ['SwitchChangeEvent', 'SwitchProps'],
|
||||
},
|
||||
'Libraries/Text/Text': {
|
||||
default: 'Text',
|
||||
types: ['TextProps'],
|
||||
},
|
||||
'Libraries/Components/TextInput/TextInput': {
|
||||
default: 'TextInput',
|
||||
types: [
|
||||
'AutoCapitalize',
|
||||
'EnterKeyHintTypeOptions',
|
||||
'KeyboardTypeOptions',
|
||||
'InputModeOptions',
|
||||
'TextContentType',
|
||||
'TextInputAndroidProps',
|
||||
'TextInputIOSProps',
|
||||
'TextInputProps',
|
||||
'TextInputChangeEvent',
|
||||
'TextInputContentSizeChangeEvent',
|
||||
'TextInputEndEditingEvent',
|
||||
'TextInputFocusEvent',
|
||||
'TextInputKeyPressEvent',
|
||||
'TextInputSelectionChangeEvent',
|
||||
'TextInputSubmitEditingEvent',
|
||||
'ReturnKeyTypeOptions',
|
||||
'SubmitBehavior',
|
||||
],
|
||||
},
|
||||
'Libraries/Components/Touchable/Touchable': {
|
||||
default: 'Touchable',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Components/Touchable/TouchableHighlight': {
|
||||
default: 'TouchableHighlight',
|
||||
types: ['TouchableHighlightProps'],
|
||||
},
|
||||
'Libraries/Components/Touchable/TouchableNativeFeedback': {
|
||||
default: 'TouchableNativeFeedback',
|
||||
types: ['TouchableNativeFeedbackProps'],
|
||||
},
|
||||
'Libraries/Components/Touchable/TouchableOpacity': {
|
||||
default: 'TouchableOpacity',
|
||||
types: ['TouchableOpacityProps'],
|
||||
},
|
||||
'Libraries/Components/Touchable/TouchableWithoutFeedback': {
|
||||
default: 'TouchableWithoutFeedback',
|
||||
types: ['TouchableWithoutFeedbackProps'],
|
||||
},
|
||||
'Libraries/Components/View/View': {
|
||||
default: 'View',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Components/View/ViewAccessibility': {
|
||||
default: null,
|
||||
types: [
|
||||
'AccessibilityActionEvent',
|
||||
'AccessibilityProps',
|
||||
'AccessibilityRole',
|
||||
'AccessibilityState',
|
||||
'AccessibilityValue',
|
||||
'Role',
|
||||
],
|
||||
},
|
||||
'Libraries/Components/View/ViewPropTypes': {
|
||||
default: null,
|
||||
types: [
|
||||
'GestureResponderHandlers',
|
||||
'TVViewPropsIOS',
|
||||
'ViewProps',
|
||||
'ViewPropsAndroid',
|
||||
'ViewPropsIOS',
|
||||
],
|
||||
},
|
||||
'Libraries/Lists/VirtualizedList': {
|
||||
default: 'VirtualizedList',
|
||||
types: [
|
||||
'ListRenderItemInfo',
|
||||
'ListRenderItem',
|
||||
'Separators',
|
||||
'VirtualizedListProps',
|
||||
],
|
||||
},
|
||||
'Libraries/Lists/VirtualizedSectionList': {
|
||||
default: 'VirtualizedSectionList',
|
||||
types: [
|
||||
'ScrollToLocationParamsType',
|
||||
'SectionBase',
|
||||
'VirtualizedSectionListProps',
|
||||
],
|
||||
},
|
||||
'Libraries/ActionSheetIOS/ActionSheetIOS': {
|
||||
default: 'ActionSheetIOS',
|
||||
types: [
|
||||
'ActionSheetIOSOptions',
|
||||
'ShareActionSheetIOSOptions',
|
||||
'ShareActionSheetError',
|
||||
],
|
||||
},
|
||||
'Libraries/Alert/Alert': {
|
||||
default: 'Alert',
|
||||
types: ['AlertType', 'AlertButtonStyle', 'AlertButton', 'AlertOptions'],
|
||||
},
|
||||
'Libraries/Animated/Animated': {
|
||||
default: 'Animated',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Utilities/Appearance': {
|
||||
default: 'Appearance',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/ReactNative/AppRegistry': {
|
||||
default: 'AppRegistry',
|
||||
types: [
|
||||
'TaskProvider',
|
||||
'ComponentProvider',
|
||||
'ComponentProviderInstrumentationHook',
|
||||
'AppConfig',
|
||||
'Runnable',
|
||||
'Runnables',
|
||||
'Registry',
|
||||
'WrapperComponentProvider',
|
||||
'RootViewStyleProvider',
|
||||
],
|
||||
},
|
||||
'Libraries/AppState/AppState': {
|
||||
default: 'AppState',
|
||||
types: ['AppStateStatus', 'AppStateEvent'],
|
||||
},
|
||||
'Libraries/Utilities/BackHandler': {
|
||||
default: 'BackHandler',
|
||||
types: ['BackPressEventName'],
|
||||
},
|
||||
'Libraries/Components/Clipboard/Clipboard': {
|
||||
default: 'Clipboard',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Utilities/DeviceInfo': {
|
||||
default: 'DeviceInfo',
|
||||
types: ['DeviceInfoConstants'],
|
||||
},
|
||||
'src/private/devsupport/devmenu/DevMenu': {
|
||||
default: 'DevMenu',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Utilities/DevSettings': {
|
||||
default: 'DevSettings',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Utilities/Dimensions': {
|
||||
default: 'Dimensions',
|
||||
types: [
|
||||
'DimensionsPayload',
|
||||
'DisplayMetrics',
|
||||
'DisplayMetricsAndroid',
|
||||
'ScaledSize',
|
||||
],
|
||||
},
|
||||
'Libraries/Animated/Easing': {
|
||||
default: 'Easing',
|
||||
types: ['EasingFunction'],
|
||||
},
|
||||
'Libraries/ReactNative/I18nManager': {
|
||||
default: 'I18nManager',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Interaction/InteractionManager': {
|
||||
default: 'InteractionManager',
|
||||
types: ['Handle', 'PromiseTask', 'SimpleTask'],
|
||||
},
|
||||
'Libraries/Components/Keyboard/Keyboard': {
|
||||
default: 'Keyboard',
|
||||
types: [
|
||||
'AndroidKeyboardEvent',
|
||||
'IOSKeyboardEvent',
|
||||
'KeyboardEvent',
|
||||
'KeyboardEventEasing',
|
||||
'KeyboardEventName',
|
||||
'KeyboardMetrics',
|
||||
],
|
||||
},
|
||||
'Libraries/LayoutAnimation/LayoutAnimation': {
|
||||
default: 'LayoutAnimation',
|
||||
types: [
|
||||
'LayoutAnimationAnim',
|
||||
'LayoutAnimationConfig',
|
||||
'LayoutAnimationProperties',
|
||||
'LayoutAnimationProperty',
|
||||
'LayoutAnimationType',
|
||||
'LayoutAnimationTypes',
|
||||
],
|
||||
},
|
||||
'Libraries/Linking/Linking': {
|
||||
default: 'Linking',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/LogBox/LogBox': {
|
||||
default: 'LogBox',
|
||||
types: ['ExtendedExceptionData', 'IgnorePattern', 'LogData'],
|
||||
},
|
||||
'Libraries/NativeModules/specs/NativeDialogManagerAndroid': {
|
||||
default: 'NativeDialogManagerAndroid',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/EventEmitter/NativeEventEmitter': {
|
||||
default: 'NativeEventEmitter',
|
||||
types: [
|
||||
'EventSubscription',
|
||||
'EmitterSubscription',
|
||||
'NativeEventSubscription',
|
||||
],
|
||||
},
|
||||
'Libraries/Network/RCTNetworking': {
|
||||
default: 'Networking',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Interaction/PanResponder': {
|
||||
default: 'PanResponder',
|
||||
types: [
|
||||
'PanResponderCallbacks',
|
||||
'PanResponderGestureState',
|
||||
'PanResponderInstance',
|
||||
],
|
||||
},
|
||||
'Libraries/PermissionsAndroid/PermissionsAndroid': {
|
||||
default: 'PermissionsAndroid',
|
||||
types: ['Permission', 'PermissionStatus', 'Rationale'],
|
||||
},
|
||||
'Libraries/Utilities/PixelRatio': {
|
||||
default: 'PixelRatio',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/PushNotificationIOS/PushNotificationIOS': {
|
||||
default: 'PushNotificationIOS',
|
||||
types: ['PushNotificationEventName', 'PushNotificationPermissions'],
|
||||
},
|
||||
'Libraries/Settings/Settings': {
|
||||
default: 'Settings',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Share/Share': {
|
||||
default: 'Share',
|
||||
types: ['ShareAction', 'ShareContent', 'ShareOptions'],
|
||||
},
|
||||
'Libraries/StyleSheet/StyleSheet': {
|
||||
default: 'StyleSheet',
|
||||
types: [
|
||||
'ColorValue',
|
||||
'ImageStyle',
|
||||
'FilterFunction',
|
||||
'FontVariant',
|
||||
'NativeColorValue',
|
||||
'OpaqueColorValue',
|
||||
'StyleProp',
|
||||
'TextStyle',
|
||||
'TransformsStyle',
|
||||
'ViewStyle',
|
||||
],
|
||||
},
|
||||
'Libraries/StyleSheet/StyleSheetTypes': {
|
||||
default: null,
|
||||
types: [
|
||||
'BoxShadowValue',
|
||||
'CursorValue',
|
||||
'DimensionValue',
|
||||
'DropShadowValue',
|
||||
'EdgeInsetsValue',
|
||||
'PointValue',
|
||||
],
|
||||
},
|
||||
'Libraries/StyleSheet/Rect': {
|
||||
default: null,
|
||||
types: ['Insets'],
|
||||
},
|
||||
'Libraries/Performance/Systrace': {
|
||||
default: 'Systrace',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Components/ToastAndroid/ToastAndroid': {
|
||||
default: 'ToastAndroid',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/TurboModule/TurboModuleRegistry': {
|
||||
default: 'TurboModuleRegistry',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/TurboModule/RCTExport': {
|
||||
default: null,
|
||||
types: ['TurboModule'],
|
||||
},
|
||||
'Libraries/ReactNative/UIManager': {
|
||||
default: 'UIManager',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Animated/useAnimatedValue': {
|
||||
default: 'useAnimatedValue',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Utilities/useColorScheme': {
|
||||
default: 'useColorScheme',
|
||||
types: null,
|
||||
},
|
||||
'src/private/specs_DEPRECATED/modules/NativeAppearance': {
|
||||
default: null,
|
||||
types: ['ColorSchemeName'],
|
||||
},
|
||||
'Libraries/Utilities/useWindowDimensions': {
|
||||
default: 'useWindowDimensions',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/UTFSequence': {
|
||||
default: 'UTFSequence',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Vibration/Vibration': {
|
||||
default: 'Vibration',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Utilities/codegenNativeComponent': {
|
||||
default: 'codegenNativeComponent',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Utilities/codegenNativeCommands': {
|
||||
default: 'codegenNativeCommands',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/EventEmitter/RCTDeviceEventEmitter': {
|
||||
default: 'DeviceEventEmitter',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/StyleSheet/PlatformColorValueTypesIOS': {
|
||||
default: 'DynamicColorIOS',
|
||||
types: ['DynamicColorIOSTuple'],
|
||||
},
|
||||
'Libraries/EventEmitter/RCTNativeAppEventEmitter': {
|
||||
default: 'NativeAppEventEmitter',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/BatchedBridge/NativeModules': {
|
||||
default: 'NativeModules',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/Utilities/Platform': {
|
||||
default: 'Platform',
|
||||
types: null,
|
||||
},
|
||||
'./Libraries/Utilities/PlatformTypes': {
|
||||
default: null,
|
||||
types: ['PlatformOSType', 'PlatformSelectSpec'],
|
||||
},
|
||||
'Libraries/StyleSheet/PlatformColorValueTypes': {
|
||||
default: 'PlatformColor',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/StyleSheet/processColor': {
|
||||
default: 'processColor',
|
||||
types: ['ProcessedColorValue'],
|
||||
},
|
||||
'Libraries/ReactNative/requireNativeComponent': {
|
||||
default: 'requireNativeComponent',
|
||||
types: null,
|
||||
},
|
||||
'Libraries/ReactNative/RootTag': {
|
||||
default: 'RootTagContext',
|
||||
types: ['RootTag'],
|
||||
},
|
||||
'Libraries/Types/RootTagTypes': {
|
||||
default: null,
|
||||
types: ['RootTag'],
|
||||
},
|
||||
'src/private/types/HostInstance': {
|
||||
default: null,
|
||||
types: [
|
||||
'HostInstance',
|
||||
'NativeMethods',
|
||||
'NativeMethodsMixin',
|
||||
'MeasureInWindowOnSuccessCallback',
|
||||
'MeasureLayoutOnSuccessCallback',
|
||||
'MeasureOnSuccessCallback',
|
||||
],
|
||||
},
|
||||
'src/private/types/HostComponent': {
|
||||
default: null,
|
||||
types: ['HostComponent'],
|
||||
},
|
||||
'Libraries/vendor/core/ErrorUtils': {
|
||||
default: null,
|
||||
types: ['ErrorUtils'],
|
||||
},
|
||||
'Libraries/ReactPrivate/ReactNativePrivateInterface': {
|
||||
default: null,
|
||||
types: ['PublicRootInstance', 'PublicTextInstance'],
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/eslint-plugin-specs",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "ESLint rules to validate NativeModule and Component Specs",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
@@ -26,7 +26,7 @@
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.25.2",
|
||||
"@babel/plugin-transform-flow-strip-types": "^7.25.2",
|
||||
"@react-native/codegen": "0.80.0-main",
|
||||
"@react-native/codegen": "0.81.0-main",
|
||||
"make-dir": "^2.1.0",
|
||||
"pirates": "^4.0.1",
|
||||
"source-map-support": "0.5.0"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/gradle-plugin",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Gradle Plugin for React Native",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
|
||||
+1
@@ -148,6 +148,7 @@ abstract class GeneratePackageListTask : DefaultTask() {
|
||||
|
||||
{{ packageImports }}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class PackageList {
|
||||
private Application application;
|
||||
private ReactNativeHost reactNativeHost;
|
||||
|
||||
+27
@@ -8,12 +8,14 @@
|
||||
package com.facebook.react.utils
|
||||
|
||||
import com.facebook.react.utils.PropertyUtils.DEFAULT_INTERNAL_PUBLISHING_GROUP
|
||||
import com.facebook.react.utils.PropertyUtils.EXCLUSIVE_ENTEPRISE_REPOSITORY
|
||||
import com.facebook.react.utils.PropertyUtils.INCLUDE_JITPACK_REPOSITORY
|
||||
import com.facebook.react.utils.PropertyUtils.INCLUDE_JITPACK_REPOSITORY_DEFAULT
|
||||
import com.facebook.react.utils.PropertyUtils.INTERNAL_PUBLISHING_GROUP
|
||||
import com.facebook.react.utils.PropertyUtils.INTERNAL_REACT_NATIVE_MAVEN_LOCAL_REPO
|
||||
import com.facebook.react.utils.PropertyUtils.INTERNAL_USE_HERMES_NIGHTLY
|
||||
import com.facebook.react.utils.PropertyUtils.INTERNAL_VERSION_NAME
|
||||
import com.facebook.react.utils.PropertyUtils.SCOPED_EXCLUSIVE_ENTEPRISE_REPOSITORY
|
||||
import com.facebook.react.utils.PropertyUtils.SCOPED_INCLUDE_JITPACK_REPOSITORY
|
||||
import java.io.File
|
||||
import java.net.URI
|
||||
@@ -28,6 +30,12 @@ internal object DependencyUtils {
|
||||
* party libraries which are auto-linked.
|
||||
*/
|
||||
fun configureRepositories(project: Project) {
|
||||
val exclusiveEnterpriseRepository = project.rootProject.exclusiveEnterpriseRepository()
|
||||
if (exclusiveEnterpriseRepository != null) {
|
||||
project.logger.lifecycle(
|
||||
"Replacing ALL Maven Repositories with: $exclusiveEnterpriseRepository")
|
||||
}
|
||||
|
||||
project.rootProject.allprojects { eachProject ->
|
||||
with(eachProject) {
|
||||
if (hasProperty(INTERNAL_REACT_NATIVE_MAVEN_LOCAL_REPO)) {
|
||||
@@ -36,6 +44,16 @@ internal object DependencyUtils {
|
||||
repo.content { it.excludeGroup("org.webkit") }
|
||||
}
|
||||
}
|
||||
|
||||
if (exclusiveEnterpriseRepository != null) {
|
||||
// We remove all previously set repositories and only configure the proxy provided by the
|
||||
// user.
|
||||
rootProject.repositories.clear()
|
||||
mavenRepoFromUrl(exclusiveEnterpriseRepository)
|
||||
// We return here as we don't want to configure other repositories as well.
|
||||
return@allprojects
|
||||
}
|
||||
|
||||
// We add the snapshot for users on nightlies.
|
||||
mavenRepoFromUrl("https://central.sonatype.com/repository/maven-snapshots/") { repo ->
|
||||
repo.content { it.excludeGroup("org.webkit") }
|
||||
@@ -181,4 +199,13 @@ internal object DependencyUtils {
|
||||
property(INCLUDE_JITPACK_REPOSITORY).toString().toBoolean()
|
||||
else -> INCLUDE_JITPACK_REPOSITORY_DEFAULT
|
||||
}
|
||||
|
||||
internal fun Project.exclusiveEnterpriseRepository() =
|
||||
when {
|
||||
hasProperty(SCOPED_EXCLUSIVE_ENTEPRISE_REPOSITORY) ->
|
||||
property(SCOPED_EXCLUSIVE_ENTEPRISE_REPOSITORY).toString()
|
||||
hasProperty(EXCLUSIVE_ENTEPRISE_REPOSITORY) ->
|
||||
property(EXCLUSIVE_ENTEPRISE_REPOSITORY).toString()
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -34,6 +34,12 @@ object PropertyUtils {
|
||||
const val INCLUDE_JITPACK_REPOSITORY = "includeJitpackRepository"
|
||||
const val SCOPED_INCLUDE_JITPACK_REPOSITORY = "react.includeJitpackRepository"
|
||||
|
||||
/**
|
||||
* Public property that allows to configure an enterprise repository proxy as exclusive repository
|
||||
*/
|
||||
const val EXCLUSIVE_ENTEPRISE_REPOSITORY = "exclusiveEnterpriseRepository"
|
||||
const val SCOPED_EXCLUSIVE_ENTEPRISE_REPOSITORY = "react.exclusiveEnterpriseRepository"
|
||||
|
||||
/** By default we include JitPack to avoid breaking user builds */
|
||||
internal const val INCLUDE_JITPACK_REPOSITORY_DEFAULT = true
|
||||
|
||||
|
||||
+3
-1
@@ -233,6 +233,7 @@ class GeneratePackageListTaskTest {
|
||||
|
||||
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class PackageList {
|
||||
private Application application;
|
||||
private ReactNativeHost reactNativeHost;
|
||||
@@ -311,7 +312,8 @@ class GeneratePackageListTaskTest {
|
||||
import com.facebook.react.aPackage;
|
||||
// @react-native/another-package
|
||||
import com.facebook.react.anotherPackage;
|
||||
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class PackageList {
|
||||
private Application application;
|
||||
private ReactNativeHost reactNativeHost;
|
||||
|
||||
+44
-1
@@ -10,6 +10,7 @@ package com.facebook.react.utils
|
||||
import com.facebook.react.tests.createProject
|
||||
import com.facebook.react.utils.DependencyUtils.configureDependencies
|
||||
import com.facebook.react.utils.DependencyUtils.configureRepositories
|
||||
import com.facebook.react.utils.DependencyUtils.exclusiveEnterpriseRepository
|
||||
import com.facebook.react.utils.DependencyUtils.getDependencySubstitutions
|
||||
import com.facebook.react.utils.DependencyUtils.mavenRepoFromURI
|
||||
import com.facebook.react.utils.DependencyUtils.mavenRepoFromUrl
|
||||
@@ -99,6 +100,24 @@ class DependencyUtilsTest {
|
||||
.isNotNull()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun configureRepositories_withExclusiveEnterpriseRepository_replacesAllRepositories() {
|
||||
val repositoryURI = URI.create("https://maven.myfabolousorganization.it")
|
||||
|
||||
val project = createProject()
|
||||
project.rootProject.extensions.extraProperties.set(
|
||||
"exclusiveEnterpriseRepository", repositoryURI.toString())
|
||||
|
||||
configureRepositories(project)
|
||||
|
||||
assertThat(project.repositories).hasSize(1)
|
||||
assertThat(
|
||||
project.repositories.firstOrNull {
|
||||
it is MavenArtifactRepository && it.url == repositoryURI
|
||||
})
|
||||
.isNotNull()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun configureRepositories_withIncludeJitpackRepositoryFalse_doesNotContainJitPack() {
|
||||
val repositoryURI = URI.create("https://www.jitpack.io")
|
||||
@@ -470,7 +489,7 @@ class DependencyUtilsTest {
|
||||
@Test
|
||||
fun shouldAddJitPack_withUnscopedProperty() {
|
||||
val project = createProject(tempFolder.root)
|
||||
project.extensions.extraProperties.set("react.includeJitpackRepository", "false")
|
||||
project.extensions.extraProperties.set("includeJitpackRepository", "false")
|
||||
assertThat(project.shouldAddJitPack()).isFalse()
|
||||
}
|
||||
|
||||
@@ -479,4 +498,28 @@ class DependencyUtilsTest {
|
||||
val project = createProject(tempFolder.root)
|
||||
assertThat(project.shouldAddJitPack()).isTrue()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun exclusiveEnterpriseRepository_withScopedProperty() {
|
||||
val project = createProject(tempFolder.root)
|
||||
project.extensions.extraProperties.set(
|
||||
"react.exclusiveEnterpriseRepository", "https://maven.myfabolousorganization.it")
|
||||
assertThat(project.exclusiveEnterpriseRepository())
|
||||
.isEqualTo("https://maven.myfabolousorganization.it")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun exclusiveEnterpriseRepository_withUnscopedProperty() {
|
||||
val project = createProject(tempFolder.root)
|
||||
project.extensions.extraProperties.set(
|
||||
"exclusiveEnterpriseRepository", "https://maven.myfabolousorganization.it")
|
||||
assertThat(project.exclusiveEnterpriseRepository())
|
||||
.isEqualTo("https://maven.myfabolousorganization.it")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun exclusiveEnterpriseRepository_defaultIsTrue() {
|
||||
val project = createProject(tempFolder.root)
|
||||
assertThat(project.exclusiveEnterpriseRepository()).isNull()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/metro-config",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Metro configuration for React Native.",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
@@ -26,9 +26,9 @@
|
||||
"dist"
|
||||
],
|
||||
"dependencies": {
|
||||
"@react-native/js-polyfills": "0.80.0-main",
|
||||
"@react-native/metro-babel-transformer": "0.80.0-main",
|
||||
"metro-config": "^0.82.4",
|
||||
"metro-runtime": "^0.82.4"
|
||||
"@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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ export type * from './index.flow';
|
||||
*/
|
||||
|
||||
if (!process.env.BUILD_EXCLUDE_BABEL_REGISTER) {
|
||||
require('../../../scripts/babel-register').registerForMonorepo();
|
||||
require('../../../scripts/shared/babelRegister').registerForMonorepo();
|
||||
}
|
||||
|
||||
module.exports = require('./index.flow');
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/new-app-screen",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "NewAppScreen component for React Native",
|
||||
"keywords": [
|
||||
"react-native"
|
||||
|
||||
@@ -65,7 +65,7 @@ const Links: Array<{
|
||||
},
|
||||
{
|
||||
title: 'Community',
|
||||
description: 'Expore & get help',
|
||||
description: 'Explore & get help',
|
||||
url: 'https://reactnative.dev/community/overview',
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/normalize-colors",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Color normalization for React Native.",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
|
||||
@@ -585,6 +585,7 @@ if (global.nativeLoggingHook) {
|
||||
}
|
||||
|
||||
global.console = {
|
||||
timeStamp: consoleTimeStampPolyfill,
|
||||
...(originalConsole ?? {}),
|
||||
error: getNativeLogFunction(LOG_LEVELS.error),
|
||||
info: getNativeLogFunction(LOG_LEVELS.info),
|
||||
@@ -597,7 +598,6 @@ if (global.nativeLoggingHook) {
|
||||
groupEnd: consoleGroupEndPolyfill,
|
||||
groupCollapsed: consoleGroupCollapsedPolyfill,
|
||||
assert: consoleAssertPolyfill,
|
||||
timeStamp: consoleTimeStampPolyfill,
|
||||
};
|
||||
|
||||
// TODO(T206796580): This was copy-pasted from ExceptionsManager.js
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/js-polyfills",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Polyfills for React Native.",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/babel-preset",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Babel preset for React Native applications",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -66,7 +66,7 @@
|
||||
"@babel/plugin-transform-typescript": "^7.25.2",
|
||||
"@babel/plugin-transform-unicode-regex": "^7.24.7",
|
||||
"@babel/template": "^7.25.0",
|
||||
"@react-native/babel-plugin-codegen": "0.80.0-main",
|
||||
"@react-native/babel-plugin-codegen": "0.81.0-main",
|
||||
"babel-plugin-syntax-hermes-parser": "0.29.1",
|
||||
"babel-plugin-transform-flow-enums": "^0.0.2",
|
||||
"react-refresh": "^0.14.0"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/metro-babel-transformer",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Babel transformer for React Native applications.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -27,7 +27,7 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.25.2",
|
||||
"@react-native/babel-preset": "0.80.0-main",
|
||||
"@react-native/babel-preset": "0.81.0-main",
|
||||
"hermes-parser": "0.29.1",
|
||||
"nullthrows": "^1.1.1"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/codegen",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Code generation tools for React Native",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
|
||||
+12
-41
@@ -85,6 +85,7 @@ function generatePropsDiffString(
|
||||
case 'StringTypeAnnotation':
|
||||
case 'Int32TypeAnnotation':
|
||||
case 'BooleanTypeAnnotation':
|
||||
case 'MixedTypeAnnotation':
|
||||
return `
|
||||
if (${prop.name} != oldProps->${prop.name}) {
|
||||
result["${prop.name}"] = ${prop.name};
|
||||
@@ -94,6 +95,14 @@ function generatePropsDiffString(
|
||||
return `
|
||||
if ((${prop.name} != oldProps->${prop.name}) && !(std::isnan(${prop.name}) && std::isnan(oldProps->${prop.name}))) {
|
||||
result["${prop.name}"] = ${prop.name};
|
||||
}`;
|
||||
case 'ArrayTypeAnnotation':
|
||||
case 'ObjectTypeAnnotation':
|
||||
case 'StringEnumTypeAnnotation':
|
||||
case 'Int32EnumTypeAnnotation':
|
||||
return `
|
||||
if (${prop.name} != oldProps->${prop.name}) {
|
||||
result["${prop.name}"] = toDynamic(${prop.name});
|
||||
}`;
|
||||
case 'ReservedPropTypeAnnotation':
|
||||
switch (typeAnnotation.name) {
|
||||
@@ -103,6 +112,9 @@ function generatePropsDiffString(
|
||||
result["${prop.name}"] = *${prop.name};
|
||||
}`;
|
||||
case 'ImageSourcePrimitive':
|
||||
case 'PointPrimitive':
|
||||
case 'EdgeInsetsPrimitive':
|
||||
case 'DimensionPrimitive':
|
||||
return `
|
||||
if (${prop.name} != oldProps->${prop.name}) {
|
||||
result["${prop.name}"] = toDynamic(${prop.name});
|
||||
@@ -112,52 +124,11 @@ function generatePropsDiffString(
|
||||
throw new Error(
|
||||
'ImageRequestPrimitive should not be used in Props',
|
||||
);
|
||||
case 'PointPrimitive':
|
||||
return `
|
||||
if (${prop.name} != oldProps->${prop.name}) {
|
||||
result["${prop.name}"] = toDynamic(${prop.name});
|
||||
}`;
|
||||
case 'EdgeInsetsPrimitive':
|
||||
return `
|
||||
if (${prop.name} != oldProps->${prop.name}) {
|
||||
result["${prop.name}"] = toDynamic(${prop.name});
|
||||
}`;
|
||||
case 'DimensionPrimitive':
|
||||
return `
|
||||
if (${prop.name} != oldProps->${prop.name}) {
|
||||
result["${prop.name}"] = toDynamic(${prop.name});
|
||||
}`;
|
||||
default:
|
||||
(typeAnnotation.name: empty);
|
||||
throw new Error('Received unknown ReservedPropTypeAnnotation');
|
||||
}
|
||||
case 'ArrayTypeAnnotation':
|
||||
return `
|
||||
if (${prop.name} != oldProps->${prop.name}) {
|
||||
result["${prop.name}"] = toDynamic(${prop.name});
|
||||
}`;
|
||||
case 'ObjectTypeAnnotation':
|
||||
return `
|
||||
if (${prop.name} != oldProps->${prop.name}) {
|
||||
result["${prop.name}"] = toDynamic(${prop.name});
|
||||
}`;
|
||||
case 'StringEnumTypeAnnotation':
|
||||
return `
|
||||
if (${prop.name} != oldProps->${prop.name}) {
|
||||
result["${prop.name}"] = toDynamic(${prop.name});
|
||||
}`;
|
||||
case 'Int32EnumTypeAnnotation':
|
||||
return `
|
||||
if (${prop.name} != oldProps->${prop.name}) {
|
||||
result["${prop.name}"] = toDynamic(${prop.name});
|
||||
}`;
|
||||
case 'MixedTypeAnnotation':
|
||||
return `
|
||||
if (${prop.name} != oldProps->${prop.name}) {
|
||||
result["${prop.name}"] = ${prop.name};
|
||||
}`;
|
||||
default:
|
||||
// TODO: Implement diffProps for complex types
|
||||
return '';
|
||||
}
|
||||
})
|
||||
|
||||
@@ -65,15 +65,15 @@ const TestTemplate = ({
|
||||
propValue: string,
|
||||
}) => `
|
||||
TEST(${componentName}_${testName}, etc) {
|
||||
auto propParser = RawPropsParser();
|
||||
RawPropsParser propParser{};
|
||||
propParser.prepare<${componentName}>();
|
||||
auto const &sourceProps = ${componentName}();
|
||||
auto const &rawProps = RawProps(folly::dynamic::object("${propName}", ${propValue}));
|
||||
${componentName} sourceProps{};
|
||||
RawProps rawProps(folly::dynamic::object("${propName}", ${propValue}));
|
||||
|
||||
ContextContainer contextContainer{};
|
||||
PropsParserContext parserContext{-1, contextContainer};
|
||||
|
||||
rawProps.parse(propParser, parserContext);
|
||||
rawProps.parse(propParser);
|
||||
${componentName}(parserContext, sourceProps, rawProps);
|
||||
}
|
||||
`;
|
||||
|
||||
+240
-240
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/compatibility-check",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "Check a React Native app's boundary between JS and Native for incompatibilities",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
@@ -29,7 +29,7 @@
|
||||
"dist"
|
||||
],
|
||||
"dependencies": {
|
||||
"@react-native/codegen": "0.80.0-main"
|
||||
"@react-native/codegen": "0.81.0-main"
|
||||
},
|
||||
"devDependencies": {
|
||||
"flow-remove-types": "^2.237.2",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/popup-menu-android",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"description": "PopupMenu for the Android platform",
|
||||
"main": "index.js",
|
||||
"files": [
|
||||
@@ -21,7 +21,7 @@
|
||||
},
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@react-native/codegen": "0.80.0-main"
|
||||
"@react-native/codegen": "0.81.0-main"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "^19.1.0",
|
||||
|
||||
+2
@@ -12,7 +12,9 @@ import com.facebook.react.bridge.NativeModule
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.uimanager.ViewManager
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
public class OSSLibraryExamplePackage : ReactPackage {
|
||||
@Deprecated("Migrate to [BaseReactPackage] and implement [getModule] instead.")
|
||||
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> =
|
||||
listOf(NativeSampleModule(reactContext))
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@react-native/oss-library-example",
|
||||
"version": "0.80.0-main",
|
||||
"version": "0.81.0-main",
|
||||
"private": true,
|
||||
"description": "Package that includes native module exapmle, native component example, targets both the old and the new architecture. It should serve as an example of a real-world OSS library.",
|
||||
"license": "MIT",
|
||||
@@ -26,7 +26,7 @@
|
||||
],
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.25.2",
|
||||
"@react-native/babel-preset": "0.80.0-main",
|
||||
"@react-native/babel-preset": "0.81.0-main",
|
||||
"react-native": "1000.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
||||
@@ -247,10 +247,6 @@ describe('Animated', () => {
|
||||
});
|
||||
|
||||
it('renders animated and primitive style correctly', () => {
|
||||
ReactNativeFeatureFlags.override({
|
||||
alwaysFlattenAnimatedStyles: () => true,
|
||||
});
|
||||
|
||||
const anim = new Animated.Value(0);
|
||||
const staticProps = {
|
||||
style: [
|
||||
|
||||
@@ -13,7 +13,6 @@ import type {AnimatedNodeConfig} from './AnimatedNode';
|
||||
import type {AnimatedStyleAllowlist} from './AnimatedStyle';
|
||||
|
||||
import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
|
||||
import * as ReactNativeFeatureFlags from '../../../src/private/featureflags/ReactNativeFeatureFlags';
|
||||
import {findNodeHandle} from '../../ReactNative/RendererProxy';
|
||||
import flattenStyle from '../../StyleSheet/flattenStyle';
|
||||
import {AnimatedEvent} from '../AnimatedEvent';
|
||||
@@ -58,9 +57,7 @@ function createAnimatedProps(
|
||||
// we propagate the flattened `style` object to the `props` object.
|
||||
const flatStyle = flattenStyle(value as $FlowFixMe);
|
||||
node = AnimatedStyle.from(flatStyle, allowlist?.style, value);
|
||||
if (ReactNativeFeatureFlags.alwaysFlattenAnimatedStyles()) {
|
||||
staticValue = flatStyle;
|
||||
}
|
||||
staticValue = flatStyle;
|
||||
}
|
||||
} else if (value instanceof AnimatedNode) {
|
||||
node = value;
|
||||
@@ -164,9 +161,7 @@ export default class AnimatedProps extends AnimatedNode {
|
||||
maybeNode.__replaceAnimatedNodeWithValues(mutableStyle);
|
||||
props[key] = maybeNode.__getValueForStyle(mutableStyle);
|
||||
} else {
|
||||
if (ReactNativeFeatureFlags.alwaysFlattenAnimatedStyles()) {
|
||||
props[key] = flatStaticStyle;
|
||||
}
|
||||
props[key] = flatStaticStyle;
|
||||
}
|
||||
} else if (maybeNode instanceof AnimatedNode) {
|
||||
props[key] = maybeNode.__getValue();
|
||||
|
||||
@@ -84,4 +84,5 @@ Pod::Spec.new do |s|
|
||||
|
||||
depend_on_js_engine(s)
|
||||
add_rn_third_party_dependencies(s)
|
||||
add_rncore_dependency(s)
|
||||
end
|
||||
|
||||
@@ -55,4 +55,5 @@ Pod::Spec.new do |s|
|
||||
end
|
||||
|
||||
add_rn_third_party_dependencies(s)
|
||||
add_rncore_dependency(s)
|
||||
end
|
||||
|
||||
@@ -1,140 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict-local
|
||||
* @format
|
||||
*/
|
||||
|
||||
import RCTDeviceEventEmitter from '../EventEmitter/RCTDeviceEventEmitter';
|
||||
import NativeRedBox from '../NativeModules/specs/NativeRedBox';
|
||||
import {type EventSubscription} from '../vendor/emitter/EventEmitter';
|
||||
import NativeBugReporting from './NativeBugReporting';
|
||||
|
||||
type ExtraData = {[key: string]: string, ...};
|
||||
type SourceCallback = () => string;
|
||||
type DebugData = {
|
||||
extras: ExtraData,
|
||||
files: ExtraData,
|
||||
...
|
||||
};
|
||||
|
||||
function defaultExtras() {
|
||||
BugReporting.addFileSource('react_hierarchy.txt', () =>
|
||||
require('./dumpReactTree').default(),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* A simple class for collecting bug report data. Components can add sources that will be queried when a bug report
|
||||
* is created via `collectExtraData`. For example, a list component might add a source that provides the list of rows
|
||||
* that are currently visible on screen. Components should also remember to call `remove()` on the object that is
|
||||
* returned by `addSource` when they are unmounted.
|
||||
*/
|
||||
class BugReporting {
|
||||
static _extraSources: Map<string, SourceCallback> = new Map();
|
||||
static _fileSources: Map<string, SourceCallback> = new Map();
|
||||
static _subscription: ?EventSubscription = null;
|
||||
static _redboxSubscription: ?EventSubscription = null;
|
||||
|
||||
static _maybeInit() {
|
||||
if (!BugReporting._subscription) {
|
||||
BugReporting._subscription = RCTDeviceEventEmitter.addListener(
|
||||
'collectBugExtraData',
|
||||
// $FlowFixMe[method-unbinding]
|
||||
BugReporting.collectExtraData,
|
||||
null,
|
||||
);
|
||||
defaultExtras();
|
||||
}
|
||||
|
||||
if (!BugReporting._redboxSubscription) {
|
||||
BugReporting._redboxSubscription = RCTDeviceEventEmitter.addListener(
|
||||
'collectRedBoxExtraData',
|
||||
// $FlowFixMe[method-unbinding]
|
||||
BugReporting.collectExtraData,
|
||||
null,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Maps a string key to a simple callback that should return a string payload to be attached
|
||||
* to a bug report. Source callbacks are called when `collectExtraData` is called.
|
||||
*
|
||||
* Returns an object to remove the source when the component unmounts.
|
||||
*
|
||||
* Conflicts trample with a warning.
|
||||
*/
|
||||
static addSource(
|
||||
key: string,
|
||||
callback: SourceCallback,
|
||||
): {remove: () => void, ...} {
|
||||
return this._addSource(key, callback, BugReporting._extraSources);
|
||||
}
|
||||
|
||||
/**
|
||||
* Maps a string key to a simple callback that should return a string payload to be attached
|
||||
* to a bug report. Source callbacks are called when `collectExtraData` is called.
|
||||
*
|
||||
* Returns an object to remove the source when the component unmounts.
|
||||
*
|
||||
* Conflicts trample with a warning.
|
||||
*/
|
||||
static addFileSource(
|
||||
key: string,
|
||||
callback: SourceCallback,
|
||||
): {remove: () => void, ...} {
|
||||
return this._addSource(key, callback, BugReporting._fileSources);
|
||||
}
|
||||
|
||||
static _addSource(
|
||||
key: string,
|
||||
callback: SourceCallback,
|
||||
source: Map<string, SourceCallback>,
|
||||
): {remove: () => void, ...} {
|
||||
BugReporting._maybeInit();
|
||||
if (source.has(key)) {
|
||||
console.warn(
|
||||
`BugReporting.add* called multiple times for same key '${key}'`,
|
||||
);
|
||||
}
|
||||
source.set(key, callback);
|
||||
return {
|
||||
remove: () => {
|
||||
source.delete(key);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* This can be called from a native bug reporting flow, or from JS code.
|
||||
*
|
||||
* If available, this will call `NativeModules.BugReporting.setExtraData(extraData)`
|
||||
* after collecting `extraData`.
|
||||
*/
|
||||
static collectExtraData(): DebugData {
|
||||
const extraData: ExtraData = {};
|
||||
for (const [key, callback] of BugReporting._extraSources) {
|
||||
extraData[key] = callback();
|
||||
}
|
||||
const fileData: ExtraData = {};
|
||||
for (const [key, callback] of BugReporting._fileSources) {
|
||||
fileData[key] = callback();
|
||||
}
|
||||
|
||||
if (NativeBugReporting != null && NativeBugReporting.setExtraData != null) {
|
||||
NativeBugReporting.setExtraData(extraData, fileData);
|
||||
}
|
||||
|
||||
if (NativeRedBox != null && NativeRedBox.setExtraData != null) {
|
||||
NativeRedBox.setExtraData(extraData, 'From BugReporting.js');
|
||||
}
|
||||
|
||||
return {extras: extraData, files: fileData};
|
||||
}
|
||||
}
|
||||
|
||||
export default BugReporting;
|
||||
@@ -1,14 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict-local
|
||||
* @format
|
||||
*/
|
||||
|
||||
export * from '../../src/private/specs_DEPRECATED/modules/NativeBugReporting';
|
||||
import NativeBugReporting from '../../src/private/specs_DEPRECATED/modules/NativeBugReporting';
|
||||
|
||||
export default NativeBugReporting;
|
||||
@@ -1,151 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
const getReactData = require('getReactData').default;
|
||||
|
||||
const INDENTATION_SIZE = 2;
|
||||
const MAX_DEPTH = 2;
|
||||
const MAX_STRING_LENGTH = 50;
|
||||
*/
|
||||
|
||||
/**
|
||||
* Dump all React Native root views and their content. This function tries
|
||||
* it best to get the content but ultimately relies on implementation details
|
||||
* of React and will fail in future versions.
|
||||
*/
|
||||
function dumpReactTree(): string {
|
||||
try {
|
||||
return getReactTree();
|
||||
} catch (e) {
|
||||
return 'Failed to dump react tree: ' + e;
|
||||
}
|
||||
}
|
||||
|
||||
function getReactTree() {
|
||||
// TODO(sema): Reenable tree dumps using the Fiber tree structure. #15945684
|
||||
return (
|
||||
'React tree dumps have been temporarily disabled while React is ' +
|
||||
'upgraded to Fiber.'
|
||||
);
|
||||
/*
|
||||
let output = '';
|
||||
const rootIds = Object.getOwnPropertyNames(ReactNativeMount._instancesByContainerID);
|
||||
for (const rootId of rootIds) {
|
||||
const instance = ReactNativeMount._instancesByContainerID[rootId];
|
||||
output += `============ Root ID: ${rootId} ============\n`;
|
||||
output += dumpNode(instance, 0);
|
||||
output += `============ End root ID: ${rootId} ============\n`;
|
||||
}
|
||||
return output;
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
function dumpNode(node: Object, indentation: number) {
|
||||
const data = getReactData(node);
|
||||
if (data.nodeType === 'Text') {
|
||||
return indent(indentation) + data.text + '\n';
|
||||
} else if (data.nodeType === 'Empty') {
|
||||
return '';
|
||||
}
|
||||
let output = indent(indentation) + `<${data.name}`;
|
||||
if (data.nodeType === 'Composite') {
|
||||
for (const propName of Object.getOwnPropertyNames(data.props || {})) {
|
||||
if (isNormalProp(propName)) {
|
||||
try {
|
||||
const value = convertValue(data.props[propName]);
|
||||
if (value) {
|
||||
output += ` ${propName}=${value}`;
|
||||
}
|
||||
} catch (e) {
|
||||
const message = `[Failed to get property: ${e}]`;
|
||||
output += ` ${propName}=${message}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
let childOutput = '';
|
||||
for (const child of data.children || []) {
|
||||
childOutput += dumpNode(child, indentation + 1);
|
||||
}
|
||||
|
||||
if (childOutput) {
|
||||
output += '>\n' + childOutput + indent(indentation) + `</${data.name}>\n`;
|
||||
} else {
|
||||
output += ' />\n';
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
function isNormalProp(name: string): boolean {
|
||||
switch (name) {
|
||||
case 'children':
|
||||
case 'key':
|
||||
case 'ref':
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function convertObject(object: Object, depth: number) {
|
||||
if (depth >= MAX_DEPTH) {
|
||||
return '[...omitted]';
|
||||
}
|
||||
let output = '{';
|
||||
let first = true;
|
||||
for (const key of Object.getOwnPropertyNames(object)) {
|
||||
if (!first) {
|
||||
output += ', ';
|
||||
}
|
||||
output += `${key}: ${convertValue(object[key], depth + 1)}`;
|
||||
first = false;
|
||||
}
|
||||
return output + '}';
|
||||
}
|
||||
|
||||
function convertValue(value, depth = 0): ?string {
|
||||
if (!value) {
|
||||
return null;
|
||||
}
|
||||
|
||||
switch (typeof value) {
|
||||
case 'string':
|
||||
return JSON.stringify(possiblyEllipsis(value).replace('\n', '\\n'));
|
||||
case 'boolean':
|
||||
case 'number':
|
||||
return JSON.stringify(value);
|
||||
case 'function':
|
||||
return '[function]';
|
||||
case 'object':
|
||||
return convertObject(value, depth);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function possiblyEllipsis(value: string) {
|
||||
if (value.length > MAX_STRING_LENGTH) {
|
||||
return value.slice(0, MAX_STRING_LENGTH) + '...';
|
||||
} else {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
function indent(size: number) {
|
||||
return ' '.repeat(size * INDENTATION_SIZE);
|
||||
}
|
||||
*/
|
||||
|
||||
export default dumpReactTree;
|
||||
@@ -1,187 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Convert a react internal instance to a sanitized data object.
|
||||
*
|
||||
* This is shamelessly stolen from react-devtools:
|
||||
* https://github.com/facebook/react-devtools/blob/HEAD/backend/getData.js
|
||||
*/
|
||||
function getData(element: Object): Object {
|
||||
let children = null;
|
||||
let props = null;
|
||||
let state = null;
|
||||
let context = null;
|
||||
let updater = null;
|
||||
let name = null;
|
||||
let type = null;
|
||||
let text = null;
|
||||
let publicInstance = null;
|
||||
let nodeType = 'Native';
|
||||
// If the parent is a native node without rendered children, but with
|
||||
// multiple string children, then the `element` that gets passed in here is
|
||||
// a plain value -- a string or number.
|
||||
if (typeof element !== 'object') {
|
||||
nodeType = 'Text';
|
||||
text = element + '';
|
||||
} else if (
|
||||
element._currentElement === null ||
|
||||
element._currentElement === false
|
||||
) {
|
||||
nodeType = 'Empty';
|
||||
} else if (element._renderedComponent) {
|
||||
nodeType = 'NativeWrapper';
|
||||
children = [element._renderedComponent];
|
||||
props = element._instance.props;
|
||||
state = element._instance.state;
|
||||
context = element._instance.context;
|
||||
if (context && Object.keys(context).length === 0) {
|
||||
context = null;
|
||||
}
|
||||
} else if (element._renderedChildren) {
|
||||
children = childrenList(element._renderedChildren);
|
||||
} else if (element._currentElement && element._currentElement.props) {
|
||||
// This is a native node without rendered children -- meaning the children
|
||||
// prop is just a string or (in the case of the <option>) a list of
|
||||
// strings & numbers.
|
||||
children = element._currentElement.props.children;
|
||||
}
|
||||
|
||||
if (!props && element._currentElement && element._currentElement.props) {
|
||||
props = element._currentElement.props;
|
||||
}
|
||||
|
||||
// != used deliberately here to catch undefined and null
|
||||
if (element._currentElement != null) {
|
||||
type = element._currentElement.type;
|
||||
if (typeof type === 'string') {
|
||||
name = type;
|
||||
} else if (element.getName) {
|
||||
nodeType = 'Composite';
|
||||
name = element.getName();
|
||||
// 0.14 top-level wrapper
|
||||
// TODO(jared): The backend should just act as if these don't exist.
|
||||
if (
|
||||
element._renderedComponent &&
|
||||
element._currentElement.props ===
|
||||
element._renderedComponent._currentElement
|
||||
) {
|
||||
nodeType = 'Wrapper';
|
||||
}
|
||||
if (name === null) {
|
||||
name = 'No display name';
|
||||
}
|
||||
} else if (element._stringText) {
|
||||
nodeType = 'Text';
|
||||
text = element._stringText;
|
||||
} else {
|
||||
name = type.displayName || type.name || 'Unknown';
|
||||
}
|
||||
}
|
||||
|
||||
if (element._instance) {
|
||||
const inst = element._instance;
|
||||
updater = {
|
||||
setState: inst.setState && inst.setState.bind(inst),
|
||||
forceUpdate: inst.forceUpdate && inst.forceUpdate.bind(inst),
|
||||
setInProps: inst.forceUpdate && setInProps.bind(null, element),
|
||||
setInState: inst.forceUpdate && setInState.bind(null, inst),
|
||||
setInContext: inst.forceUpdate && setInContext.bind(null, inst),
|
||||
};
|
||||
publicInstance = inst;
|
||||
|
||||
// TODO: React ART currently falls in this bucket, but this doesn't
|
||||
// actually make sense and we should clean this up after stabilizing our
|
||||
// API for backends
|
||||
if (inst._renderedChildren) {
|
||||
children = childrenList(inst._renderedChildren);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
nodeType,
|
||||
type,
|
||||
name,
|
||||
props,
|
||||
state,
|
||||
context,
|
||||
children,
|
||||
text,
|
||||
updater,
|
||||
publicInstance,
|
||||
};
|
||||
}
|
||||
|
||||
function setInProps(
|
||||
internalInst: any,
|
||||
path: Array<string | number>,
|
||||
value: any,
|
||||
) {
|
||||
const element = internalInst._currentElement;
|
||||
internalInst._currentElement = {
|
||||
...element,
|
||||
props: copyWithSet(element.props, path, value),
|
||||
};
|
||||
internalInst._instance.forceUpdate();
|
||||
}
|
||||
|
||||
function setInState(inst: any, path: Array<string | number>, value: any) {
|
||||
setIn(inst.state, path, value);
|
||||
inst.forceUpdate();
|
||||
}
|
||||
|
||||
function setInContext(inst: any, path: Array<string | number>, value: any) {
|
||||
setIn(inst.context, path, value);
|
||||
inst.forceUpdate();
|
||||
}
|
||||
|
||||
function setIn(obj: Object, path: Array<string | number>, value: any) {
|
||||
const last = path.pop();
|
||||
const parent = path.reduce((obj_, attr) => (obj_ ? obj_[attr] : null), obj);
|
||||
if (parent) {
|
||||
parent[last] = value;
|
||||
}
|
||||
}
|
||||
|
||||
function childrenList(children: any) {
|
||||
const res = [];
|
||||
for (const name in children) {
|
||||
res.push(children[name]);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
function copyWithSetImpl(
|
||||
obj: any | Array<any>,
|
||||
path: Array<string | number>,
|
||||
idx: number,
|
||||
value: any,
|
||||
): any {
|
||||
if (idx >= path.length) {
|
||||
return value;
|
||||
}
|
||||
const key = path[idx];
|
||||
const updated = Array.isArray(obj) ? obj.slice() : {...obj};
|
||||
// $FlowFixMe[incompatible-use] number or string is fine here
|
||||
updated[key] = copyWithSetImpl(obj[key], path, idx + 1, value);
|
||||
return updated;
|
||||
}
|
||||
|
||||
function copyWithSet(
|
||||
obj: Object | Array<any>,
|
||||
path: Array<string | number>,
|
||||
value: any,
|
||||
): Object | Array<any> {
|
||||
return copyWithSetImpl(obj, path, 0, value);
|
||||
}
|
||||
|
||||
export default getData;
|
||||
@@ -673,7 +673,7 @@ type ScrollViewBaseProps = $ReadOnly<{
|
||||
}>;
|
||||
|
||||
export type ScrollViewProps = $ReadOnly<{
|
||||
...ViewProps,
|
||||
...Omit<ViewProps, 'experimental_accessibilityOrder'>,
|
||||
...ScrollViewPropsIOS,
|
||||
...ScrollViewPropsAndroid,
|
||||
...ScrollViewBaseProps,
|
||||
|
||||
@@ -1031,7 +1031,7 @@ type TextInputBaseProps = $ReadOnly<{
|
||||
}>;
|
||||
|
||||
export type TextInputProps = $ReadOnly<{
|
||||
...Omit<ViewProps, 'style'>,
|
||||
...Omit<ViewProps, 'style' | 'experimental_accessibilityOrder'>,
|
||||
...TextInputIOSProps,
|
||||
...TextInputAndroidProps,
|
||||
...TextInputBaseProps,
|
||||
|
||||
@@ -55,7 +55,7 @@ import usePressability from '../../Pressability/usePressability';
|
||||
import flattenStyle from '../../StyleSheet/flattenStyle';
|
||||
import StyleSheet, {type TextStyleProp} from '../../StyleSheet/StyleSheet';
|
||||
import Text from '../../Text/Text';
|
||||
import TextAncestor from '../../Text/TextAncestor';
|
||||
import TextAncestorContext from '../../Text/TextAncestorContext';
|
||||
import Platform from '../../Utilities/Platform';
|
||||
import useMergeRefs from '../../Utilities/useMergeRefs';
|
||||
import TextInputState from './TextInputState';
|
||||
@@ -775,9 +775,7 @@ function InternalTextInput(props: TextInputProps): React.Node {
|
||||
/>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<TextAncestor.Provider value={true}>{textInput}</TextAncestor.Provider>
|
||||
);
|
||||
return <TextAncestorContext value={true}>{textInput}</TextAncestorContext>;
|
||||
}
|
||||
|
||||
const enterKeyHintToReturnTypeMap = {
|
||||
|
||||
+6
-15
@@ -11,7 +11,6 @@
|
||||
import type {AnyAttributeType} from '../../Renderer/shims/ReactNativeTypes';
|
||||
|
||||
import * as ReactNativeFeatureFlags from '../../../src/private/featureflags/ReactNativeFeatureFlags';
|
||||
import NativeReactNativeFeatureFlags from '../../../src/private/featureflags/specs/NativeReactNativeFeatureFlags';
|
||||
import processAspectRatio from '../../StyleSheet/processAspectRatio';
|
||||
import processBackgroundImage from '../../StyleSheet/processBackgroundImage';
|
||||
import processBoxShadow from '../../StyleSheet/processBoxShadow';
|
||||
@@ -123,13 +122,9 @@ const ReactNativeStyleAttributes: {[string]: AnyAttributeType, ...} = {
|
||||
/**
|
||||
* Filter
|
||||
*/
|
||||
filter:
|
||||
NativeReactNativeFeatureFlags != null &&
|
||||
ReactNativeFeatureFlags.enableNativeCSSParsing()
|
||||
? true
|
||||
: {
|
||||
process: processFilter,
|
||||
},
|
||||
filter: ReactNativeFeatureFlags.enableNativeCSSParsing()
|
||||
? true
|
||||
: {process: processFilter},
|
||||
|
||||
/**
|
||||
* MixBlendMode
|
||||
@@ -144,13 +139,9 @@ const ReactNativeStyleAttributes: {[string]: AnyAttributeType, ...} = {
|
||||
/*
|
||||
* BoxShadow
|
||||
*/
|
||||
boxShadow:
|
||||
NativeReactNativeFeatureFlags != null &&
|
||||
ReactNativeFeatureFlags.enableNativeCSSParsing()
|
||||
? true
|
||||
: {
|
||||
process: processBoxShadow,
|
||||
},
|
||||
boxShadow: ReactNativeFeatureFlags.enableNativeCSSParsing()
|
||||
? true
|
||||
: {process: processBoxShadow},
|
||||
|
||||
/**
|
||||
* Linear Gradient
|
||||
|
||||
+5
-3
@@ -11,7 +11,7 @@
|
||||
import type {ViewProps} from './ViewPropTypes';
|
||||
|
||||
import * as ReactNativeFeatureFlags from '../../../src/private/featureflags/ReactNativeFeatureFlags';
|
||||
import TextAncestor from '../../Text/TextAncestor';
|
||||
import TextAncestorContext from '../../Text/TextAncestorContext';
|
||||
import ViewNativeComponent from './ViewNativeComponent';
|
||||
import * as React from 'react';
|
||||
import {use} from 'react';
|
||||
@@ -27,7 +27,7 @@ export default component View(
|
||||
ref?: React.RefSetter<React.ElementRef<typeof ViewNativeComponent>>,
|
||||
...props: ViewProps
|
||||
) {
|
||||
const hasTextAncestor = use(TextAncestor);
|
||||
const hasTextAncestor = use(TextAncestorContext);
|
||||
|
||||
let actualView;
|
||||
if (ReactNativeFeatureFlags.reduceDefaultPropsInView()) {
|
||||
@@ -207,7 +207,9 @@ export default component View(
|
||||
}
|
||||
|
||||
if (hasTextAncestor) {
|
||||
return <TextAncestor value={false}>{actualView}</TextAncestor>;
|
||||
return (
|
||||
<TextAncestorContext value={false}>{actualView}</TextAncestorContext>
|
||||
);
|
||||
}
|
||||
return actualView;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ import type {AbstractImageAndroid, ImageAndroid} from './ImageTypes.flow';
|
||||
|
||||
import flattenStyle from '../StyleSheet/flattenStyle';
|
||||
import StyleSheet from '../StyleSheet/StyleSheet';
|
||||
import TextAncestor from '../Text/TextAncestor';
|
||||
import TextAncestorContext from '../Text/TextAncestorContext';
|
||||
import ImageAnalyticsTagContext from './ImageAnalyticsTagContext';
|
||||
import {
|
||||
unstable_getImageComponentDecorator,
|
||||
@@ -222,7 +222,7 @@ let BaseImage: AbstractImageAndroid = ({
|
||||
}
|
||||
: nativeProps;
|
||||
return (
|
||||
<TextAncestor.Consumer>
|
||||
<TextAncestorContext.Consumer>
|
||||
{hasTextAncestor => {
|
||||
if (hasTextAncestor) {
|
||||
return (
|
||||
@@ -245,7 +245,7 @@ let BaseImage: AbstractImageAndroid = ({
|
||||
/>
|
||||
);
|
||||
}}
|
||||
</TextAncestor.Consumer>
|
||||
</TextAncestorContext.Consumer>
|
||||
);
|
||||
}}
|
||||
</ImageAnalyticsTagContext.Consumer>
|
||||
|
||||
@@ -21,19 +21,12 @@ static inline RCTResizeMode RCTResizeModeFromUIViewContentMode(UIViewContentMode
|
||||
switch (mode) {
|
||||
case UIViewContentModeScaleToFill:
|
||||
return RCTResizeModeStretch;
|
||||
break;
|
||||
case UIViewContentModeScaleAspectFit:
|
||||
return RCTResizeModeContain;
|
||||
break;
|
||||
case UIViewContentModeScaleAspectFill:
|
||||
return RCTResizeModeCover;
|
||||
break;
|
||||
case UIViewContentModeCenter:
|
||||
return RCTResizeModeCenter;
|
||||
break;
|
||||
case UIViewContentModeTopLeft:
|
||||
return RCTResizeModeNone;
|
||||
break;
|
||||
case UIViewContentModeRedraw:
|
||||
case UIViewContentModeTop:
|
||||
case UIViewContentModeBottom:
|
||||
@@ -43,6 +36,9 @@ static inline RCTResizeMode RCTResizeModeFromUIViewContentMode(UIViewContentMode
|
||||
case UIViewContentModeBottomLeft:
|
||||
case UIViewContentModeBottomRight:
|
||||
return RCTResizeModeRepeat;
|
||||
case UIViewContentModeCenter:
|
||||
default:
|
||||
return RCTResizeModeCenter;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -53,4 +53,5 @@ Pod::Spec.new do |s|
|
||||
add_dependency(s, "React-NativeModulesApple")
|
||||
|
||||
add_rn_third_party_dependencies(s)
|
||||
add_rncore_dependency(s)
|
||||
end
|
||||
|
||||
+6
-12
@@ -35,18 +35,12 @@ exports[`LogBoxInspectorSourceMapStatus should render for failed 1`] = `
|
||||
}
|
||||
}
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
"height": 14,
|
||||
"marginEnd": 4,
|
||||
"tintColor": "rgba(255, 255, 255, 0.4)",
|
||||
"width": 16,
|
||||
},
|
||||
Object {
|
||||
"tintColor": "rgba(243, 83, 105, 1)",
|
||||
},
|
||||
null,
|
||||
]
|
||||
Object {
|
||||
"height": 14,
|
||||
"marginEnd": 4,
|
||||
"tintColor": "rgba(243, 83, 105, 1)",
|
||||
"width": 16,
|
||||
}
|
||||
}
|
||||
/>
|
||||
<Text
|
||||
|
||||
@@ -781,7 +781,7 @@ describe('LogBox', () => {
|
||||
'\n\nCheck the top-level render call using <TestComponent>. ' +
|
||||
'It was passed a child from TestComponent. ' +
|
||||
'See https://react.dev/link/warning-keys for more information.',
|
||||
componentStackFrames: [],
|
||||
componentStackFrames: ['<anonymous />', '<TestComponent />'],
|
||||
isDismissable: true,
|
||||
});
|
||||
});
|
||||
@@ -818,7 +818,7 @@ describe('LogBox', () => {
|
||||
title: 'Console Error',
|
||||
message:
|
||||
'Invalid prop `invalid` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.',
|
||||
componentStackFrames: [],
|
||||
componentStackFrames: ['<TestComponent />'],
|
||||
isDismissable: true,
|
||||
});
|
||||
});
|
||||
|
||||
@@ -117,7 +117,7 @@ function findLogBoxInspectorUI(node: ReadOnlyElement): InspectorUI {
|
||||
// anonymous
|
||||
// MockConsoleErrorForTesting <-- mockConsoleIndex
|
||||
// ManualConsoleError
|
||||
// reactStackBottomFrame <-- react bottom frame
|
||||
// react_stack_bottom_frame <-- react bottom frame
|
||||
// <root>
|
||||
//
|
||||
// Becomes:
|
||||
@@ -129,9 +129,19 @@ function getStackFrames(node: ReadOnlyElement): ?Array<string> {
|
||||
const mockConsoleIndex = text.includes('MockConsoleErrorForTesting')
|
||||
? text.indexOf('MockConsoleErrorForTesting') + 1
|
||||
: 0;
|
||||
const bottomFrameIndex = text.includes('reactStackBottomFrame')
|
||||
? text.indexOf('reactStackBottomFrame')
|
||||
: text.length;
|
||||
let bottomFrameIndex = text.indexOf('react_stack_bottom_frame');
|
||||
if (bottomFrameIndex === -1) {
|
||||
// react@19.1.0 with @babel/plugin-transform-function-name
|
||||
bottomFrameIndex = text.indexOf('reactStackBottomFrame');
|
||||
}
|
||||
if (bottomFrameIndex === -1) {
|
||||
// react@19.1.0 without @babel/plugin-transform-function-name
|
||||
bottomFrameIndex = text.indexOf('react-stack-bottom-frame');
|
||||
}
|
||||
if (bottomFrameIndex === -1) {
|
||||
bottomFrameIndex = text.length;
|
||||
}
|
||||
|
||||
return text.slice(mockConsoleIndex, bottomFrameIndex);
|
||||
}
|
||||
|
||||
|
||||
@@ -50,4 +50,5 @@ Pod::Spec.new do |s|
|
||||
add_dependency(s, "React-featureflags")
|
||||
|
||||
add_rn_third_party_dependencies(s)
|
||||
add_rncore_dependency(s)
|
||||
end
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
import type {PartialViewConfigWithoutName} from './PlatformBaseViewConfig';
|
||||
|
||||
import * as ReactNativeFeatureFlags from '../../src/private/featureflags/ReactNativeFeatureFlags';
|
||||
import NativeReactNativeFeatureFlags from '../../src/private/featureflags/specs/NativeReactNativeFeatureFlags';
|
||||
import ReactNativeStyleAttributes from '../Components/View/ReactNativeStyleAttributes';
|
||||
import {DynamicallyInjectedByGestureHandler} from './ViewConfigIgnore';
|
||||
|
||||
@@ -183,20 +182,12 @@ const validAttributesForNonEventProps = {
|
||||
experimental_backgroundImage: {
|
||||
process: require('../StyleSheet/processBackgroundImage').default,
|
||||
},
|
||||
boxShadow:
|
||||
NativeReactNativeFeatureFlags != null &&
|
||||
ReactNativeFeatureFlags.enableNativeCSSParsing()
|
||||
? (true as const)
|
||||
: {
|
||||
process: require('../StyleSheet/processBoxShadow').default,
|
||||
},
|
||||
filter:
|
||||
NativeReactNativeFeatureFlags != null &&
|
||||
ReactNativeFeatureFlags.enableNativeCSSParsing()
|
||||
? (true as const)
|
||||
: {
|
||||
process: require('../StyleSheet/processFilter').default,
|
||||
},
|
||||
boxShadow: ReactNativeFeatureFlags.enableNativeCSSParsing()
|
||||
? (true as const)
|
||||
: {process: require('../StyleSheet/processBoxShadow').default},
|
||||
filter: ReactNativeFeatureFlags.enableNativeCSSParsing()
|
||||
? (true as const)
|
||||
: {process: require('../StyleSheet/processFilter').default},
|
||||
mixBlendMode: true,
|
||||
isolation: true,
|
||||
opacity: true,
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
import type {PartialViewConfigWithoutName} from './PlatformBaseViewConfig';
|
||||
|
||||
import * as ReactNativeFeatureFlags from '../../src/private/featureflags/ReactNativeFeatureFlags';
|
||||
import NativeReactNativeFeatureFlags from '../../src/private/featureflags/specs/NativeReactNativeFeatureFlags';
|
||||
import ReactNativeStyleAttributes from '../Components/View/ReactNativeStyleAttributes';
|
||||
import {
|
||||
ConditionallyIgnoredEventHandlers,
|
||||
@@ -229,20 +228,12 @@ const validAttributesForNonEventProps = {
|
||||
hitSlop: {diff: require('../Utilities/differ/insetsDiffer').default},
|
||||
collapsable: true,
|
||||
collapsableChildren: true,
|
||||
filter:
|
||||
NativeReactNativeFeatureFlags != null &&
|
||||
ReactNativeFeatureFlags.enableNativeCSSParsing()
|
||||
? (true as const)
|
||||
: {
|
||||
process: require('../StyleSheet/processFilter').default,
|
||||
},
|
||||
boxShadow:
|
||||
NativeReactNativeFeatureFlags != null &&
|
||||
ReactNativeFeatureFlags.enableNativeCSSParsing()
|
||||
? (true as const)
|
||||
: {
|
||||
process: require('../StyleSheet/processBoxShadow').default,
|
||||
},
|
||||
filter: ReactNativeFeatureFlags.enableNativeCSSParsing()
|
||||
? (true as const)
|
||||
: {process: require('../StyleSheet/processFilter').default},
|
||||
boxShadow: ReactNativeFeatureFlags.enableNativeCSSParsing()
|
||||
? (true as const)
|
||||
: {process: require('../StyleSheet/processBoxShadow').default},
|
||||
mixBlendMode: true,
|
||||
isolation: true,
|
||||
|
||||
|
||||
@@ -20,13 +20,77 @@
|
||||
*/
|
||||
@interface RCTInspectorNetworkReporter : NSObject
|
||||
|
||||
/**
|
||||
* Report a network request that is about to be sent.
|
||||
*
|
||||
* - Corresponds to `Network.requestWillBeSent` in CDP.
|
||||
* - Corresponds to `PerformanceResourceTiming.requestStart` (specifically,
|
||||
* marking when the native request was initiated).
|
||||
*/
|
||||
+ (void)reportRequestStart:(NSNumber *)requestId
|
||||
request:(NSURLRequest *)request
|
||||
encodedDataLength:(int)encodedDataLength;
|
||||
|
||||
/**
|
||||
* Report timestamp for sending the network request, and (in a debug build)
|
||||
* provide final headers to be reported via CDP.
|
||||
*
|
||||
* - Corresponds to `Network.requestWillBeSentExtraInfo` in CDP.
|
||||
* - Corresponds to `PerformanceResourceTiming.domainLookupStart`,
|
||||
* `PerformanceResourceTiming.connectStart`. Defined as "immediately before
|
||||
* the browser starts to establish the connection to the server".
|
||||
*/
|
||||
+ (void)reportConnectionTiming:(NSNumber *)requestId request:(NSURLRequest *)request;
|
||||
|
||||
/**
|
||||
* Report when HTTP response headers have been received, corresponding to
|
||||
* when the first byte of the response is available.
|
||||
*
|
||||
* - Corresponds to `Network.responseReceived` in CDP.
|
||||
* - Corresponds to `PerformanceResourceTiming.responseStart`.
|
||||
*/
|
||||
+ (void)reportResponseStart:(NSNumber *)requestId
|
||||
response:(NSURLResponse *)response
|
||||
statusCode:(int)statusCode
|
||||
headers:(NSDictionary<NSString *, NSString *> *)headers;
|
||||
|
||||
/**
|
||||
* Report when additional chunks of the response body have been received.
|
||||
*
|
||||
* Corresponds to `Network.dataReceived` in CDP.
|
||||
*/
|
||||
+ (void)reportDataReceived:(NSNumber *)requestId data:(NSData *)data;
|
||||
|
||||
/**
|
||||
* Report when a network request is complete and we are no longer receiving
|
||||
* response data.
|
||||
*
|
||||
* - Corresponds to `Network.loadingFinished` in CDP.
|
||||
* - Corresponds to `PerformanceResourceTiming.responseEnd`.
|
||||
*/
|
||||
+ (void)reportResponseEnd:(NSNumber *)requestId encodedDataLength:(int)encodedDataLength;
|
||||
|
||||
/**
|
||||
* Report when a network request has failed.
|
||||
*
|
||||
* - Corresponds to `Network.loadingFailed` in CDP.
|
||||
*/
|
||||
+ (void)reportRequestFailed:(NSNumber *)requestId cancelled:(BOOL)cancelled;
|
||||
|
||||
/**
|
||||
* Store response body preview. This is an optional reporting method, and is a
|
||||
* no-op if CDP debugging is disabled.
|
||||
*/
|
||||
+ (void)maybeStoreResponseBody:(NSNumber *)requestId data:(NSData *)data base64Encoded:(bool)base64Encoded;
|
||||
|
||||
/**
|
||||
* Incrementally store a response body preview, when a string response is
|
||||
* received in chunks. Buffered contents will be flushed to `NetworkReporter`
|
||||
* with `reportResponseEnd`.
|
||||
*
|
||||
* As with `maybeStoreResponseBody`, calling this method is optional and a
|
||||
* no-op if CDP debugging is disabled.
|
||||
*/
|
||||
+ (void)maybeStoreResponseBodyIncremental:(NSNumber *)requestId data:(NSString *)data;
|
||||
|
||||
@end
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
|
||||
#import "RCTInspectorNetworkReporter.h"
|
||||
|
||||
#import "RCTNetworkConversions.h"
|
||||
|
||||
#import <React/RCTLog.h>
|
||||
#import <jsinspector-modern/network/NetworkReporter.h>
|
||||
|
||||
using namespace facebook::react::jsinspector_modern;
|
||||
@@ -42,6 +45,13 @@ std::string convertRequestBodyToStringTruncated(NSURLRequest *request)
|
||||
} // namespace
|
||||
#endif
|
||||
|
||||
#ifdef REACT_NATIVE_DEBUGGER_ENABLED
|
||||
|
||||
// Dictionary to buffer incremental response bodies (CDP debugging active only)
|
||||
static const NSMutableDictionary<NSNumber *, NSMutableString *> *responseBuffers = nil;
|
||||
|
||||
#endif
|
||||
|
||||
@implementation RCTInspectorNetworkReporter {
|
||||
}
|
||||
|
||||
@@ -62,6 +72,18 @@ std::string convertRequestBodyToStringTruncated(NSURLRequest *request)
|
||||
requestId.stringValue.UTF8String, requestInfo, encodedDataLength, std::nullopt);
|
||||
}
|
||||
|
||||
+ (void)reportConnectionTiming:(NSNumber *)requestId request:(NSURLRequest *)request
|
||||
{
|
||||
Headers headersMap;
|
||||
|
||||
#ifdef REACT_NATIVE_DEBUGGER_ENABLED
|
||||
// Debug build: Process additional request info for CDP reporting
|
||||
headersMap = convertNSDictionaryToHeaders(request.allHTTPHeaderFields);
|
||||
#endif
|
||||
|
||||
NetworkReporter::getInstance().reportConnectionTiming(requestId.stringValue.UTF8String, headersMap);
|
||||
}
|
||||
|
||||
+ (void)reportResponseStart:(NSNumber *)requestId
|
||||
response:(NSURLResponse *)response
|
||||
statusCode:(int)statusCode
|
||||
@@ -80,9 +102,92 @@ std::string convertRequestBodyToStringTruncated(NSURLRequest *request)
|
||||
requestId.stringValue.UTF8String, responseInfo, response.expectedContentLength);
|
||||
}
|
||||
|
||||
+ (void)reportDataReceived:(NSNumber *)requestId data:(NSData *)data
|
||||
{
|
||||
NetworkReporter::getInstance().reportDataReceived(requestId.stringValue.UTF8String, (int)data.length, std::nullopt);
|
||||
}
|
||||
|
||||
+ (void)reportResponseEnd:(NSNumber *)requestId encodedDataLength:(int)encodedDataLength
|
||||
{
|
||||
NetworkReporter::getInstance().reportResponseEnd(requestId.stringValue.UTF8String, encodedDataLength);
|
||||
|
||||
#ifdef REACT_NATIVE_DEBUGGER_ENABLED
|
||||
// Debug build: Check for buffered response body and flush to NetworkReporter
|
||||
if (responseBuffers != nullptr) {
|
||||
NSMutableString *buffer = responseBuffers[requestId];
|
||||
if (buffer != nullptr) {
|
||||
if (buffer.length > 0) {
|
||||
NetworkReporter::getInstance().storeResponseBody(
|
||||
requestId.stringValue.UTF8String, RCTStringViewFromNSString(buffer), false);
|
||||
}
|
||||
[responseBuffers removeObjectForKey:requestId];
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
+ (void)reportRequestFailed:(NSNumber *)requestId cancelled:(bool)cancelled
|
||||
{
|
||||
NetworkReporter::getInstance().reportRequestFailed(requestId.stringValue.UTF8String, cancelled);
|
||||
|
||||
#ifdef REACT_NATIVE_DEBUGGER_ENABLED
|
||||
// Debug build: Clear buffer for request
|
||||
if (responseBuffers != nullptr) {
|
||||
[responseBuffers removeObjectForKey:requestId];
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
+ (void)maybeStoreResponseBody:(NSNumber *)requestId data:(id)data base64Encoded:(bool)base64Encoded
|
||||
{
|
||||
#ifdef REACT_NATIVE_DEBUGGER_ENABLED
|
||||
// Debug build: Process response body and report to NetworkReporter
|
||||
auto &networkReporter = NetworkReporter::getInstance();
|
||||
if (!networkReporter.isDebuggingEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([data isKindOfClass:[NSData class]] && [(NSData *)data length] > 0) {
|
||||
@try {
|
||||
NSString *encodedString = [(NSData *)data base64EncodedStringWithOptions:0];
|
||||
if (encodedString != nullptr) {
|
||||
networkReporter.storeResponseBody(
|
||||
requestId.stringValue.UTF8String, RCTStringViewFromNSString(encodedString), base64Encoded);
|
||||
} else {
|
||||
RCTLogWarn(@"Failed to encode response data for request %@", requestId);
|
||||
}
|
||||
} @catch (NSException *exception) {
|
||||
RCTLogWarn(@"Exception while encoding response data: %@", exception.reason);
|
||||
}
|
||||
} else if ([data isKindOfClass:[NSString class]] && [(NSString *)data length] > 0) {
|
||||
networkReporter.storeResponseBody(
|
||||
requestId.stringValue.UTF8String, RCTStringViewFromNSString((NSString *)data), base64Encoded);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
+ (void)maybeStoreResponseBodyIncremental:(NSNumber *)requestId data:(NSString *)data
|
||||
{
|
||||
#ifdef REACT_NATIVE_DEBUGGER_ENABLED
|
||||
// Debug build: Buffer incremental response body contents
|
||||
auto &networkReporter = NetworkReporter::getInstance();
|
||||
if (!networkReporter.isDebuggingEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (responseBuffers == nullptr) {
|
||||
responseBuffers = [NSMutableDictionary dictionary];
|
||||
}
|
||||
|
||||
// Get or create buffer for this requestId
|
||||
NSMutableString *buffer = responseBuffers[requestId];
|
||||
if (buffer == nullptr) {
|
||||
buffer = [NSMutableString string];
|
||||
responseBuffers[requestId] = buffer;
|
||||
}
|
||||
|
||||
[buffer appendString:data];
|
||||
#endif
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
#import <string>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
inline std::string_view RCTStringViewFromNSString(NSString *string)
|
||||
{
|
||||
return std::string_view{string.UTF8String, string.length};
|
||||
}
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
#endif
|
||||
@@ -437,8 +437,12 @@ RCT_EXPORT_MODULE()
|
||||
[task start];
|
||||
|
||||
__weak RCTNetworkTask *weakTask = task;
|
||||
NSNumber *requestId = [task.requestID copy];
|
||||
return ^{
|
||||
[weakTask cancel];
|
||||
if (facebook::react::ReactNativeFeatureFlags::enableNetworkEventReporting()) {
|
||||
[RCTInspectorNetworkReporter reportRequestFailed:requestId cancelled:YES];
|
||||
}
|
||||
if (cancellationBlock) {
|
||||
cancellationBlock();
|
||||
}
|
||||
@@ -558,6 +562,20 @@ RCT_EXPORT_MODULE()
|
||||
}
|
||||
}
|
||||
|
||||
if (facebook::react::ReactNativeFeatureFlags::enableNetworkEventReporting()) {
|
||||
id responseDataForPreview;
|
||||
if ([responseType isEqualToString:@"blob"]) {
|
||||
responseDataForPreview = data;
|
||||
} else if ([responseData isKindOfClass:[NSString class]]) {
|
||||
responseDataForPreview = responseData;
|
||||
}
|
||||
bool base64Encoded = [responseType isEqualToString:@"base64"] || [responseType isEqualToString:@"blob"];
|
||||
|
||||
[RCTInspectorNetworkReporter maybeStoreResponseBody:task.requestID
|
||||
data:responseDataForPreview
|
||||
base64Encoded:base64Encoded];
|
||||
}
|
||||
|
||||
[self sendEventWithName:@"didReceiveNetworkData" body:@[ task.requestID, responseData ]];
|
||||
}
|
||||
|
||||
@@ -613,9 +631,9 @@ RCT_EXPORT_MODULE()
|
||||
incrementalDataBlock = ^(NSData *data, int64_t progress, int64_t total) {
|
||||
NSUInteger initialCarryLength = incrementalDataCarry.length;
|
||||
|
||||
NSString *responseString = [RCTNetworking decodeTextData:data
|
||||
fromResponse:task.response
|
||||
withCarryData:incrementalDataCarry];
|
||||
id responseString = [RCTNetworking decodeTextData:data
|
||||
fromResponse:task.response
|
||||
withCarryData:incrementalDataCarry];
|
||||
if (!responseString) {
|
||||
RCTLogWarn(@"Received data was not a string, or was not a recognised encoding.");
|
||||
return;
|
||||
@@ -629,6 +647,10 @@ RCT_EXPORT_MODULE()
|
||||
@(total)
|
||||
];
|
||||
|
||||
if (facebook::react::ReactNativeFeatureFlags::enableNetworkEventReporting()) {
|
||||
[RCTInspectorNetworkReporter reportDataReceived:task.requestID data:data];
|
||||
[RCTInspectorNetworkReporter maybeStoreResponseBodyIncremental:task.requestID data:responseString];
|
||||
}
|
||||
[weakSelf sendEventWithName:@"didReceiveNetworkIncrementalData" body:responseJSON];
|
||||
};
|
||||
} else {
|
||||
@@ -654,7 +676,11 @@ RCT_EXPORT_MODULE()
|
||||
@[ task.requestID, RCTNullIfNil(error.localizedDescription), error.code == kCFURLErrorTimedOut ? @YES : @NO ];
|
||||
|
||||
if (facebook::react::ReactNativeFeatureFlags::enableNetworkEventReporting()) {
|
||||
[RCTInspectorNetworkReporter reportResponseEnd:task.requestID encodedDataLength:data.length];
|
||||
if (error != nullptr) {
|
||||
[RCTInspectorNetworkReporter reportRequestFailed:task.requestID cancelled:NO];
|
||||
} else {
|
||||
[RCTInspectorNetworkReporter reportResponseEnd:task.requestID encodedDataLength:data.length];
|
||||
}
|
||||
}
|
||||
[strongSelf sendEventWithName:@"didCompleteNetworkResponse" body:responseJSON];
|
||||
[strongSelf->_tasksByRequestID removeObjectForKey:task.requestID];
|
||||
@@ -676,6 +702,7 @@ RCT_EXPORT_MODULE()
|
||||
[RCTInspectorNetworkReporter reportRequestStart:task.requestID
|
||||
request:request
|
||||
encodedDataLength:task.response.expectedContentLength];
|
||||
[RCTInspectorNetworkReporter reportConnectionTiming:task.requestID request:task.request];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -52,4 +52,5 @@ Pod::Spec.new do |s|
|
||||
add_dependency(s, "React-NativeModulesApple", :additional_framework_paths => ["build/generated/ios"])
|
||||
|
||||
add_rn_third_party_dependencies(s)
|
||||
add_rncore_dependency(s)
|
||||
end
|
||||
|
||||
@@ -22,7 +22,6 @@ import type {
|
||||
WrapperComponentProvider,
|
||||
} from './AppRegistry.flow';
|
||||
|
||||
import BugReporting from '../BugReporting/BugReporting';
|
||||
import createPerformanceLogger from '../Utilities/createPerformanceLogger';
|
||||
import SceneTracker from '../Utilities/SceneTracker';
|
||||
import {coerceDisplayMode} from './DisplayMode';
|
||||
@@ -36,7 +35,6 @@ type TaskCanceller = () => void;
|
||||
type TaskCancelProvider = () => TaskCanceller;
|
||||
|
||||
const runnables: Runnables = {};
|
||||
let runCount = 1;
|
||||
const sections: Runnables = {};
|
||||
const taskProviders: Map<string, TaskProvider> = new Map();
|
||||
const taskCancelProviders: Map<string, TaskCancelProvider> = new Map();
|
||||
@@ -167,10 +165,6 @@ export function runApplication(
|
||||
const logParams = __DEV__ ? ` with ${JSON.stringify(appParameters)}` : '';
|
||||
const msg = `Running "${appKey}"${logParams}`;
|
||||
console.log(msg);
|
||||
BugReporting.addSource(
|
||||
'AppRegistry.runApplication' + runCount++,
|
||||
() => msg,
|
||||
);
|
||||
}
|
||||
invariant(
|
||||
runnables[appKey],
|
||||
@@ -199,10 +193,6 @@ export function setSurfaceProps(
|
||||
'" with ' +
|
||||
JSON.stringify(appParameters);
|
||||
console.log(msg);
|
||||
BugReporting.addSource(
|
||||
'AppRegistry.setSurfaceProps' + runCount++,
|
||||
() => msg,
|
||||
);
|
||||
}
|
||||
invariant(
|
||||
runnables[appKey],
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* @noformat
|
||||
* @nolint
|
||||
* @flow strict
|
||||
* @generated SignedSource<<6166de7ecbfb5d83e56c11a3b6cde9ba>>
|
||||
* @generated SignedSource<<deb7924d11c790f99448a1c2f0edddb9>>
|
||||
*/
|
||||
|
||||
import type {
|
||||
@@ -35,7 +35,7 @@ export type AttributeType<T, V> =
|
||||
export type AnyAttributeType = AttributeType<$FlowFixMe, $FlowFixMe>;
|
||||
|
||||
export type AttributeConfiguration = $ReadOnly<{
|
||||
[propName: string]: AnyAttributeType,
|
||||
[propName: string]: AnyAttributeType | void,
|
||||
style?: $ReadOnly<{
|
||||
[propName: string]: AnyAttributeType,
|
||||
...
|
||||
|
||||
@@ -49,4 +49,5 @@ Pod::Spec.new do |s|
|
||||
add_dependency(s, "React-NativeModulesApple", :additional_framework_paths => ["build/generated/ios"])
|
||||
|
||||
add_rn_third_party_dependencies(s)
|
||||
add_rncore_dependency(s)
|
||||
end
|
||||
|
||||
@@ -19,6 +19,8 @@ function processAspectRatio(aspectRatio?: number | string): ?number {
|
||||
if (typeof aspectRatio !== 'string') {
|
||||
if (__DEV__) {
|
||||
invariant(
|
||||
/* $FlowFixMe[constant-condition] Error discovered during Constant
|
||||
* Condition roll out. See https://fburl.com/workplace/1v97vimq. */
|
||||
!aspectRatio,
|
||||
'aspectRatio must either be a number, a ratio string or `auto`. You passed: %s',
|
||||
aspectRatio,
|
||||
|
||||
@@ -226,3 +226,5 @@ export interface TextProps
|
||||
declare class TextComponent extends React.Component<TextProps> {}
|
||||
declare const TextBase: Constructor<NativeMethods> & typeof TextComponent;
|
||||
export class Text extends TextBase {}
|
||||
|
||||
export const unstable_TextAncestorContext: React.Context<boolean>;
|
||||
|
||||
+4
-6
@@ -19,7 +19,7 @@ import usePressability from '../Pressability/usePressability';
|
||||
import flattenStyle from '../StyleSheet/flattenStyle';
|
||||
import processColor from '../StyleSheet/processColor';
|
||||
import Platform from '../Utilities/Platform';
|
||||
import TextAncestor from './TextAncestor';
|
||||
import TextAncestorContext from './TextAncestorContext';
|
||||
import {NativeText, NativeVirtualText} from './TextNativeComponent';
|
||||
import * as React from 'react';
|
||||
import {useContext, useMemo, useState} from 'react';
|
||||
@@ -169,7 +169,7 @@ const TextImpl: component(
|
||||
|
||||
const _nativeID = id ?? nativeID;
|
||||
|
||||
const hasTextAncestor = useContext(TextAncestor);
|
||||
const hasTextAncestor = useContext(TextAncestorContext);
|
||||
if (hasTextAncestor) {
|
||||
if (isPressable) {
|
||||
return (
|
||||
@@ -302,7 +302,7 @@ const TextImpl: component(
|
||||
}
|
||||
|
||||
// If the children do not contain a JSX element it would not be possible to have a
|
||||
// nested `Text` component so we can skip adding the `TextAncestor` context wrapper
|
||||
// nested `Text` component so we can skip adding the `TextAncestorContext` context wrapper
|
||||
// which has a performance overhead. Since we do this for performance reasons we need
|
||||
// to keep the check simple to avoid regressing overall perf. For this reason the
|
||||
// `children.length` constant is set to `3`, this should be a reasonable tradeoff
|
||||
@@ -322,9 +322,7 @@ const TextImpl: component(
|
||||
return nativeText;
|
||||
}
|
||||
|
||||
return (
|
||||
<TextAncestor.Provider value={true}>{nativeText}</TextAncestor.Provider>
|
||||
);
|
||||
return <TextAncestorContext value={true}>{nativeText}</TextAncestorContext>;
|
||||
};
|
||||
|
||||
TextImpl.displayName = 'Text';
|
||||
|
||||
+3
-10
@@ -8,16 +8,9 @@
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// Compatibility module for ReactStrictDOMTextAncestorContext.native.js.flow (react-strict-dom)
|
||||
// TODO(huntie): Delete after we've fixed this cross-repo reference
|
||||
|
||||
import * as React from 'react';
|
||||
import {createContext} from 'react';
|
||||
import TextAncestorContext from './TextAncestorContext';
|
||||
|
||||
/**
|
||||
* Whether the current element is the descendant of a <Text> element.
|
||||
*/
|
||||
const TextAncestorContext: React.Context<boolean> = createContext(false);
|
||||
if (__DEV__) {
|
||||
TextAncestorContext.displayName = 'TextAncestorContext';
|
||||
}
|
||||
export default TextAncestorContext;
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow strict
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as React from 'react';
|
||||
import {createContext} from 'react';
|
||||
|
||||
/**
|
||||
* Whether the current element is the descendant of a <Text> element.
|
||||
*/
|
||||
const TextAncestorContext: React.Context<boolean> = createContext(false);
|
||||
if (__DEV__) {
|
||||
TextAncestorContext.displayName = 'TextAncestorContext';
|
||||
}
|
||||
export default TextAncestorContext;
|
||||
@@ -49,4 +49,5 @@ Pod::Spec.new do |s|
|
||||
add_dependency(s, "React-NativeModulesApple")
|
||||
|
||||
add_rn_third_party_dependencies(s)
|
||||
add_rncore_dependency(s)
|
||||
end
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user