diff --git a/.changeset/eighty-moons-shave.md b/.changeset/eighty-moons-shave.md new file mode 100644 index 00000000..0d68f8c8 --- /dev/null +++ b/.changeset/eighty-moons-shave.md @@ -0,0 +1,14 @@ +--- +"react-native-node-api": major +"weak-node-api": minor +--- + +Adopt Hermes' first-party Node-API (the `hermesNapi` target on the `static_h` +branch) instead of patching Hermes with our own implementation. Addons now run +against a real Node-API environment created with `hermes_napi_create_env()`, one +per addon as in Node, and Node-API is bumped from v8 to v10. + +This drops support for React Native 0.79–0.81: the vendored Hermes is built from +a pinned `static_h` commit and requires the Hermes build scripts shipped with +React Native 0.87 and later. Older React Native versions are still served by +previously published releases. diff --git a/AGENTS.md b/AGENTS.md index 5cb3f1c4..ca13226d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -60,7 +60,7 @@ patch or workaround: ## Critical Build Dependencies -- **Custom Hermes**: Currently depends on a patched Hermes with Node-API support (see [facebook/hermes#1377](https://github.com/facebook/hermes/pull/1377)) +- **Vendored Hermes**: Builds Hermes from a pinned commit on the `static_h` branch, which carries Hermes' first-party Node-API implementation (`API/napi`, target `hermesNapi`). The pin lives in `packages/host/src/node/cli/hermes.ts` and is fetched by the `vendor-hermes` command. - **Prebuilt Binary Spec**: All tools must output to the exact naming scheme: - Android: `*.android.node/` with jniLibs structure + `react-native-node-api-module` marker file - iOS: `*.apple.node` (XCFramework renamed) + marker file diff --git a/README.md b/README.md index a88f3fef..308d5407 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,9 @@ ## How does this work? > [!IMPORTANT] -> This library is currently dependent on a custom version of Hermes and therefore has a very limited range of supported React Native versions. -> Once the [PR adding Node-API support to Hermes](https://github.com/facebook/hermes/pull/1377) merges, we expect this restriction to be lifted. +> This library builds Hermes from a pinned commit on its `static_h` branch, which carries [Hermes' first-party Node-API implementation](https://github.com/facebook/hermes/tree/static_h/API/napi). +> React Native has not shipped that Hermes yet, so the range of supported React Native versions is very limited — see the `react-native` peer dependency of the [host package](packages/host/package.json) for the version we currently build against. +> We expect this restriction to be lifted once React Native ships a Hermes with Node-API included. > [!NOTE] > This library only works for iOS and Android and we want to eventually support React Native for Windows, macOS, visionOS and other out-of-tree platforms too. @@ -35,10 +36,9 @@ This mono-repository hosts the development of a few packages: Responsible for adding Node-API support to your React Native application: -- Declares a Podspec which downloads a special version of Hermes, with Node-API support, - - instructing React Native's Hermes Podspecs to compile from this custom source-code. - - patching React Native's JSI copy, with the updates introduced by our special version of Hermes. - - we expect this to eventually be removed, as Node-API support gets merged into Hermes upstream. +- Declares a Podspec which vendors Hermes from a pinned commit on its `static_h` branch, where Node-API is implemented, + - instructing React Native's Hermes Podspecs to compile from this checkout. + - we expect this to eventually be removed, as React Native starts shipping a Hermes with Node-API included. - Automatically discovers and adds Node-API binaries, matching the [the prebuilt binary specification](./docs/PREBUILDS.md) - This is driven by the platform specific build tools (through the Podspec on iOS and eventually Gradle on Android) - Implements a TurboModule with a `requireNodeAddon` function responsible for diff --git a/apps/test-app/android/gradle.properties b/apps/test-app/android/gradle.properties index 08ca7f53..df4582c0 100644 --- a/apps/test-app/android/gradle.properties +++ b/apps/test-app/android/gradle.properties @@ -50,4 +50,22 @@ react.buildFromSource=true #ANDROID_NDK_VERSION=26.1.10909125 # Version of Kotlin to build against. -#KOTLIN_VERSION=1.8.22 \ No newline at end of file +#KOTLIN_VERSION=1.8.22 + +# Opt out of built-in Kotlin and the new DSL, both of which ship enabled in +# AGP 9. AGP 10 removes both opt outs, so they are on borrowed time — tracked in +# https://github.com/callstackincubator/react-native-node-api/issues/389, which +# links the upstream code that has to migrate first. +# +# Both are blocked on react-native-test-app, not on us. Its Gradle modules still +# use the old DSL (`compileSdkVersion`, `lintOptions`), and its app module adds +# version-specific Kotlin sources through `main.java.srcDirs +=`. The Kotlin +# plugin compiles those; AGP's built-in Kotlin only picks up the standard source +# directories, so building without this leaves every symbol defined in an added +# directory (`testApp`, `ComponentActivityDelegate`, …) unresolved. +# +# Note that react-native-node-api itself is built-in-Kotlin ready — it applies +# the Kotlin plugin only when built-in Kotlin is unavailable — so this is purely +# about the test harness. +android.builtInKotlin=false +android.newDsl=false diff --git a/apps/test-app/android/gradle/wrapper/gradle-wrapper.properties b/apps/test-app/android/gradle/wrapper/gradle-wrapper.properties index d4081da4..c61a118f 100644 --- a/apps/test-app/android/gradle/wrapper/gradle-wrapper.properties +++ b/apps/test-app/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/apps/test-app/package.json b/apps/test-app/package.json index 80d34691..b85c94f1 100644 --- a/apps/test-app/package.json +++ b/apps/test-app/package.json @@ -6,10 +6,11 @@ "scripts": { "metro": "react-native start --no-interactive", "android": "react-native run-android --no-packager --active-arch-only", + "android:crash-watchdog": "node scripts/android-crash-watchdog.mts", "ios": "react-native run-ios --no-packager", "pod-install": "cd ios && pod install", "mocha-and-metro": "mocha-remote --watch -- react-native start", - "test:android": "mocha-remote --exit-on-error -- concurrently --kill-others-on-fail --passthrough-arguments npm:metro 'npm:android -- {@}' --", + "test:android": "mocha-remote --exit-on-error -- concurrently --kill-others-on-fail --passthrough-arguments npm:metro 'npm:android -- {@}' npm:android:crash-watchdog --", "test:android:allTests": "MOCHA_REMOTE_CONTEXT=allTests node --run test:android -- ", "test:android:nodeAddonExamples": "MOCHA_REMOTE_CONTEXT=nodeAddonExamples node --run test:android -- ", "test:android:nodeTests": "MOCHA_REMOTE_CONTEXT=nodeTests node --run test:android -- ", @@ -30,20 +31,20 @@ "@react-native-node-api/ferric-example": "workspace:*", "@react-native-node-api/node-addon-examples": "workspace:*", "@react-native-node-api/node-tests": "workspace:*", - "@react-native/babel-preset": "0.81.4", - "@react-native/metro-config": "0.81.4", - "@react-native/typescript-config": "0.81.4", - "@rnx-kit/metro-config": "^2.1.1", + "@react-native/babel-preset": "0.88.0-nightly-20260809-db662caea", + "@react-native/metro-config": "0.88.0-nightly-20260809-db662caea", + "@react-native/typescript-config": "0.88.0-nightly-20260809-db662caea", + "@rnx-kit/metro-config": "^2.2.4", "@types/mocha": "^10.0.10", "@types/react": "^19.1.0", "concurrently": "^9.1.2", "mocha": "^11.6.0", "mocha-remote-cli": "^1.13.2", "mocha-remote-react-native": "^1.13.2", - "react": "19.1.0", - "react-native": "0.81.4", + "react": "19.2.3", + "react-native": "0.88.0-nightly-20260809-db662caea", "react-native-node-api": "workspace:*", - "react-native-test-app": "^4.4.7", + "react-native-test-app": "^5.4.8", "weak-node-api": "workspace:*" } } diff --git a/apps/test-app/scripts/android-crash-watchdog.mts b/apps/test-app/scripts/android-crash-watchdog.mts new file mode 100644 index 00000000..40f2423a --- /dev/null +++ b/apps/test-app/scripts/android-crash-watchdog.mts @@ -0,0 +1,101 @@ +/** + * Fails the Android test run as soon as the app crashes. + * + * `mocha-remote` waits indefinitely for a client to connect and has no notion + * of the app dying: when the app crashes on startup, nothing ever connects and + * the run hangs until the CI job hits its timeout — 68 minutes of an emulator + * idling for a crash that happened one second after `am start`. + * + * Run alongside the app (through `concurrently --kill-others-on-fail`), this + * turns such a crash into an immediate failure with the stack trace inlined in + * the log, instead of a timeout with the cause buried in a logcat artifact. + * + * It only reacts to crashes: a hung or never-launched app still relies on the + * job timeout. + */ +import cp from "node:child_process"; +import readline from "node:readline"; + +// The application id used by react-native-test-app, which the CI workflow also +// hardcodes when uninstalling any leftover copy of the app. +const APP_ID = "com.microsoft.reacttestapp"; + +// How long to keep reading after the first line mentioning the app, to capture +// the rest of the stack trace before exiting. +const TRACE_GRACE_MS = 1000; + +/** + * Runs adb, resolving false if it couldn't run at all (not installed, no + * device, etc). The watchdog stays out of the way in that case: the build or + * the run itself will fail with a better message than anything we could add. + */ +function adb(...args: string[]): Promise { + return new Promise((resolve) => { + const child = cp.spawn("adb", args, { stdio: "ignore" }); + child.on("error", () => resolve(false)); + child.on("close", (code) => resolve(code === 0)); + }); +} + +function skip(reason: string): never { + console.warn(`[crash-watchdog] Not watching for crashes: ${reason}`); + process.exit(0); +} + +async function main() { + if (!(await adb("wait-for-device"))) { + skip("failed to wait for an adb device"); + } + + // Drop any crash from an earlier run, so we only react to this one. The app + // hasn't been installed yet at this point, so this can't discard a crash we + // care about. + await adb("logcat", "-b", "crash", "-c"); + + // Never let this child inherit our stderr: GitHub's `@actions/exec` resolves + // a step only once the stdio streams it handed out are closed, so an adb + // orphaned by our exit would hold the step open long after we failed it. + const logcat = cp.spawn("adb", ["logcat", "-b", "crash"], { + stdio: ["ignore", "pipe", "ignore"], + }); + + // ... and don't leave it running at all: killing it on the way out covers + // both failing on a crash and getting terminated once the tests pass. + process.on("exit", () => logcat.kill("SIGKILL")); + for (const signal of ["SIGINT", "SIGTERM"] as const) { + process.on(signal, () => process.exit(0)); + } + + // The line naming the app is preceded by the header of the crash it belongs + // to ("FATAL EXCEPTION: main"), so keep a few lines of lead-in around. + const LEAD_IN_LINES = 5; + const trace: string[] = []; + let crashed = false; + + logcat.on("error", () => skip("failed to spawn adb logcat")); + logcat.on("close", () => { + // Getting killed once the tests pass is the expected way for this to end. + if (!crashed) { + skip("adb logcat exited"); + } + }); + + for await (const line of readline.createInterface({ input: logcat.stdout })) { + trace.push(line); + if (crashed) { + continue; + } else if (line.includes(APP_ID)) { + crashed = true; + // Give the rest of the stack trace a moment to arrive before printing it. + setTimeout(() => { + console.error(`\n[crash-watchdog] ${APP_ID} crashed:\n`); + console.error(trace.join("\n")); + process.exit(1); + }, TRACE_GRACE_MS); + } else if (trace.length > LEAD_IN_LINES) { + trace.shift(); + } + } +} + +await main(); diff --git a/apps/test-app/tsconfig.json b/apps/test-app/tsconfig.json index 42a8c0b4..712ac620 100644 --- a/apps/test-app/tsconfig.json +++ b/apps/test-app/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@react-native/typescript-config/tsconfig.json", + "extends": "@react-native/typescript-config", "compilerOptions": { "types": ["react-native", "mocha"] }, diff --git a/apps/test-app/tsconfig.node-scripts.json b/apps/test-app/tsconfig.node-scripts.json index 66e44e08..9ce8f1da 100644 --- a/apps/test-app/tsconfig.node-scripts.json +++ b/apps/test-app/tsconfig.node-scripts.json @@ -7,5 +7,5 @@ "rootDir": "scripts", "types": ["node"] }, - "include": ["scripts/**/*.ts"] + "include": ["scripts"] } diff --git a/docs/ANDROID.md b/docs/ANDROID.md index 31b5479b..4b285812 100644 --- a/docs/ANDROID.md +++ b/docs/ANDROID.md @@ -2,7 +2,7 @@ ## Building Hermes from source -Because we're using a version of Hermes patched with Node-API support, we need to build React Native from source. +Because we build Hermes from source (a pinned commit carrying its Node-API implementation), we need to build React Native from source too. Follow [the React Native documentation on how to build from source](https://reactnative.dev/contributing/how-to-build-from-source#update-your-project-to-build-from-source). @@ -23,7 +23,7 @@ In particular, you will have to edit the `android/settings.gradle` file as follo > + } > ``` -To download our custom version of Hermes, you need to run from your app package: +To fetch the pinned Hermes, you need to run from your app package: ``` npx react-native-node-api vendor-hermes @@ -39,7 +39,7 @@ export REACT_NATIVE_OVERRIDE_HERMES_DIR=$(npx react-native-node-api vendor-herme ## Cleaning your React Native build folders -If you've accidentally built your app without Hermes patched, you can clean things up by deleting the `ReactAndroid` build folder. +If you've accidentally built your app without the vendored Hermes, you can clean things up by deleting the `ReactAndroid` build folder. ``` rm -rf node_modules/react-native/ReactAndroid/build diff --git a/docs/HOW-IT-WORKS.md b/docs/HOW-IT-WORKS.md index cd4ae854..b78f4686 100644 --- a/docs/HOW-IT-WORKS.md +++ b/docs/HOW-IT-WORKS.md @@ -39,16 +39,22 @@ The native implementation of `requireNodeAddon` is responsible for loading the d In any case the native code stores the initialization function in a data-structure. -## `react-native-node-api` creates a `node_env` and initialize the Node-API module +## `react-native-node-api` creates a `napi_env` and initialize the Node-API module -The initialization function of a Node-API module expects a `node_env`, which we create by calling `createNodeApiEnv` on the `jsi::Runtime`. +The initialization function of a Node-API module expects a `napi_env`, which we create by calling `hermes_napi_create_env` with the low-level Hermes VM runtime behind the `jsi::Runtime`. As in Node.js, each addon gets its own environment. ## The library's C++ code initialize the `exports` object -An `exports` object is created for the Node-API module and both the `napi_env` and `exports` object is passed to the Node-API module's initialization function and the third party code is able to call the Node-API free functions: +An `exports` object is created for the Node-API module and both the `napi_env` and `exports` object is passed to the Node-API module's initialization function and the third party code is able to call the Node-API free functions. -- The engine-specific functions (see [js_native_api.h](https://github.com/nodejs/node/blob/main/src/js_native_api.h)) are implemented by the `jsi::Runtime` (currently only Hermes supports this). -- The runtime-specific functions (see [node_api.h](https://github.com/nodejs/node/blob/main/src/node_api.h)) are implemented by `react-native-node-api`. +Hermes implements both halves of Node-API: the engine-specific functions (see [js_native_api.h](https://github.com/nodejs/node/blob/main/src/js_native_api.h)) and the runtime-specific ones (see [node_api.h](https://github.com/nodejs/node/blob/main/src/node_api.h)). Node.js implements the latter on top of libuv, which React Native doesn't have — so Hermes leaves the host to supply the primitives they need, as a `hermes_napi_host` struct passed when the environment is created: + +- `post_work` / `cancel_work` — run a unit of work on a worker thread and report back on the JavaScript thread. This is what backs `napi_create_async_work` and friends. +- `post_task` — schedule a callback on the JavaScript thread, used by thread-safe functions to dispatch queued calls. +- `ref_loop` / `unref_loop` — keep the event loop alive while a thread-safe function is referenced, modelling libuv's "ref" semantics. +- `fatal_exception` and, for embedders that have one, a libuv loop pointer for `napi_get_uv_event_loop`. + +`react-native-node-api` provides that struct, backed by React Native's `CallInvoker` for anything that has to land on the JavaScript thread and a worker pool for the rest. ## `my-app` regain control and call `add` diff --git a/eslint.config.js b/eslint.config.js index df9e3915..bbe15a20 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -10,6 +10,7 @@ export default tseslint.config( globalIgnores([ "**/dist/**", "**/build/**", + "**/build-tests/**", "apps/test-app/ios/**", "apps/macos-test-app/**", "packages/host/hermes/**", diff --git a/package.json b/package.json index 9a4f3db3..777b02a7 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "globals": "^16.0.0", "prettier": "3.6.2", "publint": "^0.3.15", - "react-native": "0.81.4", + "react-native": "0.88.0-nightly-20260809-db662caea", "read-pkg": "^9.0.1", "tsx": "^4.20.6", "typescript": "^5.8.0", diff --git a/packages/host/android/CMakeLists.txt b/packages/host/android/CMakeLists.txt index e4c183f7..19ba1d03 100644 --- a/packages/host/android/CMakeLists.txt +++ b/packages/host/android/CMakeLists.txt @@ -28,7 +28,7 @@ target_link_libraries(node-api-host log ReactAndroid::reactnative ReactAndroid::jsi - hermes-engine::libhermes + hermes-engine::hermesvm weak-node-api # react_codegen_NodeApiHostSpec ) diff --git a/packages/host/android/build.gradle b/packages/host/android/build.gradle index 39204133..60947ffa 100644 --- a/packages/host/android/build.gradle +++ b/packages/host/android/build.gradle @@ -1,6 +1,8 @@ import java.nio.file.Paths import groovy.json.JsonSlurper +import javax.inject.Inject import org.gradle.internal.os.OperatingSystem +import org.gradle.process.ExecOperations if (!System.getenv("REACT_NATIVE_OVERRIDE_HERMES_DIR")) { throw new GradleException([ @@ -48,7 +50,21 @@ def reactNativeArchitectures() { } apply plugin: "com.android.library" -apply plugin: "kotlin-android" + +// AGP 9 ships built-in Kotlin support and enables it by default, which +// registers the `kotlin` extension itself. Applying the Kotlin plugin on top of +// that fails the consumer's build with "Cannot add extension with name +// 'kotlin'", so only apply it when built-in Kotlin isn't doing the job — either +// because the consumer is on AGP 8, or because they opted out of it while they +// migrate. See https://developer.android.com/build/migrate-to-built-in-kotlin +def useBuiltInKotlin() { + def major = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0].toInteger() + return major >= 9 && project.findProperty("android.builtInKotlin") != "false" +} + +if (!useBuiltInKotlin()) { + apply plugin: "kotlin-android" +} apply plugin: "com.facebook.react" @@ -161,17 +177,25 @@ dependencies { def commandLinePrefix = OperatingSystem.current().isWindows() ? ["cmd", "/c", "node"] : [] def cliPath = file("../bin/react-native-node-api.mjs") +// Gradle 9 removed Project.exec(), so the ExecOperations service has to be +// injected and used explicitly instead of the bare `exec {}` closure. +interface InjectedExecOps { + @Inject + ExecOperations getExecOps() +} +def injectedExecOps = project.objects.newInstance(InjectedExecOps) + // Custom task to fetch jniLibs paths via CLI task linkNodeApiModules { doLast { - exec { + injectedExecOps.execOps.exec { commandLine commandLinePrefix + [cliPath, 'link', '--android', rootProject.rootDir.absolutePath] standardOutput = System.out errorOutput = System.err // Enable color output environment "FORCE_COLOR", "1" } - + android.sourceSets.main.jniLibs.srcDirs += file("../auto-linked/android").listFiles() } } diff --git a/packages/host/cpp/CxxNodeApiHostModule.cpp b/packages/host/cpp/CxxNodeApiHostModule.cpp index 0b1961ec..05745892 100644 --- a/packages/host/cpp/CxxNodeApiHostModule.cpp +++ b/packages/host/cpp/CxxNodeApiHostModule.cpp @@ -2,8 +2,26 @@ #include "Logger.hpp" #include "RuntimeNodeApiAsync.hpp" +#include + using namespace facebook; +// Declared by the vendored Hermes in API/napi/hermes_napi.h. We forward declare +// it here (rather than including that header) to avoid pulling in Hermes' own +// node_api.h alongside the weak-node-api copy already included transitively. +// +// The declaration must be `extern "C"`: since facebook/hermes#2106 (included in +// the pinned Hermes commit) the public hermes_napi.h wraps these entry points +// in `extern "C"`, so Hermes exports the unmangled C symbol. Without matching C +// linkage here the reference would be to the C++-mangled name and the app fails +// to link ("Undefined symbol: hermes_napi_create_env"). Passing host as nullptr +// is enough — async work / thread-safe functions will return failure until a +// host integration is wired up (Phase 3). +extern "C" { +struct hermes_napi_host; +napi_env hermes_napi_create_env(void *hermes_runtime, hermes_napi_host *host); +} + namespace callstack::react_native_node_api { CxxNodeApiHostModule::CxxNodeApiHostModule( @@ -108,7 +126,25 @@ bool CxxNodeApiHostModule::initializeNodeModule(jsi::Runtime &rt, // TODO: Read the version from the addon // @see // https://github.com/callstackincubator/react-native-node-api/issues/4 - napi_env env = reinterpret_cast(rt.createNodeApiEnv(8)); + + // Create this addon's Node-API environment. Hermes binds an env to its + // low-level VM runtime, which we reach through the (unstable) IHermes JSI + // interface, and takes ownership: the env is torn down with the runtime, so + // there is nothing to free here. Each addon gets its own env, as in Node. + if (addon.env == nullptr) { + // Fully qualified: `using namespace facebook` makes a bare `hermes` + // ambiguous with the top-level `::hermes` (VM) namespace pulled in via + // . + auto *hermes = facebook::jsi::castInterface(&rt); + if (hermes == nullptr) { + log_debug("NapiHost: JSI runtime is not castable to IHermes; cannot " + "create a Node-API environment"); + abort(); + } + addon.env = hermes_napi_create_env(hermes->getVMRuntimeUnsafe(), nullptr); + assert(addon.env != nullptr); + } + napi_env env = addon.env; // Create the "exports" object napi_value exports; diff --git a/packages/host/cpp/CxxNodeApiHostModule.hpp b/packages/host/cpp/CxxNodeApiHostModule.hpp index 4c753cfe..7be3e598 100644 --- a/packages/host/cpp/CxxNodeApiHostModule.hpp +++ b/packages/host/cpp/CxxNodeApiHostModule.hpp @@ -26,6 +26,14 @@ class JSI_EXPORT CxxNodeApiHostModule : public facebook::react::TurboModule { void *moduleHandle; napi_addon_register_func init; std::string generatedName; + + // The Node-API environment for this addon, created when the addon is + // initialized. Node creates one env per addon (see + // napi_module_register_by_symbol in Node's src/node_api.cc) and the env + // carries addon-scoped state — instance data, last error info, the addon's + // Node-API version — so addons must not share one. Owned by the Hermes + // runtime, which tears it down when the runtime is destroyed. + napi_env env = nullptr; }; std::unordered_map nodeAddons_; std::shared_ptr callInvoker_; diff --git a/packages/host/cpp/RuntimeNodeApiAsync.cpp b/packages/host/cpp/RuntimeNodeApiAsync.cpp index bee380a7..647aa71b 100644 --- a/packages/host/cpp/RuntimeNodeApiAsync.cpp +++ b/packages/host/cpp/RuntimeNodeApiAsync.cpp @@ -85,10 +85,21 @@ static AsyncWorkRegistry asyncWorkRegistry; namespace callstack::react_native_node_api { +// Drop an env's entry when the env is torn down with its runtime (on a reload, +// for example). There is one env per addon, so without this the map keeps a +// stale entry per addon per runtime for the lifetime of the process. +static void NAPI_CDECL removeCallInvoker(void *env) { + callInvokers.erase(static_cast(env)); +} + void setCallInvoker( napi_env env, const std::shared_ptr &invoker) { + const bool isFirstForEnv = !callInvokers.contains(env); callInvokers[env] = invoker; + if (isFirstForEnv) { + ::napi_add_env_cleanup_hook(env, removeCallInvoker, env); + } } std::weak_ptr getCallInvoker(napi_env env) { diff --git a/packages/host/cpp/Versions.hpp b/packages/host/cpp/Versions.hpp index 2cc106ef..84a91dfe 100644 --- a/packages/host/cpp/Versions.hpp +++ b/packages/host/cpp/Versions.hpp @@ -1,3 +1,7 @@ #pragma once -#define NAPI_VERSION 8 +// Must be defined before any include so the header exposes the +// full v10 surface (js_native_api.h otherwise defaults this to 8). +#ifndef NAPI_VERSION +#define NAPI_VERSION 10 +#endif diff --git a/packages/host/package.json b/packages/host/package.json index 970dafbf..e748e41f 100644 --- a/packages/host/package.json +++ b/packages/host/package.json @@ -85,7 +85,7 @@ }, "peerDependencies": { "@babel/core": "^7.26.10", - "react-native": "0.79.1 || 0.79.2 || 0.79.3 || 0.79.4 || 0.79.5 || 0.79.6 || 0.79.7 || 0.80.0 || 0.80.1 || 0.80.2 || 0.81.0 || 0.81.1 || 0.81.2 || 0.81.3 || 0.81.4 || 0.81.5", + "react-native": "0.88.0-nightly-20260809-db662caea", "weak-node-api": "workspace:*" } } diff --git a/packages/host/scripts/generate-injector.mts b/packages/host/scripts/generate-injector.mts index bfd6a150..d5c6cfd3 100644 --- a/packages/host/scripts/generate-injector.mts +++ b/packages/host/scripts/generate-injector.mts @@ -6,35 +6,22 @@ import { type FunctionDecl, getNodeApiFunctions } from "weak-node-api"; export const CPP_SOURCE_PATH = path.join(import.meta.dirname, "../cpp"); -// TODO: Remove when all runtime Node API functions are implemented -const IMPLEMENTED_RUNTIME_FUNCTIONS = [ - "napi_create_buffer", - "napi_create_buffer_copy", - "napi_is_buffer", - "napi_get_buffer_info", - "napi_create_external_buffer", - "napi_create_async_work", - "napi_queue_async_work", - "napi_delete_async_work", - "napi_cancel_async_work", - "napi_fatal_error", - "napi_get_node_version", - "napi_get_version", -]; - /** * Generates source code which injects the Node API functions from the host. */ export function generateSource(functions: FunctionDecl[]) { return ` // This file is generated by react-native-node-api + // Versions.hpp must come first so exposes the full v10 surface. + #include + #include #include #include #include #include - + #if defined(__APPLE__) #define WEAK_NODE_API_LIBRARY_NAME "@rpath/weak-node-api.framework/weak-node-api" #elif defined(__ANDROID__) @@ -61,13 +48,7 @@ export function generateSource(functions: FunctionDecl[]) { log_debug("Injecting NodeApiHost"); inject_weak_node_api_host(NodeApiHost { - ${functions - .filter( - ({ kind, name }) => - kind === "engine" || IMPLEMENTED_RUNTIME_FUNCTIONS.includes(name), - ) - .flatMap(({ name }) => `.${name} = ${name},`) - .join("\n")} + ${functions.flatMap(({ name }) => `.${name} = ${name},`).join("\n")} }); } } // namespace callstack::react_native_node_api diff --git a/packages/host/scripts/patch-hermes.rb b/packages/host/scripts/patch-hermes.rb index 76252154..986f5d8f 100644 --- a/packages/host/scripts/patch-hermes.rb +++ b/packages/host/scripts/patch-hermes.rb @@ -1,33 +1,24 @@ -Pod::UI.warn "!!! PATCHING HERMES WITH NODE-API SUPPORT !!!" +Pod::UI.warn "!!! CONFIGURING HERMES WITH NODE-API SUPPORT !!!" -if ENV['RCT_USE_PREBUILT_RNCORE'] == '1' - raise "React Native Node-API cannot reliably patch JSI when React Native Core is prebuilt." -end - -def get_react_native_package - if caller.any? { |frame| frame.include?("node_modules/react-native-macos/") } - return "react-native-macos" - elsif caller.any? { |frame| frame.include?("node_modules/react-native/") } - return "react-native" - else - raise "Unable to determine React Native package from call stack." +if ENV['REACT_NATIVE_OVERRIDE_HERMES_DIR'].nil? + def get_react_native_package + if caller.any? { |frame| frame.include?("node_modules/react-native-macos/") } + return "react-native-macos" + elsif caller.any? { |frame| frame.include?("node_modules/react-native/") } + return "react-native" + else + raise "Unable to determine React Native package from call stack." + end end -end -if ENV['REACT_NATIVE_OVERRIDE_HERMES_DIR'].nil? VENDORED_HERMES_DIR ||= `npx react-native-node-api vendor-hermes --react-native-package '#{get_react_native_package()}' --silent '#{Pod::Config.instance.installation_root}'`.strip - # Signal the patched Hermes to React Native - ENV['BUILD_FROM_SOURCE'] = 'true' ENV['REACT_NATIVE_OVERRIDE_HERMES_DIR'] = VENDORED_HERMES_DIR -elsif Dir.exist?(ENV['REACT_NATIVE_OVERRIDE_HERMES_DIR']) - # Setting an override path implies building from source - ENV['BUILD_FROM_SOURCE'] = 'true' end -if !ENV['REACT_NATIVE_OVERRIDE_HERMES_DIR'].empty? +if ENV['REACT_NATIVE_OVERRIDE_HERMES_DIR'] && !ENV['REACT_NATIVE_OVERRIDE_HERMES_DIR'].empty? if Dir.exist?(ENV['REACT_NATIVE_OVERRIDE_HERMES_DIR']) Pod::UI.info "[Node-API] Using overridden Hermes in #{ENV['REACT_NATIVE_OVERRIDE_HERMES_DIR'].inspect}" else - raise "Hermes patching failed: Expected override to exist in #{ENV['REACT_NATIVE_OVERRIDE_HERMES_DIR'].inspect}" + raise "Hermes setup failed: Expected override to exist in #{ENV['REACT_NATIVE_OVERRIDE_HERMES_DIR'].inspect}" end end diff --git a/packages/host/scripts/patch-xcode-project.rb b/packages/host/scripts/patch-xcode-project.rb index 02eb5a67..ac46ad5f 100644 --- a/packages/host/scripts/patch-xcode-project.rb +++ b/packages/host/scripts/patch-xcode-project.rb @@ -5,9 +5,11 @@ NODE_BINARY = ENV["NODE_BINARY"] || `command -v node`.strip CLI_COMMAND = "'#{NODE_BINARY}' '#{File.join(__dir__, "../dist/node/cli/run.js")}'" PATCH_XCODE_PROJECT_COMMAND = "#{CLI_COMMAND} patch-xcode-project '#{Pod::Config.instance.installation_root}'" - + # Using an at_exit hook to ensure the command is executed after the pod install is complete at_exit do - system(PATCH_XCODE_PROJECT_COMMAND) or raise "Failed to patch the Xcode project" + unless system(PATCH_XCODE_PROJECT_COMMAND) + Pod::UI.warn "[Node-API] Failed to patch the Xcode project (non-fatal)" + end end end diff --git a/packages/host/src/node/cli/hermes.ts b/packages/host/src/node/cli/hermes.ts index 4b41692c..e9893d5c 100644 --- a/packages/host/src/node/cli/hermes.ts +++ b/packages/host/src/node/cli/hermes.ts @@ -15,40 +15,37 @@ import { import { packageDirectory } from "pkg-dir"; import { readPackage } from "read-pkg"; -// FIXME: make this configurable with reasonable fallback before public release -const HERMES_GIT_URL = "https://github.com/kraenhansen/hermes.git"; +const HERMES_GIT_URL = "https://github.com/facebook/hermes.git"; + +// Pinned commit on the `static_h` branch, which carries the first-party +// Node-API implementation under `API/napi`. Bump deliberately: the JSI +// accessor we rely on (`getVMRuntimeUnsafe`) is documented as unstable, so we +// vendor a known-good commit rather than tracking a moving branch. +// +// This commit includes facebook/hermes#2106 ("give hermes_napi.h public API C +// linkage"), which wraps the public `hermes_napi_*` entry points (e.g. +// `hermes_napi_create_env`) in `extern "C"`. Without it those declarations got +// C++ linkage: the mangled symbols stayed out of the framework's export table +// under Hermes' global `-fvisibility=hidden`, and consumers linking the +// framework hit "Undefined symbol: hermes_napi_create_env". We used to patch +// the header ourselves after cloning; now that the fix is upstream at this pin, +// no header patching is required. +// +// It also includes the immediately following commit, which flips Hermes' +// `JSI_UNSTABLE` CMake flag back to OFF by default. With it ON, Hermes compiles +// JSI's unstable `Serialized` / `ISerialization` APIs into `hermesvm`, but +// React Native never defines `JSI_UNSTABLE` when building the `libjsi.so` it +// ships in the ReactAndroid AAR. On Android the two are separate shared +// libraries, so `libhermesvm.so` ended up with undefined references to +// `facebook::jsi::Serialized` that nothing in the APK defined, and the app died +// on startup with "cannot locate symbol _ZTIN8facebook3jsi10SerializedE". +const HERMES_GIT_SHA = "5a795c9f880002c862c9254a26b57199819c97f7"; const platformOption = new Option( "--react-native-package ", "The React Native package to vendor Hermes into", ).default("react-native"); -type PatchJSIHeadersOptions = { - reactNativePath: string; - hermesJsiPath: string; - silent: boolean; -}; - -async function patchJsiHeaders({ - reactNativePath, - hermesJsiPath, - silent, -}: PatchJSIHeadersOptions) { - const reactNativeJsiPath = path.join(reactNativePath, "ReactCommon/jsi/jsi/"); - await oraPromise( - fs.promises.cp(hermesJsiPath, reactNativeJsiPath, { - recursive: true, - }), - { - text: `Copying JSI from patched Hermes to React Native`, - successText: "Copied JSI from patched Hermes to React Native", - failText: (err) => - `Failed to copy JSI from Hermes to React Native: ${err.message}`, - isEnabled: !silent, - }, - ); -} - export const command = new Command("vendor-hermes") .argument("[from]", "Path to a file inside the app package", process.cwd()) .option("--silent", "Don't print anything except the final path", false) @@ -75,19 +72,8 @@ export const command = new Command("vendor-hermes") paths: [appPackageRoot], }), ); - const hermesVersionPath = path.join( - reactNativePath, - "sdks", - ".hermesversion", - ); - assert( - fs.existsSync(hermesVersionPath), - `Expected a file with a Hermes version at ${prettyPath(hermesVersionPath)}`, - ); - - const hermesVersion = fs.readFileSync(hermesVersionPath, "utf8").trim(); if (!silent) { - console.log(`Using Hermes version: ${hermesVersion}`); + console.log(`Vendoring Hermes at ${HERMES_GIT_SHA}`); } const hermesPath = path.join(reactNativePath, "sdks", "node-api-hermes"); @@ -104,53 +90,49 @@ export const command = new Command("vendor-hermes") ); } if (!fs.existsSync(hermesPath)) { - const patchedTag = `node-api-${hermesVersion}`; try { + // GitHub allows fetching a reachable commit by SHA, so we can clone + // the pinned commit shallowly without downloading the whole history. await oraPromise( - spawn( - "git", - [ - "clone", + (async () => { + await fs.promises.mkdir(hermesPath, { recursive: true }); + const git = (args: string[]) => + spawn("git", args, { + cwd: hermesPath, + outputMode: "buffered", + }); + await git(["init", "--quiet"]); + await git(["remote", "add", "origin", HERMES_GIT_URL]); + await git(["fetch", "--depth", "1", "origin", HERMES_GIT_SHA]); + await git(["checkout", "--quiet", "FETCH_HEAD"]); + await git([ + "submodule", + "update", + "--init", "--recursive", "--depth", "1", - "--branch", - patchedTag, - HERMES_GIT_URL, - hermesPath, - ], - { - outputMode: "buffered", - }, - ), + ]); + })(), { - text: `Cloning custom Hermes into ${prettyPath(hermesPath)}`, - successText: "Cloned custom Hermes", - failText: (err) => - `Failed to clone custom Hermes: ${err.message}`, + text: `Cloning Hermes into ${prettyPath(hermesPath)}`, + successText: "Cloned Hermes", + failText: (err) => `Failed to clone Hermes: ${err.message}`, isEnabled: !silent, }, ); } catch (error) { - throw new UsageError("Failed to clone custom Hermes", { + // A failed clone can leave a partial checkout behind, which would + // make the existence check above skip re-cloning on the next run. + await fs.promises.rm(hermesPath, { recursive: true, force: true }); + throw new UsageError("Failed to clone Hermes", { cause: error, fix: { - instructions: `Check the network connection and ensure this ${chalk.bold("react-native")} version is supported by ${chalk.bold("react-native-node-api")}.`, + instructions: `Check the network connection and that the pinned Hermes commit ${chalk.bold(HERMES_GIT_SHA)} is still reachable on ${chalk.bold(HERMES_GIT_URL)}.`, }, }); } } - const hermesJsiPath = path.join(hermesPath, "API/jsi/jsi"); - - assert( - fs.existsSync(hermesJsiPath), - `Hermes JSI path does not exist: ${hermesJsiPath}`, - ); - await patchJsiHeaders({ - reactNativePath, - hermesJsiPath, - silent, - }); console.log(hermesPath); }), ); diff --git a/packages/host/src/node/cli/xcode-helpers.ts b/packages/host/src/node/cli/xcode-helpers.ts index 0f17afaa..b9368358 100644 --- a/packages/host/src/node/cli/xcode-helpers.ts +++ b/packages/host/src/node/cli/xcode-helpers.ts @@ -68,18 +68,9 @@ export async function findXcodeWorkspace(fromPath: string) { throw new Error(`No Xcode workspace found in '${fromPath}'`); } -export async function findXcodeProject(fromPath: string) { - // Read the workspace contents to find the first project - const workspacePath = await findXcodeWorkspace(fromPath); - const workspace = await readXcodeWorkspace(workspacePath); - // Resolve the first project location to an absolute path - assert( - workspace.fileRefs.length > 0, - "Expected at least one project in the workspace", - ); - const [firstProject] = workspace.fileRefs; +function resolveWorkspaceFileRef(location: string, workspacePath: string) { // Extract the path from the scheme (using a regex) - const match = firstProject.location.match(/^([^:]*):(.*)$/); + const match = location.match(/^([^:]*):(.*)$/); assert(match, "Expected a project path in the workspace"); const [, scheme, projectPath] = match; assert(scheme, "Expected a scheme in the fileRef location"); @@ -93,6 +84,30 @@ export async function findXcodeProject(fromPath: string) { } } +export async function findXcodeProject(fromPath: string) { + const workspacePath = await findXcodeWorkspace(fromPath); + const workspace = await readXcodeWorkspace(workspacePath); + assert( + workspace.fileRefs.length > 0, + "Expected at least one project in the workspace", + ); + // The workspace references the Pods project alongside the app project, and in + // a monorepo it can accumulate stale references to app projects generated + // under a different node_modules. Pick the first referenced app project that + // actually exists on disk (ignoring the Pods project). + const appProjectPaths = workspace.fileRefs + .map(({ location }) => resolveWorkspaceFileRef(location, workspacePath)) + .filter((projectPath) => path.basename(projectPath) !== "Pods.xcodeproj"); + const existingProjectPath = appProjectPaths.find((projectPath) => + fs.existsSync(path.join(projectPath, "project.pbxproj")), + ); + assert( + existingProjectPath, + `Expected one of the workspace's projects to exist: ${appProjectPaths.join(", ")}`, + ); + return existingProjectPath; +} + export type ExpectedFrameworkSlice = { platform: string; platformVariant?: string; diff --git a/packages/host/src/node/podspec.test.ts b/packages/host/src/node/podspec.test.ts deleted file mode 100644 index 4da4d640..00000000 --- a/packages/host/src/node/podspec.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -import assert from "node:assert/strict"; -import { describe, it } from "node:test"; -import cp from "node:child_process"; - -describe("Podspec", () => { - // We cannot support prebuilds of React Native Core since we're patching JSI - it( - "should error when RCT_USE_PREBUILT_RNCORE is set", - // We cannot call `pod` on non-macOS systems - { skip: process.platform !== "darwin" }, - () => { - const { status, stdout } = cp.spawnSync("pod", ["spec", "lint"], { - env: { ...process.env, RCT_USE_PREBUILT_RNCORE: "1" }, - encoding: "utf-8", - }); - - assert.notEqual(status, 0); - assert.match( - stdout, - /React Native Node-API cannot reliably patch JSI when React Native Core is prebuilt/, - ); - }, - ); -}); diff --git a/packages/host/tsconfig.react-native.json b/packages/host/tsconfig.react-native.json index c84162e8..0c0afe93 100644 --- a/packages/host/tsconfig.react-native.json +++ b/packages/host/tsconfig.react-native.json @@ -6,6 +6,8 @@ "noEmit": false, "outDir": "dist", "rootDir": "src", + "module": "nodenext", + "moduleResolution": "nodenext", "types": ["react-native"] }, "include": ["src/react-native"] diff --git a/packages/node-addon-examples/tsconfig.tests.json b/packages/node-addon-examples/tsconfig.tests.json index 629f51e3..dff90191 100644 --- a/packages/node-addon-examples/tsconfig.tests.json +++ b/packages/node-addon-examples/tsconfig.tests.json @@ -3,9 +3,10 @@ "compilerOptions": { "composite": true, "noEmit": false, - "module": "commonjs", "outDir": "dist", "rootDir": "src", + "module": "nodenext", + "moduleResolution": "nodenext", "types": ["react-native"] }, "include": ["src/*.ts"] diff --git a/packages/weak-node-api/CMakeLists.txt b/packages/weak-node-api/CMakeLists.txt index 29080360..d23d1551 100644 --- a/packages/weak-node-api/CMakeLists.txt +++ b/packages/weak-node-api/CMakeLists.txt @@ -56,7 +56,7 @@ endif() # C++20 is needed to use designated initializers target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_20) -target_compile_definitions(${PROJECT_NAME} PRIVATE NAPI_VERSION=8) +target_compile_definitions(${PROJECT_NAME} PRIVATE NAPI_VERSION=10) target_compile_options(${PROJECT_NAME} PRIVATE $<$:/W4 /WX> diff --git a/packages/weak-node-api/src/node-api-functions.ts b/packages/weak-node-api/src/node-api-functions.ts index f92bd956..0cf73fa5 100644 --- a/packages/weak-node-api/src/node-api-functions.ts +++ b/packages/weak-node-api/src/node-api-functions.ts @@ -78,24 +78,25 @@ export function getNodeApiHeaderAST(version: NodeApiVersion) { export type FunctionDecl = { name: string; - kind: "engine" | "runtime"; returnType: string; noReturn: boolean; argumentTypes: string[]; - libraryPath: string; fallbackReturnStatement: string; }; -export function getNodeApiFunctions(version: NodeApiVersion = "v8") { +export function getNodeApiFunctions(version: NodeApiVersion = "v10") { const root = getNodeApiHeaderAST(version); assert.equal(root.kind, "TranslationUnitDecl"); assert(Array.isArray(root.inner)); const foundSymbols = new Set(); + // Both interfaces are now sourced from the same host (hermesNapi provides + // every symbol), so there is no engine/runtime distinction to preserve. const symbolsPerInterface = nodeApiHeaders.symbols[version]; - const engineSymbols = new Set(symbolsPerInterface.js_native_api_symbols); - const runtimeSymbols = new Set(symbolsPerInterface.node_api_symbols); - const allSymbols = new Set([...engineSymbols, ...runtimeSymbols]); + const allSymbols = new Set([ + ...symbolsPerInterface.js_native_api_symbols, + ...symbolsPerInterface.node_api_symbols, + ]); const nodeApiFunctions: FunctionDecl[] = []; @@ -131,14 +132,9 @@ export function getNodeApiFunctions(version: NodeApiVersion = "v8") { name, returnType, noReturn: node.type.qualType.includes("__attribute__((noreturn))"), - kind: engineSymbols.has(name) ? "engine" : "runtime", argumentTypes: argumentTypes .split(",") .map((arg) => arg.trim().replace("_Bool", "bool")), - // Defer to the right library - libraryPath: engineSymbols.has(name) - ? "libhermes.so" - : "libnode-api-host.so", fallbackReturnStatement: returnType === "void" ? "abort();" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2be265d9..ba0121ea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,8 +48,8 @@ importers: specifier: ^0.3.15 version: 0.3.21 react-native: - specifier: 0.81.4 - version: 0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0) + specifier: 0.88.0-nightly-20260809-db662caea + version: 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3) read-pkg: specifier: ^9.0.1 version: 9.0.1 @@ -93,17 +93,17 @@ importers: specifier: workspace:* version: link:../../packages/node-tests '@react-native/babel-preset': - specifier: 0.81.4 - version: 0.81.4(@babel/core@7.29.7) + specifier: 0.88.0-nightly-20260809-db662caea + version: 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7) '@react-native/metro-config': - specifier: 0.81.4 - version: 0.81.4(@babel/core@7.29.7) + specifier: 0.88.0-nightly-20260809-db662caea + version: 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7) '@react-native/typescript-config': - specifier: 0.81.4 - version: 0.81.4 + specifier: 0.88.0-nightly-20260809-db662caea + version: 0.88.0-nightly-20260809-db662caea '@rnx-kit/metro-config': - specifier: ^2.1.1 - version: 2.2.4(@react-native-community/cli-types@20.2.0)(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(metro@0.83.7)(react-native@0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0))(react@19.1.0) + specifier: ^2.2.4 + version: 2.2.4(@react-native-community/cli-types@20.2.0)(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(metro@0.87.0)(react-native@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) '@types/mocha': specifier: ^10.0.10 version: 10.0.10 @@ -121,19 +121,19 @@ importers: version: 1.13.2 mocha-remote-react-native: specifier: ^1.13.2 - version: 1.13.2(react-native@0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0))(react@19.1.0) + version: 1.13.2(react-native@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) react: - specifier: 19.1.0 - version: 19.1.0 + specifier: 19.2.3 + version: 19.2.3 react-native: - specifier: 0.81.4 - version: 0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0) + specifier: 0.88.0-nightly-20260809-db662caea + version: 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3) react-native-node-api: specifier: workspace:* version: link:../../packages/host react-native-test-app: - specifier: ^4.4.7 - version: 4.4.12(@react-native-community/cli-types@20.2.0)(metro@0.83.7)(react-native@0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0))(react@19.1.0) + specifier: ^5.4.8 + version: 5.4.8(@react-native-community/cli-types@20.2.0)(metro@0.87.0)(react-native@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) weak-node-api: specifier: workspace:* version: link:../../packages/weak-node-api @@ -247,8 +247,8 @@ importers: specifier: ^8.0.0 version: 8.0.0 react-native: - specifier: 0.79.1 || 0.79.2 || 0.79.3 || 0.79.4 || 0.79.5 || 0.79.6 || 0.79.7 || 0.80.0 || 0.80.1 || 0.80.2 || 0.81.0 || 0.81.1 || 0.81.2 || 0.81.3 || 0.81.4 || 0.81.5 - version: 0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0) + specifier: 0.88.0-nightly-20260809-db662caea + version: 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3) read-pkg: specifier: ^9.0.1 version: 9.0.1 @@ -504,27 +504,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-dynamic-import@7.8.3': resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: @@ -554,64 +533,22 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.29.7': resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-optional-chaining@7.8.3': resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.29.7': resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==} engines: {node: '>=6.9.0'} @@ -1435,38 +1372,18 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/cliui@9.0.0': + resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} + engines: {node: '>=18'} + '@isaacs/ttlcache@1.4.1': resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} engines: {node: '>=12'} - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - - '@istanbuljs/schema@0.1.6': - resolution: {integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==} - engines: {node: '>=8'} - - '@jest/create-cache-key-function@29.7.0': - resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/types@29.6.3': resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2077,77 +1994,81 @@ packages: engines: {node: '>=20.19.4'} hasBin: true - '@react-native/assets-registry@0.81.4': - resolution: {integrity: sha512-AMcDadefBIjD10BRqkWw+W/VdvXEomR6aEZ0fhQRAv7igrBzb4PTn4vHKYg+sUK0e3wa74kcMy2DLc/HtnGcMA==} - engines: {node: '>= 20.19.4'} + '@react-native/asset-utils@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-oN9CBHkciHKhI699hA+A4zkfTV+iJJ0Cb4pmGbqUTBN2E3mExCGT2+/GHT7rzcVUAqWix5vpsASfFi5o6SP2Nw==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - '@react-native/babel-plugin-codegen@0.81.4': - resolution: {integrity: sha512-6ztXf2Tl2iWznyI/Da/N2Eqymt0Mnn69GCLnEFxFbNdk0HxHPZBNWU9shTXhsLWOL7HATSqwg/bB1+3kY1q+mA==} - engines: {node: '>= 20.19.4'} + '@react-native/babel-plugin-codegen@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-vXAc0lQdkNqY2FBF4H35lKq3e2y2KfNPX4WD3IACWc0ZnRujzEUMYQ0EXHLQVm+DyEzvWHmrYfreiZMeL1CKng==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - '@react-native/babel-preset@0.81.4': - resolution: {integrity: sha512-VYj0c/cTjQJn/RJ5G6P0L9wuYSbU9yGbPYDHCKstlQZQWkk+L9V8ZDbxdJBTIei9Xl3KPQ1odQ4QaeW+4v+AZg==} - engines: {node: '>= 20.19.4'} + '@react-native/babel-preset@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-FdDxdpeQtxDB8OL2b8DAJVQln0QAxmtkHN13En6s6VzBVYuUaxQ/kd9ZUzVR+HRVII7BMfcgzE6tWl6Oph+oZg==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} peerDependencies: '@babel/core': '*' - '@react-native/codegen@0.81.4': - resolution: {integrity: sha512-LWTGUTzFu+qOQnvkzBP52B90Ym3stZT8IFCzzUrppz8Iwglg83FCtDZAR4yLHI29VY/x/+pkcWAMCl3739XHdw==} - engines: {node: '>= 20.19.4'} + '@react-native/codegen@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-pBJM4v0Lg3gQfuFnJYeyGX3lrbq+fsIAo44ZuaOBMPNwkelZZVWy5/koPgFNHOycGKZSmvfhJ0NbFTISg9tCrA==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} peerDependencies: '@babel/core': '*' - '@react-native/community-cli-plugin@0.81.4': - resolution: {integrity: sha512-8mpnvfcLcnVh+t1ok6V9eozWo8Ut+TZhz8ylJ6gF9d6q9EGDQX6s8jenan5Yv/pzN4vQEKI4ib2pTf/FELw+SA==} - engines: {node: '>= 20.19.4'} + '@react-native/community-cli-plugin@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-GbcAYQatq/dRScOnj85aoUGtD3+iuuSrAmaAXwhQ4d29qAPy5kFRusSkRrTskrbuBGTqUEt8daT6Mq6ZzOsjHw==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} peerDependencies: '@react-native-community/cli': '*' - '@react-native/metro-config': '*' + '@react-native/metro-config': 0.88.0-nightly-20260809-db662caea peerDependenciesMeta: '@react-native-community/cli': optional: true '@react-native/metro-config': optional: true - '@react-native/debugger-frontend@0.81.4': - resolution: {integrity: sha512-SU05w1wD0nKdQFcuNC9D6De0ITnINCi8MEnx9RsTD2e4wN83ukoC7FpXaPCYyP6+VjFt5tUKDPgP1O7iaNXCqg==} - engines: {node: '>= 20.19.4'} + '@react-native/debugger-frontend@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-uh092SG1u6rT5hGZeUa315SZR/1pwSYit14FAn4vRqHMjbRPFpJoZboBvp2k6zfib3glqJGmeQtS769WvgZWFw==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} + + '@react-native/debugger-shell@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-g7Gw7bfvUMW4BUhFb8tmTGBf3414EdlC4sAbzOcUOE5SIyqQCmU0iLcAWSSKIuP9NjFWLKKVDP9DLuTGTpBl7Q==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - '@react-native/dev-middleware@0.81.4': - resolution: {integrity: sha512-hu1Wu5R28FT7nHXs2wWXvQ++7W7zq5GPY83llajgPlYKznyPLAY/7bArc5rAzNB7b0kwnlaoPQKlvD/VP9LZug==} - engines: {node: '>= 20.19.4'} + '@react-native/dev-middleware@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-i+srhjb4whNoMGRXemmo73+KeBpPJVVGGor+93s89OdjCqGW3ApVQpj2TOerULOtOdFDUV4CcmFnr0Yaj7Q/vQ==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - '@react-native/gradle-plugin@0.81.4': - resolution: {integrity: sha512-T7fPcQvDDCSusZFVSg6H1oVDKb/NnVYLnsqkcHsAF2C2KGXyo3J7slH/tJAwNfj/7EOA2OgcWxfC1frgn9TQvw==} - engines: {node: '>= 20.19.4'} + '@react-native/gradle-plugin@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-+cHvVKWNVydVjwWxS1jff5YBSbIyziusABbq1E6OOdJ04JPQPto2ubQG8CI9AlW6S2hiS8iAD/qYv6KY1+2TOA==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - '@react-native/js-polyfills@0.81.4': - resolution: {integrity: sha512-sr42FaypKXJHMVHhgSbu2f/ZJfrLzgaoQ+HdpRvKEiEh2mhFf6XzZwecyLBvWqf2pMPZa+CpPfNPiejXjKEy8w==} - engines: {node: '>= 20.19.4'} + '@react-native/js-polyfills@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-0rZKQhKppL5khczDF4oXE8HGOXmzOkvAWl+EkjtPf9Qy4Gb/XJx3a5yrbNYREBpjYAxjQrylrnU9Pb9ioIBEJg==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - '@react-native/metro-babel-transformer@0.81.4': - resolution: {integrity: sha512-AahgamQ9kZV4B1x8I/LpTZBgbT+j9i1pQoM3KDkECPIOF1JUwNFUukEjpkq4kRSdzudLocnfASFg+eWzIgPcCA==} - engines: {node: '>= 20.19.4'} + '@react-native/metro-babel-transformer@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-TJkVCb8+ZEOJiipGQTjTI2tEnDCYxCvStH7Pd45xenlxzN2M89zZH4VRUQXtQUXN+5xJEvqzHJhIR5IECuwSXA==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} peerDependencies: '@babel/core': '*' - '@react-native/metro-config@0.81.4': - resolution: {integrity: sha512-aEXhRMsz6yN5X63Zk+cdKByQ0j3dsKv+ETRP9lLARdZ82fBOCMuK6IfmZMwK3A/3bI7gSvt2MFPn3QHy3WnByw==} - engines: {node: '>= 20.19.4'} + '@react-native/metro-config@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-n4U+3az3nYMUASoSU5CV4F5zQt+eiHQZiR6v5qbD5qsVlMrcGzHZo7/NkVUsozwQbWYXneYeoA+60mSuPwclpw==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - '@react-native/normalize-colors@0.81.4': - resolution: {integrity: sha512-9nRRHO1H+tcFqjb9gAM105Urtgcanbta2tuqCVY0NATHeFPDEAB7gPyiLxCHKMi1NbhP6TH0kxgSWXKZl1cyRg==} + '@react-native/normalize-colors@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-oe3/cG9LKEIEogEw/i7d+hD9/ZVWUo4wCrCOCsIxL3ibTqNJiUdZqEmE+xbY9azmzBPurjbq/2rtQfHl4lp8Mw==} - '@react-native/typescript-config@0.81.4': - resolution: {integrity: sha512-1HSrwtfAmtbKHNK2HAMCL5ArbGhxxJjOmTViDQ4nEhLJCAllZjQJyR/Hs1GmwHJokLmgXCcg3VH/13spwQBdxw==} + '@react-native/typescript-config@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-fEWkmJR2vzZRt6X4+Z1qGm4mXQ90RYBBe/KOSRoMfbYIZPmeL/vhnmuA6jQB/9dpXzA8oJyIE4xLs73I/spJIw==} - '@react-native/virtualized-lists@0.81.4': - resolution: {integrity: sha512-hBM+rMyL6Wm1Q4f/WpqGsaCojKSNUBqAXLABNGoWm1vabZ7cSnARMxBvA/2vo3hLcoR4v7zDK8tkKm9+O0LjVA==} - engines: {node: '>= 20.19.4'} + '@react-native/virtualized-lists@0.88.0-nightly-20260809-db662caea': + resolution: {integrity: sha512-aVkgJUe00hgSAVqXTCZ8KlobzCdqnzxDx3yXrsdxuclB8P1FJcRRkpqOBhnUfqRYQwuXJtamvJijBilSvZ5LYA==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} peerDependencies: - '@types/react': ^19.1.0 + '@types/react': ^19.2.0 react: '*' - react-native: '*' + react-native: 0.88.0-nightly-20260809-db662caea peerDependenciesMeta: '@types/react': optional: true @@ -2320,12 +2241,6 @@ packages: '@sinclair/typebox@0.27.12': resolution: {integrity: sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==} - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@tsconfig/node22@22.0.5': resolution: {integrity: sha512-hLf2ld+sYN/BtOJjHUWOk568dvjFQkHnLNa6zce25GIH+vxKfvTgm3qpaH6ToF5tu/NN0IH66s+Bb5wElHrLcw==} @@ -2350,9 +2265,6 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -2386,9 +2298,6 @@ packages: '@types/react@19.2.17': resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -2481,10 +2390,6 @@ packages: resolution: {integrity: sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==} engines: {node: '>=10.0.0'} - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -2559,10 +2464,6 @@ packages: resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==} engines: {node: '>=14'} - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - anynum@1.0.1: resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} @@ -2618,20 +2519,6 @@ packages: axios@1.18.1: resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==} - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - babel-plugin-polyfill-corejs2@0.4.17: resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} peerDependencies: @@ -2652,23 +2539,12 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-syntax-hermes-parser@0.29.1: - resolution: {integrity: sha512-2WFYnoWGdmih1I1J5eIqxATOeycOqRwYxAQBu3cUu/rhwInwHUg7k60AFNbuGjSDL8tje5GDrAnxzRLcu2pYcA==} + babel-plugin-syntax-hermes-parser@0.37.0: + resolution: {integrity: sha512-7I9T16lJTjHG6JhHOmM/iqO/UGGQwAcAAD4/tsk+GSjPf9bbusBsPlz1scyGehImMfH1Yopbj0aQYxhTAHdcdg==} babel-plugin-transform-flow-enums@0.0.2: resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} - babel-preset-current-node-syntax@1.2.0: - resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} - peerDependencies: - '@babel/core': ^7.0.0 || ^8.0.0-0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -2785,14 +2661,6 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - chrome-launcher@0.15.2: - resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} - engines: {node: '>=12.13.0'} - hasBin: true - - chromium-edge-launcher@0.2.0: - resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==} - ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} @@ -2984,6 +2852,10 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -3184,10 +3056,6 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -3225,10 +3093,6 @@ packages: fast-xml-builder@1.3.0: resolution: {integrity: sha512-F74cZEdCvuw9P41GAC3rod4X04jjWGM1JPEv/GWSqFTWLsdyMSBMBMlm9Hk3GLBgLBbdBNY8yee0pQh2RBVESQ==} - fast-xml-parser@4.5.7: - resolution: {integrity: sha512-a6Qh1RMCNbSrU1+sAyAAZH3rTe+OaWJbNZIq0S+ifZciUUOQtlVxBJwoTUE2bYhysmG/RYyI5WJFIKdBahJdrQ==} - hasBin: true - fast-xml-parser@5.10.1: resolution: {integrity: sha512-IEMIf7298kXuZSRFoGfMYrl7is8LpavODgbNz1cwIudv7KwVFnuU+UsMporfq6PD6aXSlawZlARiA3UywCTfMw==} hasBin: true @@ -3236,6 +3100,11 @@ packages: fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + fb-dotslash@0.5.8: + resolution: {integrity: sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==} + engines: {node: '>=20'} + hasBin: true + fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -3294,6 +3163,14 @@ packages: flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} + flow-estree@0.325.0: + resolution: {integrity: sha512-HnYTpF6Al3YZpiPwket4x33V7iXSUgyqmtOz9FvgGBRKfBzZre/A3sRpXN1Jsq1VeRson1ToHJn+EosHemaPpQ==} + engines: {node: '>=18'} + + flow-parser@0.325.0: + resolution: {integrity: sha512-3uJxDHNXuiNM5twT+tk0iIn8zdSkF67cmE/6SoWFbmxcX7BnI82qYeJSEhrfNnDx7TwhAVPnLqV7MCt+biVwZw==} + engines: {node: '>=0.4.0'} + follow-redirects@1.16.0: resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} engines: {node: '>=4.0'} @@ -3335,9 +3212,6 @@ packages: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3375,10 +3249,6 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -3400,10 +3270,6 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - global-modules@1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} @@ -3460,17 +3326,20 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - hermes-estree@0.29.1: - resolution: {integrity: sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==} + hermes-compiler@260318099.0.1: + resolution: {integrity: sha512-jDXx48/z7ULUr2+sf+A3+3RQRiwcvH4Y+mhlxMdUhNQGOsnQY8eeDgy+8yhKrDHbLvRfW2JwEnDFfmyf96F5SQ==} + + hermes-estree@0.36.1: + resolution: {integrity: sha512-guv1nQ6IJ7S83NRFPWc3SA7IBZrdNC9kapwOq6uXvF4wP+sDCgjzQbKPCoyYmoyZRzztF/n/c36l/rccCZSiCw==} - hermes-estree@0.35.0: - resolution: {integrity: sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==} + hermes-estree@0.37.0: + resolution: {integrity: sha512-Frp4+A518C4zZgB2+Qo1srlM3y6nbrFbNNzBF3g7tEuQXHXTb2h39V25JQLNHotxclkD+AZTN/JCCpiTFlhIGg==} - hermes-parser@0.29.1: - resolution: {integrity: sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==} + hermes-parser@0.36.1: + resolution: {integrity: sha512-GApNk4zLHi2UWoWZZkx7LNCOSzLSc5lB55pZ/PhK7ycFeg7u5LcF88p/WbpIi1XUDtE0MpHE3uRR3u3KB7TjSQ==} - hermes-parser@0.35.0: - resolution: {integrity: sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==} + hermes-parser@0.37.0: + resolution: {integrity: sha512-8PuWcyaF6VHQHL2dbU+QEIkbtHYQrTX/6+ep4VcBLJ3f/ehevowr5Zj8LQfYXQQGFG2O+df7hIMtt4PkkhfK3Q==} homedir-polyfill@1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} @@ -3532,10 +3401,6 @@ packages: resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} engines: {node: '>=18'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -3655,41 +3520,13 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-get-type@29.6.3: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3771,9 +3608,6 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lighthouse-logger@1.4.2: - resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} - lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -3835,9 +3669,6 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - marky@1.3.0: - resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -3859,62 +3690,62 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - metro-babel-transformer@0.83.7: - resolution: {integrity: sha512-sBqBkt6kNut/88bv+Ucvm4yqdPetbvAEsHzi3MAgJEifOSYYzX5Z5Kgw3TFOrwf/mHJTOBG2ONlaMHoyfP15TA==} - engines: {node: '>=20.19.4'} + metro-babel-transformer@0.87.0: + resolution: {integrity: sha512-IEn1K1FyY4J1sA5y6zqDjf2OkfmpTEqhZOeP6MJX8HepSW0cuHGw1m8bYOdv2adkG3XUE9dtM0csUs0gP/Xa5w==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - metro-cache-key@0.83.7: - resolution: {integrity: sha512-W1c2Nmx8MiJTJt+eWhMO08z9VKi3kZOaz99IYGdqeqDgY9j+yZjXl62rUav4Di0heZfh4/n2s722PqRL1OODeg==} - engines: {node: '>=20.19.4'} + metro-cache-key@0.87.0: + resolution: {integrity: sha512-Q+MPt6jl0zQogr4Q02WaJK6HY+GtE5A0nzj8kIV1Owgrx6OMNvm6scPTr1SM/R4LpCE8EH/Y5qfbXQ84GHTr0Q==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - metro-cache@0.83.7: - resolution: {integrity: sha512-E9SRePXQ1Zvlj79VcOk57q7VC7rMHMFQ+jhmPHBiq+dJ0bJB5BL87lWZF6oh5X76Cci5tpDuQNaDwwuSCToEeg==} - engines: {node: '>=20.19.4'} + metro-cache@0.87.0: + resolution: {integrity: sha512-146vS1BMSKcp99jddOhFBfHwzUEWN35NrsnSJDF2sQQ0ZT5OsBcOjd574PM233TWEZISRJ5DOK+vokD+1ubx+w==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - metro-config@0.83.7: - resolution: {integrity: sha512-83mjWFbFOt2GeJ6pFIum5mSnc1uTsZJAtD8o4ej0s4NVsYsA7fB+pHvTfHhFrpeMONaobu2riKavkPei05Er/Q==} - engines: {node: '>=20.19.4'} + metro-config@0.87.0: + resolution: {integrity: sha512-yZ9QAIzWH9MxwrzwRlX/CBGRWOT14l7klSDYg8hdtSdnoUs5A7MQRdHE2KB9iHVzGQW5wgWM5aXJswNeWbSQPA==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - metro-core@0.83.7: - resolution: {integrity: sha512-6yn3w1wnltT6RQl7p7YES2l95ArC+mWrOssEiH8p5/DDrJS65/szf9LsC9JrBv8c5DdvSY3V3f0GRYg0Ox7hCg==} - engines: {node: '>=20.19.4'} + metro-core@0.87.0: + resolution: {integrity: sha512-yW57+pCOHRC/CJZ99GA2PTd+30dORwDAjUPRCokj91IWW5In9Jwtt2FB5wACrGO8P0GHTyVHdTwDNyZsNndUbA==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - metro-file-map@0.83.7: - resolution: {integrity: sha512-+j0F1m+FQYVAQ6syf+mwhIPV5GoFQrkInX8bppuc50IzNsZbMrp8R5H/Sx/K2daQ3YEa9F/XwkeZT8gzJfgeCw==} - engines: {node: '>=20.19.4'} + metro-file-map@0.87.0: + resolution: {integrity: sha512-Dc57t8jsINwA90bbVlqaeDlxf1rVGgj5SmOEnOMbaHNUM/HCYYTJxPV8SRdOBwh7qTz/biO9vaQvBTjRBgbbsg==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - metro-minify-terser@0.83.7: - resolution: {integrity: sha512-MfJar2IS4tBRuLb9svwb0Gu5l9BsH+pcRm8eGcEi/wy8MzZinfinh5dFLt2nWkocnulIgtGB5NkFDdbXqMXKhQ==} - engines: {node: '>=20.19.4'} + metro-minify-terser@0.87.0: + resolution: {integrity: sha512-tPa0O983PDutFu3LXbArRH5NduogcKrvW6fs9VHhksTKUA1iqDyoD1ZSj/Me52xJ6T9/9pOwIVyj9ulKc/zMkg==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - metro-resolver@0.83.7: - resolution: {integrity: sha512-WSJIENlMcoSsuz66IfBHOkgfp3KJt2UW2TnEHPf1b8pIG2eEXNOVmo2+03A0H17WY2XGXWgxL0CG7FAopqgB1A==} - engines: {node: '>=20.19.4'} + metro-resolver@0.87.0: + resolution: {integrity: sha512-Xl3M9R3KToaHJvXlI2lSOxtYHitzxite+195DSi00HL9PcS7Xik5+3xlRjfkKb3FA86SZxYPj+WJwlcfgaZoxg==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - metro-runtime@0.83.7: - resolution: {integrity: sha512-9GKkJURaB2iyYoEExKnedzAHzxmKtSi+k0tsZUvMoU27tBZJElchYt7JH/Ai/XzYAI9lCAaV7u5HZSI8J5Z+wQ==} - engines: {node: '>=20.19.4'} + metro-runtime@0.87.0: + resolution: {integrity: sha512-XsXZkgEwI0ZMYSBfvOMAbenzwa60XlObXJ27g6/Khgrz9ESbiBbAsd7hR62G2jRBYOhGAzG61Gk22dpRJj/mdw==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - metro-source-map@0.83.7: - resolution: {integrity: sha512-JgA1h7oc1a1jydBe1GhVFsUoMYo3wLPk7oRA32rjlDsq+sP2JLt9x2p2lWbNSxTm/u8NV4VRid3hvEJgcX8tKw==} - engines: {node: '>=20.19.4'} + metro-source-map@0.87.0: + resolution: {integrity: sha512-31BrYqu1c2co93rF1LN9Pw+7g+BrfDyxJkNQWrYm+pfA/+eVYVumF7tFMHbXLePLmHfhvSgVvbK6su1Oyiw1ng==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - metro-symbolicate@0.83.7: - resolution: {integrity: sha512-g4suyxw20WOHWI680c+Kq4wC/NF+Hx5pRH9afrMp+sMTxqLeKcPR1Xf4wMhsjlbvx7LbIREdke6q928jEjvJWw==} - engines: {node: '>=20.19.4'} + metro-symbolicate@0.87.0: + resolution: {integrity: sha512-uOpTxAXu74N+RSujUZ78L6gjI6bDdnz6XuW+AIUNuubZDEQPIpaX0StzIb0GMeQWP6zfHOHwFrWPP5Iquu1GXw==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} hasBin: true - metro-transform-plugins@0.83.7: - resolution: {integrity: sha512-Ss0FpBiZDjX2kwhukMDl5sNdYK8T/06IPqxNE4H6PTlRlfs9q11cef13c/xESY/Pm4VCkp1yJUZO3kXzvMxQFA==} - engines: {node: '>=20.19.4'} + metro-transform-plugins@0.87.0: + resolution: {integrity: sha512-i8keUe9+BaSwMuQM26DGheElCpTtflAKIrSwJAm8ZsgDb50RAUQus+e6zt2suaJXJ1OxZa7vqgtqoZxdniM6Fw==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - metro-transform-worker@0.83.7: - resolution: {integrity: sha512-UegCo7ygB2fT64mRK2nbAjQVJ1zSwIIHy8d96jJv2nKZFDaViYBiughEdu5HM/Ceq0WN3LZrZk3zhl9aoiLYFw==} - engines: {node: '>=20.19.4'} + metro-transform-worker@0.87.0: + resolution: {integrity: sha512-YftLzNJxCTYxEN5k4AzR8KYwiENTEuz30L+4QeoMrtDd+U8mDThZg/ArR3JVRd8LaikwPOjVAS5SP3xPJN0AaA==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - metro@0.83.7: - resolution: {integrity: sha512-SPaPEyvTsTmd0LpT7RaZciQyDw2i/JB7+iY9L5VfBo72+psescFxBqpI1TL9dnL+pmnfkU+l/J1mEEGLeF65EQ==} - engines: {node: '>=20.19.4'} + metro@0.87.0: + resolution: {integrity: sha512-fRqFhSzQhLNQSCvJFeuRzBRXAOOKXf1O8d2cvmMtG6yFR0jCllQ7vBsXoLP18yuqtf+N1XwWXTPF11eWy9q6dQ==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} hasBin: true micromatch@4.0.8: @@ -4087,10 +3918,6 @@ packages: resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -4103,9 +3930,9 @@ packages: nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - ob1@0.83.7: - resolution: {integrity: sha512-9M5kpuOLyTPogMtZiQUIxdAZxl7Dxs6tVBbJErSumsqGMuhVSoUbkfeZ3XNPpLpwBBtqY5QDUzGwggLHX3slQg==} - engines: {node: '>=20.19.4'} + ob1@0.87.0: + resolution: {integrity: sha512-8Q8sKCiUwsxgSmjDtVWyRgmxsgeJXXam3oQH6Id8ADfNaJMV6GZKyeAl8+pGVVdgwAZabfk5+aExle7AP/nZiA==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} @@ -4135,9 +3962,6 @@ packages: resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -4150,9 +3974,9 @@ packages: resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} engines: {node: '>=8'} - open@7.4.2: - resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} - engines: {node: '>=8'} + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} @@ -4254,10 +4078,6 @@ packages: resolution: {integrity: sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ==} engines: {node: '>=14.0.0'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -4288,10 +4108,6 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - pkg-dir@8.0.0: resolution: {integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==} engines: {node: '>=18'} @@ -4379,17 +4195,17 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-native-test-app@4.4.12: - resolution: {integrity: sha512-bCUpjF5A5NaCO0d7eYuqS4enRs+T5ZxOTkA80JfxNODSNynNPGXK85JAtfrNpPoAT79tai0oczFx5yrBOqePmw==} - engines: {node: '>=16.17'} + react-native-test-app@5.4.8: + resolution: {integrity: sha512-J8gdIUmHDZX5k2Cnx8odARmZrvGCgnOY2kpKtlWJfmSnWyJN4nAqCe2/PUk/7NAlrlkvSWGI4x+03k3cx2mxww==} + engines: {node: '>=20.19.4'} hasBin: true peerDependencies: - '@callstack/react-native-visionos': 0.73 - 0.79 + '@callstack/react-native-visionos': 0.76 - 0.79 '@expo/config-plugins': '>=5.0' - react: 18.1 - 19.1 - react-native: 0.70 - 0.82 || >=0.83.0-0 <0.83.0 - react-native-macos: ^0.0.0-0 || 0.71 - 0.79 - react-native-windows: ^0.0.0-0 || 0.70 - 0.79 + react: 18.2 - 19.2 + react-native: 0.76 - 0.87 || >=0.88.0-0 <0.88.0 + react-native-macos: ^0.0.0-0 || 0.76 - 0.81 + react-native-windows: ^0.0.0-0 || 0.76 - 0.83 peerDependenciesMeta: '@callstack/react-native-visionos': optional: true @@ -4400,13 +4216,13 @@ packages: react-native-windows: optional: true - react-native@0.81.4: - resolution: {integrity: sha512-bt5bz3A/+Cv46KcjV0VQa+fo7MKxs17RCcpzjftINlen4ZDUl0I6Ut+brQ2FToa5oD0IB0xvQHfmsg2EDqsZdQ==} - engines: {node: '>= 20.19.4'} + react-native@0.88.0-nightly-20260809-db662caea: + resolution: {integrity: sha512-3norxpYjYN9UeUI9ajhW880BejAKIasC7d01RkxFCWRrOnIVJeeSFKekwy81EJFTkM8FUCmJud5ys5hviXM/ZQ==} + engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} hasBin: true peerDependencies: - '@types/react': ^19.1.0 - react: ^19.1.0 + '@types/react': ^19.1.1 + react: ^19.2.3 peerDependenciesMeta: '@types/react': optional: true @@ -4415,8 +4231,8 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.2.3: + resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} engines: {node: '>=0.10.0'} read-pkg@9.0.1: @@ -4507,11 +4323,6 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rolldown@1.0.0-beta.29: resolution: {integrity: sha512-EsoOi8moHN6CAYyTZipxDDVTJn0j2nBCWor4wRU45RQ8ER2qREDykXLr3Ulz6hBh6oBKCFTQIjo21i0FXNo/IA==} hasBin: true @@ -4536,8 +4347,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} @@ -4729,9 +4540,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strnum@1.1.2: - resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} - strnum@2.4.1: resolution: {integrity: sha512-M9eUSMT2dCB2cTNPG7UYj6KuK7RJR2SN2+yCV/fTW3xzTCS6EaGZ5pSMgDIjB7r8zSfTGk+dvvn9rTjpVS9Mwg==} @@ -4761,10 +4569,6 @@ packages: engines: {node: '>=10'} hasBin: true - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} @@ -4816,10 +4620,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - type-fest@0.7.1: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} @@ -4908,10 +4708,6 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - uuid@11.1.1: - resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} - hasBin: true - uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). @@ -4974,13 +4770,6 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - ws@6.2.6: resolution: {integrity: sha512-XTrf1gv7kXoVf1hbC3PAyAiPgR8Wz1blcrYIjEsUmr08BLksT41R8KbjmS9408C2ERx7v1JDLD/BkpLEttjfKA==} peerDependencies: @@ -5325,26 +5114,6 @@ snapshots: dependencies: '@babel/core': 7.29.7 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -5370,61 +5139,21 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -6396,62 +6125,14 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@isaacs/ttlcache@1.4.1': {} - - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.15.0 - resolve-from: 5.0.0 - - '@istanbuljs/schema@0.1.6': {} - - '@jest/create-cache-key-function@29.7.0': - dependencies: - '@jest/types': 29.6.3 - - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.20.1 - jest-mock: 29.7.0 + '@isaacs/cliui@9.0.0': {} - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.20.1 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 + '@isaacs/ttlcache@1.4.1': {} '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.12 - '@jest/transform@29.7.0': - dependencies: - '@babel/core': 7.29.7 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.31 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 - pirates: 4.0.7 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 @@ -7033,17 +6714,17 @@ snapshots: - typescript - utf-8-validate - '@react-native/assets-registry@0.81.4': {} + '@react-native/asset-utils@0.88.0-nightly-20260809-db662caea': {} - '@react-native/babel-plugin-codegen@0.81.4(@babel/core@7.29.7)': + '@react-native/babel-plugin-codegen@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)': dependencies: '@babel/traverse': 7.29.7 - '@react-native/codegen': 0.81.4(@babel/core@7.29.7) + '@react-native/codegen': 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7) transitivePeerDependencies: - '@babel/core' - supports-color - '@react-native/babel-preset@0.81.4(@babel/core@7.29.7)': + '@react-native/babel-preset@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/plugin-proposal-export-default-from': 7.29.7(@babel/core@7.29.7) @@ -7051,27 +6732,19 @@ snapshots: '@babel/plugin-syntax-export-default-from': 7.29.7(@babel/core@7.29.7) '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-computed-properties': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-flow-strip-types': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-function-name': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-literals': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-numeric-separator': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-react-display-name': 7.29.7(@babel/core@7.29.7) @@ -7080,101 +6753,105 @@ snapshots: '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-spread': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-sticky-regex': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) - '@babel/template': 7.29.7 - '@react-native/babel-plugin-codegen': 0.81.4(@babel/core@7.29.7) - babel-plugin-syntax-hermes-parser: 0.29.1 + '@react-native/babel-plugin-codegen': 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7) + babel-plugin-syntax-hermes-parser: 0.37.0 babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7) + flow-parser: 0.325.0 react-refresh: 0.14.2 transitivePeerDependencies: - supports-color - '@react-native/codegen@0.81.4(@babel/core@7.29.7)': + '@react-native/codegen@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/parser': 7.29.7 - glob: 7.2.3 - hermes-parser: 0.29.1 + flow-parser: 0.325.0 + hermes-parser: 0.37.0 invariant: 2.2.4 nullthrows: 1.1.1 + tinyglobby: 0.2.17 yargs: 17.7.3 - '@react-native/community-cli-plugin@0.81.4(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))': + '@react-native/community-cli-plugin@0.88.0-nightly-20260809-db662caea(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))': dependencies: - '@react-native/dev-middleware': 0.81.4 + '@react-native/asset-utils': 0.88.0-nightly-20260809-db662caea + '@react-native/dev-middleware': 0.88.0-nightly-20260809-db662caea + commander: 12.1.0 debug: 4.4.3(supports-color@8.1.1) invariant: 2.2.4 - metro: 0.83.7 - metro-config: 0.83.7 - metro-core: 0.83.7 + metro: 0.87.0 semver: 7.8.5 optionalDependencies: '@react-native-community/cli': 20.2.0(typescript@5.9.3) - '@react-native/metro-config': 0.81.4(@babel/core@7.29.7) + '@react-native/metro-config': 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@react-native/debugger-frontend@0.81.4': {} + '@react-native/debugger-frontend@0.88.0-nightly-20260809-db662caea': {} - '@react-native/dev-middleware@0.81.4': + '@react-native/debugger-shell@0.88.0-nightly-20260809-db662caea': + dependencies: + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@8.1.1) + fb-dotslash: 0.5.8 + transitivePeerDependencies: + - supports-color + + '@react-native/dev-middleware@0.88.0-nightly-20260809-db662caea': dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.81.4 - chrome-launcher: 0.15.2 - chromium-edge-launcher: 0.2.0 + '@react-native/debugger-frontend': 0.88.0-nightly-20260809-db662caea + '@react-native/debugger-shell': 0.88.0-nightly-20260809-db662caea connect: 3.7.0 debug: 4.4.3(supports-color@8.1.1) invariant: 2.2.4 nullthrows: 1.1.1 - open: 7.4.2 + open: 8.4.2 serve-static: 1.16.3 - ws: 6.2.6 + ws: 7.5.13 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@react-native/gradle-plugin@0.81.4': {} + '@react-native/gradle-plugin@0.88.0-nightly-20260809-db662caea': {} - '@react-native/js-polyfills@0.81.4': {} + '@react-native/js-polyfills@0.88.0-nightly-20260809-db662caea': {} - '@react-native/metro-babel-transformer@0.81.4(@babel/core@7.29.7)': + '@react-native/metro-babel-transformer@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@react-native/babel-preset': 0.81.4(@babel/core@7.29.7) - hermes-parser: 0.29.1 + '@react-native/babel-preset': 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7) + flow-parser: 0.325.0 + hermes-parser: 0.37.0 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color - '@react-native/metro-config@0.81.4(@babel/core@7.29.7)': + '@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)': dependencies: - '@react-native/js-polyfills': 0.81.4 - '@react-native/metro-babel-transformer': 0.81.4(@babel/core@7.29.7) - metro-config: 0.83.7 - metro-runtime: 0.83.7 + '@react-native/js-polyfills': 0.88.0-nightly-20260809-db662caea + '@react-native/metro-babel-transformer': 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7) + metro-config: 0.87.0 + metro-runtime: 0.87.0 transitivePeerDependencies: - '@babel/core' - - bufferutil - supports-color - - utf-8-validate - '@react-native/normalize-colors@0.81.4': {} + '@react-native/normalize-colors@0.88.0-nightly-20260809-db662caea': {} - '@react-native/typescript-config@0.81.4': {} + '@react-native/typescript-config@0.88.0-nightly-20260809-db662caea': {} - '@react-native/virtualized-lists@0.81.4(@types/react@19.2.17)(react-native@0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0))(react@19.1.0)': + '@react-native/virtualized-lists@0.88.0-nightly-20260809-db662caea(@types/react@19.2.17)(react-native@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 - react: 19.1.0 - react-native: 0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3) optionalDependencies: '@types/react': 19.2.17 @@ -7183,37 +6860,37 @@ snapshots: '@actions/core': 2.0.3 stack-utils: 2.0.6 - '@rnx-kit/metro-config@2.2.4(@react-native-community/cli-types@20.2.0)(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(metro@0.83.7)(react-native@0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0))(react@19.1.0)': + '@rnx-kit/metro-config@2.2.4(@react-native-community/cli-types@20.2.0)(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(metro@0.87.0)(react-native@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)': dependencies: - '@rnx-kit/tools-node': 3.0.5(metro@0.83.7) - '@rnx-kit/tools-react-native': 2.3.8(@react-native-community/cli-types@20.2.0)(metro@0.83.7) + '@rnx-kit/tools-node': 3.0.5(metro@0.87.0) + '@rnx-kit/tools-react-native': 2.3.8(@react-native-community/cli-types@20.2.0)(metro@0.87.0) '@rnx-kit/tools-workspaces': 0.2.3 - react: 19.1.0 - react-native: 0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3) optionalDependencies: - '@react-native/metro-config': 0.81.4(@babel/core@7.29.7) + '@react-native/metro-config': 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7) transitivePeerDependencies: - '@react-native-community/cli-types' - memfs - metro - '@rnx-kit/react-native-host@0.5.21(react-native@0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0))': + '@rnx-kit/react-native-host@0.5.21(react-native@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))': dependencies: - react-native: 0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0) + react-native: 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3) '@rnx-kit/tools-filesystem@0.2.0': {} - '@rnx-kit/tools-node@3.0.5(metro@0.83.7)': + '@rnx-kit/tools-node@3.0.5(metro@0.87.0)': dependencies: - '@rnx-kit/types-node': 1.0.0(metro@0.83.7) + '@rnx-kit/types-node': 1.0.0(metro@0.87.0) transitivePeerDependencies: - metro - '@rnx-kit/tools-react-native@2.3.8(@react-native-community/cli-types@20.2.0)(metro@0.83.7)': + '@rnx-kit/tools-react-native@2.3.8(@react-native-community/cli-types@20.2.0)(metro@0.87.0)': dependencies: '@rnx-kit/tools-filesystem': 0.2.0 - '@rnx-kit/tools-node': 3.0.5(metro@0.83.7) - '@rnx-kit/types-bundle-config': 1.0.0(metro@0.83.7) + '@rnx-kit/tools-node': 3.0.5(metro@0.87.0) + '@rnx-kit/types-bundle-config': 1.0.0(metro@0.87.0) optionalDependencies: '@react-native-community/cli-types': 20.2.0 transitivePeerDependencies: @@ -7228,26 +6905,26 @@ snapshots: read-yaml-file: 2.1.0 strip-json-comments: 3.1.1 - '@rnx-kit/types-bundle-config@1.0.0(metro@0.83.7)': + '@rnx-kit/types-bundle-config@1.0.0(metro@0.87.0)': dependencies: '@rnx-kit/types-metro-serializer-esbuild': 1.0.2 '@rnx-kit/types-plugin-cyclic-dependencies': 1.0.0 '@rnx-kit/types-plugin-duplicates-checker': 1.0.0 '@rnx-kit/types-plugin-typescript': 1.0.0 optionalDependencies: - metro: 0.83.7 + metro: 0.87.0 - '@rnx-kit/types-kit-config@1.0.0(metro@0.83.7)': + '@rnx-kit/types-kit-config@1.0.0(metro@0.87.0)': dependencies: - '@rnx-kit/types-bundle-config': 1.0.0(metro@0.83.7) + '@rnx-kit/types-bundle-config': 1.0.0(metro@0.87.0) transitivePeerDependencies: - metro '@rnx-kit/types-metro-serializer-esbuild@1.0.2': {} - '@rnx-kit/types-node@1.0.0(metro@0.83.7)': + '@rnx-kit/types-node@1.0.0(metro@0.87.0)': dependencies: - '@rnx-kit/types-kit-config': 1.0.0(metro@0.83.7) + '@rnx-kit/types-kit-config': 1.0.0(metro@0.87.0) transitivePeerDependencies: - metro @@ -7316,14 +6993,6 @@ snapshots: '@sinclair/typebox@0.27.12': {} - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - '@tsconfig/node22@22.0.5': {} '@tsconfig/react-native@3.0.6': {} @@ -7356,10 +7025,6 @@ snapshots: '@types/estree@1.0.9': {} - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 22.20.1 - '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-report@3.0.3': @@ -7390,8 +7055,6 @@ snapshots: dependencies: csstype: 3.2.3 - '@types/stack-utils@2.0.3': {} - '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.35': @@ -7527,10 +7190,6 @@ snapshots: '@xmldom/xmldom@0.8.13': {} - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - accepts@1.3.8: dependencies: mime-types: 2.1.35 @@ -7599,11 +7258,6 @@ snapshots: ansis@4.3.1: {} - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.2 - anynum@1.0.1: {} appdirsjs@1.2.7: {} @@ -7657,36 +7311,6 @@ snapshots: - debug - supports-color - babel-jest@29.7.0(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.29.7) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.29.7 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.6 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.29.7 - '@babel/types': 7.29.7 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.28.0 - babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.7): dependencies: '@babel/compat-data': 7.29.7 @@ -7719,9 +7343,9 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-syntax-hermes-parser@0.29.1: + babel-plugin-syntax-hermes-parser@0.37.0: dependencies: - hermes-parser: 0.29.1 + hermes-parser: 0.37.0 babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.29.7): dependencies: @@ -7729,31 +7353,6 @@ snapshots: transitivePeerDependencies: - '@babel/core' - babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.7) - '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.7) - - babel-preset-jest@29.6.3(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) - balanced-match@1.0.2: {} balanced-match@4.0.4: {} @@ -7872,26 +7471,6 @@ snapshots: chownr@2.0.0: {} - chrome-launcher@0.15.2: - dependencies: - '@types/node': 22.20.1 - escape-string-regexp: 4.0.0 - is-wsl: 2.2.0 - lighthouse-logger: 1.4.2 - transitivePeerDependencies: - - supports-color - - chromium-edge-launcher@0.2.0: - dependencies: - '@types/node': 22.20.1 - escape-string-regexp: 4.0.0 - is-wsl: 2.2.0 - lighthouse-logger: 1.4.2 - mkdirp: 1.0.4 - rimraf: 3.0.2 - transitivePeerDependencies: - - supports-color - ci-info@2.0.0: {} ci-info@3.9.0: {} @@ -8084,6 +7663,8 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + define-lazy-prop@2.0.0: {} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 @@ -8314,8 +7895,6 @@ snapshots: etag@1.8.1: {} - event-target-shim@5.0.1: {} - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -8359,10 +7938,6 @@ snapshots: path-expression-matcher: 1.6.2 xml-naming: 0.3.0 - fast-xml-parser@4.5.7: - dependencies: - strnum: 1.1.2 - fast-xml-parser@5.10.1: dependencies: '@nodable/entities': 3.0.0 @@ -8376,6 +7951,8 @@ snapshots: dependencies: reusify: 1.1.0 + fb-dotslash@0.5.8: {} + fb-watchman@2.0.2: dependencies: bser: 2.1.1 @@ -8440,6 +8017,12 @@ snapshots: flow-enums-runtime@0.0.6: {} + flow-estree@0.325.0: {} + + flow-parser@0.325.0: + dependencies: + flow-estree: 0.325.0 + follow-redirects@1.16.0(debug@4.4.3): optionalDependencies: debug: 4.4.3(supports-color@8.1.1) @@ -8485,8 +8068,6 @@ snapshots: dependencies: minipass: 3.3.6 - fs.realpath@1.0.0: {} - fsevents@2.3.3: optional: true @@ -8526,8 +8107,6 @@ snapshots: hasown: 2.0.4 math-intrinsics: 1.1.0 - get-package-type@0.1.0: {} - get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -8552,15 +8131,6 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.5 - once: 1.4.0 - path-is-absolute: 1.0.1 - global-modules@1.0.0: dependencies: global-prefix: 1.0.2 @@ -8614,17 +8184,19 @@ snapshots: he@1.2.0: {} - hermes-estree@0.29.1: {} + hermes-compiler@260318099.0.1: {} + + hermes-estree@0.36.1: {} - hermes-estree@0.35.0: {} + hermes-estree@0.37.0: {} - hermes-parser@0.29.1: + hermes-parser@0.36.1: dependencies: - hermes-estree: 0.29.1 + hermes-estree: 0.36.1 - hermes-parser@0.35.0: + hermes-parser@0.37.0: dependencies: - hermes-estree: 0.35.0 + hermes-estree: 0.37.0 homedir-polyfill@1.0.3: dependencies: @@ -8683,11 +8255,6 @@ snapshots: index-to-position@1.2.0: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - inherits@2.0.4: {} ini@1.3.8: {} @@ -8779,71 +8346,14 @@ snapshots: isexe@2.0.0: {} - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-instrument@5.2.1: - dependencies: - '@babel/core': 7.29.7 - '@babel/parser': 7.29.7 - '@istanbuljs/schema': 0.1.6 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jest-environment-node@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.20.1 - jest-mock: 29.7.0 - jest-util: 29.7.0 - jest-get-type@29.6.3: {} - jest-haste-map@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 22.20.1 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.29.7 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.20.1 - jest-util: 29.7.0 - - jest-regex-util@29.6.3: {} - jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 @@ -8934,13 +8444,6 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lighthouse-logger@1.4.2: - dependencies: - debug: 2.6.9 - marky: 1.3.0 - transitivePeerDependencies: - - supports-color - lines-and-columns@1.2.4: {} locate-path@5.0.0: @@ -9001,8 +8504,6 @@ snapshots: dependencies: tmpl: 1.0.5 - marky@1.3.0: {} - math-intrinsics@1.1.0: {} media-typer@1.1.0: {} @@ -9017,51 +8518,50 @@ snapshots: merge2@1.4.1: {} - metro-babel-transformer@0.83.7: + metro-babel-transformer@0.87.0: dependencies: '@babel/core': 7.29.7 flow-enums-runtime: 0.0.6 - hermes-parser: 0.35.0 - metro-cache-key: 0.83.7 + hermes-parser: 0.36.1 + metro-cache-key: 0.87.0 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color - metro-cache-key@0.83.7: + metro-cache-key@0.87.0: dependencies: flow-enums-runtime: 0.0.6 - metro-cache@0.83.7: + metro-cache@0.87.0: dependencies: exponential-backoff: 3.1.3 flow-enums-runtime: 0.0.6 https-proxy-agent: 7.0.6 - metro-core: 0.83.7 + metro-core: 0.87.0 transitivePeerDependencies: - supports-color - metro-config@0.83.7: + metro-config@0.87.0: dependencies: connect: 3.7.0 flow-enums-runtime: 0.0.6 jest-validate: 29.7.0 - metro: 0.83.7 - metro-cache: 0.83.7 - metro-core: 0.83.7 - metro-runtime: 0.83.7 - yaml: 2.9.0 + metro: 0.87.0 + metro-cache: 0.87.0 + metro-core: 0.87.0 + metro-runtime: 0.87.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - metro-core@0.83.7: + metro-core@0.87.0: dependencies: flow-enums-runtime: 0.0.6 lodash.throttle: 4.1.1 - metro-resolver: 0.83.7 + metro-resolver: 0.87.0 - metro-file-map@0.83.7: + metro-file-map@0.87.0: dependencies: debug: 4.4.3(supports-color@8.1.1) fb-watchman: 2.0.2 @@ -9075,46 +8575,46 @@ snapshots: transitivePeerDependencies: - supports-color - metro-minify-terser@0.83.7: + metro-minify-terser@0.87.0: dependencies: flow-enums-runtime: 0.0.6 terser: 5.49.0 - metro-resolver@0.83.7: + metro-resolver@0.87.0: dependencies: flow-enums-runtime: 0.0.6 - metro-runtime@0.83.7: + metro-runtime@0.87.0: dependencies: '@babel/runtime': 7.29.7 flow-enums-runtime: 0.0.6 - metro-source-map@0.83.7: + metro-source-map@0.87.0: dependencies: '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 flow-enums-runtime: 0.0.6 invariant: 2.2.4 - metro-symbolicate: 0.83.7 + metro-symbolicate: 0.87.0 nullthrows: 1.1.1 - ob1: 0.83.7 + ob1: 0.87.0 source-map: 0.5.7 vlq: 1.0.1 transitivePeerDependencies: - supports-color - metro-symbolicate@0.83.7: + metro-symbolicate@0.87.0: dependencies: flow-enums-runtime: 0.0.6 invariant: 2.2.4 - metro-source-map: 0.83.7 + metro-source-map: 0.87.0 nullthrows: 1.1.1 source-map: 0.5.7 vlq: 1.0.1 transitivePeerDependencies: - supports-color - metro-transform-plugins@0.83.7: + metro-transform-plugins@0.87.0: dependencies: '@babel/core': 7.29.7 '@babel/generator': 7.29.7 @@ -9125,27 +8625,27 @@ snapshots: transitivePeerDependencies: - supports-color - metro-transform-worker@0.83.7: + metro-transform-worker@0.87.0: dependencies: '@babel/core': 7.29.7 '@babel/generator': 7.29.7 '@babel/parser': 7.29.7 '@babel/types': 7.29.7 flow-enums-runtime: 0.0.6 - metro: 0.83.7 - metro-babel-transformer: 0.83.7 - metro-cache: 0.83.7 - metro-cache-key: 0.83.7 - metro-minify-terser: 0.83.7 - metro-source-map: 0.83.7 - metro-transform-plugins: 0.83.7 + metro: 0.87.0 + metro-babel-transformer: 0.87.0 + metro-cache: 0.87.0 + metro-cache-key: 0.87.0 + metro-minify-terser: 0.87.0 + metro-source-map: 0.87.0 + metro-transform-plugins: 0.87.0 nullthrows: 1.1.1 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - metro@0.83.7: + metro@0.87.0: dependencies: '@babel/code-frame': 7.29.7 '@babel/core': 7.29.7 @@ -9161,24 +8661,24 @@ snapshots: error-stack-parser: 2.1.4 flow-enums-runtime: 0.0.6 graceful-fs: 4.2.11 - hermes-parser: 0.35.0 + hermes-parser: 0.36.1 image-size: 1.2.1 invariant: 2.2.4 jest-worker: 29.7.0 jsc-safe-url: 0.2.4 lodash.throttle: 4.1.1 - metro-babel-transformer: 0.83.7 - metro-cache: 0.83.7 - metro-cache-key: 0.83.7 - metro-config: 0.83.7 - metro-core: 0.83.7 - metro-file-map: 0.83.7 - metro-resolver: 0.83.7 - metro-runtime: 0.83.7 - metro-source-map: 0.83.7 - metro-symbolicate: 0.83.7 - metro-transform-plugins: 0.83.7 - metro-transform-worker: 0.83.7 + metro-babel-transformer: 0.87.0 + metro-cache: 0.87.0 + metro-cache-key: 0.87.0 + metro-config: 0.87.0 + metro-core: 0.87.0 + metro-file-map: 0.87.0 + metro-resolver: 0.87.0 + metro-runtime: 0.87.0 + metro-source-map: 0.87.0 + metro-symbolicate: 0.87.0 + metro-transform-plugins: 0.87.0 + metro-transform-worker: 0.87.0 mime-types: 3.0.2 nullthrows: 1.1.1 serialize-error: 2.1.0 @@ -9277,11 +8777,11 @@ snapshots: transitivePeerDependencies: - supports-color - mocha-remote-react-native@1.13.2(react-native@0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0))(react@19.1.0): + mocha-remote-react-native@1.13.2(react-native@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3): dependencies: mocha-remote-client: 1.13.2 - react: 19.1.0 - react-native: 0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3) transitivePeerDependencies: - bufferutil - supports-color @@ -9374,8 +8874,6 @@ snapshots: semver: 7.8.5 validate-npm-package-license: 3.0.4 - normalize-path@3.0.0: {} - npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -9389,7 +8887,7 @@ snapshots: nullthrows@1.1.1: {} - ob1@0.83.7: + ob1@0.87.0: dependencies: flow-enums-runtime: 0.0.6 @@ -9421,10 +8919,6 @@ snapshots: on-headers@1.1.0: {} - once@1.4.0: - dependencies: - wrappy: 1.0.2 - onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -9437,8 +8931,9 @@ snapshots: dependencies: is-wsl: 1.1.0 - open@7.4.2: + open@8.4.2: dependencies: + define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 @@ -9568,8 +9063,6 @@ snapshots: path-expression-matcher@1.6.2: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} path-parse@1.0.7: {} @@ -9589,8 +9082,6 @@ snapshots: pify@4.0.1: {} - pirates@4.0.7: {} - pkg-dir@8.0.0: dependencies: find-up-simple: 1.0.1 @@ -9682,59 +9173,55 @@ snapshots: react-is@18.3.1: {} - react-native-test-app@4.4.12(@react-native-community/cli-types@20.2.0)(metro@0.83.7)(react-native@0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0))(react@19.1.0): + react-native-test-app@5.4.8(@react-native-community/cli-types@20.2.0)(metro@0.87.0)(react-native@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3): dependencies: - '@rnx-kit/react-native-host': 0.5.21(react-native@0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0)) - '@rnx-kit/tools-react-native': 2.3.8(@react-native-community/cli-types@20.2.0)(metro@0.83.7) + '@isaacs/cliui': 9.0.0 + '@rnx-kit/react-native-host': 0.5.21(react-native@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3)) + '@rnx-kit/tools-react-native': 2.3.8(@react-native-community/cli-types@20.2.0)(metro@0.87.0) ajv: 8.20.0 - cliui: 8.0.1 - fast-xml-parser: 4.5.7 + fast-xml-builder: 1.3.0 + fast-xml-parser: 5.10.1 prompts: 2.4.2 - react: 19.1.0 - react-native: 0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3) semver: 7.8.5 - uuid: 11.1.1 transitivePeerDependencies: - '@react-native-community/cli-types' - memfs - metro - react-native@0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0): - dependencies: - '@jest/create-cache-key-function': 29.7.0 - '@react-native/assets-registry': 0.81.4 - '@react-native/codegen': 0.81.4(@babel/core@7.29.7) - '@react-native/community-cli-plugin': 0.81.4(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7)) - '@react-native/gradle-plugin': 0.81.4 - '@react-native/js-polyfills': 0.81.4 - '@react-native/normalize-colors': 0.81.4 - '@react-native/virtualized-lists': 0.81.4(@types/react@19.2.17)(react-native@0.81.4(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.81.4(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.1.0))(react@19.1.0) - abort-controller: 3.0.0 + react-native@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3): + dependencies: + '@react-native/asset-utils': 0.88.0-nightly-20260809-db662caea + '@react-native/codegen': 0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7) + '@react-native/community-cli-plugin': 0.88.0-nightly-20260809-db662caea(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)) + '@react-native/gradle-plugin': 0.88.0-nightly-20260809-db662caea + '@react-native/normalize-colors': 0.88.0-nightly-20260809-db662caea + '@react-native/virtualized-lists': 0.88.0-nightly-20260809-db662caea(@types/react@19.2.17)(react-native@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@5.9.3))(@react-native/metro-config@0.88.0-nightly-20260809-db662caea(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) anser: 1.4.10 ansi-regex: 5.0.1 - babel-jest: 29.7.0(@babel/core@7.29.7) - babel-plugin-syntax-hermes-parser: 0.29.1 + babel-plugin-syntax-hermes-parser: 0.37.0 base64-js: 1.5.1 - commander: 12.1.0 flow-enums-runtime: 0.0.6 - glob: 7.2.3 + flow-parser: 0.325.0 + hermes-compiler: 260318099.0.1 invariant: 2.2.4 - jest-environment-node: 29.7.0 memoize-one: 5.2.1 - metro-runtime: 0.83.7 - metro-source-map: 0.83.7 + metro-runtime: 0.87.0 + metro-source-map: 0.87.0 nullthrows: 1.1.1 pretty-format: 29.7.0 promise: 8.3.0 - react: 19.1.0 + react: 19.2.3 react-devtools-core: 6.1.5 react-refresh: 0.14.2 regenerator-runtime: 0.13.11 - scheduler: 0.26.0 + scheduler: 0.27.0 semver: 7.8.5 stacktrace-parser: 0.1.11 + tinyglobby: 0.2.17 whatwg-fetch: 3.6.20 - ws: 6.2.6 + ws: 7.5.13 yargs: 17.7.3 optionalDependencies: '@types/react': 19.2.17 @@ -9748,7 +9235,7 @@ snapshots: react-refresh@0.14.2: {} - react@19.1.0: {} + react@19.2.3: {} read-pkg@9.0.1: dependencies: @@ -9841,10 +9328,6 @@ snapshots: reusify@1.1.0: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - rolldown@1.0.0-beta.29(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2): dependencies: '@oxc-project/runtime': 0.77.3 @@ -9892,7 +9375,7 @@ snapshots: safer-buffer@2.1.2: {} - scheduler@0.26.0: {} + scheduler@0.27.0: {} semver-compare@1.0.0: {} @@ -10090,8 +9573,6 @@ snapshots: strip-json-comments@3.1.1: {} - strnum@1.1.2: {} - strnum@2.4.1: dependencies: anynum: 1.0.1 @@ -10124,12 +9605,6 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - test-exclude@6.0.0: - dependencies: - '@istanbuljs/schema': 0.1.6 - glob: 7.2.3 - minimatch: 3.1.5 - throat@5.0.0: {} tinyexec@1.2.4: {} @@ -10169,8 +9644,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} - type-fest@0.7.1: {} type-fest@4.41.0: {} @@ -10243,8 +9716,6 @@ snapshots: utils-merge@1.0.1: {} - uuid@11.1.1: {} - uuid@8.3.2: {} validate-npm-package-license@3.0.4: @@ -10312,13 +9783,6 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.2.0 - wrappy@1.0.2: {} - - write-file-atomic@4.0.2: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - ws@6.2.6: dependencies: async-limiter: 1.0.1