react-native 0.73.3 → 0.73.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/Libraries/Text/TextInput/RCTBaseTextInputShadowView.mm +48 -0
- package/React/Base/RCTVersion.m +1 -1
- package/React/Modules/RCTUIManager.m +10 -5
- package/React/React-RCTFabric.podspec +3 -2
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/queue/MessageQueueThreadHandler.java +11 -0
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java +9 -1
- package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
- package/ReactCommon/react/renderer/core/EventEmitter.cpp +14 -6
- package/package.json +6 -6
- package/scripts/cocoapods/new_architecture.rb +5 -1
- package/scripts/codegen/generate-artifacts-executor.js +18 -11
- package/scripts/xcode/with-environment.sh +1 -1
- package/sdks/.hermesversion +1 -1
- package/sdks/hermesc/linux64-bin/hermesc +0 -0
- package/sdks/hermesc/osx-bin/hermes +0 -0
- package/sdks/hermesc/osx-bin/hermesc +0 -0
- package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
- package/sdks/hermesc/win64-bin/msvcp140.dll +0 -0
- package/sdks/hermesc/win64-bin/vcruntime140.dll +0 -0
- package/sdks/hermesc/win64-bin/vcruntime140_1.dll +0 -0
- package/template/package.json +3 -3
|
@@ -158,6 +158,8 @@
|
|
|
158
158
|
[attributedText insertAttributedString:propertyAttributedText atIndex:0];
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
+
[self postprocessAttributedText:attributedText];
|
|
162
|
+
|
|
161
163
|
NSAttributedString *newAttributedText;
|
|
162
164
|
if (![_previousAttributedText isEqualToAttributedString:attributedText]) {
|
|
163
165
|
// We have to follow `set prop` pattern:
|
|
@@ -191,6 +193,52 @@
|
|
|
191
193
|
}];
|
|
192
194
|
}
|
|
193
195
|
|
|
196
|
+
- (void)postprocessAttributedText:(NSMutableAttributedString *)attributedText
|
|
197
|
+
{
|
|
198
|
+
__block CGFloat maximumLineHeight = 0;
|
|
199
|
+
|
|
200
|
+
[attributedText enumerateAttribute:NSParagraphStyleAttributeName
|
|
201
|
+
inRange:NSMakeRange(0, attributedText.length)
|
|
202
|
+
options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
|
|
203
|
+
usingBlock:^(NSParagraphStyle *paragraphStyle, __unused NSRange range, __unused BOOL *stop) {
|
|
204
|
+
if (!paragraphStyle) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
maximumLineHeight = MAX(paragraphStyle.maximumLineHeight, maximumLineHeight);
|
|
209
|
+
}];
|
|
210
|
+
|
|
211
|
+
if (maximumLineHeight == 0) {
|
|
212
|
+
// `lineHeight` was not specified, nothing to do.
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
__block CGFloat maximumFontLineHeight = 0;
|
|
217
|
+
|
|
218
|
+
[attributedText enumerateAttribute:NSFontAttributeName
|
|
219
|
+
inRange:NSMakeRange(0, attributedText.length)
|
|
220
|
+
options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
|
|
221
|
+
usingBlock:^(UIFont *font, NSRange range, __unused BOOL *stop) {
|
|
222
|
+
if (!font) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if (maximumFontLineHeight <= font.lineHeight) {
|
|
227
|
+
maximumFontLineHeight = font.lineHeight;
|
|
228
|
+
}
|
|
229
|
+
}];
|
|
230
|
+
|
|
231
|
+
if (maximumLineHeight < maximumFontLineHeight) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
CGFloat baseLineOffset = maximumLineHeight / 2.0 - maximumFontLineHeight / 2.0;
|
|
236
|
+
|
|
237
|
+
[attributedText addAttribute:NSBaselineOffsetAttributeName
|
|
238
|
+
value:@(baseLineOffset)
|
|
239
|
+
range:NSMakeRange(0, attributedText.length)];
|
|
240
|
+
}
|
|
241
|
+
|
|
194
242
|
#pragma mark -
|
|
195
243
|
|
|
196
244
|
- (NSAttributedString *)measurableAttributedText
|
package/React/Base/RCTVersion.m
CHANGED
|
@@ -179,15 +179,20 @@ RCT_EXPORT_MODULE()
|
|
|
179
179
|
_componentDataByName[componentData.name] = componentData;
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
|
-
|
|
182
|
+
// Preload the a11yManager as the RCTUIManager needs it to listen for notification
|
|
183
|
+
// By eagerly preloading it in the setBridge method, we make sure that the manager is
|
|
184
|
+
// properly initialized in the Main Thread and that we do not incur in any race condition
|
|
185
|
+
// or concurrency problem.
|
|
186
|
+
id<RCTBridgeModule> a11yManager = [self->_bridge moduleForName:@"AccessibilityManager"
|
|
187
|
+
lazilyLoadIfNecessary:YES];
|
|
188
|
+
__weak NSObject * a11yManagerWeakObject = a11yManager;
|
|
183
189
|
// This dispatch_async avoids a deadlock while configuring native modules
|
|
184
|
-
dispatch_async(
|
|
185
|
-
|
|
186
|
-
lazilyLoadIfNecessary:YES];
|
|
190
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
191
|
+
__strong NSObject * a11yManagerStrongObject = a11yManagerWeakObject;
|
|
187
192
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
188
193
|
selector:@selector(didReceiveNewContentSizeMultiplier)
|
|
189
194
|
name:@"RCTAccessibilityManagerDidUpdateMultiplierNotification"
|
|
190
|
-
object:
|
|
195
|
+
object:a11yManagerStrongObject];
|
|
191
196
|
});
|
|
192
197
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
193
198
|
selector:@selector(namedOrientationDidChange)
|
|
@@ -20,6 +20,7 @@ folly_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_C
|
|
|
20
20
|
folly_compiler_flags = folly_flags + ' ' + '-Wno-comma -Wno-shorten-64-to-32'
|
|
21
21
|
folly_version = '2022.05.16.00'
|
|
22
22
|
boost_compiler_flags = '-Wno-documentation'
|
|
23
|
+
new_arch_flags = ENV['RCT_NEW_ARCH_ENABLED'] == '1' ? ' -DRCT_NEW_ARCH_ENABLED=1' : ''
|
|
23
24
|
|
|
24
25
|
header_search_paths = [
|
|
25
26
|
"\"$(PODS_TARGET_SRCROOT)/ReactCommon\"",
|
|
@@ -52,13 +53,13 @@ Pod::Spec.new do |s|
|
|
|
52
53
|
s.source_files = "Fabric/**/*.{c,h,m,mm,S,cpp}"
|
|
53
54
|
s.exclude_files = "**/tests/*",
|
|
54
55
|
"**/android/*",
|
|
55
|
-
s.compiler_flags = folly_compiler_flags + ' ' + boost_compiler_flags
|
|
56
|
+
s.compiler_flags = folly_compiler_flags + ' ' + boost_compiler_flags + new_arch_flags
|
|
56
57
|
s.header_dir = header_dir
|
|
57
58
|
s.module_name = module_name
|
|
58
59
|
s.framework = ["JavaScriptCore", "MobileCoreServices"]
|
|
59
60
|
s.pod_target_xcconfig = {
|
|
60
61
|
"HEADER_SEARCH_PATHS" => header_search_paths,
|
|
61
|
-
"OTHER_CFLAGS" => "$(inherited) -DRN_FABRIC_ENABLED" + " " + folly_flags,
|
|
62
|
+
"OTHER_CFLAGS" => "$(inherited) -DRN_FABRIC_ENABLED" + " " + folly_flags + new_arch_flags,
|
|
62
63
|
"CLANG_CXX_LANGUAGE_STANDARD" => "c++20"
|
|
63
64
|
}.merge!(ENV['USE_FRAMEWORKS'] != nil ? {
|
|
64
65
|
"PUBLIC_HEADERS_FOLDER_PATH" => "#{module_name}.framework/Headers/#{header_dir}"
|
package/ReactAndroid/src/main/java/com/facebook/react/bridge/queue/MessageQueueThreadHandler.java
CHANGED
|
@@ -10,6 +10,8 @@ package com.facebook.react.bridge.queue;
|
|
|
10
10
|
import android.os.Handler;
|
|
11
11
|
import android.os.Looper;
|
|
12
12
|
import android.os.Message;
|
|
13
|
+
import com.facebook.common.logging.FLog;
|
|
14
|
+
import com.facebook.react.common.ReactConstants;
|
|
13
15
|
|
|
14
16
|
/** Handler that can catch and dispatch Exceptions to an Exception handler. */
|
|
15
17
|
public class MessageQueueThreadHandler extends Handler {
|
|
@@ -26,6 +28,15 @@ public class MessageQueueThreadHandler extends Handler {
|
|
|
26
28
|
try {
|
|
27
29
|
super.dispatchMessage(msg);
|
|
28
30
|
} catch (Exception e) {
|
|
31
|
+
if (e instanceof NullPointerException) {
|
|
32
|
+
FLog.e(
|
|
33
|
+
ReactConstants.TAG,
|
|
34
|
+
"Caught NullPointerException when dispatching message in MessageQueueThreadHandler. This is likely caused by runnable"
|
|
35
|
+
+ "(msg.callback) being nulled in Android Handler after dispatching and before handling (see T170239922 for more details)."
|
|
36
|
+
+ "Currently we observe that it only happen once which is during initialisation. Due to fixing probably involve Android "
|
|
37
|
+
+ "System code, we decide to ignore here for now and print an error message for debugging purpose in case this cause more serious issues in future.");
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
29
40
|
mExceptionHandler.handleException(e);
|
|
30
41
|
}
|
|
31
42
|
}
|
package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java
CHANGED
|
@@ -206,7 +206,15 @@ import java.util.Set;
|
|
|
206
206
|
}
|
|
207
207
|
for (String oldKey : keysToNormalize) {
|
|
208
208
|
Object value = events.get(oldKey);
|
|
209
|
-
String
|
|
209
|
+
String baseKey = "";
|
|
210
|
+
if (oldKey.startsWith("on")) {
|
|
211
|
+
// Drop "on" prefix.
|
|
212
|
+
baseKey = oldKey.substring(2);
|
|
213
|
+
} else {
|
|
214
|
+
// Capitalize first letter.
|
|
215
|
+
baseKey = oldKey.substring(0, 1).toUpperCase() + oldKey.substring(1);
|
|
216
|
+
}
|
|
217
|
+
String newKey = "top" + baseKey;
|
|
210
218
|
events.put(newKey, value);
|
|
211
219
|
}
|
|
212
220
|
}
|
|
@@ -16,18 +16,26 @@
|
|
|
16
16
|
|
|
17
17
|
namespace facebook::react {
|
|
18
18
|
|
|
19
|
+
static bool hasPrefix(const std::string& str, const std::string& prefix) {
|
|
20
|
+
return str.compare(0, prefix.length(), prefix) == 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
19
23
|
// TODO(T29874519): Get rid of "top" prefix once and for all.
|
|
20
24
|
/*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
25
|
+
* Replaces "on" with "top" if present. Or capitalizes the first letter and adds
|
|
26
|
+
* "top" prefix. E.g. "eventName" becomes "topEventName", "onEventName" also
|
|
27
|
+
* becomes "topEventName".
|
|
23
28
|
*/
|
|
24
29
|
static std::string normalizeEventType(std::string type) {
|
|
25
30
|
auto prefixedType = std::move(type);
|
|
26
|
-
if (prefixedType
|
|
27
|
-
prefixedType
|
|
28
|
-
|
|
31
|
+
if (facebook::react::hasPrefix(prefixedType, "top")) {
|
|
32
|
+
return prefixedType;
|
|
33
|
+
}
|
|
34
|
+
if (facebook::react::hasPrefix(prefixedType, "on")) {
|
|
35
|
+
return "top" + prefixedType.substr(2);
|
|
29
36
|
}
|
|
30
|
-
|
|
37
|
+
prefixedType[0] = static_cast<char>(toupper(prefixedType[0]));
|
|
38
|
+
return "top" + prefixedType;
|
|
31
39
|
}
|
|
32
40
|
|
|
33
41
|
std::mutex& EventEmitter::DispatchMutex() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native",
|
|
3
|
-
"version": "0.73.
|
|
3
|
+
"version": "0.73.5",
|
|
4
4
|
"description": "A framework for building native apps using React",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -93,12 +93,12 @@
|
|
|
93
93
|
},
|
|
94
94
|
"dependencies": {
|
|
95
95
|
"@jest/create-cache-key-function": "^29.6.3",
|
|
96
|
-
"@react-native-community/cli": "12.3.
|
|
97
|
-
"@react-native-community/cli-platform-android": "12.3.
|
|
98
|
-
"@react-native-community/cli-platform-ios": "12.3.
|
|
96
|
+
"@react-native-community/cli": "12.3.6",
|
|
97
|
+
"@react-native-community/cli-platform-android": "12.3.6",
|
|
98
|
+
"@react-native-community/cli-platform-ios": "12.3.6",
|
|
99
99
|
"@react-native/assets-registry": "0.73.1",
|
|
100
|
-
"@react-native/community-cli-plugin": "0.73.
|
|
101
|
-
"@react-native/codegen": "0.73.
|
|
100
|
+
"@react-native/community-cli-plugin": "0.73.17",
|
|
101
|
+
"@react-native/codegen": "0.73.3",
|
|
102
102
|
"@react-native/gradle-plugin": "0.73.4",
|
|
103
103
|
"@react-native/js-polyfills": "0.73.1",
|
|
104
104
|
"@react-native/normalize-colors": "0.73.2",
|
|
@@ -104,6 +104,10 @@ class NewArchitectureHelper
|
|
|
104
104
|
current_config = hash["pod_target_xcconfig"] != nil ? hash["pod_target_xcconfig"] : {}
|
|
105
105
|
current_headers = current_config["HEADER_SEARCH_PATHS"] != nil ? current_config["HEADER_SEARCH_PATHS"] : ""
|
|
106
106
|
|
|
107
|
+
flags_to_add = new_arch_enabled ?
|
|
108
|
+
"#{@@folly_compiler_flags} -DRCT_NEW_ARCH_ENABLED=1" :
|
|
109
|
+
"#{@@folly_compiler_flags}"
|
|
110
|
+
|
|
107
111
|
header_search_paths = ["\"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/Headers/Private/Yoga\""]
|
|
108
112
|
if ENV['USE_FRAMEWORKS']
|
|
109
113
|
header_search_paths << "\"$(PODS_ROOT)/DoubleConversion\""
|
|
@@ -123,7 +127,7 @@ class NewArchitectureHelper
|
|
|
123
127
|
}
|
|
124
128
|
end
|
|
125
129
|
header_search_paths_string = header_search_paths.join(" ")
|
|
126
|
-
spec.compiler_flags = compiler_flags.empty? ?
|
|
130
|
+
spec.compiler_flags = compiler_flags.empty? ? "$(inherited) #{flags_to_add}" : "$(inherited) #{compiler_flags} #{flags_to_add}"
|
|
127
131
|
current_config["HEADER_SEARCH_PATHS"] = current_headers.empty? ?
|
|
128
132
|
header_search_paths_string :
|
|
129
133
|
"#{current_headers} #{header_search_paths_string}"
|
|
@@ -32,7 +32,13 @@ const REACT_NATIVE_PACKAGE_ROOT_FOLDER = path.join(__dirname, '..', '..');
|
|
|
32
32
|
|
|
33
33
|
const CODEGEN_DEPENDENCY_NAME = '@react-native/codegen';
|
|
34
34
|
const CODEGEN_REPO_PATH = `${REACT_NATIVE_REPOSITORY_ROOT}/packages/react-native-codegen`;
|
|
35
|
-
|
|
35
|
+
// This is a change for 0.73-stable only since this piece of code was replaced:
|
|
36
|
+
// https://github.com/facebook/react-native/commit/9071a3a0b0e11ad711927651bcb2412f553b6fe9
|
|
37
|
+
const CODEGEN_NPM_PATH = path.dirname(
|
|
38
|
+
require.resolve(path.join(CODEGEN_DEPENDENCY_NAME, 'package.json'), {
|
|
39
|
+
paths: [REACT_NATIVE_PACKAGE_ROOT_FOLDER],
|
|
40
|
+
}),
|
|
41
|
+
);
|
|
36
42
|
const CORE_LIBRARIES_WITH_OUTPUT_FOLDER = {
|
|
37
43
|
rncore: path.join(REACT_NATIVE_PACKAGE_ROOT_FOLDER, 'ReactCommon'),
|
|
38
44
|
FBReactNativeSpec: null,
|
|
@@ -189,33 +195,34 @@ function handleThirdPartyLibraries(
|
|
|
189
195
|
codegenConfigKey,
|
|
190
196
|
) {
|
|
191
197
|
// Determine which of these are codegen-enabled libraries
|
|
192
|
-
const configDir =
|
|
193
|
-
baseCodegenConfigFileDir ||
|
|
194
|
-
path.join(REACT_NATIVE_PACKAGE_ROOT_FOLDER, '..');
|
|
198
|
+
const configDir = baseCodegenConfigFileDir || process.cwd();
|
|
195
199
|
console.log(
|
|
196
200
|
`\n\n[Codegen] >>>>> Searching for codegen-enabled libraries in ${configDir}`,
|
|
197
201
|
);
|
|
198
202
|
|
|
199
203
|
// Handle third-party libraries
|
|
204
|
+
const resolveOptions = {paths: [configDir]};
|
|
200
205
|
Object.keys(dependencies).forEach(dependency => {
|
|
201
206
|
if (dependency === REACT_NATIVE_DEPENDENCY_NAME) {
|
|
202
207
|
// react-native should already be added.
|
|
203
208
|
return;
|
|
204
209
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
210
|
+
|
|
211
|
+
try {
|
|
212
|
+
const configFilePath = require.resolve(
|
|
213
|
+
`${dependency}/${codegenConfigFilename}`,
|
|
214
|
+
resolveOptions,
|
|
215
|
+
);
|
|
211
216
|
const configFile = JSON.parse(fs.readFileSync(configFilePath));
|
|
212
217
|
extractLibrariesFromJSON(
|
|
213
218
|
configFile,
|
|
214
219
|
libraries,
|
|
215
220
|
codegenConfigKey,
|
|
216
221
|
dependency,
|
|
217
|
-
|
|
222
|
+
path.dirname(configFilePath),
|
|
218
223
|
);
|
|
224
|
+
} catch (_) {
|
|
225
|
+
// ignore
|
|
219
226
|
}
|
|
220
227
|
});
|
|
221
228
|
}
|
package/sdks/.hermesversion
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
hermes-
|
|
1
|
+
hermes-2024-02-20-RNv0.73.5-18f99ace4213052c5e7cdbcd39ee9766cd5df7e4
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/template/package.json
CHANGED
|
@@ -11,15 +11,15 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"react": "18.2.0",
|
|
14
|
-
"react-native": "0.73.
|
|
14
|
+
"react-native": "0.73.5"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@babel/core": "^7.20.0",
|
|
18
18
|
"@babel/preset-env": "^7.20.0",
|
|
19
19
|
"@babel/runtime": "^7.20.0",
|
|
20
|
-
"@react-native/babel-preset": "0.73.
|
|
20
|
+
"@react-native/babel-preset": "0.73.21",
|
|
21
21
|
"@react-native/eslint-config": "0.73.2",
|
|
22
|
-
"@react-native/metro-config": "0.73.
|
|
22
|
+
"@react-native/metro-config": "0.73.5",
|
|
23
23
|
"@react-native/typescript-config": "0.73.1",
|
|
24
24
|
"@types/react": "^18.2.6",
|
|
25
25
|
"@types/react-test-renderer": "^18.0.0",
|