From d34a2895278c0fb0224269d2f434917bc0845939 Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Fri, 20 Mar 2026 12:25:07 -0700 Subject: [PATCH 1/3] Add performance marker for Fast Refresh update (#56176) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/56176 NOTE: Resubmission of D84624705. Adds a prominent vertical "Fast Refresh ⚛︎" marker entry in the performance timeline when a Fast Refresh update is complete. Changelog: [Internal] Reviewed By: GijsWeterings Differential Revision: D97486551 fbshipit-source-id: 4c70b674370bab06f02e8d356bbd2979c9686a44 --- .../Libraries/Utilities/HMRClient.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/react-native/Libraries/Utilities/HMRClient.js b/packages/react-native/Libraries/Utilities/HMRClient.js index 02ff12e9750e..668c254cd67c 100644 --- a/packages/react-native/Libraries/Utilities/HMRClient.js +++ b/packages/react-native/Libraries/Utilities/HMRClient.js @@ -212,6 +212,7 @@ Error: ${e.message}`; }); let pendingUpdatesCount = 0; + let lastMarkerChangeId: string | null = null; client.on('update-start', ({isInitialUpdate}) => { pendingUpdatesCount++; currentCompileErrorMessage = null; @@ -229,10 +230,23 @@ Error: ${e.message}`; } }); - client.on('update-done', () => { + client.on('update-done', body => { pendingUpdatesCount--; if (pendingUpdatesCount === 0) { DevLoadingView.hide(); + const changeId = body?.changeId; + if (changeId != null && changeId !== lastMarkerChangeId) { + lastMarkerChangeId = changeId; + performance.mark('Fast Refresh - Update done', { + detail: { + devtools: { + dataType: 'marker', + color: 'primary', + tooltipText: 'Fast Refresh \u269b', + }, + }, + }); + } } }); From f235596468e8de67ddd61b7ad826a73e1b7edd90 Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Wed, 1 Apr 2026 11:41:28 -0700 Subject: [PATCH 2/3] Add unstable_fastRefreshComplete CDP event (#56273) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/56273 Adds a new, experimental `ReactNativeApplication.unstable_fastRefreshComplete` CDP event, emitted to subscribed active CDP sessions when a Fast Refresh update completes. **Notes** - As with D97486551, we reuse the `changeId` block in `HMRClient.js`, ensuring duplicate updates for the same change are not reported. Changelog: [Internal] Reviewed By: GijsWeterings, hoxyq Differential Revision: D98493216 fbshipit-source-id: b0b81a210fb84873e9358aa5484038062f110103 --- .../Libraries/Utilities/HMRClient.js | 31 ++++++++++++----- .../jsinspector-modern/RuntimeAgent.cpp | 19 +++++++++++ .../jsinspector-modern/RuntimeAgent.h | 7 ++++ .../jsinspector-modern/RuntimeTarget.cpp | 33 +++++++++++++++++++ .../jsinspector-modern/RuntimeTarget.h | 6 ++++ 5 files changed, 87 insertions(+), 9 deletions(-) diff --git a/packages/react-native/Libraries/Utilities/HMRClient.js b/packages/react-native/Libraries/Utilities/HMRClient.js index 668c254cd67c..5911eaa6729e 100644 --- a/packages/react-native/Libraries/Utilities/HMRClient.js +++ b/packages/react-native/Libraries/Utilities/HMRClient.js @@ -237,15 +237,7 @@ Error: ${e.message}`; const changeId = body?.changeId; if (changeId != null && changeId !== lastMarkerChangeId) { lastMarkerChangeId = changeId; - performance.mark('Fast Refresh - Update done', { - detail: { - devtools: { - dataType: 'marker', - color: 'primary', - tooltipText: 'Fast Refresh \u269b', - }, - }, - }); + emitFastRefreshCompleteEvents(); } } }); @@ -393,4 +385,25 @@ function showCompileError() { throw error; } +function emitFastRefreshCompleteEvents() { + // Add marker entry in performance timeline + performance.mark('Fast Refresh - Update done', { + detail: { + devtools: { + dataType: 'marker', + color: 'primary', + tooltipText: 'Fast Refresh \u269b', + }, + }, + }); + + // Notify CDP clients via internal binding + if ( + // $FlowFixMe[prop-missing] - Injected by RuntimeTarget + typeof globalThis.__notifyFastRefreshComplete === 'function' + ) { + globalThis.__notifyFastRefreshComplete(); + } +} + export default HMRClient; diff --git a/packages/react-native/ReactCommon/jsinspector-modern/RuntimeAgent.cpp b/packages/react-native/ReactCommon/jsinspector-modern/RuntimeAgent.cpp index 24b89fa9336a..0f3120518ac9 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +++ b/packages/react-native/ReactCommon/jsinspector-modern/RuntimeAgent.cpp @@ -8,6 +8,10 @@ #include "RuntimeAgent.h" #include "SessionState.h" +#include +#include + +#include #include namespace facebook::react::jsinspector_modern { @@ -119,6 +123,21 @@ void RuntimeAgent::notifyBindingCalled( "name", bindingName)("payload", payload))); } +void RuntimeAgent::notifyFastRefreshComplete() { + if (!sessionState_.isReactNativeApplicationDomainEnabled) { + return; + } + folly::dynamic params = folly::dynamic::object( + "timestamp", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count()); + frontendChannel_( + cdp::jsonNotification( + "ReactNativeApplication.unstable_fastRefreshComplete", + std::move(params))); +} + RuntimeAgent::ExportedState RuntimeAgent::getExportedState() { return { .delegateState = delegate_ ? delegate_->getExportedState() : nullptr, diff --git a/packages/react-native/ReactCommon/jsinspector-modern/RuntimeAgent.h b/packages/react-native/ReactCommon/jsinspector-modern/RuntimeAgent.h index 74d5c935a571..d6a584ede942 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/RuntimeAgent.h +++ b/packages/react-native/ReactCommon/jsinspector-modern/RuntimeAgent.h @@ -72,6 +72,13 @@ class RuntimeAgent final { void notifyBindingCalled(const std::string &bindingName, const std::string &payload); + /** + * Called by RuntimeTarget when JS calls __notifyFastRefreshComplete(). + * Emits a ReactNativeApplication.unstable_fastRefreshComplete CDP + * notification if the ReactNativeApplication domain is enabled. + */ + void notifyFastRefreshComplete(); + struct ExportedState { std::unique_ptr delegateState; }; diff --git a/packages/react-native/ReactCommon/jsinspector-modern/RuntimeTarget.cpp b/packages/react-native/ReactCommon/jsinspector-modern/RuntimeTarget.cpp index 317f1e1ae55b..946983d928de 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +++ b/packages/react-native/ReactCommon/jsinspector-modern/RuntimeTarget.cpp @@ -47,6 +47,8 @@ void RuntimeTarget::installGlobals() { // NOTE: RuntimeTarget::installNetworkReporterAPI is in // RuntimeTargetNetwork.cpp installNetworkReporterAPI(); + + installFastRefreshHandler(); } std::shared_ptr RuntimeTarget::createAgent( @@ -128,6 +130,37 @@ void RuntimeTarget::installBindingHandler(const std::string& bindingName) { }); } +void RuntimeTarget::installFastRefreshHandler() { + jsExecutor_([selfExecutor = executorFromThis()](jsi::Runtime& runtime) { + auto globalObj = runtime.global(); + try { + auto name = + jsi::PropNameID::forUtf8(runtime, "__notifyFastRefreshComplete"); + globalObj.setProperty( + runtime, + name, + jsi::Function::createFromHostFunction( + runtime, + name, + 0, + [selfExecutor]( + jsi::Runtime& /*rt*/, + const jsi::Value&, + const jsi::Value*, + size_t) -> jsi::Value { + selfExecutor([](auto& self) { + self.agents_.forEach( + [](auto& agent) { agent.notifyFastRefreshComplete(); }); + }); + + return jsi::Value::undefined(); + })); + } catch (jsi::JSError&) { + // Swallow JavaScript exceptions that occur while setting up the global. + } + }); +} + void RuntimeTarget::emitDebuggerSessionCreated() { jsExecutor_([selfExecutor = executorFromThis()](jsi::Runtime& runtime) { try { diff --git a/packages/react-native/ReactCommon/jsinspector-modern/RuntimeTarget.h b/packages/react-native/ReactCommon/jsinspector-modern/RuntimeTarget.h index 14f289190543..75eb87410c33 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/RuntimeTarget.h +++ b/packages/react-native/ReactCommon/jsinspector-modern/RuntimeTarget.h @@ -295,6 +295,12 @@ class JSINSPECTOR_EXPORT RuntimeTarget : public EnableExecutorFromThis Date: Tue, 28 Apr 2026 14:05:25 +0100 Subject: [PATCH 3/3] Bump Metro to ^0.84.3 Metro 0.84.3 adds `changeId` to HMR `update-done` messages, which is required by the `unstable_fastRefreshComplete` CDP event and the Fast Refresh performance marker to deduplicate events across multiple updates for the same file change. --- package.json | 4 +- packages/community-cli-plugin/package.json | 8 +- packages/metro-config/package.json | 4 +- packages/react-native/package.json | 4 +- yarn.lock | 255 ++++++++++----------- 5 files changed, 132 insertions(+), 143 deletions(-) diff --git a/package.json b/package.json index 9eef756352bf..23c700c2d51f 100644 --- a/package.json +++ b/package.json @@ -98,8 +98,8 @@ "markdownlint-cli2": "^0.17.2", "markdownlint-rule-relative-links": "^3.0.0", "memfs": "^4.38.2", - "metro-babel-register": "^0.83.3", - "metro-transform-plugins": "^0.83.3", + "metro-babel-register": "^0.84.3", + "metro-transform-plugins": "^0.84.3", "micromatch": "^4.0.4", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 2d1d201f0621..b8923b4c058f 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -34,13 +34,13 @@ "@react-native/dev-middleware": "0.85.2", "debug": "^4.4.0", "invariant": "^2.2.4", - "metro": "^0.84.0", - "metro-config": "^0.84.0", - "metro-core": "^0.84.0", + "metro": "^0.84.3", + "metro-config": "^0.84.3", + "metro-core": "^0.84.3", "semver": "^7.1.3" }, "devDependencies": { - "metro-resolver": "^0.84.0" + "metro-resolver": "^0.84.3" }, "peerDependencies": { "@react-native-community/cli": "*", diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index c8751df242ff..5239f3688420 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -37,7 +37,7 @@ "dependencies": { "@react-native/js-polyfills": "0.85.2", "@react-native/metro-babel-transformer": "0.85.2", - "metro-config": "^0.84.0", - "metro-runtime": "^0.84.0" + "metro-config": "^0.84.3", + "metro-runtime": "^0.84.3" } } diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 6c103311daa3..1432d3cbcce9 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -179,8 +179,8 @@ "hermes-compiler": "250829098.0.10", "invariant": "^2.2.4", "memoize-one": "^5.0.0", - "metro-runtime": "^0.84.0", - "metro-source-map": "^0.84.0", + "metro-runtime": "^0.84.3", + "metro-source-map": "^0.84.3", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", diff --git a/yarn.lock b/yarn.lock index 5342c5629ce8..68208d8189cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -54,7 +54,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.25.0", "@babel/generator@^7.28.0", "@babel/generator@^7.29.0", "@babel/generator@^7.29.1", "@babel/generator@^7.7.2": +"@babel/generator@^7.28.0", "@babel/generator@^7.29.0", "@babel/generator@^7.29.1", "@babel/generator@^7.7.2": version "7.29.1" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== @@ -1028,7 +1028,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.25.0", "@babel/template@^7.25.9", "@babel/template@^7.27.2", "@babel/template@^7.28.6", "@babel/template@^7.3.3": +"@babel/template@^7.25.9", "@babel/template@^7.27.2", "@babel/template@^7.28.6", "@babel/template@^7.3.3": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57" integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== @@ -1037,7 +1037,7 @@ "@babel/parser" "^7.28.6" "@babel/types" "^7.28.6" -"@babel/traverse@^7.25.3", "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0", "@babel/traverse@^7.29.0": +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0", "@babel/traverse@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a" integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== @@ -3024,13 +3024,6 @@ babel-plugin-replace-ts-export-assignment@^0.0.2: resolved "https://registry.yarnpkg.com/babel-plugin-replace-ts-export-assignment/-/babel-plugin-replace-ts-export-assignment-0.0.2.tgz#927a30ba303fcf271108980a8d4f80a693e1d53f" integrity sha512-BiTEG2Ro+O1spuheL5nB289y37FFmz0ISE6GjpNCG2JuA/WNcuEHSYw01+vN8quGf208sID3FnZFDwVyqX18YQ== -babel-plugin-syntax-hermes-parser@0.32.0: - version "0.32.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.32.0.tgz#06f7452bf91adf6cafd7c98e7467404d4eb65cec" - integrity sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg== - dependencies: - hermes-parser "0.32.0" - babel-plugin-syntax-hermes-parser@0.33.3: version "0.33.3" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.33.3.tgz#07602f8163cc7e63c4ec17d47467f2a3c5db70e9" @@ -3038,6 +3031,13 @@ babel-plugin-syntax-hermes-parser@0.33.3: dependencies: hermes-parser "0.33.3" +babel-plugin-syntax-hermes-parser@0.35.0: + version "0.35.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.35.0.tgz#9daa5340b6a5b329985f4c5cda2c6b1a355daed5" + integrity sha512-9Hbqe8S8JWQ4EiHBFFkqLiFPXJL4bHhYooT536r78jVPfSUtgLtY9lCelY4QJzJORSy/9L3zXDhyN+QsPBMsTw== + dependencies: + hermes-parser "0.35.0" + babel-plugin-transform-define@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/babel-plugin-transform-define/-/babel-plugin-transform-define-2.1.4.tgz#8f7088211176a55a72788d584ceea9f691a021c1" @@ -5131,10 +5131,10 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: dependencies: function-bind "^1.1.2" -hermes-compiler@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/hermes-compiler/-/hermes-compiler-0.0.0.tgz#8d9f6a0b2740ce34d71258fec684e7b6bfd97efa" - integrity sha512-boVFutx6ME/Km2mB6vvsQcdnazEYYI/jV1pomx1wcFUG/EVqTkr5CU0CW9bKipOA/8Hyu3NYwW3THg2Q1kNCfA== +hermes-compiler@250829098.0.10: + version "250829098.0.10" + resolved "https://registry.yarnpkg.com/hermes-compiler/-/hermes-compiler-250829098.0.10.tgz#b31cae9a2517ee361c73966f76a556a1029af52b" + integrity sha512-TcRlZ0/TlyfJqquRFAWoyElVNnkdYRi/sEp4/Qy8/GYxjg8j2cS9D4MjuaQ+qimkmLN7AmO+44IznRf06mAr0w== hermes-eslint@0.33.3: version "0.33.3" @@ -5150,16 +5150,16 @@ hermes-estree@0.25.1: resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.25.1.tgz#6aeec17d1983b4eabf69721f3aa3eb705b17f480" integrity sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw== -hermes-estree@0.32.0: - version "0.32.0" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.32.0.tgz#bb7da6613ab8e67e334a1854ea1e209f487d307b" - integrity sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ== - hermes-estree@0.33.3: version "0.33.3" resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.33.3.tgz#6d6b593d4b471119772c82bdb0212dfadabb6f17" integrity sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg== +hermes-estree@0.35.0: + version "0.35.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.35.0.tgz#767cce0b14a68b4bc06cd5db7efe889f6188c565" + integrity sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg== + hermes-parser@0.25.1, hermes-parser@^0.25.1: version "0.25.1" resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.25.1.tgz#5be0e487b2090886c62bd8a11724cd766d5f54d1" @@ -5167,13 +5167,6 @@ hermes-parser@0.25.1, hermes-parser@^0.25.1: dependencies: hermes-estree "0.25.1" -hermes-parser@0.32.0: - version "0.32.0" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.32.0.tgz#7916984ef6fdce62e7415d354cf35392061cd303" - integrity sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw== - dependencies: - hermes-estree "0.32.0" - hermes-parser@0.33.3: version "0.33.3" resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.33.3.tgz#da50ababb7a5ab636d339e7b2f6e3848e217e09d" @@ -5181,6 +5174,13 @@ hermes-parser@0.33.3: dependencies: hermes-estree "0.33.3" +hermes-parser@0.35.0: + version "0.35.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.35.0.tgz#7625ec2f34ab897c2a17a7bea9788d136d5fd8c9" + integrity sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA== + dependencies: + hermes-estree "0.35.0" + hermes-transform@0.33.3: version "0.33.3" resolved "https://registry.yarnpkg.com/hermes-transform/-/hermes-transform-0.33.3.tgz#a92e3f4f74a8a0f228dd37c7b5b94d8fd75cec04" @@ -6703,10 +6703,10 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -metro-babel-register@^0.83.3: - version "0.83.3" - resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.83.3.tgz#2b8b3802b375b13d29ad41c09c4e41acae402a73" - integrity sha512-EjV03GKnJC9uS7/287L0/Fsn60GxI7TcgjeEqdqjz5JDmihRj+JVUJkAEp3ims9RdAlSud0OpjRJDjC3JFLW8Q== +metro-babel-register@^0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.84.3.tgz#219f8b44f6bee97e4b3c87b266fe50b24bf6c545" + integrity sha512-YxAZL2LgwD98wxkaaU4LzJS/C4uMO9s2ruBIcIfrcs1C4zyQc78wQ07RW1B09GCO1ajBgvpe5Gghp1Vr6zLizg== dependencies: "@babel/core" "^7.25.2" "@babel/plugin-proposal-export-namespace-from" "^7.18.9" @@ -6715,65 +6715,66 @@ metro-babel-register@^0.83.3: "@babel/preset-typescript" "^7.24.7" "@babel/register" "^7.24.6" babel-plugin-replace-ts-export-assignment "^0.0.2" - babel-plugin-syntax-hermes-parser "0.32.0" + babel-plugin-syntax-hermes-parser "0.35.0" babel-plugin-transform-flow-enums "^0.0.2" escape-string-regexp "^1.0.5" flow-enums-runtime "^0.0.6" -metro-babel-transformer@0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.84.0.tgz#58244905979809640d814e5bed267e2384c5203b" - integrity sha512-91uPQECjnYBNwyCJwsriG18N9HaQ0VcxGb7A0iWBsrNF49wbRblokm7YBz31O5r9cix0DxH2BiwreNWPP5q65w== +metro-babel-transformer@0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.84.3.tgz#ee6ab39cb0c8d0c015799b11911bf7f0325b7e1e" + integrity sha512-svAA+yMLpeMiGcz/jKJs4oHpIGEx4nBqNEJ5AGj4CYIg1efvK+A0TjR6tgIuc6tKO5e8JmN/1lglpN2+f3/z/w== dependencies: "@babel/core" "^7.25.2" flow-enums-runtime "^0.0.6" - hermes-parser "0.33.3" + hermes-parser "0.35.0" + metro-cache-key "0.84.3" nullthrows "^1.1.1" -metro-cache-key@0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.84.0.tgz#47c6d862ea60c112c7a7920cc965c6fd709ae927" - integrity sha512-hREMJDJQ3MZW8dXco06HcmhoET6eJjvaPAml3eScTZsp5XBWhknocEiR5zlqx3zKhs3x3K7DK2C8f0uf9X3h0A== +metro-cache-key@0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.84.3.tgz#e472f8295d1d44c8f7bea377c554f9b19c5c09b0" + integrity sha512-TnSL1Fdvrw+2glTdBSRmA5TL8l/i16ECjsrUdf3E5HncA+sNx8KcwDG8r+3ct1UhfYcusJypzZqTN55FZZcwGg== dependencies: flow-enums-runtime "^0.0.6" -metro-cache@0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.84.0.tgz#923fb7f1078e5b08980df2fe91e78d41291203cc" - integrity sha512-qIjsTdzWDZMJrztup4u0AnokxIee73fbti2MkV7MgSQ85zSIUSgjV3++oCaQ2m+qzhy+XCasG3n51B+avVDMhw== +metro-cache@0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.84.3.tgz#42296dd69033c8c03d0e9da4ff71226486e1aa7f" + integrity sha512-0QElxwLaHqLZf+Xqio8QrjVbuXP/8sJfQBGSPiITlKDVXrVLefuzYVSH9Sj+QL6lrPj2gYZd/iwQh1yZuVKnLA== dependencies: exponential-backoff "^3.1.1" flow-enums-runtime "^0.0.6" https-proxy-agent "^7.0.5" - metro-core "0.84.0" + metro-core "0.84.3" -metro-config@0.84.0, metro-config@^0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.84.0.tgz#ca8a1e9deb92e041a64a6e3b85ead97a6a14b979" - integrity sha512-wXhIQebmW8jyNr2xht1tKFRio9hSThpYzkiDBBMggk/LYw/6KbaUyl1EKJmpm5M/KJ4XwrhL3yTTMi2MqfWaDw== +metro-config@0.84.3, metro-config@^0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.84.3.tgz#aee12c219e76ba5a9ad02a650bf9acc3b6f86c12" + integrity sha512-JmCzZWOETR+O22q8oPBWyQppx3roU9EbkbGzD8Gf1jukQ4b5T1fTzqqHruu6K4sTiNq5zVQySmKF6bp4kVARew== dependencies: connect "^3.6.5" flow-enums-runtime "^0.0.6" jest-validate "^29.7.0" - metro "0.84.0" - metro-cache "0.84.0" - metro-core "0.84.0" - metro-runtime "0.84.0" + metro "0.84.3" + metro-cache "0.84.3" + metro-core "0.84.3" + metro-runtime "0.84.3" yaml "^2.6.1" -metro-core@0.84.0, metro-core@^0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.84.0.tgz#91270d60a91cbde96b067c9146c6fe0ce95a3737" - integrity sha512-HWDvRDFTNcNZqgSs2DQX379BAJHYdE6bsX4SNQztz9KUqDx5egrQPzIahtYP5irP/RbksTqKbGeXtJxVz2557A== +metro-core@0.84.3, metro-core@^0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.84.3.tgz#afa7da4046a60c5e1b249da65df34c48e6dd4192" + integrity sha512-cc0pvAa80ai1nDmqqz0P59a+0ZqCZ/YHU/3jEekZL6spFnYDfX8iDLdn9FR6kX+67rmzKxHNrbrSRFLX2AYocw== dependencies: flow-enums-runtime "^0.0.6" lodash.throttle "^4.1.1" - metro-resolver "0.84.0" + metro-resolver "0.84.3" -metro-file-map@0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.84.0.tgz#ddc1bf955a764e22ae84e525fd7fb37490798b28" - integrity sha512-euSnhAgRaaZdK1bdcPiez0MPErg+a0h6rrop+xcQI0mNQEm1GT6R5h+yycfMMQvPkZnfzpPkhjH+pr/x7BK4WQ== +metro-file-map@0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.84.3.tgz#dc287129cdcbe451fe7cc541431480ba3cb83950" + integrity sha512-1cL4m4Jv1yRUt9RJExZQLfccscdlMNOcRG6LHLtmJhf3BG9j3MujPVc7CIpKYdFl+KUl+sdjge6oO3+meKCHQA== dependencies: debug "^4.4.0" fb-watchman "^2.0.0" @@ -6785,60 +6786,60 @@ metro-file-map@0.84.0: nullthrows "^1.1.1" walker "^1.0.7" -metro-minify-terser@0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.84.0.tgz#93c8be2b7f7feb55110e8064d77939ea8d849d47" - integrity sha512-STWICiHB3Lywl+K5eOl7Xm8/5+S9ch1YLXinXN0hDijq3SOh2UTGspxUZhWmqOvkDt/nd8dG/zSJO7JfcisV5A== +metro-minify-terser@0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.84.3.tgz#f6aeb28c268afadbe40d69a622ed550f970ac02d" + integrity sha512-3ofrG2OQyJbO9RNhCfOcl8QU7EE2WrSsnN5dFkuZaJO5+4Imujr9bUXmspeNlXRsOVk0F/rVRbEFH98lFSCkBQ== dependencies: flow-enums-runtime "^0.0.6" terser "^5.15.0" -metro-resolver@0.84.0, metro-resolver@^0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.84.0.tgz#d0deca4dd575bc770b48768ee8999e1d950bbf8f" - integrity sha512-RTzim9q3rTz5AsRB/RBsTvy+GqHt6LzlIHx8YERv7eGDLjjr291tX2+2g//wbn/uNR/nLtdzJ08FfW1s6qZo/Q== +metro-resolver@0.84.3, metro-resolver@^0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.84.3.tgz#a9c6155ccc345fde2affe8c1086b5c7132c2e4ee" + integrity sha512-pjEzGDtoM8DTHAIPK/9u9ZxszEiuRohYUVImWvgbnB91V4gqYJpQcoEYUugf2NIm1lrX5HNu0OvNqWmPBnGYjA== dependencies: flow-enums-runtime "^0.0.6" -metro-runtime@0.84.0, metro-runtime@^0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.84.0.tgz#6d6f20a48e1334816af74f63e8bdaa95598322bb" - integrity sha512-PJfD4arkFJrdnmJwrela+my+IgJIXSshA2gI3QiOWCzujBZX6XvsT0tKSwzw3FNMfU10OllO0X5tPcdTGTesjg== +metro-runtime@0.84.3, metro-runtime@^0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.84.3.tgz#0ecfba8567cac4d6d3deeeeb83ae807f2d822285" + integrity sha512-o7HLRfMyVk9N2dUZ9VjQfB6xxUItL9Pi9WcqxURE7MEKOH6wbGt9/E92YdYLluTOtkzYAEVfdC6h6lcxqA+hMQ== dependencies: "@babel/runtime" "^7.25.0" flow-enums-runtime "^0.0.6" -metro-source-map@0.84.0, metro-source-map@^0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.84.0.tgz#1391e8ad7952f54c56c87f49e8883db159cc1f4e" - integrity sha512-09CAPDBWO7gveW4GdLbWQJObxNrkElL5LQATG2xsU8wE7/TZgHc/MhEs8hm73ZC8lnIvCn5V7VS5lNlE6Od+Ww== +metro-source-map@0.84.3, metro-source-map@^0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.84.3.tgz#b84f1a1da427a3ac63095e623e9fdb60fcd5ce44" + integrity sha512-jS48CeSzw78M8y6VE0f9uy3lVmfbOS677j2VCxnlmlYmnahcXuC6IhoN9K6LynNvos9517yUadcfgioju38xYQ== dependencies: "@babel/traverse" "^7.29.0" "@babel/types" "^7.29.0" flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-symbolicate "0.84.0" + metro-symbolicate "0.84.3" nullthrows "^1.1.1" - ob1 "0.84.0" + ob1 "0.84.3" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.84.0.tgz#18c42ecc3108b4790f5554b1b76fcc8579e1748d" - integrity sha512-JehuiPnqtS5I2luZdk7UHUY7bjNY/4xX1cJ8ezXWutTitiLp489Fsx+aErDTVoWcAx15lrjWa8IpTwoR0JLtZg== +metro-symbolicate@0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.84.3.tgz#d03e99887024849031e46728e4a9808e4e670a01" + integrity sha512-J9Tpo8NCycYrozRvBIUyOwGAu4xkawOsAppmTscFiaegK0WvuDGwIM53GbzVSnytCHjVAF0io5GQxpkrKTuc7g== dependencies: flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-source-map "0.84.0" + metro-source-map "0.84.3" nullthrows "^1.1.1" source-map "^0.5.6" vlq "^1.0.0" -metro-transform-plugins@0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.84.0.tgz#484f1abc85134d28513eb80b5164323f0fd0fe35" - integrity sha512-B/5eGY4w9YA7wZ5DkWYsW4ZQ/6KkPH97A/F9s6Jj2s9f586p3tGa2sbsm8WXFXNk26tprHda8EOaO6dNSw/TmA== +metro-transform-plugins@0.84.3, metro-transform-plugins@^0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.84.3.tgz#c0b4e08e38acc4146ae5cde5d0227eca407e21c3" + integrity sha512-8S3baq2XhBaafHEH5Q8sJW6tmzsEJk80qKc3RU/nZV1MsnYq94RdjTUR6AyKjQd6Rfsk1BtBxhtiNnk7mgslCg== dependencies: "@babel/core" "^7.25.2" "@babel/generator" "^7.29.1" @@ -6847,41 +6848,29 @@ metro-transform-plugins@0.84.0: flow-enums-runtime "^0.0.6" nullthrows "^1.1.1" -metro-transform-plugins@^0.83.3: - version "0.83.3" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.83.3.tgz#2c59ba841e269363cf3acb13138cb992f0c75013" - integrity sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A== - dependencies: - "@babel/core" "^7.25.2" - "@babel/generator" "^7.25.0" - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.3" - flow-enums-runtime "^0.0.6" - nullthrows "^1.1.1" - -metro-transform-worker@0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.84.0.tgz#8d278f7023bdfd2c0bda07cfc571932af4c47494" - integrity sha512-5fwkH5SrrM4RvASbZMQmA0SCiSWeseNbOE99etYjGrns/yFLxO7+oyGPQcoMNo3hMQlQ2Vyd2UcKNc+D81xSew== +metro-transform-worker@0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.84.3.tgz#d2afb2c3ee320ab8d8d74aa2cd43e51f1a7f7720" + integrity sha512-Wjba7PyYktNRsHbPmkx2J2UX32rAzcDXjCu49zPHeF/viJlYJhwRaNePQcHaCRqQ+kmgQT4ThprsnJfDj71ZMA== dependencies: "@babel/core" "^7.25.2" "@babel/generator" "^7.29.1" "@babel/parser" "^7.29.0" "@babel/types" "^7.29.0" flow-enums-runtime "^0.0.6" - metro "0.84.0" - metro-babel-transformer "0.84.0" - metro-cache "0.84.0" - metro-cache-key "0.84.0" - metro-minify-terser "0.84.0" - metro-source-map "0.84.0" - metro-transform-plugins "0.84.0" + metro "0.84.3" + metro-babel-transformer "0.84.3" + metro-cache "0.84.3" + metro-cache-key "0.84.3" + metro-minify-terser "0.84.3" + metro-source-map "0.84.3" + metro-transform-plugins "0.84.3" nullthrows "^1.1.1" -metro@0.84.0, metro@^0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.84.0.tgz#06f5588f3da643cbfbf94d528ec4dd91f85e5a96" - integrity sha512-Dy3KZphEH0xUO3rxRSwrCdge2vVjBAbSlPAKcL8qRnNEBlHz/3jPbmbb2fs9BVOrqBTi8EVDu/jdpCdWvg1ygA== +metro@0.84.3, metro@^0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.84.3.tgz#1a49f82ecd36dd8876a657110c4a99cd99556fbe" + integrity sha512-1h3lbVrE6hGf1e/764HfhPGg/bGrWMJDDh7G2rc4gFYZboVuI40BlG/y+UhtbhQDNlO/csMvrcnK0YrTlHUVew== dependencies: "@babel/code-frame" "^7.29.0" "@babel/core" "^7.25.2" @@ -6898,24 +6887,24 @@ metro@0.84.0, metro@^0.84.0: error-stack-parser "^2.0.6" flow-enums-runtime "^0.0.6" graceful-fs "^4.2.4" - hermes-parser "0.33.3" + hermes-parser "0.35.0" image-size "^1.0.2" invariant "^2.2.4" jest-worker "^29.7.0" jsc-safe-url "^0.2.2" lodash.throttle "^4.1.1" - metro-babel-transformer "0.84.0" - metro-cache "0.84.0" - metro-cache-key "0.84.0" - metro-config "0.84.0" - metro-core "0.84.0" - metro-file-map "0.84.0" - metro-resolver "0.84.0" - metro-runtime "0.84.0" - metro-source-map "0.84.0" - metro-symbolicate "0.84.0" - metro-transform-plugins "0.84.0" - metro-transform-worker "0.84.0" + metro-babel-transformer "0.84.3" + metro-cache "0.84.3" + metro-cache-key "0.84.3" + metro-config "0.84.3" + metro-core "0.84.3" + metro-file-map "0.84.3" + metro-resolver "0.84.3" + metro-runtime "0.84.3" + metro-source-map "0.84.3" + metro-symbolicate "0.84.3" + metro-transform-plugins "0.84.3" + metro-transform-worker "0.84.3" mime-types "^3.0.1" nullthrows "^1.1.1" serialize-error "^2.1.0" @@ -7393,10 +7382,10 @@ nullthrows@^1.1.1: resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== -ob1@0.84.0: - version "0.84.0" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.84.0.tgz#345f38bbd684004fdd3cc12b2c16e8157b1d5fbb" - integrity sha512-NBpmKuboMBiWd1V6U6ISIqLg8Az5BHARnKdS/k8IS7spNt931++4BflqI/TMt4otQ387Q5PFB1fzSLRNPC3HZA== +ob1@0.84.3: + version "0.84.3" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.84.3.tgz#a3f77263ae46811f98746902329e2227ee802ddd" + integrity sha512-J7554Ef8bzmKaDY365Afq6PF+qtdnY/d5PKUQFrsKlZHV/N3OGZewVrvDrQDyX5V5NJjTpcAKtlrFZcDr+HvpQ== dependencies: flow-enums-runtime "^0.0.6"