react-native 0.72.7 → 0.72.9

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.
@@ -12,6 +12,6 @@
12
12
  exports.version = {
13
13
  major: 0,
14
14
  minor: 72,
15
- patch: 7,
15
+ patch: 9,
16
16
  prerelease: null,
17
17
  };
@@ -14,12 +14,38 @@ import type {LogBoxLogData} from './LogBoxLog';
14
14
  import parseErrorStack from '../../Core/Devtools/parseErrorStack';
15
15
  import UTFSequence from '../../UTFSequence';
16
16
  import stringifySafe from '../../Utilities/stringifySafe';
17
+ import ansiRegex from 'ansi-regex';
18
+
19
+ const ANSI_REGEX = ansiRegex().source;
17
20
 
18
21
  const BABEL_TRANSFORM_ERROR_FORMAT =
19
22
  /^(?:TransformError )?(?:SyntaxError: |ReferenceError: )(.*): (.*) \((\d+):(\d+)\)\n\n([\s\S]+)/;
23
+
24
+ // https://github.com/babel/babel/blob/33dbb85e9e9fe36915273080ecc42aee62ed0ade/packages/babel-code-frame/src/index.ts#L183-L184
25
+ const BABEL_CODE_FRAME_MARKER_PATTERN = new RegExp(
26
+ [
27
+ // Beginning of a line (per 'm' flag)
28
+ '^',
29
+ // Optional ANSI escapes for colors
30
+ `(?:${ANSI_REGEX})*`,
31
+ // Marker
32
+ '>',
33
+ // Optional ANSI escapes for colors
34
+ `(?:${ANSI_REGEX})*`,
35
+ // Left padding for line number
36
+ ' +',
37
+ // Line number
38
+ '[0-9]+',
39
+ // Gutter
40
+ ' \\|',
41
+ ].join(''),
42
+ 'm',
43
+ );
44
+
20
45
  const BABEL_CODE_FRAME_ERROR_FORMAT =
21
46
  // eslint-disable-next-line no-control-regex
22
47
  /^(?:TransformError )?(?:.*):? (?:.*?)(\/.*): ([\s\S]+?)\n([ >]{2}[\d\s]+ \|[\s\S]+|\u{001b}[\s\S]+)/u;
48
+
23
49
  const METRO_ERROR_FORMAT =
24
50
  /^(?:InternalError Metro has encountered an error:) (.*): (.*) \((\d+):(\d+)\)\n\n([\s\S]+)/u;
25
51
 
@@ -241,27 +267,31 @@ export function parseLogBoxException(
241
267
  };
242
268
  }
243
269
 
244
- const babelCodeFrameError = message.match(BABEL_CODE_FRAME_ERROR_FORMAT);
270
+ // Perform a cheap match first before trying to parse the full message, which
271
+ // can get expensive for arbitrary input.
272
+ if (BABEL_CODE_FRAME_MARKER_PATTERN.test(message)) {
273
+ const babelCodeFrameError = message.match(BABEL_CODE_FRAME_ERROR_FORMAT);
245
274
 
246
- if (babelCodeFrameError) {
247
- // Codeframe errors are thrown from any use of buildCodeFrameError.
248
- const [fileName, content, codeFrame] = babelCodeFrameError.slice(1);
249
- return {
250
- level: 'syntax',
251
- stack: [],
252
- isComponentError: false,
253
- componentStack: [],
254
- codeFrame: {
255
- fileName,
256
- location: null, // We are not given the location.
257
- content: codeFrame,
258
- },
259
- message: {
260
- content,
261
- substitutions: [],
262
- },
263
- category: `${fileName}-${1}-${1}`,
264
- };
275
+ if (babelCodeFrameError) {
276
+ // Codeframe errors are thrown from any use of buildCodeFrameError.
277
+ const [fileName, content, codeFrame] = babelCodeFrameError.slice(1);
278
+ return {
279
+ level: 'syntax',
280
+ stack: [],
281
+ isComponentError: false,
282
+ componentStack: [],
283
+ codeFrame: {
284
+ fileName,
285
+ location: null, // We are not given the location.
286
+ content: codeFrame,
287
+ },
288
+ message: {
289
+ content,
290
+ substitutions: [],
291
+ },
292
+ category: `${fileName}-${1}-${1}`,
293
+ };
294
+ }
265
295
  }
266
296
 
267
297
  if (message.match(/^TransformError /)) {
@@ -23,7 +23,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
23
23
  __rnVersion = @{
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(72),
26
- RCTVersionPatch: @(7),
26
+ RCTVersionPatch: @(9),
27
27
  RCTVersionPrerelease: [NSNull null],
28
28
  };
29
29
  });
@@ -243,7 +243,7 @@ task createNativeDepsDirectories {
243
243
  }
244
244
 
245
245
  task downloadBoost(dependsOn: createNativeDepsDirectories, type: Download) {
246
- src("https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION.replace("_", ".")}/source/boost_${BOOST_VERSION}.tar.gz")
246
+ src("https://archives.boost.io/release/${BOOST_VERSION.replace("_", ".")}/source/boost_${BOOST_VERSION}.tar.gz")
247
247
  onlyIfModified(true)
248
248
  overwrite(false)
249
249
  retries(5)
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.72.7
1
+ VERSION_NAME=0.72.9
2
2
  GROUP=com.facebook.react
3
3
 
4
4
  # JVM Versions
@@ -429,6 +429,7 @@ public class FabricUIManager implements UIManager, LifecycleEventListener {
429
429
  mEventDispatcher.unregisterEventEmitter(FABRIC);
430
430
 
431
431
  mReactApplicationContext.unregisterComponentCallbacks(mViewManagerRegistry);
432
+ mViewManagerRegistry.invalidate();
432
433
 
433
434
  // Remove lifecycle listeners (onHostResume, onHostPause) since the FabricUIManager is going
434
435
  // away. Then stop the mDispatchUIFrameCallback false will cause the choreographer
@@ -17,6 +17,6 @@ public class ReactNativeVersion {
17
17
  public static final Map<String, Object> VERSION = MapBuilder.<String, Object>of(
18
18
  "major", 0,
19
19
  "minor", 72,
20
- "patch", 7,
20
+ "patch", 9,
21
21
  "prerelease", null);
22
22
  }
@@ -792,6 +792,7 @@ public class UIImplementation {
792
792
 
793
793
  public void onCatalystInstanceDestroyed() {
794
794
  mViewOperationsEnabled = false;
795
+ mViewManagers.invalidate();
795
796
  }
796
797
 
797
798
  public void setViewHierarchyUpdateDebugListener(
@@ -103,12 +103,28 @@ public final class ViewManagerRegistry implements ComponentCallbacks2 {
103
103
  viewManagers = new ArrayList<>(mViewManagers.values());
104
104
  }
105
105
  Runnable runnable =
106
- new Runnable() {
107
- @Override
108
- public void run() {
109
- for (ViewManager viewManager : viewManagers) {
110
- viewManager.onSurfaceStopped(surfaceId);
111
- }
106
+ () -> {
107
+ for (ViewManager viewManager : viewManagers) {
108
+ viewManager.onSurfaceStopped(surfaceId);
109
+ }
110
+ };
111
+ if (UiThreadUtil.isOnUiThread()) {
112
+ runnable.run();
113
+ } else {
114
+ UiThreadUtil.runOnUiThread(runnable);
115
+ }
116
+ }
117
+
118
+ /** Called on instance destroy */
119
+ public void invalidate() {
120
+ final List<ViewManager> viewManagers;
121
+ synchronized (this) {
122
+ viewManagers = new ArrayList<>(mViewManagers.values());
123
+ }
124
+ Runnable runnable =
125
+ () -> {
126
+ for (ViewManager viewManager : viewManagers) {
127
+ viewManager.invalidate();
112
128
  }
113
129
  };
114
130
  if (UiThreadUtil.isOnUiThread()) {
@@ -17,7 +17,7 @@ namespace facebook::react {
17
17
  constexpr struct {
18
18
  int32_t Major = 0;
19
19
  int32_t Minor = 72;
20
- int32_t Patch = 7;
20
+ int32_t Patch = 9;
21
21
  std::string_view Prerelease = "";
22
22
  } ReactNativeVersion;
23
23
 
@@ -17,5 +17,7 @@
17
17
  // control and use as a more reliable xplat flag. For any build that doesn't
18
18
  // have NDEBUG defined, we enable REACT_NATIVE_DEBUG for convenience.
19
19
  #ifndef NDEBUG
20
+ #ifndef COCOAPODS
20
21
  #define REACT_NATIVE_DEBUG 1
21
22
  #endif
23
+ #endif
@@ -17,6 +17,11 @@ namespace react {
17
17
  // It should be used as infrequently as possible - most props can and should
18
18
  // be parsed without any context.
19
19
  struct PropsParserContext {
20
+ PropsParserContext(
21
+ SurfaceId const surfaceId,
22
+ ContextContainer const &contextContainer)
23
+ : surfaceId(surfaceId), contextContainer(contextContainer) {}
24
+
20
25
  // Non-copyable
21
26
  PropsParserContext(const PropsParserContext &) = delete;
22
27
  PropsParserContext &operator=(const PropsParserContext &) = delete;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @flow strict
3
+ * @format
4
+ */
5
+
6
+ declare module 'ansi-regex' {
7
+ declare export type Options = {
8
+ /**
9
+ * Match only the first ANSI escape.
10
+ */
11
+ +onlyFirst?: boolean,
12
+ };
13
+ declare export default function ansiRegex(options?: Options): RegExp;
14
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native",
3
- "version": "0.72.7",
3
+ "version": "0.72.9",
4
4
  "bin": "./cli.js",
5
5
  "description": "A framework for building native apps using React",
6
6
  "license": "MIT",
@@ -83,7 +83,7 @@
83
83
  "@react-native-community/cli-platform-android": "11.3.10",
84
84
  "@react-native-community/cli-platform-ios": "11.3.10",
85
85
  "@react-native/assets-registry": "^0.72.0",
86
- "@react-native/codegen": "^0.72.7",
86
+ "@react-native/codegen": "^0.72.8",
87
87
  "@react-native/gradle-plugin": "^0.72.11",
88
88
  "@react-native/js-polyfills": "^0.72.1",
89
89
  "@react-native/normalize-colors": "^0.72.0",
@@ -92,6 +92,7 @@
92
92
  "anser": "^1.4.9",
93
93
  "base64-js": "^1.1.2",
94
94
  "deprecated-react-native-prop-types": "^4.2.3",
95
+ "ansi-regex": "^5.0.0",
95
96
  "event-target-shim": "^5.0.1",
96
97
  "flow-enums-runtime": "^0.0.5",
97
98
  "invariant": "^2.2.4",
@@ -68,7 +68,7 @@ class CodegenTests < Test::Unit::TestCase
68
68
  assert_equal(Pod::Executable.executed_commands.length, 0)
69
69
  end
70
70
 
71
- def testCheckAndGenerateEmptyThirdPartyProvider_whenHeaderMissingAndCodegenMissing_raiseError()
71
+ def testCheckAndGenerateEmptyThirdPartyProvider_whenHeaderMissingAndCodegenMissing_dontBuildCodegen()
72
72
 
73
73
  # Arrange
74
74
  FileMock.mocked_existing_files([
@@ -76,7 +76,7 @@ class CodegenTests < Test::Unit::TestCase
76
76
  ])
77
77
 
78
78
  # Act
79
- assert_raise {
79
+ assert_nothing_raised {
80
80
  checkAndGenerateEmptyThirdPartyProvider!(@prefix, false, dir_manager: DirMock, file_manager: FileMock)
81
81
  }
82
82
 
@@ -84,16 +84,16 @@ class CodegenTests < Test::Unit::TestCase
84
84
  assert_equal(Pathname.pwd_invocation_count, 1)
85
85
  assert_equal(Pod::Config.instance.installation_root.relative_path_from_invocation_count, 1)
86
86
  assert_equal(FileMock.exist_invocation_params, [
87
- @prefix + "/React/Fabric/" + @third_party_provider_header
87
+ @prefix + "/React/Fabric/" + @third_party_provider_header,
88
+ @prefix + "/React/Fabric/tmpSchemaList.txt",
88
89
  ])
89
90
  assert_equal(DirMock.exist_invocation_params, [
90
91
  @base_path + "/"+ @prefix + "/../react-native-codegen",
91
- @base_path + "/"+ @prefix + "/../@react-native/codegen",
92
92
  ])
93
- assert_equal(Pod::UI.collected_messages, [])
93
+ assert_equal(Pod::UI.collected_messages, ["[Codegen] generating an empty RCTThirdPartyFabricComponentsProvider"])
94
94
  assert_equal($collected_commands, [])
95
- assert_equal(FileMock.open_files.length, 0)
96
- assert_equal(Pod::Executable.executed_commands.length, 0)
95
+ assert_equal(FileMock.open_files.length, 1)
96
+ assert_equal(Pod::Executable.executed_commands.length, 1)
97
97
  end
98
98
 
99
99
  def testCheckAndGenerateEmptyThirdPartyProvider_whenImplementationMissingAndCodegenrepoExists_dontBuildCodegen()
@@ -145,7 +145,7 @@ class CodegenTests < Test::Unit::TestCase
145
145
 
146
146
  def testCheckAndGenerateEmptyThirdPartyProvider_whenBothMissing_buildCodegen()
147
147
  # Arrange
148
- codegen_cli_path = @base_path + "/" + @prefix + "/../@react-native/codegen"
148
+ codegen_cli_path = @base_path + "/" + @prefix + "/../react-native-codegen"
149
149
  DirMock.mocked_existing_dirs([
150
150
  codegen_cli_path,
151
151
  ])
@@ -160,15 +160,14 @@ class CodegenTests < Test::Unit::TestCase
160
160
  @prefix + "/React/Fabric/" + @tmp_schema_list_file
161
161
  ])
162
162
  assert_equal(DirMock.exist_invocation_params, [
163
- @base_path + "/" + @prefix + "/../react-native-codegen",
164
163
  codegen_cli_path,
165
164
  codegen_cli_path + "/lib",
166
165
  ])
167
166
  assert_equal(Pod::UI.collected_messages, [
168
- "[Codegen] building #{codegen_cli_path}.",
167
+ "[Codegen] building #{codegen_cli_path}",
169
168
  "[Codegen] generating an empty RCTThirdPartyFabricComponentsProvider"
170
169
  ])
171
- assert_equal($collected_commands, ["~/app/ios/../../../@react-native/codegen/scripts/oss/build.sh"])
170
+ assert_equal($collected_commands, ["~/app/ios/../../../react-native-codegen/scripts/oss/build.sh"])
172
171
  assert_equal(FileMock.open_files[0].collected_write, ["[]"])
173
172
  assert_equal(FileMock.open_files[0].fsync_invocation_count, 1)
174
173
  assert_equal(Pod::Executable.executed_commands[0], {
@@ -107,7 +107,6 @@ class JSEngineTests < Test::Unit::TestCase
107
107
  assert_equal($podInvocation["libevent"][:version], "~> 2.1.12")
108
108
  hermes_engine_pod_invocation = $podInvocation["hermes-engine"]
109
109
  assert_equal(hermes_engine_pod_invocation[:podspec], "../../sdks/hermes-engine/hermes-engine.podspec")
110
- assert_equal(hermes_engine_pod_invocation[:tag], "")
111
110
  end
112
111
 
113
112
  def test_setupHermes_installsPods_installsFabricSubspecWhenFabricEnabled
@@ -122,7 +121,6 @@ class JSEngineTests < Test::Unit::TestCase
122
121
  assert_equal($podInvocation["React-jsi"][:path], "../../ReactCommon/jsi")
123
122
  hermes_engine_pod_invocation = $podInvocation["hermes-engine"]
124
123
  assert_equal(hermes_engine_pod_invocation[:podspec], "../../sdks/hermes-engine/hermes-engine.podspec")
125
- assert_equal(hermes_engine_pod_invocation[:tag], "")
126
124
  assert_equal($podInvocation["React-hermes"][:path], "../../ReactCommon/hermes")
127
125
  assert_equal($podInvocation["libevent"][:version], "~> 2.1.12")
128
126
  end
@@ -11,23 +11,12 @@
11
11
  # - dir_manager: a class that implements the `Dir` interface. Defaults to `Dir`, the Dependency can be injected for testing purposes.
12
12
  # @throws an error if it could not find the codegen folder.
13
13
  def build_codegen!(react_native_path, relative_installation_root, dir_manager: Dir)
14
- codegen_repo_path = "#{relative_installation_root}/#{react_native_path}/../react-native-codegen";
15
- codegen_npm_path = "#{relative_installation_root}/#{react_native_path}/../@react-native/codegen";
16
- codegen_cli_path = ""
14
+ codegen_repo_path = "#{relative_installation_root}/#{react_native_path}/../react-native-codegen";
15
+ return unless dir_manager.exist?(codegen_repo_path) && !dir_manager.exist?("#{codegen_repo_path}/lib")
17
16
 
18
- if dir_manager.exist?(codegen_repo_path)
19
- codegen_cli_path = codegen_repo_path
20
- elsif dir_manager.exist?(codegen_npm_path)
21
- codegen_cli_path = codegen_npm_path
22
- else
23
- raise "[codegen] Could not find react-native-codegen."
24
- end
25
-
26
- if !dir_manager.exist?("#{codegen_cli_path}/lib")
27
- Pod::UI.puts "[Codegen] building #{codegen_cli_path}."
28
- system("#{codegen_cli_path}/scripts/oss/build.sh")
29
- end
30
- end
17
+ Pod::UI.puts "[Codegen] building #{codegen_repo_path}"
18
+ system("#{codegen_repo_path}/scripts/oss/build.sh")
19
+ end
31
20
 
32
21
  # It generates an empty `ThirdPartyProvider`, required by Fabric to load the components
33
22
  #
@@ -38,7 +38,7 @@ end
38
38
  module Helpers
39
39
  class Constants
40
40
  def self.min_ios_version_supported
41
- return '12.4'
41
+ return '13.4'
42
42
  end
43
43
  end
44
44
  end
@@ -30,12 +30,8 @@ def setup_hermes!(react_native_path: "../node_modules/react-native", fabric_enab
30
30
  abort unless prep_status == 0
31
31
 
32
32
  pod 'React-jsi', :path => "#{react_native_path}/ReactCommon/jsi"
33
- # This `:tag => hermestag` below is only to tell CocoaPods to update hermes-engine when React Native version changes.
34
- # We have custom logic to compute the source for hermes-engine. See sdks/hermes-engine/*
35
- hermestag_file = File.join(react_native_dir, "sdks", ".hermesversion")
36
- hermestag = File.exist?(hermestag_file) ? File.read(hermestag_file).strip : ''
37
33
 
38
- pod 'hermes-engine', :podspec => "#{react_native_path}/sdks/hermes-engine/hermes-engine.podspec", :tag => hermestag
34
+ pod 'hermes-engine', :podspec => "#{react_native_path}/sdks/hermes-engine/hermes-engine.podspec"
39
35
  pod 'React-hermes', :path => "#{react_native_path}/ReactCommon/hermes"
40
36
  pod 'libevent', '~> 2.1.12'
41
37
  end
Binary file
Binary file
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "react": "18.2.0",
14
- "react-native": "0.72.7"
14
+ "react-native": "0.72.9"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@babel/core": "^7.20.0",
@@ -10,7 +10,7 @@ Pod::Spec.new do |spec|
10
10
  spec.homepage = 'http://www.boost.org'
11
11
  spec.summary = 'Boost provides free peer-reviewed portable C++ source libraries.'
12
12
  spec.authors = 'Rene Rivera'
13
- spec.source = { :http => 'https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.bz2',
13
+ spec.source = { :http => 'https://archives.boost.io/release/1.76.0/source/boost_1_76_0.tar.bz2',
14
14
  :sha256 => 'f0397ba6e982c4450f27bf32a2a83292aba035b827a5623a14636ea583318c41' }
15
15
 
16
16
  # Pinning to the same version as React.podspec.