From e3b6aa10f79b7a0caee0859f3a39a4cdd34a1de8 Mon Sep 17 00:00:00 2001 From: Daniel Williams Date: Fri, 9 Oct 2026 16:32:49 +0100 Subject: [PATCH 1/9] feat!: require React Native 0.79 Drop code paths for React Native < 0.79: the pre-0.79 HMRClient named exports, text/plain symbolication requests, the enableNewDebugger dev-middleware experiment, the <= 0.73 Android CallInvoker sources and the pre-0.76 / AGP < 7.3 Android build branches. The pod now uses React Native's min_ios_version_supported deployment target. projectRoot is still passed to dev-middleware, which requires it before 0.83. --- packages/dev-server/src/createServer.ts | 5 +- .../plugins/symbolicate/sybmolicatePlugin.ts | 12 +---- packages/repack/android/CMakeLists.txt | 15 +----- packages/repack/android/build.gradle | 49 +------------------ packages/repack/android/gradle.properties | 6 +-- .../android/src/main/AndroidManifest.xml | 3 +- .../android/src/main/AndroidManifestNew.xml | 2 - .../callstack/repack/NativeScriptLoader.kt | 2 +- .../callstack/repack/NativeScriptLoader.kt | 41 ---------------- packages/repack/callstack-repack.podspec | 27 +--------- packages/repack/ios/ScriptManager.mm | 2 +- .../repack/src/modules/DevServerClient.ts | 25 +++------- 12 files changed, 20 insertions(+), 169 deletions(-) delete mode 100644 packages/repack/android/src/main/AndroidManifestNew.xml rename packages/repack/android/src/{versioned/CallInvoker/latest => main/java}/com/callstack/repack/NativeScriptLoader.kt (95%) delete mode 100644 packages/repack/android/src/versioned/CallInvoker/73/com/callstack/repack/NativeScriptLoader.kt diff --git a/packages/dev-server/src/createServer.ts b/packages/dev-server/src/createServer.ts index 5c1805c91..2f9a811fe 100644 --- a/packages/dev-server/src/createServer.ts +++ b/packages/dev-server/src/createServer.ts @@ -73,6 +73,7 @@ export async function createServer(config: Server.Config) { let handledDevMiddlewareNotice = false; const devMiddleware = options.devMiddleware.createDevMiddleware({ + // @ts-expect-error required by @react-native/dev-middleware < 0.83, removed in 0.83 projectRoot: options.rootDir, serverBaseUrl: options.url, logger: { @@ -113,10 +114,6 @@ export async function createServer(config: Server.Config) { }, }; }, - unstable_experiments: { - // @ts-expect-error removed in 0.76, keep this for backkwards compatibility - enableNewDebugger: true, - }, }); const proxyMiddlewares = options.proxy?.map((proxyOptions) => { diff --git a/packages/dev-server/src/plugins/symbolicate/sybmolicatePlugin.ts b/packages/dev-server/src/plugins/symbolicate/sybmolicatePlugin.ts index bdd6b9c7d..66999709e 100644 --- a/packages/dev-server/src/plugins/symbolicate/sybmolicatePlugin.ts +++ b/packages/dev-server/src/plugins/symbolicate/sybmolicatePlugin.ts @@ -10,17 +10,7 @@ interface SymbolicateRequestBody { } function getStackFromRequestBody(request: FastifyRequest) { - let body: SymbolicateRequestBody; - - if (request.headers['content-type'] === 'application/json') { - // RN >= 0.79 uses application/json - body = request.body as SymbolicateRequestBody; - } else { - // RN < 0.79 uses text/plain - body = JSON.parse(request.body as string) as SymbolicateRequestBody; - } - - return body.stack; + return (request.body as SymbolicateRequestBody).stack; } async function symbolicatePlugin( diff --git a/packages/repack/android/CMakeLists.txt b/packages/repack/android/CMakeLists.txt index f075e03ef..2f0640a1e 100644 --- a/packages/repack/android/CMakeLists.txt +++ b/packages/repack/android/CMakeLists.txt @@ -35,22 +35,9 @@ target_include_directories( "${REACT_NATIVE_DIR}/ReactCommon/callinvoker" "${REACT_NATIVE_DIR}/ReactAndroid/src/main/jni/react/turbomodule" ) -# REACT_NATIVE_MERGED_SO is not set properly -# use version check instead -if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) - target_link_libraries( - ${PACKAGE_NAME} - ReactAndroid::reactnative - ) -else() - target_link_libraries( - ${PACKAGE_NAME} - ReactAndroid::reactnativejni - ) -endif() - target_link_libraries( ${PACKAGE_NAME} + ReactAndroid::reactnative android fbjni::fbjni ReactAndroid::jsi diff --git a/packages/repack/android/build.gradle b/packages/repack/android/build.gradle index 824efd7fc..09701cbec 100644 --- a/packages/repack/android/build.gradle +++ b/packages/repack/android/build.gradle @@ -1,4 +1,3 @@ -import com.android.Version import org.jetbrains.kotlin.gradle.tasks.KotlinCompile buildscript { @@ -17,15 +16,6 @@ buildscript { } } -static def supportsNamespace() { - def parsed = Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.') - def major = parsed[0].toInteger() - def minor = parsed[1].toInteger() - - // Namespace support was added in 7.3.0 - return (major == 7 && minor >= 3) || major >= 8 -} - def isNewArchitectureEnabled() { return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" } @@ -72,23 +62,10 @@ def REACT_NATIVE_DIR = REACT_NATIVE_BUILD_FROM_SOURCE commandLine("node", "--print", "require.resolve('react-native/package.json')") }.standardOutput.asText.get().trim()).parent -def reactProperties = new Properties() -file("$REACT_NATIVE_DIR/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) } - -def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME") -def REACT_NATIVE_MINOR_VERSION = REACT_NATIVE_VERSION.startsWith("0.0.0-") ? 1000 : REACT_NATIVE_VERSION.split("\\.")[1].toInteger() def IS_NEW_ARCHITECTURE_ENABLED = isNewArchitectureEnabled() android { - if (supportsNamespace()) { - namespace "com.callstack.repack" - - sourceSets { - main { - manifest.srcFile "src/main/AndroidManifestNew.xml" - } - } - } + namespace "com.callstack.repack" compileSdkVersion getExtOrIntegerDefault('compileSdkVersion') @@ -131,23 +108,6 @@ android { disable 'GradleCompatible' } - compileOptions { - if (REACT_NATIVE_MINOR_VERSION < 69) { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - } - - if (appliesKotlinPlugin) { - kotlinOptions { - if (REACT_NATIVE_MINOR_VERSION < 69) { - jvmTarget = JavaVersion.VERSION_1_8 - } else if (REACT_NATIVE_MINOR_VERSION < 73) { - jvmTarget = JavaVersion.VERSION_11 - } - } - } - externalNativeBuild { cmake { path "CMakeLists.txt" @@ -183,13 +143,6 @@ android { } else { java.srcDirs += ["src/oldarch"] } - - // CallInvoker - if (REACT_NATIVE_MINOR_VERSION <= 73) { - java.srcDirs += "src/versioned/CallInvoker/73" - } else { - java.srcDirs += "src/versioned/CallInvoker/latest" - } } } diff --git a/packages/repack/android/gradle.properties b/packages/repack/android/gradle.properties index c56fe0d82..f94757221 100644 --- a/packages/repack/android/gradle.properties +++ b/packages/repack/android/gradle.properties @@ -1,4 +1,4 @@ -RePack_kotlinVersion=1.7.0 -RePack_compileSdkVersion=29 -RePack_targetSdkVersion=29 +RePack_kotlinVersion=2.0.21 +RePack_compileSdkVersion=35 +RePack_targetSdkVersion=35 RePack_minSdkVersion=24 diff --git a/packages/repack/android/src/main/AndroidManifest.xml b/packages/repack/android/src/main/AndroidManifest.xml index 546a2ebb5..a2f47b605 100644 --- a/packages/repack/android/src/main/AndroidManifest.xml +++ b/packages/repack/android/src/main/AndroidManifest.xml @@ -1,3 +1,2 @@ - + diff --git a/packages/repack/android/src/main/AndroidManifestNew.xml b/packages/repack/android/src/main/AndroidManifestNew.xml deleted file mode 100644 index a2f47b605..000000000 --- a/packages/repack/android/src/main/AndroidManifestNew.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/packages/repack/android/src/versioned/CallInvoker/latest/com/callstack/repack/NativeScriptLoader.kt b/packages/repack/android/src/main/java/com/callstack/repack/NativeScriptLoader.kt similarity index 95% rename from packages/repack/android/src/versioned/CallInvoker/latest/com/callstack/repack/NativeScriptLoader.kt rename to packages/repack/android/src/main/java/com/callstack/repack/NativeScriptLoader.kt index 7746d038f..a0fb5c2ca 100644 --- a/packages/repack/android/src/versioned/CallInvoker/latest/com/callstack/repack/NativeScriptLoader.kt +++ b/packages/repack/android/src/main/java/com/callstack/repack/NativeScriptLoader.kt @@ -22,7 +22,7 @@ class NativeScriptLoader(private val reactContext: ReactContext) { ) fun evaluate(script: ByteArray, url: String, promise: Promise? = null) { - // RN 0.74: CatalystInstance or BridgelessCatalystInstance + // CatalystInstance or BridgelessCatalystInstance val catalystInstance = reactContext.catalystInstance val callInvoker = catalystInstance?.jsCallInvokerHolder as? CallInvokerHolderImpl ?: throw Exception("Missing CallInvoker") diff --git a/packages/repack/android/src/versioned/CallInvoker/73/com/callstack/repack/NativeScriptLoader.kt b/packages/repack/android/src/versioned/CallInvoker/73/com/callstack/repack/NativeScriptLoader.kt deleted file mode 100644 index 71727eb34..000000000 --- a/packages/repack/android/src/versioned/CallInvoker/73/com/callstack/repack/NativeScriptLoader.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.callstack.repack - -import com.facebook.react.bridge.Promise -import com.facebook.react.bridge.ReactContext -import com.facebook.react.turbomodule.core.CallInvokerHolderImpl - -class NativeScriptLoader(private val reactContext: ReactContext) { - private external fun evaluateJavascriptAsync( - jsRuntime: Long, - callInvokerHolder: CallInvokerHolderImpl, - code: ByteArray, - url: String, - promise: Any - ) - - private external fun evaluateJavascriptSync( - jsRuntime: Long, - code: ByteArray, - url: String - ) - - fun evaluate(script: ByteArray, url: String, promise: Promise? = null) { - val catalystInstance = try { - reactContext.catalystInstance - } catch (e: Exception) { - throw Exception("Missing CatalystInstance - bridgeless on RN 0.73 is not supported") - } - - val callInvoker = catalystInstance?.jsCallInvokerHolder as? CallInvokerHolderImpl - ?: throw Exception("Missing CallInvoker") - val jsRuntime = catalystInstance.javaScriptContextHolder?.get() - ?: throw Exception("Missing RN Runtime") - - if (promise != null) { - evaluateJavascriptAsync(jsRuntime, callInvoker, script, url, promise) - } else { - // do we need the callinvoker when the call is sync? - evaluateJavascriptSync(jsRuntime, script, url) - } - } -} diff --git a/packages/repack/callstack-repack.podspec b/packages/repack/callstack-repack.podspec index b174cf937..36801cc49 100644 --- a/packages/repack/callstack-repack.podspec +++ b/packages/repack/callstack-repack.podspec @@ -1,8 +1,6 @@ require "json" package = JSON.parse(File.read(File.join(__dir__, "package.json"))) -folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' -new_arch_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1' Pod::Spec.new do |s| s.name = "callstack-repack" @@ -11,7 +9,7 @@ Pod::Spec.new do |s| s.homepage = package["homepage"] s.license = package["license"] s.authors = package["author"] - s.platforms = { :ios => "12.0" } + s.platforms = { :ios => min_ios_version_supported } s.source = { :git => "https://github.com/callstack/repack.git", :tag => "#{s.version}" } s.source_files = "ios/**/*.{h,m,mm,swift}" s.static_framework = true @@ -21,26 +19,5 @@ Pod::Spec.new do |s| s.dependency 'JWTDecode', '~> 3.0.0' s.dependency 'SwiftyRSA', '~> 1.7' - # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0. - # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79. - if respond_to?(:install_modules_dependencies, true) - install_modules_dependencies(s) - else - s.dependency "React-Core" - s.dependency "React-callinvoker" - # Don't install the dependencies when we run `pod install` in the old architecture. - if new_arch_enabled then - s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1" - s.pod_target_xcconfig.update({ - "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"", - "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1", - "CLANG_CXX_LANGUAGE_STANDARD" => "c++17" - }) - s.dependency "React-Codegen" - s.dependency "RCT-Folly" - s.dependency "RCTRequired" - s.dependency "RCTTypeSafety" - s.dependency "ReactCommon/turbomodule/core" - end - end + install_modules_dependencies(s) end diff --git a/packages/repack/ios/ScriptManager.mm b/packages/repack/ios/ScriptManager.mm index 1dc10e696..e0923cc18 100644 --- a/packages/repack/ios/ScriptManager.mm +++ b/packages/repack/ios/ScriptManager.mm @@ -395,7 +395,7 @@ - (void)evaluateJavascript:(NSData *)code { std::shared_ptr callInvoker = self.bridge.jsCallInvoker; if (!callInvoker) { - reject(CallInvokerUnavailableError, @"Missing CallInvoker - bridgeless on RN 0.73 is not supported", nil); + reject(CallInvokerUnavailableError, @"Missing CallInvoker", nil); return; } diff --git a/packages/repack/src/modules/DevServerClient.ts b/packages/repack/src/modules/DevServerClient.ts index 288d9cb6b..48ae86f4d 100644 --- a/packages/repack/src/modules/DevServerClient.ts +++ b/packages/repack/src/modules/DevServerClient.ts @@ -85,22 +85,13 @@ class DevServerClient { const client = new DevServerClient(); -// React Native < 0.79 -export function setup() {} -export function enable() {} -export function disable() {} -export function registerBundle() {} -export function log(level: string, data: any[]) { - client.log(level, data); -} -export function unstable_notifyFuseboxConsoleEnabled() {} - -// React Native >= 0.79 export default { - setup, - enable, - disable, - registerBundle, - log, - unstable_notifyFuseboxConsoleEnabled, + setup() {}, + enable() {}, + disable() {}, + registerBundle() {}, + log(level: string, data: any[]) { + client.log(level, data); + }, + unstable_notifyFuseboxConsoleEnabled() {}, }; From 990853d936e78b48f73ab3574f5dae0f5b2ccd13 Mon Sep 17 00:00:00 2001 From: Daniel Williams Date: Fri, 9 Oct 2026 16:32:49 +0100 Subject: [PATCH 2/9] feat!: drop Module Federation V1 Remove ModuleFederationPluginV1 and the Federated helpers, and point ModuleFederationPlugin at ModuleFederationPluginV2. Module Federation support now targets @module-federation/enhanced 2.x: runtime plugins use the ModuleFederation/ModuleFederationRuntimePlugin types, runtime plugins passed as [path, options] tuples are kept, and the warning filter for the 0.x runtime build is gone. The repack-expo doctor treats ModuleFederationPlugin as V2, the MF V1 tester app is removed, and the integration tests cover the 2.0 floor only. --- .changeset/config.json | 1 - AGENTS.md | 1 - apps/tester-federation/.gitignore | 61 - apps/tester-federation/.ruby-version | 1 - apps/tester-federation/Gemfile | 21 - apps/tester-federation/Gemfile.lock | 142 - apps/tester-federation/android/build.gradle | 46 - apps/tester-federation/android/debug.keystore | Bin 2257 -> 0 bytes .../android/gradle.properties | 55 - .../android/gradle/wrapper/gradle-wrapper.jar | Bin 43764 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 - apps/tester-federation/android/gradlew | 252 -- apps/tester-federation/android/gradlew.bat | 94 - .../tester-federation/android/settings.gradle | 21 - apps/tester-federation/app.json | 31 - apps/tester-federation/babel.config.js | 4 - apps/tester-federation/config.host-app.mts | 17 - apps/tester-federation/config.mini-app.mts | 17 - .../configs/rspack.host-app.mts | 106 - .../configs/rspack.mini-app.mts | 106 - .../configs/webpack.host-app.mts | 96 - .../configs/webpack.mini-app.mts | 97 - .../contents.xcworkspacedata | 10 - apps/tester-federation/ios/Podfile | 15 - apps/tester-federation/ios/Podfile.lock | 2362 ----------------- apps/tester-federation/package.json | 47 - apps/tester-federation/react-native.config.js | 13 - apps/tester-federation/src/host/App.tsx | 12 - apps/tester-federation/src/host/index.js | 22 - .../src/host/navigation/MainNavigator.tsx | 55 - .../src/host/screens/DetailScreen.tsx | 24 - .../src/host/screens/HomeScreen.tsx | 157 -- .../src/host/screens/MiniAppScreen.tsx | 31 - apps/tester-federation/src/mini/App.tsx | 10 - .../src/mini/assets/pic_1.jpg | Bin 89400 -> 0 bytes .../src/mini/assets/pic_2.jpg | Bin 121569 -> 0 bytes .../src/mini/assets/pic_3.jpg | Bin 59862 -> 0 bytes apps/tester-federation/src/mini/index.js | 6 - .../src/mini/navigation/MainNavigator.tsx | 44 - .../src/mini/screens/GalleryScreen.tsx | 95 - apps/tester-federation/tsconfig.json | 8 - packages/repack-expo/src/cli/doctor.ts | 2 +- packages/repack-expo/src/cli/rspackConfig.ts | 6 +- packages/repack-expo/test/cli.test.cjs | 31 +- .../FederationRuntimePlugins/CorePlugin.ts | 4 +- .../PrefetchPlugin.ts | 4 +- .../ResolverPlugin.ts | 8 +- .../src/modules/ScriptManager/federated.ts | 296 --- .../repack/src/modules/ScriptManager/index.ts | 1 - .../src/plugins/ModuleFederationPlugin.ts | 124 - .../src/plugins/ModuleFederationPluginV1.ts | 322 --- .../src/plugins/ModuleFederationPluginV2.ts | 122 +- .../ModuleFederationPluginV1.test.ts | 287 -- .../ModuleFederationPluginV2.test.ts | 78 +- packages/repack/src/plugins/index.ts | 6 +- packages/repack/src/utils/federated.ts | 195 -- .../src/plugins/NativeEntryPlugin.test.ts | 55 +- .../rspack/NativeEntryPlugin.test.ts.snap | 1145 +------- .../webpack/NativeEntryPlugin.test.ts.snap | 855 +----- 59 files changed, 105 insertions(+), 7523 deletions(-) delete mode 100644 apps/tester-federation/.gitignore delete mode 100644 apps/tester-federation/.ruby-version delete mode 100644 apps/tester-federation/Gemfile delete mode 100644 apps/tester-federation/Gemfile.lock delete mode 100644 apps/tester-federation/android/build.gradle delete mode 100644 apps/tester-federation/android/debug.keystore delete mode 100644 apps/tester-federation/android/gradle.properties delete mode 100644 apps/tester-federation/android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 apps/tester-federation/android/gradle/wrapper/gradle-wrapper.properties delete mode 100755 apps/tester-federation/android/gradlew delete mode 100644 apps/tester-federation/android/gradlew.bat delete mode 100644 apps/tester-federation/android/settings.gradle delete mode 100644 apps/tester-federation/app.json delete mode 100644 apps/tester-federation/babel.config.js delete mode 100644 apps/tester-federation/config.host-app.mts delete mode 100644 apps/tester-federation/config.mini-app.mts delete mode 100644 apps/tester-federation/configs/rspack.host-app.mts delete mode 100644 apps/tester-federation/configs/rspack.mini-app.mts delete mode 100644 apps/tester-federation/configs/webpack.host-app.mts delete mode 100644 apps/tester-federation/configs/webpack.mini-app.mts delete mode 100644 apps/tester-federation/ios/ModuleFederationTester.xcworkspace/contents.xcworkspacedata delete mode 100644 apps/tester-federation/ios/Podfile delete mode 100644 apps/tester-federation/ios/Podfile.lock delete mode 100644 apps/tester-federation/package.json delete mode 100644 apps/tester-federation/react-native.config.js delete mode 100644 apps/tester-federation/src/host/App.tsx delete mode 100644 apps/tester-federation/src/host/index.js delete mode 100644 apps/tester-federation/src/host/navigation/MainNavigator.tsx delete mode 100644 apps/tester-federation/src/host/screens/DetailScreen.tsx delete mode 100644 apps/tester-federation/src/host/screens/HomeScreen.tsx delete mode 100644 apps/tester-federation/src/host/screens/MiniAppScreen.tsx delete mode 100644 apps/tester-federation/src/mini/App.tsx delete mode 100644 apps/tester-federation/src/mini/assets/pic_1.jpg delete mode 100644 apps/tester-federation/src/mini/assets/pic_2.jpg delete mode 100644 apps/tester-federation/src/mini/assets/pic_3.jpg delete mode 100644 apps/tester-federation/src/mini/index.js delete mode 100644 apps/tester-federation/src/mini/navigation/MainNavigator.tsx delete mode 100644 apps/tester-federation/src/mini/screens/GalleryScreen.tsx delete mode 100644 apps/tester-federation/tsconfig.json delete mode 100644 packages/repack/src/modules/ScriptManager/federated.ts delete mode 100644 packages/repack/src/plugins/ModuleFederationPlugin.ts delete mode 100644 packages/repack/src/plugins/ModuleFederationPluginV1.ts delete mode 100644 packages/repack/src/plugins/__tests__/ModuleFederationPluginV1.test.ts delete mode 100644 packages/repack/src/utils/federated.ts diff --git a/.changeset/config.json b/.changeset/config.json index b5efcc0ec..7f620e3a3 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -21,7 +21,6 @@ "tester-app", "tester-expo", "tester-expo-widget", - "tester-federation", "tester-federation-v2", "metro-compat-test", "website" diff --git a/AGENTS.md b/AGENTS.md index afc7276ab..08cd0733f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -23,7 +23,6 @@ Re.Pack is a toolkit for building and developing React Native applications with ### Apps - `apps/tester-app/`: Primary manual/integration validation app. -- `apps/tester-federation/`: Module Federation v1 validation app. - `apps/tester-federation-v2/`: Module Federation v2 validation app. ### Tests diff --git a/apps/tester-federation/.gitignore b/apps/tester-federation/.gitignore deleted file mode 100644 index 1204d234c..000000000 --- a/apps/tester-federation/.gitignore +++ /dev/null @@ -1,61 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -**/.xcode.env -**/.xcode.env.local - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -*.hprof -.cxx/ -*.keystore -!debug.keystore - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ - -**/fastlane/report.xml -**/fastlane/Preview.html -**/fastlane/screenshots -**/fastlane/test_output - -# Bundle artifact -*.jsbundle - -# Ruby / CocoaPods -**/Pods/ -/vendor/bundle/ diff --git a/apps/tester-federation/.ruby-version b/apps/tester-federation/.ruby-version deleted file mode 100644 index 7bcbb3808..000000000 --- a/apps/tester-federation/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -3.4.9 diff --git a/apps/tester-federation/Gemfile b/apps/tester-federation/Gemfile deleted file mode 100644 index 28cf44118..000000000 --- a/apps/tester-federation/Gemfile +++ /dev/null @@ -1,21 +0,0 @@ -source 'https://rubygems.org' - -# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -# -# 3.1 is the floor for activesupport >= 7.2, but 3.4 is the real floor here: -# on Ruby <= 3.3 CocoaPods intermittently dies with "pathname contains null -# byte" while resolving pnpm's symlinked node_modules (CocoaPods#12866). -ruby '>= 3.4' - -# Exclude problematic versions of cocoapods that cause build failures. -# activesupport is floored at the release carrying the security fixes. -gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' -gem 'activesupport', '>= 7.2.3.1' -gem 'xcodeproj', '< 1.26.0' - -# Ruby 3.4.0 has removed some libraries from the standard library. -gem 'bigdecimal' -gem 'logger' -gem 'benchmark' -gem 'mutex_m' -gem 'nkf' diff --git a/apps/tester-federation/Gemfile.lock b/apps/tester-federation/Gemfile.lock deleted file mode 100644 index cd7e6a9b0..000000000 --- a/apps/tester-federation/Gemfile.lock +++ /dev/null @@ -1,142 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.8) - activesupport (7.2.3.1) - base64 - benchmark (>= 0.3) - bigdecimal - concurrent-ruby (~> 1.0, >= 1.3.1) - connection_pool (>= 2.2.5) - drb - i18n (>= 1.6, < 2) - logger (>= 1.4.2) - minitest (>= 5.1, < 6) - securerandom (>= 0.3) - tzinfo (~> 2.0, >= 2.0.5) - addressable (2.9.0) - public_suffix (>= 2.0.2, < 8.0) - algoliasearch (1.27.5) - httpclient (~> 2.8, >= 2.8.3) - json (>= 1.5.1) - atomos (0.1.3) - base64 (0.3.0) - benchmark (0.5.0) - bigdecimal (4.1.2) - claide (1.1.0) - cocoapods (1.15.2) - addressable (~> 2.8) - claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.15.2) - cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 2.1, < 3.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.6.0, < 2.0) - cocoapods-try (>= 1.1.0, < 2.0) - colored2 (~> 3.1) - escape (~> 0.0.4) - fourflusher (>= 2.3.0, < 3.0) - gh_inspector (~> 1.0) - molinillo (~> 0.8.0) - nap (~> 1.0) - ruby-macho (>= 2.3.0, < 3.0) - xcodeproj (>= 1.23.0, < 2.0) - cocoapods-core (1.15.2) - activesupport (>= 5.0, < 8) - addressable (~> 2.8) - algoliasearch (~> 1.0) - concurrent-ruby (~> 1.1) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - netrc (~> 0.11) - public_suffix (~> 4.0) - typhoeus (~> 1.0) - cocoapods-deintegrate (1.0.5) - cocoapods-downloader (2.1) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.1) - cocoapods-trunk (1.6.0) - nap (>= 0.8, < 2.0) - netrc (~> 0.11) - cocoapods-try (1.2.0) - colored2 (3.1.2) - concurrent-ruby (1.3.8) - connection_pool (3.0.2) - drb (2.2.3) - escape (0.0.4) - ethon (0.18.0) - ffi (>= 1.15.0) - logger - ffi (1.17.4) - ffi (1.17.4-aarch64-linux-gnu) - ffi (1.17.4-aarch64-linux-musl) - ffi (1.17.4-arm-linux-gnu) - ffi (1.17.4-arm-linux-musl) - ffi (1.17.4-arm64-darwin) - ffi (1.17.4-x86-linux-gnu) - ffi (1.17.4-x86-linux-musl) - ffi (1.17.4-x86_64-darwin) - ffi (1.17.4-x86_64-linux-gnu) - ffi (1.17.4-x86_64-linux-musl) - fourflusher (2.3.1) - fuzzy_match (2.0.4) - gh_inspector (1.1.3) - httpclient (2.9.0) - mutex_m - i18n (1.15.2) - concurrent-ruby (~> 1.0) - json (2.21.2) - logger (1.7.0) - minitest (5.27.0) - molinillo (0.8.0) - mutex_m (0.3.0) - nanaimo (0.3.0) - nap (1.1.0) - netrc (0.11.0) - nkf (0.3.0) - public_suffix (4.0.7) - rexml (3.4.4) - ruby-macho (2.5.1) - securerandom (0.4.1) - typhoeus (1.6.0) - ethon (>= 0.18.0) - tzinfo (2.0.6) - concurrent-ruby (~> 1.0) - xcodeproj (1.25.1) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.3.0) - rexml (>= 3.3.6, < 4.0) - -PLATFORMS - aarch64-linux-gnu - aarch64-linux-musl - arm-linux-gnu - arm-linux-musl - arm64-darwin - ruby - x86-linux-gnu - x86-linux-musl - x86_64-darwin - x86_64-linux-gnu - x86_64-linux-musl - -DEPENDENCIES - activesupport (>= 7.2.3.1) - benchmark - bigdecimal - cocoapods (>= 1.13, != 1.15.1, != 1.15.0) - logger - mutex_m - nkf - xcodeproj (< 1.26.0) - -RUBY VERSION - ruby 3.4.9p82 - -BUNDLED WITH - 2.6.9 diff --git a/apps/tester-federation/android/build.gradle b/apps/tester-federation/android/build.gradle deleted file mode 100644 index 808e764f5..000000000 --- a/apps/tester-federation/android/build.gradle +++ /dev/null @@ -1,46 +0,0 @@ -buildscript { - apply(from: { - def searchDir = rootDir.toPath() - do { - def p = searchDir.resolve("node_modules/react-native-test-app/android/dependencies.gradle") - if (p.toFile().exists()) { - return p.toRealPath().toString() - } - } while (searchDir = searchDir.getParent()) - throw new GradleException("Could not find `react-native-test-app`"); - }()) - - repositories { - mavenCentral() - google() - } - - dependencies { - getReactNativeDependencies().each { dependency -> - classpath(dependency) - } - } -} - -allprojects { - repositories { - { - def searchDir = rootDir.toPath() - do { - def p = searchDir.resolve("node_modules/react-native/android") - if (p.toFile().exists()) { - maven { - url(p.toRealPath().toString()) - } - break - } - } while (searchDir = searchDir.getParent()) - // As of 0.80, React Native is no longer installed from npm - }() - mavenCentral() - google() - maven { - url(project(":react-native-async-storage_async-storage").file("local_repo")) - } - } -} diff --git a/apps/tester-federation/android/debug.keystore b/apps/tester-federation/android/debug.keystore deleted file mode 100644 index 364e105ed39fbfd62001429a68140672b06ec0de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2257 zcmchYXEfYt8;7T1^dLH$VOTZ%2NOdOH5j5LYLtZ0q7x-V8_6gU5)#7dkq{HTmsfNq zB3ZqcAxeY^G10@?efK?Q&)M(qInVv!xjx+IKEL}p*K@LYvIzo#AZG>st5|P)KF1_Z;y){W{<7K{nl!CPuE z_^(!C(Ol0n8 zK13*rzAtW>(wULKPRYLd7G18F8#1P`V*9`(Poj26eOXYyBVZPno~Cvvhx7vPjAuZo zF?VD!zB~QG(!zbw#qsxT8%BSpqMZ4f70ZPn-3y$L8{EVbbN9$H`B&Z1quk9tgp5FM zuxp3pJ0b8u|3+#5bkJ4SRnCF2l7#DyLYXYY8*?OuAwK4E6J{0N=O3QNVzQ$L#FKkR zi-c@&!nDvezOV$i$Lr}iF$XEcwnybQ6WZrMKuw8gCL^U#D;q3t&HpTbqyD%vG=TeDlzCT~MXUPC|Leb-Uk+ z=vnMd(|>ld?Fh>V8poP;q;;nc@en$|rnP0ytzD&fFkCeUE^kG9Kx4wUh!!rpjwKDP zyw_e|a^x_w3E zP}}@$g>*LLJ4i0`Gx)qltL}@;mDv}D*xR^oeWcWdPkW@Uu)B^X&4W1$p6}ze!zudJ zyiLg@uggoMIArBr*27EZV7djDg@W1MaL+rcZ-lrANJQ%%>u8)ZMWU@R2qtnmG(acP z0d_^!t>}5W zpT`*2NR+0+SpTHb+6Js4b;%LJB;B_-ChhnU5py}iJtku*hm5F0!iql8Hrpcy1aYbT z1*dKC5ua6pMX@@iONI?Hpr%h;&YaXp9n!ND7-=a%BD7v&g zOO41M6EbE24mJ#S$Ui0-brR5ML%@|ndz^)YLMMV1atna{Fw<;TF@>d&F|!Z>8eg>>hkFrV)W+uv=`^F9^e zzzM2*oOjT9%gLoub%(R57p-`TXFe#oh1_{&N-YN z<}artH|m=d8TQuKSWE)Z%puU|g|^^NFwC#N=@dPhasyYjoy(fdEVfKR@cXKHZV-`06HsP`|Ftx;8(YD$fFXumLWbGnu$GMqRncXYY9mwz9$ap zQtfZB^_BeNYITh^hA7+(XNFox5WMeG_LtJ%*Q}$8VKDI_p8^pqX)}NMb`0e|wgF7D zuQACY_Ua<1ri{;Jwt@_1sW9zzdgnyh_O#8y+C;LcZq6=4e^cs6KvmK@$vVpKFGbQ= z$)Eux5C|Fx;Gtmv9^#Y-g@7Rt7*eLp5n!gJmn7&B_L$G?NCN`AP>cXQEz}%F%K;vUs{+l4Q{}eWW;ATe2 zqvXzxoIDy(u;F2q1JH7Sf;{jy_j})F+cKlIOmNfjBGHoG^CN zM|Ho&&X|L-36f}Q-obEACz`sI%2f&k>z5c$2TyTSj~vmO)BW~+N^kt`Jt@R|s!){H ze1_eCrlNaPkJQhL$WG&iRvF*YG=gXd1IyYQ9ew|iYn7r~g!wOnw;@n42>enAxBv*A zEmV*N#sxdicyNM=A4|yaOC5MByts}s_Hpfj|y<6G=o=!3S@eIFKDdpR7|FY>L&Wat&oW&cm&X~ z5Bt>Fcq(fgnvlvLSYg&o6>&fY`ODg4`V^lWWD=%oJ#Kbad2u~! zLECFS*??>|vDsNR&pH=Ze0Eo`sC_G`OjoEKVHY|wmwlX&(XBE<@sx3Hd^gtd-fNwUHsylg06p`U2y_={u}Bc -PreactNativeArchitectures=x86_64 -reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 - -# Use this property to enable support to the new architecture. -# This will allow you to use TurboModules and the Fabric render in -# your application. You should enable this flag either if you want -# to write custom TurboModules/Fabric components OR use libraries that -# are providing them. -# Note that this is incompatible with web debugging. -newArchEnabled=true -bridgelessEnabled=true -hermesEnabled=true - -# Uncomment the line below to build React Native from source. -#react.buildFromSource=true - -# Version of Android NDK to build against. -#ANDROID_NDK_VERSION=26.1.10909125 - -# Version of Kotlin to build against. -#KOTLIN_VERSION=1.8.22 - -# Use this property to enable edge-to-edge display support. -# This allows your app to draw behind system bars for an immersive UI. -# Note: Only works with ReactActivity and should not be used with custom Activity. -edgeToEdgeEnabled=true \ No newline at end of file diff --git a/apps/tester-federation/android/gradle/wrapper/gradle-wrapper.jar b/apps/tester-federation/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 1b33c55baabb587c669f562ae36f953de2481846..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43764 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 '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH="\\\"\\\"" - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/apps/tester-federation/android/gradlew.bat b/apps/tester-federation/android/gradlew.bat deleted file mode 100644 index db3a6ac20..000000000 --- a/apps/tester-federation/android/gradlew.bat +++ /dev/null @@ -1,94 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH= - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/apps/tester-federation/android/settings.gradle b/apps/tester-federation/android/settings.gradle deleted file mode 100644 index 131843bf5..000000000 --- a/apps/tester-federation/android/settings.gradle +++ /dev/null @@ -1,21 +0,0 @@ -pluginManagement { - repositories { - gradlePluginPortal() - mavenCentral() - google() - } -} - -rootProject.name = "ModuleFederationTester" - -apply(from: { - def searchDir = rootDir.toPath() - do { - def p = searchDir.resolve("node_modules/react-native-test-app/test-app.gradle") - if (p.toFile().exists()) { - return p.toRealPath().toString() - } - } while (searchDir = searchDir.getParent()) - throw new GradleException("Could not find `react-native-test-app`"); -}()) -applyTestAppSettings(settings) diff --git a/apps/tester-federation/app.json b/apps/tester-federation/app.json deleted file mode 100644 index a15d894ee..000000000 --- a/apps/tester-federation/app.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/microsoft/react-native-test-app/trunk/schema.json", - "name": "ModuleFederationTester", - "displayName": "ModuleFederationTester", - "singleApp": "host-app", - "components": [ - { - "appKey": "HostApp", - "displayName": "HostApp", - "slug": "host-app" - } - ], - "android": { - "package": "com.tester.federation", - "signingConfigs": { - "debug": { - "storeFile": "android/debug.keystore" - }, - "release": { - "storeFile": "android/debug.keystore" - } - } - }, - "ios": { - "bundleIdentifier": "com.tester.federation" - }, - "resources": { - "android": [], - "ios": [] - } -} diff --git a/apps/tester-federation/babel.config.js b/apps/tester-federation/babel.config.js deleted file mode 100644 index d4461aec7..000000000 --- a/apps/tester-federation/babel.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - presets: ['module:@react-native/babel-preset'], - comments: true, -}; diff --git a/apps/tester-federation/config.host-app.mts b/apps/tester-federation/config.host-app.mts deleted file mode 100644 index 39e509b2b..000000000 --- a/apps/tester-federation/config.host-app.mts +++ /dev/null @@ -1,17 +0,0 @@ -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; -import type * as Repack from '@callstack/repack'; - -import rspackConfig from './configs/rspack.host-app.mts'; -import webpackConfig from './configs/webpack.host-app.mts'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const useWebpack = Boolean(process.env.USE_WEBPACK); - -export default (env: Repack.EnvOptions) => { - env.context = __dirname; - - return useWebpack ? webpackConfig(env) : rspackConfig(env); -}; diff --git a/apps/tester-federation/config.mini-app.mts b/apps/tester-federation/config.mini-app.mts deleted file mode 100644 index f23e09347..000000000 --- a/apps/tester-federation/config.mini-app.mts +++ /dev/null @@ -1,17 +0,0 @@ -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; -import type * as Repack from '@callstack/repack'; - -import rspackConfig from './configs/rspack.mini-app.mts'; -import webpackConfig from './configs/webpack.mini-app.mts'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const useWebpack = Boolean(process.env.USE_WEBPACK); - -export default (env: Repack.EnvOptions) => { - env.context = __dirname; - - return useWebpack ? webpackConfig(env) : rspackConfig(env); -}; diff --git a/apps/tester-federation/configs/rspack.host-app.mts b/apps/tester-federation/configs/rspack.host-app.mts deleted file mode 100644 index 238dc550a..000000000 --- a/apps/tester-federation/configs/rspack.host-app.mts +++ /dev/null @@ -1,106 +0,0 @@ -import * as Repack from '@callstack/repack'; -import { RsdoctorRspackPlugin } from '@rsdoctor/rspack-plugin'; -import rspack from '@rspack/core'; -import pkg from '../package.json' with { type: 'json' }; - -export default Repack.defineRspackConfig((env) => { - const { mode, context, platform } = env; - - const config = { - mode, - context, - entry: './src/host/index.js', - resolve: { - ...Repack.getResolveOptions({ enablePackageExports: true }), - }, - output: { - path: '[context]/build/host-app/[platform]', - uniqueName: 'MFTester-HostApp', - }, - module: { - rules: [ - { - test: /\.[cm]?[jt]sx?$/, - type: 'javascript/auto', - use: { - loader: '@callstack/repack/babel-swc-loader', - parallel: true, - options: {}, - }, - }, - ...Repack.getAssetTransformRules(), - ], - }, - plugins: [ - new Repack.RepackPlugin({ - extraChunks: [ - { - include: /.*/, - type: 'remote', - outputPath: `build/host-app/${platform}/output-remote`, - }, - ], - }), - new Repack.plugins.ModuleFederationPluginV1({ - name: 'HostApp', - shared: { - react: { - singleton: true, - eager: true, - requiredVersion: '19.2.3', - }, - 'react-native': { - singleton: true, - eager: true, - requiredVersion: '0.84.1', - }, - '@react-navigation/native': { - singleton: true, - eager: true, - version: pkg.dependencies['@react-navigation/native'], - requiredVersion: pkg.dependencies['@react-navigation/native'], - }, - '@react-navigation/native-stack': { - singleton: true, - eager: true, - version: pkg.dependencies['@react-navigation/native-stack'], - requiredVersion: pkg.dependencies['@react-navigation/native-stack'], - }, - 'react-native-safe-area-context': { - singleton: true, - eager: true, - version: pkg.dependencies['react-native-safe-area-context'], - requiredVersion: pkg.dependencies['react-native-safe-area-context'], - }, - 'react-native-screens': { - singleton: true, - eager: true, - version: pkg.dependencies['react-native-screens'], - requiredVersion: pkg.dependencies['react-native-screens'], - }, - '@react-native-async-storage/async-storage': { - singleton: true, - eager: true, - version: - pkg.dependencies['@react-native-async-storage/async-storage'], - requiredVersion: - pkg.dependencies['@react-native-async-storage/async-storage'], - }, - }, - }), - new rspack.IgnorePlugin({ - resourceRegExp: /^@react-native-masked-view/, - }), - new rspack.EnvironmentPlugin({ - MF_CACHE: null, - }), - ], - }; - - if (process.env.RSDOCTOR) { - // @ts-expect-error - config.plugins?.push(new RsdoctorRspackPlugin()); - } - - return config; -}); diff --git a/apps/tester-federation/configs/rspack.mini-app.mts b/apps/tester-federation/configs/rspack.mini-app.mts deleted file mode 100644 index 0e867a2c1..000000000 --- a/apps/tester-federation/configs/rspack.mini-app.mts +++ /dev/null @@ -1,106 +0,0 @@ -import * as Repack from '@callstack/repack'; -import { RsdoctorRspackPlugin } from '@rsdoctor/rspack-plugin'; -import rspack from '@rspack/core'; -import pkg from '../package.json' with { type: 'json' }; - -export default Repack.defineRspackConfig((env) => { - const { mode, context, platform } = env; - - const config = { - mode, - context, - entry: './src/mini/index.js', - resolve: { - ...Repack.getResolveOptions({ enablePackageExports: true }), - }, - output: { - path: '[context]/build/mini-app/[platform]', - uniqueName: 'MFTester-MiniApp', - }, - module: { - rules: [ - { - test: /\.[cm]?[jt]sx?$/, - use: { - loader: '@callstack/repack/babel-swc-loader', - parallel: true, - options: {}, - }, - type: 'javascript/auto', - }, - ...Repack.getAssetTransformRules({ inline: true }), - ], - }, - plugins: [ - new Repack.RepackPlugin({ - extraChunks: [ - { - include: /.*/, - type: 'remote', - outputPath: `build/mini-app/${platform}/output-remote`, - }, - ], - }), - new Repack.plugins.ModuleFederationPluginV1({ - name: 'MiniApp', - exposes: { - './MiniAppNavigator': './src/mini/navigation/MainNavigator', - }, - shared: { - react: { - singleton: true, - eager: false, - requiredVersion: '19.2.3', - }, - 'react-native': { - singleton: true, - eager: false, - requiredVersion: '0.84.1', - }, - '@react-navigation/native': { - singleton: true, - eager: false, - version: pkg.dependencies['@react-navigation/native'], - requiredVersion: pkg.dependencies['@react-navigation/native'], - }, - '@react-navigation/native-stack': { - singleton: true, - eager: false, - version: pkg.dependencies['@react-navigation/native-stack'], - requiredVersion: pkg.dependencies['@react-navigation/native-stack'], - }, - 'react-native-safe-area-context': { - singleton: true, - eager: false, - version: pkg.dependencies['react-native-safe-area-context'], - requiredVersion: pkg.dependencies['react-native-safe-area-context'], - }, - 'react-native-screens': { - singleton: true, - eager: false, - version: pkg.dependencies['react-native-screens'], - requiredVersion: pkg.dependencies['react-native-screens'], - }, - '@react-native-async-storage/async-storage': { - singleton: true, - eager: false, - version: - pkg.dependencies['@react-native-async-storage/async-storage'], - requiredVersion: - pkg.dependencies['@react-native-async-storage/async-storage'], - }, - }, - }), - new rspack.IgnorePlugin({ - resourceRegExp: /^@react-native-masked-view/, - }), - ], - }; - - if (process.env.RSDOCTOR) { - // @ts-expect-error - config.plugins?.push(new RsdoctorRspackPlugin()); - } - - return config; -}); diff --git a/apps/tester-federation/configs/webpack.host-app.mts b/apps/tester-federation/configs/webpack.host-app.mts deleted file mode 100644 index 299887b48..000000000 --- a/apps/tester-federation/configs/webpack.host-app.mts +++ /dev/null @@ -1,96 +0,0 @@ -import * as Repack from '@callstack/repack'; -import webpack from 'webpack'; -import pkg from '../package.json' with { type: 'json' }; - -export default Repack.defineWebpackConfig((env) => { - const { mode, context, platform } = env; - - return { - mode, - context, - entry: './src/host/index.js', - resolve: { - ...Repack.getResolveOptions({ enablePackageExports: true }), - }, - output: { - path: '[context]/build/host-app/[platform]', - uniqueName: 'MFTester-HostApp', - }, - module: { - rules: [ - { - test: /\.[cm]?[jt]sx?$/, - use: '@callstack/repack/babel-swc-loader', - type: 'javascript/auto', - }, - ...Repack.getAssetTransformRules(), - ], - }, - plugins: [ - // @ts-expect-error - new Repack.RepackPlugin({ - extraChunks: [ - { - include: /.*/, - type: 'remote', - outputPath: `build/host-app/${platform}/output-remote`, - }, - ], - }), - // @ts-expect-error - new Repack.plugins.ModuleFederationPluginV1({ - name: 'HostApp', - shared: { - react: { - singleton: true, - eager: true, - requiredVersion: '19.2.3', - }, - 'react-native': { - singleton: true, - eager: true, - requiredVersion: '0.84.1', - }, - '@react-navigation/native': { - singleton: true, - eager: true, - version: pkg.dependencies['@react-navigation/native'], - requiredVersion: pkg.dependencies['@react-navigation/native'], - }, - '@react-navigation/native-stack': { - singleton: true, - eager: true, - version: pkg.dependencies['@react-navigation/native-stack'], - requiredVersion: pkg.dependencies['@react-navigation/native-stack'], - }, - 'react-native-safe-area-context': { - singleton: true, - eager: true, - version: pkg.dependencies['react-native-safe-area-context'], - requiredVersion: pkg.dependencies['react-native-safe-area-context'], - }, - 'react-native-screens': { - singleton: true, - eager: true, - version: pkg.dependencies['react-native-screens'], - requiredVersion: pkg.dependencies['react-native-screens'], - }, - '@react-native-async-storage/async-storage': { - singleton: true, - eager: true, - version: - pkg.dependencies['@react-native-async-storage/async-storage'], - requiredVersion: - pkg.dependencies['@react-native-async-storage/async-storage'], - }, - }, - }), - new webpack.IgnorePlugin({ - resourceRegExp: /^@react-native-masked-view/, - }), - new webpack.EnvironmentPlugin({ - MF_CACHE: null, - }), - ], - }; -}); diff --git a/apps/tester-federation/configs/webpack.mini-app.mts b/apps/tester-federation/configs/webpack.mini-app.mts deleted file mode 100644 index 72710e5f1..000000000 --- a/apps/tester-federation/configs/webpack.mini-app.mts +++ /dev/null @@ -1,97 +0,0 @@ -import * as Repack from '@callstack/repack'; -import webpack from 'webpack'; -import pkg from '../package.json' with { type: 'json' }; - -export default Repack.defineWebpackConfig((env) => { - const { mode, context, platform } = env; - - return { - mode, - context, - entry: './src/mini/index.js', - resolve: { - ...Repack.getResolveOptions({ enablePackageExports: true }), - }, - output: { - path: '[context]/build/mini-app/[platform]', - uniqueName: 'MFTester-MiniApp', - }, - module: { - rules: [ - { - test: /\.[cm]?[jt]sx?$/, - use: '@callstack/repack/babel-swc-loader', - type: 'javascript/auto', - }, - ...Repack.getAssetTransformRules({ inline: true }), - ], - }, - plugins: [ - // @ts-expect-error - new Repack.RepackPlugin({ - extraChunks: [ - { - include: /.*/, - type: 'remote', - outputPath: `build/mini-app/${platform}/output-remote`, - }, - ], - }), - // @ts-expect-error - new Repack.plugins.ModuleFederationPluginV1({ - name: 'MiniApp', - filename: 'MiniApp.container.bundle', - exposes: { - './MiniAppNavigator': './src/mini/navigation/MainNavigator', - }, - shared: { - react: { - singleton: true, - eager: false, - requiredVersion: '19.2.3', - }, - 'react-native': { - singleton: true, - eager: false, - requiredVersion: '0.84.1', - }, - '@react-navigation/native': { - singleton: true, - eager: false, - version: pkg.dependencies['@react-navigation/native'], - requiredVersion: pkg.dependencies['@react-navigation/native'], - }, - '@react-navigation/native-stack': { - singleton: true, - eager: false, - version: pkg.dependencies['@react-navigation/native-stack'], - requiredVersion: pkg.dependencies['@react-navigation/native-stack'], - }, - 'react-native-safe-area-context': { - singleton: true, - eager: false, - version: pkg.dependencies['react-native-safe-area-context'], - requiredVersion: pkg.dependencies['react-native-safe-area-context'], - }, - 'react-native-screens': { - singleton: true, - eager: false, - version: pkg.dependencies['react-native-screens'], - requiredVersion: pkg.dependencies['react-native-screens'], - }, - '@react-native-async-storage/async-storage': { - singleton: true, - eager: false, - version: - pkg.dependencies['@react-native-async-storage/async-storage'], - requiredVersion: - pkg.dependencies['@react-native-async-storage/async-storage'], - }, - }, - }), - new webpack.IgnorePlugin({ - resourceRegExp: /^@react-native-masked-view/, - }), - ], - }; -}); diff --git a/apps/tester-federation/ios/ModuleFederationTester.xcworkspace/contents.xcworkspacedata b/apps/tester-federation/ios/ModuleFederationTester.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 57f64952a..000000000 --- a/apps/tester-federation/ios/ModuleFederationTester.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/apps/tester-federation/ios/Podfile b/apps/tester-federation/ios/Podfile deleted file mode 100644 index 6db62801c..000000000 --- a/apps/tester-federation/ios/Podfile +++ /dev/null @@ -1,15 +0,0 @@ -ws_dir = Pathname.new(__dir__) -ws_dir = ws_dir.parent until - File.exist?("#{ws_dir}/node_modules/react-native-test-app/test_app.rb") || - ws_dir.expand_path.to_s == '/' -require "#{ws_dir}/node_modules/react-native-test-app/test_app.rb" - -workspace 'ModuleFederationTester.xcworkspace' - -options = { - :bridgeless_enabled => true, - :fabric_enabled => true, - :hermes_enabled => true, -} - -use_test_app! options diff --git a/apps/tester-federation/ios/Podfile.lock b/apps/tester-federation/ios/Podfile.lock deleted file mode 100644 index e9a3c34ee..000000000 --- a/apps/tester-federation/ios/Podfile.lock +++ /dev/null @@ -1,2362 +0,0 @@ -PODS: - - AsyncStorage (3.1.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - callstack-repack (5.4.0): - - hermes-engine - - JWTDecode (~> 3.0.0) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - SwiftyRSA (~> 1.7) - - Yoga - - FBLazyVector (0.86.3) - - hermes-engine (250829098.0.17): - - hermes-engine/Pre-built (= 250829098.0.17) - - hermes-engine/Pre-built (250829098.0.17) - - JWTDecode (3.0.1) - - RCTDeprecation (0.86.3) - - RCTRequired (0.86.3) - - RCTSwiftUI (0.86.3) - - RCTSwiftUIWrapper (0.86.3): - - RCTSwiftUI - - RCTTypeSafety (0.86.3): - - FBLazyVector (= 0.86.3) - - RCTRequired (= 0.86.3) - - React-Core (= 0.86.3) - - React (0.86.3): - - React-Core (= 0.86.3) - - React-Core/DevSupport (= 0.86.3) - - React-Core/RCTWebSocket (= 0.86.3) - - React-RCTActionSheet (= 0.86.3) - - React-RCTAnimation (= 0.86.3) - - React-RCTBlob (= 0.86.3) - - React-RCTImage (= 0.86.3) - - React-RCTLinking (= 0.86.3) - - React-RCTNetwork (= 0.86.3) - - React-RCTSettings (= 0.86.3) - - React-RCTText (= 0.86.3) - - React-RCTVibration (= 0.86.3) - - React-callinvoker (0.86.3) - - React-Core (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default (= 0.86.3) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core-prebuilt (0.86.3): - - ReactNativeDependencies - - React-Core/CoreModulesHeaders (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/Default (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/DevSupport (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default (= 0.86.3) - - React-Core/RCTWebSocket (= 0.86.3) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTActionSheetHeaders (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTAnimationHeaders (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTBlobHeaders (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTImageHeaders (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTLinkingHeaders (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTNetworkHeaders (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTSettingsHeaders (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTTextHeaders (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTVibrationHeaders (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTWebSocket (0.86.3): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default (= 0.86.3) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-CoreModules (0.86.3): - - RCTTypeSafety (= 0.86.3) - - React-Core-prebuilt - - React-Core/CoreModulesHeaders (= 0.86.3) - - React-debug - - React-featureflags - - React-jsi (= 0.86.3) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-NativeModulesApple - - React-RCTBlob - - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.86.3) - - React-runtimeexecutor - - React-utils - - ReactCommon - - ReactNativeDependencies - - React-cxxreact (0.86.3): - - hermes-engine - - React-callinvoker (= 0.86.3) - - React-Core-prebuilt - - React-debug (= 0.86.3) - - React-jsi (= 0.86.3) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-logger (= 0.86.3) - - React-perflogger (= 0.86.3) - - React-runtimeexecutor - - React-timing (= 0.86.3) - - React-utils - - ReactNativeDependencies - - React-debug (0.86.3): - - React-debug/redbox (= 0.86.3) - - React-debug/redbox (0.86.3) - - React-defaultsnativemodule (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-domnativemodule - - React-Fabric/animated - - React-featureflags - - React-featureflagsnativemodule - - React-idlecallbacksnativemodule - - React-intersectionobservernativemodule - - React-jsi - - React-jsiexecutor - - React-microtasksnativemodule - - React-mutationobservernativemodule - - React-RCTFBReactNativeSpec - - React-viewtransitionnativemodule - - React-webperformancenativemodule - - ReactNativeDependencies - - Yoga - - React-domnativemodule (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-Fabric - - React-Fabric/bridging - - React-FabricComponents - - React-graphics - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-Fabric (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric/animated (= 0.86.3) - - React-Fabric/animationbackend (= 0.86.3) - - React-Fabric/animations (= 0.86.3) - - React-Fabric/attributedstring (= 0.86.3) - - React-Fabric/bridging (= 0.86.3) - - React-Fabric/componentregistry (= 0.86.3) - - React-Fabric/componentregistrynative (= 0.86.3) - - React-Fabric/components (= 0.86.3) - - React-Fabric/consistency (= 0.86.3) - - React-Fabric/core (= 0.86.3) - - React-Fabric/dom (= 0.86.3) - - React-Fabric/imagemanager (= 0.86.3) - - React-Fabric/leakchecker (= 0.86.3) - - React-Fabric/mounting (= 0.86.3) - - React-Fabric/observers (= 0.86.3) - - React-Fabric/scheduler (= 0.86.3) - - React-Fabric/telemetry (= 0.86.3) - - React-Fabric/uimanager (= 0.86.3) - - React-Fabric/viewtransition (= 0.86.3) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/animated (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric/animationbackend - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/animationbackend (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/animations (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/attributedstring (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/bridging (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/componentregistry (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/componentregistrynative (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.86.3) - - React-Fabric/components/root (= 0.86.3) - - React-Fabric/components/scrollview (= 0.86.3) - - React-Fabric/components/view (= 0.86.3) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/legacyviewmanagerinterop (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/root (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/scrollview (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/view (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-renderercss - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-Fabric/consistency (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/core (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/dom (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/imagemanager (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/leakchecker (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/mounting (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-jsinspectortracing - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric/observers/events (= 0.86.3) - - React-Fabric/observers/intersection (= 0.86.3) - - React-Fabric/observers/mutation (= 0.86.3) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers/events (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers/intersection (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers/mutation (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/scheduler (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric/animationbackend - - React-Fabric/observers/events - - React-Fabric/viewtransition - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-performancecdpmetrics - - React-performancetimeline - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/telemetry (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/uimanager (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric/uimanager/consistency (= 0.86.3) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/uimanager/consistency (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/viewtransition (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-FabricComponents (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-FabricComponents/components (= 0.86.3) - - React-FabricComponents/textlayoutmanager (= 0.86.3) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.86.3) - - React-FabricComponents/components/iostextinput (= 0.86.3) - - React-FabricComponents/components/modal (= 0.86.3) - - React-FabricComponents/components/rncore (= 0.86.3) - - React-FabricComponents/components/safeareaview (= 0.86.3) - - React-FabricComponents/components/scrollview (= 0.86.3) - - React-FabricComponents/components/switch (= 0.86.3) - - React-FabricComponents/components/text (= 0.86.3) - - React-FabricComponents/components/textinput (= 0.86.3) - - React-FabricComponents/components/unimplementedview (= 0.86.3) - - React-FabricComponents/components/virtualview (= 0.86.3) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/inputaccessory (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/iostextinput (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/modal (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/rncore (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/safeareaview (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/scrollview (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/switch (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/text (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/textinput (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/unimplementedview (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/virtualview (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/textlayoutmanager (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricImage (0.86.3): - - hermes-engine - - RCTRequired (= 0.86.3) - - RCTTypeSafety (= 0.86.3) - - React-Core-prebuilt - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-jsiexecutor (= 0.86.3) - - React-logger - - React-rendererdebug - - React-utils - - ReactCommon - - ReactNativeDependencies - - Yoga - - React-featureflags (0.86.3): - - React-Core-prebuilt - - ReactNativeDependencies - - React-featureflagsnativemodule (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-featureflags - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-graphics (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-featureflags - - React-jsi - - React-jsiexecutor - - React-rendererdebug - - React-utils - - ReactNativeDependencies - - React-hermes (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact (= 0.86.3) - - React-jsi - - React-jsiexecutor (= 0.86.3) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-oscompat - - React-perflogger (= 0.86.3) - - React-runtimeexecutor - - ReactNativeDependencies - - React-idlecallbacksnativemodule (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - React-runtimescheduler - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-ImageManager (0.86.3): - - React-Core-prebuilt - - React-Core/Default - - React-debug - - React-Fabric - - React-graphics - - React-rendererdebug - - React-utils - - ReactNativeDependencies - - React-intersectionobservernativemodule (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-Fabric - - React-Fabric/bridging - - React-graphics - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - React-runtimescheduler - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-jserrorhandler (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - ReactCommon/turbomodule/bridging - - ReactNativeDependencies - - React-jsi (0.86.3): - - hermes-engine - - React-Core-prebuilt - - ReactNativeDependencies - - React-jsiexecutor (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-jserrorhandler - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-utils - - ReactNativeDependencies - - React-jsinspector (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-featureflags - - React-jsi - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-jsinspectortracing - - React-oscompat - - React-perflogger (= 0.86.3) - - React-runtimeexecutor - - React-utils - - ReactNativeDependencies - - React-jsinspectorcdp (0.86.3): - - React-Core-prebuilt - - ReactNativeDependencies - - React-jsinspectornetwork (0.86.3): - - React-Core-prebuilt - - React-jsinspectorcdp - - ReactNativeDependencies - - React-jsinspectortracing (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-jsi - - React-jsinspectornetwork - - React-oscompat - - React-timing - - React-utils - - ReactNativeDependencies - - React-jsitooling (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact (= 0.86.3) - - React-debug - - React-jsi (= 0.86.3) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-runtimeexecutor - - React-utils - - ReactNativeDependencies - - React-jsitracing (0.86.3): - - React-jsi - - React-logger (0.86.3): - - React-Core-prebuilt - - ReactNativeDependencies - - React-Mapbuffer (0.86.3): - - React-Core-prebuilt - - React-debug - - ReactNativeDependencies - - React-microtasksnativemodule (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-mutationobservernativemodule (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-Fabric - - React-Fabric/bridging - - React-Fabric/observers/mutation - - React-featureflags - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - react-native-safe-area-context (5.8.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - react-native-safe-area-context/common (= 5.8.0) - - react-native-safe-area-context/fabric (= 5.8.0) - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - react-native-safe-area-context/common (5.8.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - react-native-safe-area-context/fabric (5.8.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - react-native-safe-area-context/common - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-NativeModulesApple (0.86.3): - - hermes-engine - - React-callinvoker - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-runtimeexecutor - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-networking (0.86.3): - - React-Core-prebuilt - - React-jsinspectornetwork - - React-jsinspectortracing - - React-performancetimeline - - React-timing - - ReactNativeDependencies - - React-oscompat (0.86.3) - - React-perflogger (0.86.3): - - React-Core-prebuilt - - ReactNativeDependencies - - React-performancecdpmetrics (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-jsi - - React-performancetimeline - - React-runtimeexecutor - - React-timing - - ReactNativeDependencies - - React-performancetimeline (0.86.3): - - React-Core-prebuilt - - React-featureflags - - React-jsinspector - - React-jsinspectortracing - - React-perflogger - - React-timing - - ReactNativeDependencies - - React-RCTActionSheet (0.86.3): - - React-Core/RCTActionSheetHeaders (= 0.86.3) - - React-RCTAnimation (0.86.3): - - RCTTypeSafety - - React-Core-prebuilt - - React-Core/RCTAnimationHeaders - - React-debug - - React-featureflags - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactNativeDependencies - - React-RCTAppDelegate (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-CoreModules - - React-debug - - React-defaultsnativemodule - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsitooling - - React-NativeModulesApple - - React-RCTFabric - - React-RCTFBReactNativeSpec - - React-RCTImage - - React-RCTNetwork - - React-RCTRuntime - - React-rendererdebug - - React-RuntimeApple - - React-RuntimeCore - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon - - ReactNativeDependencies - - React-RCTBlob (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-Core/RCTBlobHeaders - - React-Core/RCTWebSocket - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - React-RCTNetwork - - ReactCommon - - ReactNativeDependencies - - React-RCTFabric (0.86.3): - - hermes-engine - - RCTSwiftUIWrapper - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-FabricComponents - - React-FabricImage - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-networking - - React-performancecdpmetrics - - React-performancetimeline - - React-RCTAnimation - - React-RCTFBReactNativeSpec - - React-RCTImage - - React-RCTText - - React-rendererconsistency - - React-renderercss - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-RCTFBReactNativeSpec (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.86.3) - - ReactCommon - - ReactNativeDependencies - - React-RCTFBReactNativeSpec/components (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-NativeModulesApple - - React-rendererdebug - - React-utils - - ReactCommon - - ReactNativeDependencies - - Yoga - - React-RCTImage (0.86.3): - - RCTTypeSafety - - React-Core-prebuilt - - React-Core/RCTImageHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - React-RCTNetwork - - ReactCommon - - ReactNativeDependencies - - React-RCTLinking (0.86.3): - - React-Core/RCTLinkingHeaders (= 0.86.3) - - React-jsi (= 0.86.3) - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactCommon/turbomodule/core (= 0.86.3) - - React-RCTNetwork (0.86.3): - - RCTTypeSafety - - React-Core-prebuilt - - React-Core/RCTNetworkHeaders - - React-debug - - React-featureflags - - React-jsi - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-NativeModulesApple - - React-networking - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactNativeDependencies - - React-RCTRuntime (0.86.3): - - hermes-engine - - React-Core - - React-Core-prebuilt - - React-debug - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-RuntimeApple - - React-RuntimeCore - - React-runtimeexecutor - - React-RuntimeHermes - - React-utils - - ReactNativeDependencies - - React-RCTSettings (0.86.3): - - RCTTypeSafety - - React-Core-prebuilt - - React-Core/RCTSettingsHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactNativeDependencies - - React-RCTText (0.86.3): - - React-Core/RCTTextHeaders (= 0.86.3) - - Yoga - - React-RCTVibration (0.86.3): - - React-Core-prebuilt - - React-Core/RCTVibrationHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactNativeDependencies - - React-rendererconsistency (0.86.3) - - React-renderercss (0.86.3): - - React-debug - - React-utils - - React-rendererdebug (0.86.3): - - React-Core-prebuilt - - React-debug - - ReactNativeDependencies - - React-RuntimeApple (0.86.3): - - hermes-engine - - React-callinvoker - - React-Core-prebuilt - - React-Core/Default - - React-CoreModules - - React-cxxreact - - React-featureflags - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsitooling - - React-Mapbuffer - - React-NativeModulesApple - - React-RCTFabric - - React-RCTFBReactNativeSpec - - React-RuntimeCore - - React-runtimeexecutor - - React-RuntimeHermes - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - React-RuntimeCore (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-Fabric - - React-featureflags - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsitooling - - React-performancetimeline - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - React-runtimeexecutor (0.86.3): - - React-Core-prebuilt - - React-debug - - React-featureflags - - React-jsi (= 0.86.3) - - React-utils - - ReactNativeDependencies - - React-RuntimeHermes (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-featureflags - - React-hermes - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-jsitracing - - React-RuntimeCore - - React-runtimeexecutor - - React-utils - - ReactNativeDependencies - - React-runtimescheduler (0.86.3): - - hermes-engine - - React-callinvoker - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - React-jsinspectortracing - - React-performancetimeline - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-timing - - React-utils - - ReactNativeDependencies - - React-timing (0.86.3): - - React-debug - - React-utils (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-debug - - React-jsi (= 0.86.3) - - ReactNativeDependencies - - React-viewtransitionnativemodule (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-Fabric - - React-Fabric/bridging - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-webperformancenativemodule (0.86.3): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-jsi - - React-jsiexecutor - - React-performancetimeline - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - ReactAppDependencyProvider (0.86.3): - - ReactCodegen - - ReactCodegen (0.86.3): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-FabricImage - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-NativeModulesApple - - React-RCTAppDelegate - - React-rendererdebug - - React-utils - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - ReactCommon (0.86.3): - - React-Core-prebuilt - - ReactCommon/turbomodule (= 0.86.3) - - ReactNativeDependencies - - ReactCommon/turbomodule (0.86.3): - - hermes-engine - - React-callinvoker (= 0.86.3) - - React-Core-prebuilt - - React-cxxreact (= 0.86.3) - - React-jsi (= 0.86.3) - - React-logger (= 0.86.3) - - React-perflogger (= 0.86.3) - - ReactCommon/turbomodule/bridging (= 0.86.3) - - ReactCommon/turbomodule/core (= 0.86.3) - - ReactNativeDependencies - - ReactCommon/turbomodule/bridging (0.86.3): - - hermes-engine - - React-callinvoker (= 0.86.3) - - React-Core-prebuilt - - React-cxxreact (= 0.86.3) - - React-jsi (= 0.86.3) - - React-logger (= 0.86.3) - - React-perflogger (= 0.86.3) - - ReactNativeDependencies - - ReactCommon/turbomodule/core (0.86.3): - - hermes-engine - - React-callinvoker (= 0.86.3) - - React-Core-prebuilt - - React-cxxreact (= 0.86.3) - - React-debug (= 0.86.3) - - React-featureflags (= 0.86.3) - - React-jsi (= 0.86.3) - - React-logger (= 0.86.3) - - React-perflogger (= 0.86.3) - - React-utils (= 0.86.3) - - ReactNativeDependencies - - ReactNativeDependencies (0.86.3) - - ReactNativeHost (0.5.21): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTAppDelegate - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - ReactTestApp-DevSupport (5.4.5): - - React-Core - - React-jsi - - RNScreens (4.26.2): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-RCTImage - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - RNScreens/common (= 4.26.2) - - Yoga - - RNScreens/common (4.26.2): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-RCTImage - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - SwiftyRSA (1.7.0): - - SwiftyRSA/ObjC (= 1.7.0) - - SwiftyRSA/ObjC (1.7.0) - - Yoga (0.0.0) - -DEPENDENCIES: - - "AsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" - - "callstack-repack (from `../node_modules/@callstack/repack`)" - - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - - RCTRequired (from `../node_modules/react-native/Libraries/Required`) - - RCTSwiftUI (from `../node_modules/react-native/ReactApple/RCTSwiftUI`) - - RCTSwiftUIWrapper (from `../node_modules/react-native/ReactApple/RCTSwiftUIWrapper`) - - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - - React (from `../node_modules/react-native/`) - - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - - React-Core (from `../node_modules/react-native/`) - - React-Core-prebuilt (from `../node_modules/react-native/React-Core-prebuilt.podspec`) - - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) - - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) - - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) - - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) - - React-Fabric (from `../node_modules/react-native/ReactCommon`) - - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) - - React-FabricImage (from `../node_modules/react-native/ReactCommon`) - - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) - - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) - - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) - - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) - - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) - - React-intersectionobservernativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/intersectionobserver`) - - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) - - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) - - React-jsinspectorcdp (from `../node_modules/react-native/ReactCommon/jsinspector-modern/cdp`) - - React-jsinspectornetwork (from `../node_modules/react-native/ReactCommon/jsinspector-modern/network`) - - React-jsinspectortracing (from `../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) - - React-jsitooling (from `../node_modules/react-native/ReactCommon/jsitooling`) - - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - - React-mutationobservernativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/mutationobserver`) - - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - - React-networking (from `../node_modules/react-native/ReactCommon/react/networking`) - - React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`) - - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - - React-performancecdpmetrics (from `../node_modules/react-native/ReactCommon/react/performance/cdpmetrics`) - - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) - - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) - - React-RCTFabric (from `../node_modules/react-native/React`) - - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) - - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) - - React-RCTRuntime (from `../node_modules/react-native/React/Runtime`) - - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) - - React-renderercss (from `../node_modules/react-native/ReactCommon/react/renderer/css`) - - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) - - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) - - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - - React-viewtransitionnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/viewtransition`) - - React-webperformancenativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/webperformance`) - - ReactAppDependencyProvider (from `build/generated/ios/ReactAppDependencyProvider`) - - ReactCodegen (from `build/generated/ios/ReactCodegen`) - - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - - ReactNativeDependencies (from `../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec`) - - "ReactNativeHost (from `../../../node_modules/.pnpm/react-native-test-app@5.4.5_@expo+config-plugins@57.0.9_typescript@7.0.2__@react-native_7c529de154f01eddca5a102ec2b2b3e5/node_modules/@rnx-kit/react-native-host`)" - - ReactTestApp-DevSupport (from `../node_modules/react-native-test-app`) - - RNScreens (from `../node_modules/react-native-screens`) - - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) - -SPEC REPOS: - trunk: - - JWTDecode - - SwiftyRSA - -EXTERNAL SOURCES: - AsyncStorage: - :path: "../node_modules/@react-native-async-storage/async-storage" - callstack-repack: - :path: "../node_modules/@callstack/repack" - FBLazyVector: - :path: "../node_modules/react-native/Libraries/FBLazyVector" - hermes-engine: - :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-v250829098.0.17 - RCTDeprecation: - :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" - RCTRequired: - :path: "../node_modules/react-native/Libraries/Required" - RCTSwiftUI: - :path: "../node_modules/react-native/ReactApple/RCTSwiftUI" - RCTSwiftUIWrapper: - :path: "../node_modules/react-native/ReactApple/RCTSwiftUIWrapper" - RCTTypeSafety: - :path: "../node_modules/react-native/Libraries/TypeSafety" - React: - :path: "../node_modules/react-native/" - React-callinvoker: - :path: "../node_modules/react-native/ReactCommon/callinvoker" - React-Core: - :path: "../node_modules/react-native/" - React-Core-prebuilt: - :podspec: "../node_modules/react-native/React-Core-prebuilt.podspec" - React-CoreModules: - :path: "../node_modules/react-native/React/CoreModules" - React-cxxreact: - :path: "../node_modules/react-native/ReactCommon/cxxreact" - React-debug: - :path: "../node_modules/react-native/ReactCommon/react/debug" - React-defaultsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" - React-domnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" - React-Fabric: - :path: "../node_modules/react-native/ReactCommon" - React-FabricComponents: - :path: "../node_modules/react-native/ReactCommon" - React-FabricImage: - :path: "../node_modules/react-native/ReactCommon" - React-featureflags: - :path: "../node_modules/react-native/ReactCommon/react/featureflags" - React-featureflagsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" - React-graphics: - :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" - React-hermes: - :path: "../node_modules/react-native/ReactCommon/hermes" - React-idlecallbacksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" - React-ImageManager: - :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" - React-intersectionobservernativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/intersectionobserver" - React-jserrorhandler: - :path: "../node_modules/react-native/ReactCommon/jserrorhandler" - React-jsi: - :path: "../node_modules/react-native/ReactCommon/jsi" - React-jsiexecutor: - :path: "../node_modules/react-native/ReactCommon/jsiexecutor" - React-jsinspector: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" - React-jsinspectorcdp: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/cdp" - React-jsinspectornetwork: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/network" - React-jsinspectortracing: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" - React-jsitooling: - :path: "../node_modules/react-native/ReactCommon/jsitooling" - React-jsitracing: - :path: "../node_modules/react-native/ReactCommon/hermes/executor/" - React-logger: - :path: "../node_modules/react-native/ReactCommon/logger" - React-Mapbuffer: - :path: "../node_modules/react-native/ReactCommon" - React-microtasksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" - React-mutationobservernativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/mutationobserver" - react-native-safe-area-context: - :path: "../node_modules/react-native-safe-area-context" - React-NativeModulesApple: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" - React-networking: - :path: "../node_modules/react-native/ReactCommon/react/networking" - React-oscompat: - :path: "../node_modules/react-native/ReactCommon/oscompat" - React-perflogger: - :path: "../node_modules/react-native/ReactCommon/reactperflogger" - React-performancecdpmetrics: - :path: "../node_modules/react-native/ReactCommon/react/performance/cdpmetrics" - React-performancetimeline: - :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" - React-RCTActionSheet: - :path: "../node_modules/react-native/Libraries/ActionSheetIOS" - React-RCTAnimation: - :path: "../node_modules/react-native/Libraries/NativeAnimation" - React-RCTAppDelegate: - :path: "../node_modules/react-native/Libraries/AppDelegate" - React-RCTBlob: - :path: "../node_modules/react-native/Libraries/Blob" - React-RCTFabric: - :path: "../node_modules/react-native/React" - React-RCTFBReactNativeSpec: - :path: "../node_modules/react-native/React" - React-RCTImage: - :path: "../node_modules/react-native/Libraries/Image" - React-RCTLinking: - :path: "../node_modules/react-native/Libraries/LinkingIOS" - React-RCTNetwork: - :path: "../node_modules/react-native/Libraries/Network" - React-RCTRuntime: - :path: "../node_modules/react-native/React/Runtime" - React-RCTSettings: - :path: "../node_modules/react-native/Libraries/Settings" - React-RCTText: - :path: "../node_modules/react-native/Libraries/Text" - React-RCTVibration: - :path: "../node_modules/react-native/Libraries/Vibration" - React-rendererconsistency: - :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" - React-renderercss: - :path: "../node_modules/react-native/ReactCommon/react/renderer/css" - React-rendererdebug: - :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" - React-RuntimeApple: - :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" - React-RuntimeCore: - :path: "../node_modules/react-native/ReactCommon/react/runtime" - React-runtimeexecutor: - :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" - React-RuntimeHermes: - :path: "../node_modules/react-native/ReactCommon/react/runtime" - React-runtimescheduler: - :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" - React-timing: - :path: "../node_modules/react-native/ReactCommon/react/timing" - React-utils: - :path: "../node_modules/react-native/ReactCommon/react/utils" - React-viewtransitionnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/viewtransition" - React-webperformancenativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/webperformance" - ReactAppDependencyProvider: - :path: build/generated/ios/ReactAppDependencyProvider - ReactCodegen: - :path: build/generated/ios/ReactCodegen - ReactCommon: - :path: "../node_modules/react-native/ReactCommon" - ReactNativeDependencies: - :podspec: "../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec" - ReactNativeHost: - :path: "../../../node_modules/.pnpm/react-native-test-app@5.4.5_@expo+config-plugins@57.0.9_typescript@7.0.2__@react-native_7c529de154f01eddca5a102ec2b2b3e5/node_modules/@rnx-kit/react-native-host" - ReactTestApp-DevSupport: - :path: "../node_modules/react-native-test-app" - RNScreens: - :path: "../node_modules/react-native-screens" - Yoga: - :path: "../node_modules/react-native/ReactCommon/yoga" - -SPEC CHECKSUMS: - AsyncStorage: 163ab23f6aa37a58b7f2379d0b4ee7ac84d6655c - callstack-repack: 3f61a1d346f8b2892226889d5ea0b7d66be3570f - FBLazyVector: 2138c6c2ab66c31bf5754dc18097fbc498a49c7f - hermes-engine: f950618e994e43d007f013c66a7666906b11ed29 - JWTDecode: 2eed97c2fa46ccaf3049a787004eedf0be474a87 - RCTDeprecation: 96f68ebf33f8762466b01d57d6e873c4f30efb07 - RCTRequired: 166eed8ad6d8440e73e56d09a9090366609823d2 - RCTSwiftUI: e818198d11928a78c2b2afe281d072171dab617f - RCTSwiftUIWrapper: b9457f8613a1d0c8146c08844a04154702ff8809 - RCTTypeSafety: efc19e6b92931abf0b68b064212323a258a5f019 - React: 52dce66f71097ed7a4968673d95eeb8095ded74e - React-callinvoker: afa0525ab27f4ffbb4c377f855fe9368edb099bc - React-Core: fdb67992e049f2526ade3e258c21b8404e7943a3 - React-Core-prebuilt: 9abc518a8aa7aa4fa3bbbe52bc825bcd9fb3c3ce - React-CoreModules: 456d91152aa283ddc6ae8abfcec3292af88912f6 - React-cxxreact: 73a20c0dde5ec221f98d5e4da0e71349ab48353d - React-debug: d06757ac6c78b84af0c31e513a83662d6b8d0ac7 - React-defaultsnativemodule: ad832e8ce045ef01ea586834b1732c3d4d4d5d86 - React-domnativemodule: 7d1bd200df2d58c2f61d416cf16838c0c9fbb06c - React-Fabric: 363e0524d0724a17afbcba653da4f3398f41236e - React-FabricComponents: d41c87cd39ccf6c4c1df7f726ced22db1f90f072 - React-FabricImage: b4fb0ebc0a2e6fabfd8de8b3fa441331bda99403 - React-featureflags: 1c88b4566806604500a8a9fdf9ad0108c2e9d541 - React-featureflagsnativemodule: dab00693f49c6629f186dedcc3cdaeadd094972f - React-graphics: 991a75fa954a20d0297580dc7fd4e365982cef3b - React-hermes: 65cfbf62d8d31c1e69f3556ff6836a2890cf4a62 - React-idlecallbacksnativemodule: 492f6da9e5a2fa37e2ac0c3a7447302a342d42c2 - React-ImageManager: 02effe13f7b0ca3a7282ee364a8691cd789b9726 - React-intersectionobservernativemodule: 91b54a39a2e7187b9caf62e8b7310aa2d0026679 - React-jserrorhandler: 91985482e35b0b102febda42168ee71946db9958 - React-jsi: 69052b2d1958c9069a143f1637f382b933917b43 - React-jsiexecutor: b9b98ea432f58ee2899a60204f090d0bc8d48313 - React-jsinspector: 75119552df2413c48d33e9f0a72836b30c1ccb14 - React-jsinspectorcdp: 8e65995e9083f7bce0839d3169f6f2d304049e2e - React-jsinspectornetwork: 7e8375e27430cc7694c52fb904db2b9118194480 - React-jsinspectortracing: 643bd9d6f9dc64ea9b28b0e915b4fb0b9b0b1b90 - React-jsitooling: b7ec4b982dfc62f744587deeb1948b983f9edaa4 - React-jsitracing: 8d2f0c8d6d81324606b6d55b946cb443a0c5a425 - React-logger: b9bf04943233973fece220497f0784eaad409b3a - React-Mapbuffer: 3c805ea54675b00ef1755f23b3c1fccf34962b93 - React-microtasksnativemodule: 97a771dbbb4315c71579995b53e4e3e351a99d89 - React-mutationobservernativemodule: 530bff1bba9511a5133e3cf8170e3b2c0df49e89 - react-native-safe-area-context: fb5c8ee9f6dd62ef710611b3d370c501f42a4ac0 - React-NativeModulesApple: 2b658272ca69df0694cf5d54f9510aa7c33977bc - React-networking: 6be0b80e18e710dd30e77b04838ec46666a7bb78 - React-oscompat: cea7c66df8076bd97e95885d7f584b86afffde41 - React-perflogger: 9110ba33a4aa70c708e9d50aeca040e6f2aefaf7 - React-performancecdpmetrics: d9c07c4855c5a975cc7abc482fcb086e8a87abd1 - React-performancetimeline: 336af57802d9cdb4ac079774007677031c891fe0 - React-RCTActionSheet: aeb20277150454e9020517c6a2cb70410d4856d9 - React-RCTAnimation: 8453deeb01d0f284202c9670b5f7d827575b4967 - React-RCTAppDelegate: 5e9c748cc138decd9045683d8987700d824a99ff - React-RCTBlob: e6c01cae3eeb7e63a55b12f72b7dfcfd8236b4b2 - React-RCTFabric: deab07276af1b74b0b8d0772a9a58cac15785312 - React-RCTFBReactNativeSpec: 83d67909e5c67b460bec8851d8413a8ce1ecc6b2 - React-RCTImage: ec8488bc119d7e5d3209f85be3ebda7e4a937c61 - React-RCTLinking: b6ff56c2f206127d49d338262418c097ea306ad0 - React-RCTNetwork: 08d71b365278511a9bb07885b4a54bdc510d99bf - React-RCTRuntime: 634c58094cc601bc2a63ef38b2389cf81143fbcb - React-RCTSettings: 372551bc9f30d26890f5c5fd569dcd15243c656c - React-RCTText: 62cff7e93aeb3c06e3634f1c59984e8c5322b542 - React-RCTVibration: 2e8c1630ae80c092f437db9638a03715f616ac03 - React-rendererconsistency: e8b244c284931cac80a30ce754d77f6c64e528f9 - React-renderercss: 97791244f7ff7a2a060d07acbf240261d4a0519c - React-rendererdebug: 9d023ca26ed3daf60e7b7615729bb7ba6027a96a - React-RuntimeApple: 2daf515379135ccd5e3af5306c90f7827428f4ca - React-RuntimeCore: 637867058de3e0ae7f1ef2653cd0e01c4c850d71 - React-runtimeexecutor: a5cdf5961ec221a40e6612f35bd1e23f84fd9702 - React-RuntimeHermes: 390a5605857f207c8261c75fd4a296ead9aeee0f - React-runtimescheduler: 1be91f9ec0417bb69bd8dfabbe11b07147b24538 - React-timing: bbb861d02c9bcee3e9c08c51a38f59d27c0904ce - React-utils: 28c555b582a9607a938cc0f47b5a7600db42393a - React-viewtransitionnativemodule: 3977270cf367fd1562221047e2358a26da174f2d - React-webperformancenativemodule: fb203d77856165582e519855fc13773a2855f9a6 - ReactAppDependencyProvider: bb350d1333fd459c1aabe782088419a9b8894d3a - ReactCodegen: 0871c56db6eb02e1dc2ea9172da4a561bd51eaa5 - ReactCommon: 02f6a489d5eb4ab79d7deba5cd4434e0ba351a07 - ReactNativeDependencies: 6738e602b46fd24aa453cd58267ec3bb8bf29d27 - ReactNativeHost: c49183895850a534a9d58049bf02b3c80a3ebb0c - ReactTestApp-DevSupport: 55c92a794b09b56e00757e68312c6340d7c520ee - RNScreens: 7118cd7715c226856125b5bece3c4d9abec90356 - SwiftyRSA: 8c6dd1ea7db1b8dc4fb517a202f88bb1354bc2c6 - Yoga: 18b74b3ade30bebc1904004dfaceae1dd02a330a - -PODFILE CHECKSUM: 16a059e985a55bc49163512a311428a48f715334 - -COCOAPODS: 1.15.2 diff --git a/apps/tester-federation/package.json b/apps/tester-federation/package.json deleted file mode 100644 index ee4236ddf..000000000 --- a/apps/tester-federation/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "tester-federation", - "version": "0.0.1", - "private": true, - "scripts": { - "android": "react-native run-android --appId com.tester.federation --no-packager", - "ios": "react-native run-ios --no-packager", - "pods": "(cd ios && bundle install && (bundle exec pod install || bundle exec pod update))", - "pods:update": "(cd ios && bundle install && bundle exec pod update)", - "start:hostapp": "react-native webpack-start --config config.host-app.mts", - "start:miniapp": "react-native webpack-start --config config.mini-app.mts --port 8082", - "bundle": "pnpm run \"/^bundle:(hostapp|miniapp)$/\"", - "bundle:hostapp": "pnpm run \"/^bundle:hostapp:(ios|android)$/\"", - "bundle:miniapp": "pnpm run \"/^bundle:miniapp:(ios|android)$/\"", - "bundle:hostapp:android": "react-native webpack-bundle --config config.host-app.mts --platform android --entry-file src/host/index.js --dev=false --bundle-output build/host-app/android/output-local/index.android.bundle --assets-dest build/host-app/android/output-local/res", - "bundle:hostapp:ios": "react-native webpack-bundle --config config.host-app.mts --platform ios --entry-file src/host/index.js --dev=false --bundle-output build/host-app/ios/output-local/main.jsbundle --assets-dest build/host-app/ios/output-local", - "bundle:miniapp:android": "react-native webpack-bundle --config config.mini-app.mts --platform android --entry-file src/mini/index.js --dev=false --bundle-output build/mini-app/android/output-local/index.android.bundle --assets-dest build/mini-app/android/output-local/res", - "bundle:miniapp:ios": "react-native webpack-bundle --config config.mini-app.mts --platform ios --entry-file src/mini/index.js --dev=false --bundle-output build/mini-app/ios/output-local/main.jsbundle --assets-dest build/mini-app/ios/output-local" - }, - "dependencies": { - "@callstack/repack": "workspace:*", - "@react-native-async-storage/async-storage": "catalog:testers", - "@react-navigation/native": "7.3.14", - "@react-navigation/native-stack": "7.18.6", - "react": "catalog:", - "react-native": "catalog:", - "react-native-safe-area-context": "catalog:testers", - "react-native-screens": "catalog:testers" - }, - "devDependencies": { - "@babel/core": "^7.29.7", - "@react-native-community/cli": "catalog:testers", - "@react-native-community/cli-platform-android": "catalog:testers", - "@react-native-community/cli-platform-ios": "catalog:testers", - "@react-native/babel-preset": "catalog:testers", - "@react-native/typescript-config": "catalog:testers", - "@rsdoctor/rspack-plugin": "1.6.4", - "@rspack/core": "catalog:", - "@swc/helpers": "catalog:", - "@types/jest": "^29.5.13", - "@types/react": "catalog:testers", - "react-native-test-app": "catalog:testers", - "terser-webpack-plugin": "catalog:", - "typescript": "catalog:", - "webpack": "catalog:" - } -} diff --git a/apps/tester-federation/react-native.config.js b/apps/tester-federation/react-native.config.js deleted file mode 100644 index 2f7653e16..000000000 --- a/apps/tester-federation/react-native.config.js +++ /dev/null @@ -1,13 +0,0 @@ -const { configureProjects } = require('react-native-test-app'); - -module.exports = { - project: configureProjects({ - android: { - sourceDir: 'android', - }, - ios: { - sourceDir: 'ios', - }, - }), - commands: require('@callstack/repack/commands'), -}; diff --git a/apps/tester-federation/src/host/App.tsx b/apps/tester-federation/src/host/App.tsx deleted file mode 100644 index 4fd1a6851..000000000 --- a/apps/tester-federation/src/host/App.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { NavigationContainer } from '@react-navigation/native'; -import MainNavigator from './navigation/MainNavigator'; - -const App = () => { - return ( - - - - ); -}; - -export default App; diff --git a/apps/tester-federation/src/host/index.js b/apps/tester-federation/src/host/index.js deleted file mode 100644 index 5e2ad7832..000000000 --- a/apps/tester-federation/src/host/index.js +++ /dev/null @@ -1,22 +0,0 @@ -import { Federated, ScriptManager } from '@callstack/repack/client'; -import AsyncStorage from '@react-native-async-storage/async-storage'; -import { AppRegistry, Platform } from 'react-native'; - -import { components } from '../../app.json'; -import App from './App'; - -ScriptManager.shared.setStorage(AsyncStorage); - -const resolveURL = Federated.createURLResolver({ - containers: { MiniApp: 'http://localhost:8082/[name][ext]' }, -}); - -ScriptManager.shared.addResolver(async (scriptId, caller) => { - return { - url: resolveURL(scriptId, caller), - query: { platform: Platform.OS }, - cache: process.env.MF_CACHE, - }; -}); - -AppRegistry.registerComponent(components[0].appKey, () => App); diff --git a/apps/tester-federation/src/host/navigation/MainNavigator.tsx b/apps/tester-federation/src/host/navigation/MainNavigator.tsx deleted file mode 100644 index 1533b563a..000000000 --- a/apps/tester-federation/src/host/navigation/MainNavigator.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { - createNativeStackNavigator, - type NativeStackNavigationProp, -} from '@react-navigation/native-stack'; -import { StyleSheet } from 'react-native'; - -import DetailScreen from '../screens/DetailScreen'; -import HomeScreen from '../screens/HomeScreen'; -import MiniAppScreen from '../screens/MiniAppScreen'; - -export type MainStackParamList = { - Home: undefined; - Detail: undefined; - MiniApp: undefined; -}; - -export type MainStackNavigationProp = - NativeStackNavigationProp; - -const Main = createNativeStackNavigator(); - -const MainNavigator = () => { - return ( - - - - - - ); -}; - -const styles = StyleSheet.create({ - header: { - backgroundColor: '#3498DB', - }, - headerTitle: { - color: '#FFFFFF', - }, -}); - -export default MainNavigator; diff --git a/apps/tester-federation/src/host/screens/DetailScreen.tsx b/apps/tester-federation/src/host/screens/DetailScreen.tsx deleted file mode 100644 index 211051c96..000000000 --- a/apps/tester-federation/src/host/screens/DetailScreen.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { StyleSheet, Text, View } from 'react-native'; - -const DetailScreen = () => { - return ( - - DetailScreen - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - gap: 10, - justifyContent: 'center', - alignItems: 'center', - }, - label: { - fontSize: 20, - fontWeight: '700', - }, -}); - -export default DetailScreen; diff --git a/apps/tester-federation/src/host/screens/HomeScreen.tsx b/apps/tester-federation/src/host/screens/HomeScreen.tsx deleted file mode 100644 index 5dcf03d2f..000000000 --- a/apps/tester-federation/src/host/screens/HomeScreen.tsx +++ /dev/null @@ -1,157 +0,0 @@ -import { useNavigation } from '@react-navigation/native'; -import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; -import type { MainStackNavigationProp } from '../navigation/MainNavigator'; - -const HomeScreen = () => { - const navigation = useNavigation(); - - return ( - - - Welcome Home - - Explore the host app and its features - - navigation.navigate('Detail')} - > - See details - - - - Mini Apps - - navigation.navigate('MiniApp')} - > - 🖼️ - - Gallery - - - - 💬 - - Messages - - - - ⚙️ - - Settings - - - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#F5F9FF', - }, - hostSection: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - paddingHorizontal: 20, - }, - title: { - fontSize: 28, - fontWeight: 'bold', - marginBottom: 10, - color: '#2C3E50', - }, - subtitle: { - fontSize: 16, - color: '#34495E', - marginBottom: 30, - textAlign: 'center', - }, - button: { - backgroundColor: '#3498DB', - padding: 15, - borderRadius: 10, - alignItems: 'center', - }, - buttonText: { - color: 'white', - fontSize: 16, - fontWeight: '600', - }, - miniAppSection: { - backgroundColor: 'white', - padding: 20, - borderTopLeftRadius: 30, - borderTopRightRadius: 30, - shadowColor: '#34495E', - shadowOffset: { width: 0, height: -3 }, - shadowOpacity: 0.1, - shadowRadius: 5, - elevation: 5, - }, - sectionTitle: { - fontSize: 24, - fontWeight: '600', - marginBottom: 20, - color: '#2C3E50', - textAlign: 'center', - }, - miniAppContainer: { - flexDirection: 'row', - flexWrap: 'wrap', - justifyContent: 'center', - minHeight: 150, - }, - miniAppButton: { - backgroundColor: '#ECF0F1', - width: 100, - height: 100, - borderColor: '#BDC3C7', - borderWidth: 1, - borderRadius: 15, - alignItems: 'center', - justifyContent: 'center', - margin: 5, - shadowColor: '#000', - shadowOffset: { width: 0, height: 2 }, - shadowOpacity: 0.1, - shadowRadius: 4, - elevation: 3, - }, - galleryButton: { - borderColor: '#FF9F00', - backgroundColor: '#FFF5E6', - }, - galleryButtonText: { - color: '#FF9F00', - }, - miniAppIcon: { - fontSize: 40, - marginBottom: 5, - color: '#FFFFFF', - }, - miniAppText: { - color: '#FFFFFF', - fontSize: 16, - fontWeight: '700', - }, - disabledMiniApp: { - opacity: 0.5, - }, - disabledText: { - color: '#95A5A6', - }, -}); - -export default HomeScreen; diff --git a/apps/tester-federation/src/host/screens/MiniAppScreen.tsx b/apps/tester-federation/src/host/screens/MiniAppScreen.tsx deleted file mode 100644 index 90584d7f6..000000000 --- a/apps/tester-federation/src/host/screens/MiniAppScreen.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { Federated } from '@callstack/repack/client'; -import React from 'react'; -import { ActivityIndicator, StyleSheet, View } from 'react-native'; - -const MiniAppNavigator = React.lazy(() => - Federated.importModule('MiniApp', './MiniAppNavigator') -); - -const FallbackComponent = () => ( - - - -); - -const MiniAppScreen = () => { - return ( - }> - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, -}); - -export default MiniAppScreen; diff --git a/apps/tester-federation/src/mini/App.tsx b/apps/tester-federation/src/mini/App.tsx deleted file mode 100644 index 0fd8f1129..000000000 --- a/apps/tester-federation/src/mini/App.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { NavigationContainer } from '@react-navigation/native'; -import MainNavigator from './navigation/MainNavigator'; - -export default function App() { - return ( - - - - ); -} diff --git a/apps/tester-federation/src/mini/assets/pic_1.jpg b/apps/tester-federation/src/mini/assets/pic_1.jpg deleted file mode 100644 index dad6029fe3175a01b541eae78b6375909d777d46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89400 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 NN-N?xAx)pD|JkP?XCnXr diff --git a/apps/tester-federation/src/mini/assets/pic_3.jpg b/apps/tester-federation/src/mini/assets/pic_3.jpg deleted file mode 100644 index 29f6093e81248e47c7c7926ecdfebf61d4d25e29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59862 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 App); diff --git a/apps/tester-federation/src/mini/navigation/MainNavigator.tsx b/apps/tester-federation/src/mini/navigation/MainNavigator.tsx deleted file mode 100644 index 7d97eadcf..000000000 --- a/apps/tester-federation/src/mini/navigation/MainNavigator.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { - createNativeStackNavigator, - type NativeStackNavigationProp, -} from '@react-navigation/native-stack'; -import { StyleSheet } from 'react-native'; - -import GalleryScreen from '../screens/GalleryScreen'; - -export type MainStackParamList = { - Gallery: undefined; -}; - -export type MainStackNavigationProp = - NativeStackNavigationProp; - -const Main = createNativeStackNavigator(); - -const MainNavigator = () => { - return ( - - - - ); -}; - -const styles = StyleSheet.create({ - header: { - backgroundColor: '#E68A00', - }, - headerTitle: { - color: '#FFFFFF', - }, -}); - -export default MainNavigator; diff --git a/apps/tester-federation/src/mini/screens/GalleryScreen.tsx b/apps/tester-federation/src/mini/screens/GalleryScreen.tsx deleted file mode 100644 index d8a0b5023..000000000 --- a/apps/tester-federation/src/mini/screens/GalleryScreen.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { - Image, - type ImageRequireSource, - ScrollView, - StyleSheet, - Text, - View, -} from 'react-native'; - -const pics = [ - require('../assets/pic_1.jpg'), - require('../assets/pic_2.jpg'), - require('../assets/pic_3.jpg'), -]; - -const data = Array(3) - .fill('') - .map((_, i) => ({ - title: `Picture ${i + 1}`, - source: pics[i % pics.length], - })); - -const Row = ({ - title, - source, -}: { - title: string; - source: ImageRequireSource; -}) => ( - - - - {title} - - The quick brown fox jumps over the lazy dog - - - -); - -const GalleryScreen = () => { - return ( - - {data.map(({ title, source }) => ( - - ))} - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#FDF2E9', - }, - contentContainer: { - marginTop: 20, - }, - row: { - marginBottom: 20, - backgroundColor: 'white', - borderRadius: 10, - overflow: 'hidden', - shadowColor: '#D35400', - shadowOffset: { width: 0, height: 2 }, - shadowOpacity: 0.1, - shadowRadius: 4, - elevation: 3, - marginHorizontal: 15, - }, - image: { - width: '100%', - height: 250, - resizeMode: 'cover', - }, - titleContainer: { - padding: 15, - }, - title: { - fontSize: 18, - fontWeight: '600', - color: '#000000', - marginBottom: 5, - }, - subtitle: { - fontSize: 14, - color: '#E67E22', - fontWeight: '400', - }, -}); - -export default GalleryScreen; diff --git a/apps/tester-federation/tsconfig.json b/apps/tester-federation/tsconfig.json deleted file mode 100644 index 735c1fd03..000000000 --- a/apps/tester-federation/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@react-native/typescript-config", - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["**/node_modules", "**/Pods"], - "compilerOptions": { - "module": "ES2020" // for dynamic imports - } -} diff --git a/packages/repack-expo/src/cli/doctor.ts b/packages/repack-expo/src/cli/doctor.ts index fabaf04ee..058a43b39 100644 --- a/packages/repack-expo/src/cli/doctor.ts +++ b/packages/repack-expo/src/cli/doctor.ts @@ -236,7 +236,7 @@ export function runDoctor(options: DoctorOptions = {}): DoctorResult { diagnostics.push( error( 'MODULE_FEDERATION_V1_UNSUPPORTED', - 'Expo integration supports Module Federation v2 only.', + 'ModuleFederationPluginV1 was removed in Re.Pack 6; only Module Federation v2 is supported.', 'Replace the active federation plugin with Repack.plugins.ModuleFederationPluginV2.' ) ); diff --git a/packages/repack-expo/src/cli/rspackConfig.ts b/packages/repack-expo/src/cli/rspackConfig.ts index b1d5c1eff..d51bab6cd 100644 --- a/packages/repack-expo/src/cli/rspackConfig.ts +++ b/packages/repack-expo/src/cli/rspackConfig.ts @@ -91,15 +91,15 @@ function repackFederationPluginAliases(source: string): { v2: Set; } { const aliases = { - v1: new Set(['ModuleFederationPlugin', 'ModuleFederationPluginV1']), - v2: new Set(['ModuleFederationPluginV2']), + v1: new Set(['ModuleFederationPluginV1']), + v2: new Set(['ModuleFederationPlugin', 'ModuleFederationPluginV2']), }; for (const match of source.matchAll( /(ModuleFederationPlugin(?:V[12])?)\s*(?:as\s+|:\s*)([A-Za-z_$][\w$]*)/g )) { const importedName = match[1] as string; const alias = match[2] as string; - const version = importedName === 'ModuleFederationPluginV2' ? 'v2' : 'v1'; + const version = importedName === 'ModuleFederationPluginV1' ? 'v1' : 'v2'; const otherVersion = version === 'v2' ? 'v1' : 'v2'; aliases[otherVersion].delete(alias); aliases[version].add(alias); diff --git a/packages/repack-expo/test/cli.test.cjs b/packages/repack-expo/test/cli.test.cjs index d5d3ffdc4..82077ce52 100644 --- a/packages/repack-expo/test/cli.test.cjs +++ b/packages/repack-expo/test/cli.test.cjs @@ -190,19 +190,40 @@ test('detects an aliased Module Federation v2 plugin', () => { assert.equal(result.ok, true, JSON.stringify(result.diagnostics)); }); -test('doctor rejects unsupported active federation shapes with stable diagnostics', () => { +test('treats the ModuleFederationPlugin alias as Module Federation v2', () => { const cases = [ { - code: 'MODULE_FEDERATION_V1_UNSUPPORTED', federationImport: "import * as Repack from '@callstack/repack';", federationPlugin: - "new Repack.plugins.ModuleFederationPluginV1({ name: 'Widget' })", + "new Repack.plugins.ModuleFederationPlugin({ name: 'Host' })", + }, + { + federationImport: [ + "import * as Repack from '@callstack/repack';", + 'const { ModuleFederationPlugin: FederationPlugin } = Repack.plugins;', + ].join('\n'), + federationPlugin: "new FederationPlugin({ name: 'Host' })", }, + ]; + + for (const testCase of cases) { + const projectRoot = createProject(); + assert.equal(runInit({ projectRoot }).ok, true); + writeRspackConfig(projectRoot, testCase); + + const result = runDoctor({ projectRoot }); + + assert.equal(result.ok, true, JSON.stringify(result.diagnostics)); + } +}); + +test('doctor rejects unsupported active federation shapes with stable diagnostics', () => { + const cases = [ { code: 'MODULE_FEDERATION_V1_UNSUPPORTED', federationImport: "import * as Repack from '@callstack/repack';", federationPlugin: - "new Repack.plugins.ModuleFederationPlugin({ name: 'Widget' })", + "new Repack.plugins.ModuleFederationPluginV1({ name: 'Widget' })", }, { code: 'MODULE_FEDERATION_V1_UNSUPPORTED', @@ -214,7 +235,7 @@ test('doctor rejects unsupported active federation shapes with stable diagnostic code: 'MODULE_FEDERATION_V1_UNSUPPORTED', federationImport: [ "import * as Repack from '@callstack/repack';", - 'const { ModuleFederationPlugin: LegacyFederationPlugin } = Repack.plugins;', + 'const { ModuleFederationPluginV1: LegacyFederationPlugin } = Repack.plugins;', ].join('\n'), federationPlugin: "new LegacyFederationPlugin({ name: 'Widget' })", }, diff --git a/packages/repack/src/modules/FederationRuntimePlugins/CorePlugin.ts b/packages/repack/src/modules/FederationRuntimePlugins/CorePlugin.ts index 67196d99e..2ac7be431 100644 --- a/packages/repack/src/modules/FederationRuntimePlugins/CorePlugin.ts +++ b/packages/repack/src/modules/FederationRuntimePlugins/CorePlugin.ts @@ -1,7 +1,7 @@ -import type { FederationRuntimePlugin } from '@module-federation/enhanced/runtime'; +import type { ModuleFederationRuntimePlugin } from '@module-federation/enhanced/runtime'; import type * as RepackClient from '../ScriptManager/index.js'; -const RepackCorePlugin: () => FederationRuntimePlugin = () => ({ +const RepackCorePlugin: () => ModuleFederationRuntimePlugin = () => ({ name: 'repack-core-plugin', loadEntry: async ({ remoteInfo }) => { const client = require('../ScriptManager/index.js') as typeof RepackClient; diff --git a/packages/repack/src/modules/FederationRuntimePlugins/PrefetchPlugin.ts b/packages/repack/src/modules/FederationRuntimePlugins/PrefetchPlugin.ts index 9bb5f6dac..a33649001 100644 --- a/packages/repack/src/modules/FederationRuntimePlugins/PrefetchPlugin.ts +++ b/packages/repack/src/modules/FederationRuntimePlugins/PrefetchPlugin.ts @@ -1,4 +1,4 @@ -import type { FederationRuntimePlugin } from '@module-federation/enhanced/runtime'; +import type { ModuleFederationRuntimePlugin } from '@module-federation/enhanced/runtime'; import type * as RepackClient from '../ScriptManager/index.js'; interface PrefetchAsset { @@ -32,7 +32,7 @@ function prefetchAsset(asset: PrefetchAsset) { ); } -const RepackPrefetchPlugin: () => FederationRuntimePlugin = () => ({ +const RepackPrefetchPlugin: () => ModuleFederationRuntimePlugin = () => ({ name: 'repack-prefetch-plugin', generatePreloadAssets: async (args) => { const preloadConfig = args.preloadOptions.preloadConfig; diff --git a/packages/repack/src/modules/FederationRuntimePlugins/ResolverPlugin.ts b/packages/repack/src/modules/FederationRuntimePlugins/ResolverPlugin.ts index 7474f6071..d258792d8 100644 --- a/packages/repack/src/modules/FederationRuntimePlugins/ResolverPlugin.ts +++ b/packages/repack/src/modules/FederationRuntimePlugins/ResolverPlugin.ts @@ -1,10 +1,10 @@ import type { - FederationHost, - FederationRuntimePlugin, + ModuleFederation, + ModuleFederationRuntimePlugin, } from '@module-federation/enhanced/runtime'; import type { ScriptLocator } from '../ScriptManager/index.js'; -type MFRemote = Parameters[0][0]; +type MFRemote = Parameters[0][0]; export type RepackResolverPluginConfiguration = | Omit @@ -87,7 +87,7 @@ const registerResolver = async ( const RepackResolverPlugin: ( config?: RepackResolverPluginConfiguration -) => FederationRuntimePlugin = (config) => ({ +) => ModuleFederationRuntimePlugin = (config) => ({ name: 'repack-resolver-plugin', registerRemote: (args) => { registerResolver(args.remote, config); diff --git a/packages/repack/src/modules/ScriptManager/federated.ts b/packages/repack/src/modules/ScriptManager/federated.ts deleted file mode 100644 index 5779d49ed..000000000 --- a/packages/repack/src/modules/ScriptManager/federated.ts +++ /dev/null @@ -1,296 +0,0 @@ -import { ScriptManager } from './ScriptManager.js'; - -/** - * Namespace for runtime utilities for Module Federation. - */ -export namespace Federated { - /** - * @deprecated - * - * Resolves URL to a container or a chunk when using Module Federation, - * based on given `scriptId` and `caller`. - */ - export type URLResolver = ( - scriptId: string, - caller?: string - ) => - | string - | ((webpackContext: RepackRuntimeGlobals.WebpackRequire) => string) - | undefined; - - /** - * @deprecated - * - * Configuration options for {@link createURLResolver} for Module Federation. - * Allows to configure how created {@link URLResolver} will behave. - */ - export interface URLResolverConfig { - /** - * A Module Federation container names to URL templates mapping. - * - * The key in the object is a container name and the value is a template - * that will be used to resolve a URL. - * - * Accepted template params: - * - `[name]` - Container name - * - `[ext]` - Container extension, eg: `.container.bundle` - * - * You can omit `[ext]`, if you're using custom extension, in which case, you should - * provide extension explicitly. When using custom extension, it's recommended to - * provide a URL template for chunks as well using `chunks` property. - * - * @example - * ```ts - * { - * containers: { - * app1: 'http://localhost:9000/[name][ext]' - * } - * } - * ``` - */ - containers: Record; - - /** - * An optional Module Federation container names to URL templates mapping. - * - * The key in the object is a container names and the value is a template - * that will be used to resolve a __chunk__ URL for that container. - * - * Specifying this property is useful if: - * - containers have custom extension (different from `.container.bundle`) - * - chunks have custom extensions (different from `.chunk.bundle`) - * - chunks have different URL that containers - * - * When this property is left unspecified, the template URLs are inferred from - * `containers` property. The following: - * ``` - * { - * containers: { - * app1: 'http://localhost:9000/[name][ext] - * app2: 'http://localhost:9000/[name].js - * }, - * } - * ``` - * is equivalent to: - * ```ts - * { - * containers: { - * app1: 'http://localhost:9000/[name][ext]', - * app2: 'http://localhost:9000/[name].js', - * }, - * chunks: { - * app1: 'http://localhost:9000/[name][ext]', - * app2: 'http://localhost:9000/[name].js', - * }, - * } - * ``` - * - * Accepted template params: - * - `[name]` - Container name - * - `[ext]` - Chunk extension, eg: `.chunk.bundle` - * - * @example - * ```ts - * { - * containers: { - * app1: 'http://localhost:9000/[name].container.js', - * }, - * chunks: { - * app1: 'http://localhost:9000/chunks/[name][ext]', - * } - * } - * ``` - */ - chunks?: Record; - } - - /** - * @deprecated - * - * Creates URL resolver for Module Federation from provided config. - * - * @example - * ```ts - * import { ScriptManager, Script, Federated } from '@callstack/repack/client'; - * - * const resolveURL = Federated.createURLResolver({ - * containers: { - * app1: 'http://localhost:9001/[name][ext]', - * app2: 'http://localhost:9002/[name].container.js', - * }, - * chunks: { - * app2: 'http://localhost:9002/chunks/[name][ext]', - * }, - * }); - * - * ScriptManager.shared.addResolver(async (scriptId, caller) => { - * let url; - * if (caller === 'main') { - * url = __DEV__ - * ? Script.getDevServerURL(scriptId) - * : Script.getRemoteURL(`http://localhost:9000/${scriptId}`); - * } else { - * url = resolveURL(scriptId, caller); - * } - * - * if (!url) { - * return undefined; - * } - * - * return { - * url, - * query: { - * platform: Platform.OS, - * }, - * }; - * }); - * ``` - * - * `createURLResolver` is a abstraction over {@link Script.getRemoteURL}, - * for example: - * ```ts - * import { ScriptManager, Federated } from '@callstack/repack/client'; - * - * ScriptManager.shared.addResolver((scriptId, caller) => { - * const resolveURL = Federated.createURLResolver({ - * containers: { - * app1: 'http://localhost:9000/[name][ext]', - * }, - * }); - * - * return { - * url: resolveURL(scriptId, caller); - * }; - * }); - * ``` - * is equivalent to: - * ```ts - * import { ScriptManager, Script } from '@callstack/repack/client'; - * - * ScriptManager.shared.addResolver(async (scriptId, caller) => { - * if (scriptId === 'app1') { - * return { - * url: 'http://localhost:9000/app1.container.bundle', - * }; - * } - * - * if (caller === 'app1') { - * return { - * url: Script.getRemoteURL(`http://localhost:9000/${scriptId}`), - * }; - * } - * }); - * ``` - * - * @param config Configuration for the resolver. - * @param containerExt Extension of container bundles. Defaults to `.container.bundle`. - * @returns A resolver function which will try to resolve URL based on given `scriptId` and `caller`. - */ - export function createURLResolver( - config: Federated.URLResolverConfig, - containerExt = '.container.bundle' - ): Federated.URLResolver { - const resolvers: Record = {}; - - for (const key in config.containers) { - resolvers[key] = (scriptId: string, caller?: string) => { - if (scriptId === key) { - const url = config.containers[key] - .replace(/\[name\]/g, scriptId) - .replace(/\[ext\]/g, containerExt); - return url; - } - - if (caller === key) { - const url = (config.chunks?.[key] ?? config.containers[key]).replace( - /\[name\]/g, - scriptId - ); - - if (url.includes('[ext]')) { - return (webpackContext: RepackRuntimeGlobals.WebpackRequire) => - webpackContext.u(url.replace(/\[ext\]/g, '')); - } - - return url; - } - - return undefined; - }; - } - - return (scriptId, caller) => { - const resolver = - (caller ? resolvers[caller] : undefined) ?? resolvers[scriptId]; - - return resolver(scriptId, caller); - }; - } - - declare function __webpack_init_sharing__(scope: string): Promise; - declare let __webpack_share_scopes__: Record; - declare let self: Record; - - /** - * @deprecated - * - * Dynamically imports module from a Module Federation container. Similar to `import('file')`, but - * specific to Module Federation. Calling `importModule` will create an async boundary. - * - * Container will be evaluated only once. If you use `importModule` for the same container twice, - * the container will be loaded and evaluated only on the first import. - * - * Under the hood, `importModule` will call `ScriptManager.shared.loadScript(containerName)`. - * This means, a resolver must be added with `ScriptManager.shared.addResolver(...)` beforehand and provided proper - * resolution logic to resolve URL based on the `containerName`. - * - * @param containerName Name of the container - should be the same name provided to - * `webpack.container.ModuleFederationPlugin` in `library.name`. - * @param module Full name with extension of the module to import from the container - only modules - * exposed in `exposes` in `webpack.container.ModuleFederationPlugin` can be used. - * @param scope Optional, scope for sharing modules between containers. Defaults to `'default'`. - * @returns Exports of given `module` from given container. - * - * @example - * ```ts - * import * as React from 'react'; - * import { Federated } from '@callstack/repack/client'; - * - * const Button = React.lazy(() => Federated.importModule('my-components', './Button.js')); - * - * const myUtil = await Federated.importModule('my-lib', './myUtil.js'); - * ``` - */ - export async function importModule( - containerName: string, - module: string, - scope = 'default' - ): Promise { - if (!__webpack_share_scopes__[scope]?.__isInitialized) { - // Initializes the share scope. - // This fills it with known provided modules from this build and all remotes. - await __webpack_init_sharing__(scope); - __webpack_share_scopes__[scope].__isInitialized = true; - } - - // Do not use `const container = self[containerName];` here. Once container is loaded - // `container` reference is not updated, so `container.__isInitialized` - // will crash the application, because of reading property from `undefined`. - if (!self[containerName]) { - // Download and execute container - await ScriptManager.shared.loadScript(containerName); - } - - const container = self[containerName]; - - if (!container.__isInitialized) { - container.__isInitialized = true; - // Initialize the container, it may provide shared modules - await container.init(__webpack_share_scopes__[scope]); - } - - const factory = await container.get(module); - const exports = factory(); - return exports; - } -} diff --git a/packages/repack/src/modules/ScriptManager/index.ts b/packages/repack/src/modules/ScriptManager/index.ts index fe092f0c0..4e56813b3 100644 --- a/packages/repack/src/modules/ScriptManager/index.ts +++ b/packages/repack/src/modules/ScriptManager/index.ts @@ -1,4 +1,3 @@ -export { Federated } from './federated.js'; export * from './getWebpackContext.js'; export * from './Script.js'; export * from './ScriptManager.js'; diff --git a/packages/repack/src/plugins/ModuleFederationPlugin.ts b/packages/repack/src/plugins/ModuleFederationPlugin.ts deleted file mode 100644 index 976631347..000000000 --- a/packages/repack/src/plugins/ModuleFederationPlugin.ts +++ /dev/null @@ -1,124 +0,0 @@ -import type { container, Compiler as RspackCompiler } from '@rspack/core'; -import type { Compiler as WebpackCompiler } from 'webpack'; -import type { Federated } from '../utils/federated.js'; -import { - ModuleFederationPluginV1, - type ModuleFederationPluginV1Config, -} from './ModuleFederationPluginV1.js'; - -type MFPluginV1 = typeof container.ModuleFederationPluginV1; -type MFPluginV1Options = ConstructorParameters[0]; - -/** - * {@link ModuleFederationPluginV1Config} configuration options. - * - * The fields and types are exactly the same as in `webpack.container.ModuleFederationPlugin`. - * - * You can check documentation for all supported options here: https://webpack.js.org/plugins/module-federation-plugin/ - */ -export type ModuleFederationPluginConfig = ModuleFederationPluginV1Config; - -/** - * Webpack plugin to configure Module Federation with platform differences - * handled under the hood. - * - * Usually, you should use `Repack.plugin.ModuleFederationPlugin` - * instead of `webpack.container.ModuleFederationPlugin`. - * - * `Repack.plugin.ModuleFederationPlugin` creates: - * - default for `filename` option when `exposes` is defined - * - default for `library` option when `exposes` is defined - * - default for `shared` option with `react` and `react-native` dependencies - * - converts `remotes` into `ScriptManager`-powered `promise new Promise` loaders - * - * You can overwrite all defaults by passing respective options. - * - * `remotes` will always be converted to ScriptManager`-powered `promise new Promise` loaders - * using {@link Federated.createRemote}. - * - * @example Host example. - * ```js - * import * as Repack from '@callstack/repack'; - * - * new Repack.plugins.ModuleFederationPlugin({ - * name: 'host, - * }); - * ``` - * - * @example Host example with additional `shared` dependencies. - * ```js - * import * as Repack from '@callstack/repack'; - * - * new Repack.plugins.ModuleFederationPlugin({ - * name: 'host, - * shared: { - * react: Repack.Federated.SHARED_REACT, - * 'react-native': Repack.Federated.SHARED_REACT, - * 'react-native-reanimated': { - * singleton: true, - * }, - * }, - * }); - * ``` - * - * @example Container examples. - * ```js - * import * as Repack from '@callstack/repack'; - * - * new Repack.plugins.ModuleFederationPlugin({ - * name: 'app1', - * remotes: { - * module1: 'module1@https://example.com/module1.container.bundle', - * }, - * }); - * - * new Repack.plugins.ModuleFederationPlugin({ - * name: 'app2', - * remotes: { - * module1: 'module1@https://example.com/module1.container.bundle', - * module2: 'module1@dynamic', - * }, - * }); - * ``` - * - * @category Webpack Plugin - */ -export class ModuleFederationPlugin { - // biome-ignore lint/correctness/noUnusedPrivateClassMembers: exposed at runtime for compat with V1 plugin - private config: MFPluginV1Options; - // biome-ignore lint/correctness/noUnusedPrivateClassMembers: exposed at runtime for compat with V1 plugin - private deepImports: boolean; - private plugin: ModuleFederationPluginV1; - - constructor(pluginConfig: ModuleFederationPluginV1Config) { - const { reactNativeDeepImports, ...config } = pluginConfig; - // exposed for compat with V1 plugin - this.config = config; - // exposed for compat with V1 plugin - this.deepImports = reactNativeDeepImports ?? true; - this.plugin = new ModuleFederationPluginV1(pluginConfig); - } - - apply(compiler: RspackCompiler): void; - apply(compiler: WebpackCompiler): void; - - apply(__compiler: unknown) { - const compiler = __compiler as RspackCompiler; - const logger = compiler.getInfrastructureLogger( - 'RepackModuleFederationPlugin' - ); - - compiler.hooks.beforeCompile.tap('RepackModuleFederationPlugin', () => { - logger.warn( - 'Notice: ModuleFederationPlugin currently points to ModuleFederationPluginV1. ' + - 'Re.Pack 5 introduced ModuleFederationPluginV2, which addresses many previous limitations. ' + - 'In the next major version of Re.Pack, ModuleFederationPlugin will point to ModuleFederationPluginV2. ' + - 'We recommend switching to the new ModuleFederationPluginV2 by importing it directly. ' + - 'If you want to keep using ModuleFederationPluginV1, which is no longer being iterated on, ' + - 'you can import ModuleFederationPluginV1 directly to prevent this warning from being shown every time.' - ); - }); - - this.plugin.apply(compiler); - } -} diff --git a/packages/repack/src/plugins/ModuleFederationPluginV1.ts b/packages/repack/src/plugins/ModuleFederationPluginV1.ts deleted file mode 100644 index 0fc240b6a..000000000 --- a/packages/repack/src/plugins/ModuleFederationPluginV1.ts +++ /dev/null @@ -1,322 +0,0 @@ -import type { container, Compiler as RspackCompiler } from '@rspack/core'; -import type { Compiler as WebpackCompiler } from 'webpack'; -import { isRspackCompiler } from '../helpers/index.js'; -import { Federated } from '../utils/federated.js'; - -type MFPluginV1 = typeof container.ModuleFederationPluginV1; -type MFPluginV1Options = ConstructorParameters[0]; - -type ExtractObject = T extends {} - ? T extends Array - ? never - : T - : never; - -type RemotesObject = ExtractObject; - -type SharedDependencies = Exclude; - -type SharedObject = ExtractObject; - -type SharedConfig = SharedObject extends { [key: string]: infer U } - ? Exclude - : never; - -/** - * {@link ModuleFederationPlugin} configuration options. - * - * The fields and types are exactly the same as in `webpack.container.ModuleFederationPlugin`. - * - * You can check documentation for all supported options here: https://webpack.js.org/plugins/module-federation-plugin/ - */ -export interface ModuleFederationPluginV1Config extends MFPluginV1Options { - /** Enable or disable adding React Native deep imports to shared dependencies */ - reactNativeDeepImports?: boolean; -} - -/** - * Webpack plugin to configure Module Federation with platform differences - * handled under the hood. - * - * Usually, you should use `Repack.plugin.ModuleFederationPlugin` - * instead of `webpack.container.ModuleFederationPlugin`. - * - * `Repack.plugin.ModuleFederationPlugin` creates: - * - default for `filename` option when `exposes` is defined - * - default for `library` option when `exposes` is defined - * - default for `shared` option with `react` and `react-native` dependencies - * - converts `remotes` into `ScriptManager`-powered `promise new Promise` loaders - * - * You can overwrite all defaults by passing respective options. - * - * `remotes` will always be converted to ScriptManager`-powered `promise new Promise` loaders - * using {@link Federated.createRemote}. - * - * @example Host example. - * ```js - * import * as Repack from '@callstack/repack'; - * - * new Repack.plugins.ModuleFederationPlugin({ - * name: 'host, - * }); - * ``` - * - * @example Host example with additional `shared` dependencies. - * ```js - * import * as Repack from '@callstack/repack'; - * - * new Repack.plugins.ModuleFederationPlugin({ - * name: 'host, - * shared: { - * react: Repack.Federated.SHARED_REACT, - * 'react-native': Repack.Federated.SHARED_REACT, - * 'react-native-reanimated': { - * singleton: true, - * }, - * }, - * }); - * ``` - * - * @example Container examples. - * ```js - * import * as Repack from '@callstack/repack'; - * - * new Repack.plugins.ModuleFederationPlugin({ - * name: 'app1', - * remotes: { - * module1: 'module1@https://example.com/module1.container.bundle', - * }, - * }); - * - * new Repack.plugins.ModuleFederationPlugin({ - * name: 'app2', - * remotes: { - * module1: 'module1@https://example.com/module1.container.bundle', - * module2: 'module1@dynamic', - * }, - * }); - * ``` - * - * @category Webpack Plugin - */ -export class ModuleFederationPluginV1 { - private config: MFPluginV1Options; - private deepImports: boolean; - - constructor(pluginConfig: ModuleFederationPluginV1Config) { - const { reactNativeDeepImports, ...config } = pluginConfig; - this.config = config; - this.deepImports = reactNativeDeepImports ?? true; - } - - /** - * This method provides compatibility between webpack and Rspack for the ModuleFederation plugin. - * In Rspack, Module Federation 1.5 is implemented under the name that's used in webpack for the original version. - * This method adjusts for this naming difference to ensure we use the correct plugin version. - * - * @param compiler - The compiler instance (either webpack or Rspack) - * @returns The appropriate ModuleFederationPlugin class - */ - private getModuleFederationPlugin(compiler: RspackCompiler): MFPluginV1 { - if (isRspackCompiler(compiler)) { - return compiler.webpack.container.ModuleFederationPluginV1; - } - // @ts-expect-error webpack has MF1 under ModuleFederationPlugin - return compiler.webpack.container.ModuleFederationPlugin; - } - - private replaceRemotes( - remote: T - ): T { - if (typeof remote === 'string') { - return remote.startsWith('promise new Promise') - ? remote - : (Federated.createRemote(remote) as T); - } - - if (Array.isArray(remote)) { - return remote.map((remoteItem) => this.replaceRemotes(remoteItem)) as T; - } - - const replaced = {} as RemotesObject; - for (const key in remote as RemotesObject) { - const value = remote[key]; - if (typeof value === 'string' || Array.isArray(value)) { - replaced[key] = this.replaceRemotes(value); - } else { - replaced[key] = { - ...value, - external: this.replaceRemotes(value.external), - }; - } - } - - return replaced as T; - } - - private getDefaultSharedDependencies(): SharedObject { - return { - react: Federated.SHARED_REACT, - 'react-native': Federated.SHARED_REACT_NATIVE, - }; - } - - /** - * As including 'react-native' as a shared dependency is not enough to support - * deep imports from 'react-native' (e.g. 'react-native/Libraries/Utilities/PixelRatio'), - * we need to add deep imports using an undocumented feature of ModuleFederationPlugin. - * - * When a dependency has a trailing slash, deep imports of that dependency will be correctly - * resolved by reaching out to the shared scope. This also ensures single instances of things - * like 'assetsRegistry'. Additionally, we mark every package from '@react-native' group as shared - * as well, as these are used by React Native too. - * - * Reference: https://stackoverflow.com/questions/65636979/wp5-module-federation-sharing-deep-imports - * Reference: https://github.com/webpack/webpack/blob/main/lib/sharing/resolveMatchedConfigs.js#L77-L79 - * - * @param shared shared dependencies configuration from ModuleFederationPlugin - * @returns adjusted shared dependencies configuration - * - * @internal - */ - private adaptSharedDependencies( - shared: SharedDependencies - ): SharedDependencies { - const sharedDependencyConfig = ( - eager: boolean | undefined, - importValue: string | false | undefined, - version: string | false | undefined - ) => { - const config: SharedConfig = { - singleton: true, - eager: eager ?? true, - version: version || '*', - requiredVersion: version || '*', - }; - // set import to false if it's explicitly set to false - if (importValue === false) { - config.import = false; - } - return config; - }; - - const findSharedDependency = ( - name: string, - dependencies: SharedDependencies - ): SharedConfig | string | undefined => { - if (Array.isArray(dependencies)) { - // object entries wrap the config under the dependency name, - // so unwrap it instead of returning the wrapper - for (const item of dependencies) { - if (typeof item === 'string') { - if (item === name) return item; - } else if (item[name]) { - return item[name]; - } - } - return undefined; - } - return dependencies[name]; - }; - - const sharedReactNative = findSharedDependency('react-native', shared); - const reactNativeEager = - typeof sharedReactNative === 'object' - ? sharedReactNative.eager - : undefined; - const reactNativeVersion = - typeof sharedReactNative === 'object' - ? sharedReactNative.requiredVersion || sharedReactNative.version - : undefined; - const reactNativeImport = - typeof sharedReactNative === 'object' - ? sharedReactNative.import - : undefined; - - if (!this.deepImports || !sharedReactNative) { - return shared; - } - - if (Array.isArray(shared)) { - const adjustedSharedDependencies = [...shared]; - if (!findSharedDependency('react-native/', shared)) { - adjustedSharedDependencies.push({ - 'react-native/': sharedDependencyConfig( - reactNativeEager, - reactNativeImport, - reactNativeVersion - ), - }); - } - if (!findSharedDependency('@react-native/', shared)) { - adjustedSharedDependencies.push({ - '@react-native/': sharedDependencyConfig( - reactNativeEager, - reactNativeImport, - reactNativeVersion - ), - }); - } - return adjustedSharedDependencies; - } - const adjustedSharedDependencies = { ...shared }; - if (!findSharedDependency('react-native/', shared)) { - Object.assign(adjustedSharedDependencies, { - 'react-native/': sharedDependencyConfig( - reactNativeEager, - reactNativeImport, - reactNativeVersion - ), - }); - } - if (!findSharedDependency('@react-native/', shared)) { - Object.assign(adjustedSharedDependencies, { - '@react-native/': sharedDependencyConfig( - reactNativeEager, - reactNativeImport, - reactNativeVersion - ), - }); - } - return adjustedSharedDependencies; - } - - apply(compiler: RspackCompiler): void; - apply(compiler: WebpackCompiler): void; - - apply(__compiler: unknown) { - const compiler = __compiler as RspackCompiler; - - const ModuleFederationPlugin = this.getModuleFederationPlugin(compiler); - - const filenameConfig = - this.config.filename ?? - (this.config.exposes - ? `${this.config.name}.container.bundle` - : undefined); - - const libraryConfig = this.config.exposes - ? { - name: this.config.name, - type: 'self', - ...this.config.library, - } - : undefined; - - const remotesConfig = Array.isArray(this.config.remotes) - ? this.config.remotes.map((remote) => this.replaceRemotes(remote)) - : this.replaceRemotes(this.config.remotes ?? {}); - - const sharedConfig = this.adaptSharedDependencies( - this.config.shared ?? this.getDefaultSharedDependencies() - ); - - new ModuleFederationPlugin({ - ...this.config, - filename: filenameConfig, - library: libraryConfig, - remotes: remotesConfig, - shared: sharedConfig, - }).apply(compiler); - } -} diff --git a/packages/repack/src/plugins/ModuleFederationPluginV2.ts b/packages/repack/src/plugins/ModuleFederationPluginV2.ts index ddb329a10..15145d29f 100644 --- a/packages/repack/src/plugins/ModuleFederationPluginV2.ts +++ b/packages/repack/src/plugins/ModuleFederationPluginV2.ts @@ -4,14 +4,12 @@ import { name as isIdentifier } from 'estree-util-is-identifier-name'; import type { Compiler as WebpackCompiler } from 'webpack'; import { isRspackCompiler } from '../helpers/index.js'; -type JsModuleDescriptor = { - identifier: string; - name: string; - id?: string; -}; +type RuntimePlugin = NonNullable< + MF.ModuleFederationPluginOptions['runtimePlugins'] +>[number]; /** - * {@link ModuleFederationPlugin} configuration options. + * {@link ModuleFederationPluginV2} configuration options. * * The fields and types are exactly the same as in the official `ModuleFederationPlugin`. * @@ -33,64 +31,40 @@ export interface ModuleFederationPluginV2Config } /** - * Webpack plugin to configure Module Federation with platform differences - * handled under the hood. + * Webpack plugin to configure Module Federation 2.0 with platform differences + * handled under the hood. Wraps `ModuleFederationPlugin` from `@module-federation/enhanced`. * - * Usually, you should use `Repack.plugin.ModuleFederationPlugin` - * instead of `webpack.container.ModuleFederationPlugin`. + * Also available as `Repack.plugins.ModuleFederationPlugin`. * - * `Repack.plugin.ModuleFederationPlugin` creates: - * - default for `filename` option when `exposes` is defined - * - default for `library` option when `exposes` is defined - * - default for `shared` option with `react` and `react-native` dependencies - * - converts `remotes` into `ScriptManager`-powered `promise new Promise` loaders + * On top of the official plugin, it: + * - registers Re.Pack's default runtime plugins (see `defaultRuntimePlugins`) + * - defaults `shared` to eager singletons of `react` and `react-native` + * - shares `react-native/` and `@react-native/` deep imports when `react-native` is shared + * - defaults `shareStrategy` to `'loaded-first'` * * You can overwrite all defaults by passing respective options. * - * `remotes` will always be converted to ScriptManager`-powered `promise new Promise` loaders - * using {@link Federated.createRemote}. - * * @example Host example. * ```js * import * as Repack from '@callstack/repack'; * * new Repack.plugins.ModuleFederationPlugin({ * name: 'host', - * }); - * ``` - * - * @example Host example with additional `shared` dependencies. - * ```js - * import * as Repack from '@callstack/repack'; - * - * new Repack.plugins.ModuleFederationPlugin({ - * name: 'host', - * shared: { - * react: Repack.Federated.SHARED_REACT, - * 'react-native': Repack.Federated.SHARED_REACT, - * 'react-native-reanimated': { - * singleton: true, - * }, + * remotes: { + * module1: 'module1@https://example.com/ios/mf-manifest.json', * }, * }); * ``` * - * @example Container examples. + * @example Container example. * ```js * import * as Repack from '@callstack/repack'; * * new Repack.plugins.ModuleFederationPlugin({ - * name: 'app1', - * remotes: { - * module1: 'module1@https://example.com/module1.container.bundle', - * }, - * }); - * - * new Repack.plugins.ModuleFederationPlugin({ - * name: 'app2', - * remotes: { - * module1: 'module1@https://example.com/module1.container.bundle', - * module2: 'module1@dynamic', + * name: 'module1', + * filename: 'module1.container.js.bundle', + * exposes: { + * './Button': './src/Button', * }, * }); * ``` @@ -140,23 +114,29 @@ export class ModuleFederationPluginV2 { private adaptRuntimePlugins( context: string, - runtimePlugins: string[] | undefined = [] - ) { - const plugins = runtimePlugins - .map((pluginPath) => { - try { - // resolve the paths to compare against absolute paths - return require.resolve(pluginPath, { paths: [context] }); - } catch { - // ignore invalid paths - return undefined; - } - }) - .filter((pluginPath) => !!pluginPath) as string[]; + runtimePlugins: RuntimePlugin[] = [] + ): RuntimePlugin[] { + const getPluginPath = (plugin: RuntimePlugin) => + typeof plugin === 'string' ? plugin : plugin[0]; + + const plugins = runtimePlugins.flatMap((plugin): RuntimePlugin[] => { + try { + // resolve the paths to compare against absolute paths + const pluginPath = require.resolve(getPluginPath(plugin), { + paths: [context], + }); + return [ + typeof plugin === 'string' ? pluginPath : [pluginPath, plugin[1]], + ]; + } catch { + // ignore invalid paths + return []; + } + }); for (const plugin of this.defaultRuntimePlugins) { const pluginPath = require.resolve(plugin); - if (!plugins.includes(pluginPath)) { + if (!plugins.some((item) => getPluginPath(item) === pluginPath)) { plugins.unshift(pluginPath); } } @@ -295,30 +275,6 @@ export class ModuleFederationPluginV2 { compiler.options.ignoreWarnings.push( (warning) => warning.name === 'EnvironmentNotSupportAsyncWarning' ); - // MF2 produces warning about dynamic import in loadEsmEntry but it's not relevant - // in RN env since we override the loadEntry logic through a hook - // https://github.com/module-federation/core/blob/fa7a0bd20eb64eccd6648fea340c6078a2268e39/packages/runtime/src/utils/load.ts#L28-L37 - compiler.options.ignoreWarnings.push((warning) => { - if ('moduleDescriptor' in warning) { - const moduleDescriptor = warning.moduleDescriptor as JsModuleDescriptor; - - // warning can come from either runtime or runtime-core (in newer versions of MF2) - const isMF2Runtime = moduleDescriptor.name.endsWith( - '@module-federation/runtime/dist/index.cjs.js' - ); - const isMF2RuntimeCore = moduleDescriptor.name.endsWith( - '@module-federation/runtime-core/dist/index.cjs.js' - ); - - if (isMF2Runtime || isMF2RuntimeCore) { - const requestExpressionWarning = - /Critical dependency: the request of a dependency is an expression/; - return requestExpressionWarning.test(warning.message); - } - } - - return false; - }); } apply(compiler: RspackCompiler): void; diff --git a/packages/repack/src/plugins/__tests__/ModuleFederationPluginV1.test.ts b/packages/repack/src/plugins/__tests__/ModuleFederationPluginV1.test.ts deleted file mode 100644 index 18eacfb36..000000000 --- a/packages/repack/src/plugins/__tests__/ModuleFederationPluginV1.test.ts +++ /dev/null @@ -1,287 +0,0 @@ -import type { Compiler } from '@rspack/core'; -import { ModuleFederationPluginV1 } from '../ModuleFederationPluginV1.js'; - -const mockPlugin = jest.fn().mockImplementation(() => ({ - apply: jest.fn(), -})); - -const mockCompiler = { - webpack: { - container: { - ModuleFederationPluginV1: mockPlugin, // rspack - ModuleFederationPlugin: mockPlugin, // webpack - }, - }, -} as unknown as Compiler; - -describe('ModuleFederationPlugin', () => { - afterEach(() => { - mockPlugin.mockClear(); - }); - - it('should replace RemotesObject remotes', () => { - new ModuleFederationPluginV1({ - name: 'test', - remotes: { - external: 'external1@dynamic', - }, - }).apply(mockCompiler); - - let config = mockPlugin.mock.calls[0][0]; - expect(config.remotes.external).toMatch('promise new Promise'); - mockPlugin.mockClear(); - - new ModuleFederationPluginV1({ - name: 'test', - remotes: { - external: ['external1@dynamic', 'external2@dynamic'], - }, - }).apply(mockCompiler); - - config = mockPlugin.mock.calls[0][0]; - expect(config.remotes.external[0]).toMatch('promise new Promise'); - expect(config.remotes.external[1]).toMatch('promise new Promise'); - }); - - it('should replace string[] remotes', () => { - new ModuleFederationPluginV1({ - name: 'test', - remotes: ['remote1@dynamic', 'remote2@dynamic'], - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.remotes[0]).toMatch('promise new Promise'); - expect(config.remotes[1]).toMatch('promise new Promise'); - }); - - it('should replace RemotesObject[] remotes', () => { - new ModuleFederationPluginV1({ - name: 'test', - remotes: [ - { external: 'external1@dynamic' }, - { external: ['external2@dynamic', 'external3@dynamic'] }, - ], - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.remotes[0].external).toMatch('promise new Promise'); - expect(config.remotes[1].external[0]).toMatch('promise new Promise'); - expect(config.remotes[1].external[1]).toMatch('promise new Promise'); - }); - - it('should not add default resolver for remote', () => { - new ModuleFederationPluginV1({ - name: 'test', - remotes: { - app1: 'app1@dynamic', - }, - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.remotes.app1).toMatch('promise new Promise'); - expect(config.remotes.app1).not.toMatch('scriptManager.addResolver'); - }); - - it('should add default resolver for remote', () => { - new ModuleFederationPluginV1({ - name: 'test', - remotes: { - app1: 'app1@http://localhost:6789/static/app1.container.bundle', - }, - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.remotes.app1).toMatch('promise new Promise'); - expect(config.remotes.app1).toMatch('scriptManager.addResolver'); - expect(config.remotes.app1).toMatch( - 'http://localhost:6789/static/app1.container.bundle' - ); - expect(config.remotes.app1).toMatch( - 'http://localhost:6789/static/[name][ext]' - ); - }); - - it('should add default shared dependencies', () => { - new ModuleFederationPluginV1({ name: 'test' }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.shared).toHaveProperty('react'); - expect(config.shared).toHaveProperty('react-native'); - expect(config.shared).toHaveProperty('react-native/'); - expect(config.shared).toHaveProperty('@react-native/'); - }); - - it('should not add deep imports to defaulted shared dependencies', () => { - new ModuleFederationPluginV1({ - name: 'test', - reactNativeDeepImports: false, - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.shared).toHaveProperty('react'); - expect(config.shared).toHaveProperty('react-native'); - expect(config.shared).not.toHaveProperty('react-native/'); - expect(config.shared).not.toHaveProperty('@react-native/'); - }); - - it('should add deep imports to existing shared dependencies', () => { - new ModuleFederationPluginV1({ - name: 'test', - shared: { - react: { singleton: true, eager: true }, - 'react-native': { singleton: true, eager: true }, - }, - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.shared).toHaveProperty('react-native/'); - expect(config.shared).toHaveProperty('@react-native/'); - }); - - it('should not add deep imports to existing shared dependencies', () => { - new ModuleFederationPluginV1({ - name: 'test', - reactNativeDeepImports: false, - shared: { - react: { singleton: true, eager: true }, - 'react-native': { singleton: true, eager: true }, - }, - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.shared).not.toHaveProperty('react-native/'); - expect(config.shared).not.toHaveProperty('@react-native/'); - }); - - it('should not add deep imports to existing shared dependencies when react-native is not present', () => { - new ModuleFederationPluginV1({ - name: 'test', - shared: { - react: { singleton: true, eager: true }, - }, - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.shared).not.toHaveProperty('react-native/'); - expect(config.shared).not.toHaveProperty('@react-native/'); - }); - - it('should add deep imports to existing shared dependencies array', () => { - new ModuleFederationPluginV1({ - name: 'test', - shared: ['react', 'react-native'], - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.shared[2]).toHaveProperty('react-native/'); - expect(config.shared[3]).toHaveProperty('@react-native/'); - }); - - it('should not duplicate or override existing deep imports', () => { - new ModuleFederationPluginV1({ - name: 'test', - shared: { - react: { singleton: true, eager: true }, - 'react-native': { singleton: true, eager: true }, - 'react-native/': { singleton: true, eager: true }, - }, - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.shared).toHaveProperty('react-native/'); - expect(config.shared).toHaveProperty('@react-native/'); - expect(config.shared['react-native/']).toMatchObject({ - singleton: true, - eager: true, - }); - }); - - it('should determine eager based on shared react-native config', () => { - new ModuleFederationPluginV1({ - name: 'test', - shared: { - react: { singleton: true, eager: true }, - 'react-native': { singleton: true, eager: false }, - }, - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.shared).toHaveProperty('react-native/'); - expect(config.shared).toHaveProperty('@react-native/'); - expect(config.shared['react-native/'].eager).toBe(false); - expect(config.shared['@react-native/'].eager).toBe(false); - }); - - it('should propagate import=false to deep react-native imports', () => { - new ModuleFederationPluginV1({ - name: 'test', - shared: { - 'react-native': { singleton: true, eager: false, import: false }, - }, - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.shared).toHaveProperty('react-native/'); - expect(config.shared).toHaveProperty('@react-native/'); - expect(config.shared['react-native/'].import).toBe(false); - expect(config.shared['@react-native/'].import).toBe(false); - }); - - it('should determine eager based on shared react-native config in array', () => { - new ModuleFederationPluginV1({ - name: 'test', - shared: [ - { react: { singleton: true, eager: true } }, - { - 'react-native': { - singleton: true, - eager: false, - requiredVersion: '0.76.0', - }, - }, - ], - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.shared[2]['react-native/'].eager).toBe(false); - expect(config.shared[3]['@react-native/'].eager).toBe(false); - expect(config.shared[2]['react-native/'].requiredVersion).toBe('0.76.0'); - expect(config.shared[3]['@react-native/'].requiredVersion).toBe('0.76.0'); - }); - - it('should propagate import=false to deep imports in array', () => { - new ModuleFederationPluginV1({ - name: 'test', - shared: [{ 'react-native': { singleton: true, import: false } }], - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.shared[1]['react-native/'].import).toBe(false); - expect(config.shared[2]['@react-native/'].import).toBe(false); - }); - - it('should set default federated entry filename', () => { - new ModuleFederationPluginV1({ - name: 'test', - exposes: { - './App': './src/App', - }, - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.filename).toBe('test.container.bundle'); - }); - - it('should allow for custom federated entry name through filename', () => { - new ModuleFederationPluginV1({ - name: 'test', - exposes: { - './App': './src/App', - }, - filename: 'remoteEntry.js', - }).apply(mockCompiler); - - const config = mockPlugin.mock.calls[0][0]; - expect(config.filename).toBe('remoteEntry.js'); - }); -}); diff --git a/packages/repack/src/plugins/__tests__/ModuleFederationPluginV2.test.ts b/packages/repack/src/plugins/__tests__/ModuleFederationPluginV2.test.ts index 4071c87c9..597467eed 100644 --- a/packages/repack/src/plugins/__tests__/ModuleFederationPluginV2.test.ts +++ b/packages/repack/src/plugins/__tests__/ModuleFederationPluginV2.test.ts @@ -2,14 +2,11 @@ import { ModuleFederationPlugin as MFPluginRspack } from '@module-federation/enh import type { Compiler } from '@rspack/core'; import { ModuleFederationPluginV2 } from '../ModuleFederationPluginV2.js'; -type CompilerWarning = Error & { - moduleDescriptor?: { - name: string; - identifier: string; - }; -}; +type CompilerWarning = Error; -jest.mock('@module-federation/enhanced/rspack'); +jest.mock('@module-federation/enhanced/rspack', () => ({ + ModuleFederationPlugin: jest.fn(() => ({ apply: jest.fn() })), +})); const mockCompiler = { context: __dirname, @@ -212,6 +209,23 @@ describe('ModuleFederationPlugin', () => { expect(config.runtimePlugins).toHaveLength(3); }); + it('should keep runtime plugins passed with options', () => { + new ModuleFederationPluginV2({ + name: 'test', + runtimePlugins: [[corePluginPath, { custom: true }]], + }).apply(mockCompiler); + + const config = mockPlugin.mock.calls[0][0]; + expect(config.runtimePlugins).toContainEqual([ + corePluginPath, + { custom: true }, + ]); + expect(config.runtimePlugins).not.toContain(corePluginPath); + expect(config.runtimePlugins).toContain(resolverPluginPath); + expect(config.runtimePlugins).toContain(prefetchPluginPath); + expect(config.runtimePlugins).toHaveLength(3); + }); + it('should use loaded-first as default shareStrategy', () => { new ModuleFederationPluginV2({ name: 'test' }).apply(mockCompiler); @@ -243,56 +257,6 @@ describe('ModuleFederationPlugin', () => { expect(ignoreWarnings[0](warning)).toBe(true); }); - it('should ignore MF2 runtime dynamic import warnings', () => { - const plugin = new ModuleFederationPluginV2({ name: 'test' }); - plugin.apply(mockCompiler); - - const ignoreWarnings = mockCompiler.options.ignoreWarnings as (( - warning: CompilerWarning - ) => boolean)[]; - - const warning = new Error() as CompilerWarning; - - warning.moduleDescriptor = { - name: '@module-federation/runtime/dist/index.cjs.js', - identifier: '@module-federation/runtime/dist/index.cjs.js', - }; - warning.message = ` - ⚠ Critical dependency: the request of a dependency is an expression - ╭─[1222:93] - 1220 │ } else { - 1221 │ Promise.resolve(/* webpackIgnore: true */ /* @vite-ignore */ entry).then(function(p) { - 1222 │ return /*#__PURE__*/ _interop_require_wildcard._(require(p)); - · ── - 1223 │ }).then(resolve)["catch"](reject); - 1224 │ } - ╰──── - `; - - expect(ignoreWarnings[1](warning)).toBe(true); - - // also works for runtime-core - warning.moduleDescriptor = { - name: '@module-federation/runtime-core/dist/index.cjs.js', - identifier: '@module-federation/runtime-core/dist/index.cjs.js', - }; - - expect(ignoreWarnings[1](warning)).toBe(true); - }); - - it('should not cause a crash when warning does not have a moduleDescriptor', () => { - const plugin = new ModuleFederationPluginV2({ name: 'test' }); - plugin.apply(mockCompiler); - - const ignoreWarnings = mockCompiler.options.ignoreWarnings as (( - warning: CompilerWarning - ) => boolean)[]; - - const warning = new Error('some warning') as CompilerWarning; - - expect(() => ignoreWarnings[1](warning)).not.toThrow(); - }); - it('should throw an error for an invalid container name', () => { const invalidContainerNames = [ 'app-name', diff --git a/packages/repack/src/plugins/index.ts b/packages/repack/src/plugins/index.ts index a4c866e44..94c6e44c1 100644 --- a/packages/repack/src/plugins/index.ts +++ b/packages/repack/src/plugins/index.ts @@ -4,9 +4,11 @@ export * from './DevelopmentPlugin.js'; export * from './HermesBytecodePlugin/index.js'; export * from './LoggerPlugin.js'; export * from './ManifestPlugin.js'; -export * from './ModuleFederationPlugin.js'; -export * from './ModuleFederationPluginV1.js'; export * from './ModuleFederationPluginV2.js'; +export { + ModuleFederationPluginV2 as ModuleFederationPlugin, + type ModuleFederationPluginV2Config as ModuleFederationPluginConfig, +} from './ModuleFederationPluginV2.js'; export * from './NativeEntryPlugin/index.js'; export * from './OutputPlugin/index.js'; export * from './RepackTargetPlugin/index.js'; diff --git a/packages/repack/src/utils/federated.ts b/packages/repack/src/utils/federated.ts deleted file mode 100644 index 2ffbaf01e..000000000 --- a/packages/repack/src/utils/federated.ts +++ /dev/null @@ -1,195 +0,0 @@ -import { URL } from 'node:url'; -import dedent from 'dedent'; - -/** - * Namespace for utilities for Module Federation. - */ -export namespace Federated { - /** - * @deprecated - * - * Predefined options for shared `react` dependency. - * - * @example Basic example. - * ```js - * import * as Repack from '@callstack/repack'; - * - * new Repack.plugins.ModuleFederationPlugin({ - * // ... - * shared: { - * react: Repack.Federated.SHARED_REACT, - * } - * }); - * ``` - * - * @example Example with spread and additional options. - * ```js - * import * as Repack from '@callstack/repack'; - * - * new Repack.plugins.ModuleFederationPlugin({ - * // ... - * shared: { - * react: { - * ...Repack.Federated.SHARED_REACT, - * // additional options - * } - * } - * }); - * ``` - */ - export const SHARED_REACT = { - singleton: true, - eager: true, - }; - - /** - * @deprecated - * - * Predefined options for shared `react-native` dependency. - * - * @example Basic example. - * ```js - * import * as React from 'repack'; - * - * new Repack.plugins.ModuleFederationPlugin({ - * // ... - * shared: { - * 'react-native': Repack.Federated.SHARED_REACT, - * } - * }); - * ``` - * - * @example Example with spread and additional options. - * ```js - * import * as React from 'repack'; - * - * new Repack.plugins.ModuleFederationPlugin({ - * // ... - * shared: { - * 'react-native': { - * ...Repack.Federated.SHARED_REACT_NATIVE, - * // additional options - * } - * } - * }); - * ``` - */ - export const SHARED_REACT_NATIVE = { - singleton: true, - eager: true, - }; - - /** - * @deprecated - * - * Creates JavaScript loading code for the given Module Federation remote - * allowing to import that remote without creating an async boundary, but with - * simple import statement, eg: `import MyComponent from 'my-remote/MyComponent';`. - * - * `Federated.createRemote` adds a default resolver for container and it's chunks - * with priority `0`, if you provide URL after the `@`. - * If `dynamic` (eg `module1@dynamic`) is provided, no default resolver will be added. - * - * __This function should be used only when using `rspack.container.ModuleFederationPlugin`.__ - * For `Repack.plugins.ModuleFederationPlugin`, `Federated.createRemote` is used under the hood. - * - * Remote container will be evaluated only once. If you import module from the same container twice, - * the container will be loaded and evaluated only on the first import. - * - * @param remote Remote name with URL or `dynamic` separated by `@`. - * @returns A JavaScript loading code the the given remote. - * - * @example - * ```ts - * import rspack from '@rspack/core'; - * import * as Repack from '@callstack/repack'; - * - * export default (env) => { - * return { - * plugins: [ - * new rspack.container.ModuleFederationPlugin({ - * remotes: { - * app1: Repack.Federated.createRemote('app1@dynamic'), - * app2: Repack.Federated.createRemote('app2@https://example.com/app2.container.bundle'), - * }, - * }), - * ], - * }; - * }; - * ``` - */ - export function createRemote(remote: string) { - const [remoteName, url] = remote.split('@'); - - if (!url) { - if (remote.includes('@')) { - throw new Error( - 'Missing URL after @. Use `dynamic` or provide full URL to container bundle.' - ); - } - throw new Error( - 'Remote must provide @ with either full URL to container bundle or `dynamic`.' - ); - } - - const containerUrl = url === 'dynamic' ? undefined : url; - const chunksUrl = - url === 'dynamic' ? undefined : new URL('[name][ext]', url).href; - - const defaultResolver = containerUrl - ? dedent` - scriptManager.addResolver(function (scriptId, caller) { - if (scriptId === '${remoteName}') { - return { - url: '${containerUrl}', - }; - } - }, { priority: 0 }); - - scriptManager.addResolver(function (scriptId, caller) { - if (caller === '${remoteName}') { - return { - url: (webpackContext) => '${chunksUrl}'.replace('[name][ext]', webpackContext.u(scriptId)), - }; - } - }, { priority: 0 }); - ` - : ''; - - return dedent`promise new Promise((resolve, reject) => { - function resolveRemote() { - resolve({ - get: (request) => { - return self.${remoteName}.get(request); - }, - init: (arg) => { - if (!self.${remoteName}.__isInitialized) { - try { - self.${remoteName}.__isInitialized = true; - return self.${remoteName}.init(arg); - } catch (e) { - console.log('[Repack/Federated] Remote container ${remoteName} already initialized.'); - } - } - } - }); - } - - if (self.${remoteName}) { - return resolveRemote(); - } - var scriptManager = __webpack_require__.repack.shared.scriptManager; - - ${defaultResolver} - - scriptManager - .loadScript('${remoteName}', undefined, __webpack_require__) - .then(function() { - resolveRemote(); - }) - .catch(function(reason) { - reject(reason); - }); - })`; - } -} diff --git a/tests/integration/src/plugins/NativeEntryPlugin.test.ts b/tests/integration/src/plugins/NativeEntryPlugin.test.ts index 5dc64768c..eca1825c5 100644 --- a/tests/integration/src/plugins/NativeEntryPlugin.test.ts +++ b/tests/integration/src/plugins/NativeEntryPlugin.test.ts @@ -4,22 +4,8 @@ import { plugins } from '@callstack/repack'; import type { Configuration } from '@rspack/core'; import { createFsFromVolume, Volume } from 'memfs'; import { describe, expect, inject, it } from 'vitest'; -// Webpack throws when multiple versions of @module-federation/enhanced register -// serializers with the same key. Patch ObjectMiddleware.register to allow -// re-registration since we externalize all MF modules and never use serialization. -// @ts-expect-error no types for internal webpack module -import ObjectMiddleware from 'webpack/lib/serialization/ObjectMiddleware'; import { createCompiler, createVirtualModulePlugin } from '../helpers.js'; -const _register = ObjectMiddleware.register.bind(ObjectMiddleware); -ObjectMiddleware.register = (...args: unknown[]) => { - try { - _register(...args); - } catch (e: any) { - if (!e.message?.includes('is already registered')) throw e; - } -}; - const __dirname = path.dirname(fileURLToPath(import.meta.url)); const REACT_NATIVE_PATH = path.join(__dirname, '__fixtures__', 'react-native'); const REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -301,47 +287,8 @@ describe('NativeEntryPlugin', () => { }); }); - describe('with Module Federation v1', () => { - it('should execute polyfills runtime module before MF v1 startup', async () => { - const { code } = await compileBundle( - { - './index.js': 'globalThis.__APP_ENTRY__ = true;', - './App.js': 'export default globalThis.__FEDERATED_EXPORT__ = true;', - }, - [ - new plugins.ModuleFederationPluginV1({ - name: 'testContainer', - exposes: { - './App': './App.js', - }, - shared: { - react: { singleton: true, eager: true }, - 'react-native': { singleton: true, eager: true }, - }, - reactNativeDeepImports: false, - }), - ] - ); - - // Polyfill modules were processed through the loader pipeline - expect(code).toContain('__POLYFILL_1__'); - expect(code).toContain('__POLYFILL_2__'); - expect(code).toContain('__INITIALIZE_CORE__'); - - // With all-eager shared modules, MF v1 uses inline startup (no deferred wrapper) - // Polyfills runtime module IIFE executes before inline startup entries - expectBundleOrder(code, [ - 'webpack/runtime/repack/polyfills', - 'Load entry module and return exports', - ]); - - expect(normalizeBundle(code)).toMatchSnapshot(); - }); - }); - + // Lowest supported @module-federation/enhanced version (peer range >=2.0.0). const MF_V2_VERSIONS = [ - { version: '0.15.0', pkg: '@module-federation/enhanced-v15' }, - { version: '0.21.0', pkg: '@module-federation/enhanced-v21' }, { version: '2.0.1', pkg: '@module-federation/enhanced' }, ]; diff --git a/tests/integration/src/plugins/__snapshots__/rspack/NativeEntryPlugin.test.ts.snap b/tests/integration/src/plugins/__snapshots__/rspack/NativeEntryPlugin.test.ts.snap index 410b2ec7b..023e5d0a3 100644 --- a/tests/integration/src/plugins/__snapshots__/rspack/NativeEntryPlugin.test.ts.snap +++ b/tests/integration/src/plugins/__snapshots__/rspack/NativeEntryPlugin.test.ts.snap @@ -1,1149 +1,6 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`NativeEntryPlugin > with Module Federation v1 > should execute polyfills runtime module before MF v1 startup 1`] = ` -"(() => { // webpackBootstrap -var __webpack_modules__ = ({ -"../../../../packages/repack/dist/modules/IncludeModules.js": -/*!******************************************************************!*\\ - !*** ../../../../packages/repack/dist/modules/IncludeModules.js ***! - \\******************************************************************/ -(function () { -/* - * This module is added as an entry module to prevent stripping of these React Native deep imports from the bundle. - * We use require.resolve from Rspack/Webpack to ensure these modules are included even if not directly used. - * This allows us to include the modules into the bundle without evaluating them. - * These modules are required by assetsLoader and should be shared as deep imports when using ModuleFederation. - */ - -/*require.resolve*/(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'react-native/Libraries/Image/AssetRegistry'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); -/*require.resolve*/(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'react-native/Libraries/Image/AssetSourceResolver'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); - -}), -"../../../../packages/repack/dist/modules/InitializeScriptManager.js": -/*!***************************************************************************!*\\ - !*** ../../../../packages/repack/dist/modules/InitializeScriptManager.js ***! - \\***************************************************************************/ -(function () { -throw new Error(" × Module parse failed:\\n ╰─▶ × JavaScript parse error: 'import', and 'export' cannot be used outside of module code\\n ╭─[1:0]\\n 1 │ import { ScriptManager } from './ScriptManager/ScriptManager.js';\\n · ──────\\n 2 │ ScriptManager.init();\\n ╰────\\n \\n help: \\n You may need an appropriate loader to handle this file type.\\n"); - - -}), -"./__fixtures__/react-native/Libraries/Core/InitializeCore.js": -/*!********************************************************************!*\\ - !*** ./__fixtures__/react-native/Libraries/Core/InitializeCore.js ***! - \\********************************************************************/ -(function () { -globalThis.__INITIALIZE_CORE__ = true; - - -}), -"./__fixtures__/react-native/polyfill1.js": -/*!************************************************!*\\ - !*** ./__fixtures__/react-native/polyfill1.js ***! - \\************************************************/ -(function () { -globalThis.__POLYFILL_1__ = true; - - -}), -"./__fixtures__/react-native/polyfill2.js": -/*!************************************************!*\\ - !*** ./__fixtures__/react-native/polyfill2.js ***! - \\************************************************/ -(function () { -globalThis.__POLYFILL_2__ = true; - - -}), -"./index.js": -/*!******************!*\\ - !*** ./index.js ***! - \\******************/ -(function (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { -"use strict"; -__webpack_require__.r(__webpack_exports__); -globalThis.__APP_ENTRY__ = true; - -}), - -}); -/************************************************************************/ -// The module cache -var __webpack_module_cache__ = {}; - -// The require function -function __webpack_require__(moduleId) { - -// Check if module is in cache -var cachedModule = __webpack_module_cache__[moduleId]; -if (cachedModule !== undefined) { -return cachedModule.exports; -} -// Create a new module (and put it into the cache) -var module = (__webpack_module_cache__[moduleId] = { -exports: {} -}); -// Execute the module function -__webpack_modules__[moduleId](module, module.exports, __webpack_require__); - -// Return the exports of the module -return module.exports; - -} - -// expose the modules object (__webpack_modules__) -__webpack_require__.m = __webpack_modules__; - -// expose the module cache -__webpack_require__.c = __webpack_module_cache__; - -/************************************************************************/ -// webpack/runtime/has_own_property -(() => { -__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -})(); -// webpack/runtime/make_namespace_object -(() => { -// define __esModule on exports -__webpack_require__.r = (exports) => { - if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { - Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); - } - Object.defineProperty(exports, '__esModule', { value: true }); -}; -})(); -// webpack/runtime/rspack_version -(() => { -__webpack_require__.rv = () => ("1.6.0") -})(); -// webpack/runtime/sharing -(() => { - -__webpack_require__.S = {}; -__webpack_require__.initializeSharingData = { scopeToSharingDataMapping: { }, uniqueName: "" }; -var initPromises = {}; -var initTokens = {}; -__webpack_require__.I = function(name, initScope) { - if (!initScope) initScope = []; - // handling circular init calls - var initToken = initTokens[name]; - if (!initToken) initToken = initTokens[name] = {}; - if (initScope.indexOf(initToken) >= 0) return; - initScope.push(initToken); - // only runs once - if (initPromises[name]) return initPromises[name]; - // creates a new share scope if needed - if (!__webpack_require__.o(__webpack_require__.S, name)) - __webpack_require__.S[name] = {}; - // runs all init snippets from all modules reachable - var scope = __webpack_require__.S[name]; - var warn = function (msg) { - if (typeof console !== "undefined" && console.warn) console.warn(msg); - }; - var uniqueName = __webpack_require__.initializeSharingData.uniqueName; - var register = function (name, version, factory, eager) { - var versions = (scope[name] = scope[name] || {}); - var activeVersion = versions[version]; - if ( - !activeVersion || - (!activeVersion.loaded && - (!eager != !activeVersion.eager - ? eager - : uniqueName > activeVersion.from)) - ) - versions[version] = { get: factory, from: uniqueName, eager: !!eager }; - }; - var initExternal = function (id) { - var handleError = function (err) { - warn("Initialization of sharing external failed: " + err); - }; - try { - var module = __webpack_require__(id); - if (!module) return; - var initFn = function (module) { - return ( - module && - module.init && - module.init(__webpack_require__.S[name], initScope) - ); - }; - if (module.then) return promises.push(module.then(initFn, handleError)); - var initResult = initFn(module); - if (initResult && initResult.then) - return promises.push(initResult["catch"](handleError)); - } catch (err) { - handleError(err); - } - }; - var promises = []; - var scopeToSharingDataMapping = __webpack_require__.initializeSharingData.scopeToSharingDataMapping; - if (scopeToSharingDataMapping[name]) { - scopeToSharingDataMapping[name].forEach(function (stage) { - if (typeof stage === "object") register(stage.name, stage.version, stage.factory, stage.eager); - else initExternal(stage) - }); - } - if (!promises.length) return (initPromises[name] = 1); - return (initPromises[name] = Promise.all(promises).then(function () { - return (initPromises[name] = 1); - })); -}; - - -})(); -// webpack/runtime/repack/polyfills -(() => { -__webpack_require__("./__fixtures__/react-native/polyfill1.js"); -__webpack_require__("./__fixtures__/react-native/polyfill2.js"); -})(); -// webpack/runtime/consumes_loading -(() => { - -__webpack_require__.consumesLoadingData = { chunkMapping: {}, moduleIdToConsumeDataMapping: {}, initialConsumes: [] }; -var splitAndConvert = function(str) { - return str.split(".").map(function(item) { - return +item == item ? +item : item; - }); -}; -var parseRange = function(str) { - // see https://docs.npmjs.com/misc/semver#range-grammar for grammar - var parsePartial = function(str) { - var match = /^([^-+]+)?(?:-([^+]+))?(?:\\+(.+))?$/.exec(str); - var ver = match[1] ? [0].concat(splitAndConvert(match[1])) : [0]; - if (match[2]) { - ver.length++; - ver.push.apply(ver, splitAndConvert(match[2])); - } - - // remove trailing any matchers - let last = ver[ver.length - 1]; - while ( - ver.length && - (last === undefined || /^[*xX]$/.test(/** @type {string} */ (last))) - ) { - ver.pop(); - last = ver[ver.length - 1]; - } - - return ver; - }; - var toFixed = function(range) { - if (range.length === 1) { - // Special case for "*" is "x.x.x" instead of "=" - return [0]; - } else if (range.length === 2) { - // Special case for "1" is "1.x.x" instead of "=1" - return [1].concat(range.slice(1)); - } else if (range.length === 3) { - // Special case for "1.2" is "1.2.x" instead of "=1.2" - return [2].concat(range.slice(1)); - } else { - return [range.length].concat(range.slice(1)); - } - }; - var negate = function(range) { - return [-range[0] - 1].concat(range.slice(1)); - }; - var parseSimple = function(str) { - // simple ::= primitive | partial | tilde | caret - // primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | '!' ) ( ' ' ) * partial - // tilde ::= '~' ( ' ' ) * partial - // caret ::= '^' ( ' ' ) * partial - const match = /^(\\^|~|<=|<|>=|>|=|v|!)/.exec(str); - const start = match ? match[0] : ""; - const remainder = parsePartial( - start.length ? str.slice(start.length).trim() : str.trim() - ); - switch (start) { - case "^": - if (remainder.length > 1 && remainder[1] === 0) { - if (remainder.length > 2 && remainder[2] === 0) { - return [3].concat(remainder.slice(1)); - } - return [2].concat(remainder.slice(1)); - } - return [1].concat(remainder.slice(1)); - case "~": - return [2].concat(remainder.slice(1)); - case ">=": - return remainder; - case "=": - case "v": - case "": - return toFixed(remainder); - case "<": - return negate(remainder); - case ">": { - // and( >=, not( = ) ) => >=, =, not, and - const fixed = toFixed(remainder); - return [, fixed, 0, remainder, 2]; - } - case "<=": - // or( <, = ) => <, =, or - return [, toFixed(remainder), negate(remainder), 1]; - case "!": { - // not = - const fixed = toFixed(remainder); - return [, fixed, 0]; - } - default: - throw new Error("Unexpected start value"); - } - }; - var combine = function(items, fn) { - if (items.length === 1) return items[0]; - const arr = []; - for (const item of items.slice().reverse()) { - if (0 in item) { - arr.push(item); - } else { - arr.push.apply(arr, item.slice(1)); - } - } - return [,].concat(arr, items.slice(1).map(() => fn)); - }; - var parseRange = function(str) { - // range ::= hyphen | simple ( ' ' ( ' ' ) * simple ) * | '' - // hyphen ::= partial ( ' ' ) * ' - ' ( ' ' ) * partial - const items = str.split(/\\s+-\\s+/); - if (items.length === 1) { - str = str.trim(); - const items = []; - const r = /[-0-9A-Za-z]\\s+/g; - var start = 0; - var match; - while ((match = r.exec(str))) { - const end = match.index + 1; - items.push(parseSimple(str.slice(start, end).trim())); - start = end; - } - items.push(parseSimple(str.slice(start).trim())); - return combine(items, 2); - } - const a = parsePartial(items[0]); - const b = parsePartial(items[1]); - // >=a <=b => and( >=a, or( >=a, = a.length) return i < b.length && (typeof b[i])[0] != "u"; - - var aValue = a[i]; - var aType = (typeof aValue)[0]; - - // Handles first column in table - if (i >= b.length) return aType == "u"; - - var bValue = b[i]; - var bType = (typeof bValue)[0]; - - if (aType == bType) { - if (aType != "o" && aType != "u" && aValue != bValue) { - return aValue < bValue; - } - i++; - } else { - // Handles remaining cases - if (aType == "o" && bType == "n") return true; - return bType == "s" || aType == "u"; - } - } -} -var rangeToString = function(range) { - var fixCount = range[0]; - var str = ""; - if (range.length === 1) { - return "*"; - } else if (fixCount + 0.5) { - str += - fixCount == 0 - ? ">=" - : fixCount == -1 - ? "<" - : fixCount == 1 - ? "^" - : fixCount == 2 - ? "~" - : fixCount > 0 - ? "=" - : "!="; - var needDot = 1; - for (var i = 1; i < range.length; i++) { - var item = range[i]; - var t = (typeof item)[0]; - needDot--; - str += - t == "u" - ? // undefined: prerelease marker, add an "-" - "-" - : // number or string: add the item, set flag to add an "." between two of them - (needDot > 0 ? "." : "") + ((needDot = 2), item); - } - return str; - } else { - var stack = []; - for (var i = 1; i < range.length; i++) { - var item = range[i]; - stack.push( - item === 0 - ? "not(" + pop() + ")" - : item === 1 - ? "(" + pop() + " || " + pop() + ")" - : item === 2 - ? stack.pop() + " " + stack.pop() - : rangeToString(item) - ); - } - return pop(); - } - function pop() { - return stack.pop().replace(/^\\((.+)\\)$/, "$1"); - } -} -var satisfy = function(range, version) { - if (0 in range) { - version = parseVersion(version); - var fixCount = /** @type {number} */ (range[0]); - // when negated is set it swill set for < instead of >= - var negated = fixCount < 0; - if (negated) fixCount = -fixCount - 1; - for (var i = 0, j = 1, isEqual = true; ; j++, i++) { - // cspell:word nequal nequ - - // when isEqual = true: - // range version: EOA/object undefined number string - // EOA equal block big-ver big-ver - // undefined bigger next big-ver big-ver - // number smaller block cmp big-cmp - // fixed number smaller block cmp-fix differ - // string smaller block differ cmp - // fixed string smaller block small-cmp cmp-fix - - // when isEqual = false: - // range version: EOA/object undefined number string - // EOA nequal block next-ver next-ver - // undefined nequal block next-ver next-ver - // number nequal block next next - // fixed number nequal block next next (this never happens) - // string nequal block next next - // fixed string nequal block next next (this never happens) - - // EOA end of array - // equal (version is equal range): - // when !negated: return true, - // when negated: return false - // bigger (version is bigger as range): - // when fixed: return false, - // when !negated: return true, - // when negated: return false, - // smaller (version is smaller as range): - // when !negated: return false, - // when negated: return true - // nequal (version is not equal range (> resp <)): return true - // block (version is in different prerelease area): return false - // differ (version is different from fixed range (string vs. number)): return false - // next: continues to the next items - // next-ver: when fixed: return false, continues to the next item only for the version, sets isEqual=false - // big-ver: when fixed || negated: return false, continues to the next item only for the version, sets isEqual=false - // next-nequ: continues to the next items, sets isEqual=false - // cmp (negated === false): version < range => return false, version > range => next-nequ, else => next - // cmp (negated === true): version > range => return false, version < range => next-nequ, else => next - // cmp-fix: version == range => next, else => return false - // big-cmp: when negated => return false, else => next-nequ - // small-cmp: when negated => next-nequ, else => return false - - var rangeType = j < range.length ? (typeof range[j])[0] : ""; - - var versionValue; - var versionType; - - // Handles first column in both tables (end of version or object) - if ( - i >= version.length || - ((versionValue = version[i]), - (versionType = (typeof versionValue)[0]) == "o") - ) { - // Handles nequal - if (!isEqual) return true; - // Handles bigger - if (rangeType == "u") return j > fixCount && !negated; - // Handles equal and smaller: (range === EOA) XOR negated - return (rangeType == "") != negated; // equal + smaller - } - - // Handles second column in both tables (version = undefined) - if (versionType == "u") { - if (!isEqual || rangeType != "u") { - return false; - } - } - - // switch between first and second table - else if (isEqual) { - // Handle diagonal - if (rangeType == versionType) { - if (j <= fixCount) { - // Handles "cmp-fix" cases - if (versionValue != range[j]) { - return false; - } - } else { - // Handles "cmp" cases - if (negated ? versionValue > range[j] : versionValue < range[j]) { - return false; - } - if (versionValue != range[j]) isEqual = false; - } - } - - // Handle big-ver - else if (rangeType != "s" && rangeType != "n") { - if (negated || j <= fixCount) return false; - isEqual = false; - j--; - } - - // Handle differ, big-cmp and small-cmp - else if (j <= fixCount || versionType < rangeType != negated) { - return false; - } else { - isEqual = false; - } - } else { - // Handles all "next-ver" cases in the second table - if (rangeType != "s" && rangeType != "n") { - isEqual = false; - j--; - } - - // next is applied by default - } - } - } - /** @type {(boolean | number)[]} */ - var stack = []; - var p = stack.pop.bind(stack); - for (var i = 1; i < range.length; i++) { - var item = /** @type {SemVerRange | 0 | 1 | 2} */ (range[i]); - stack.push( - item == 1 - ? p() | p() - : item == 2 - ? p() & p() - : item - ? satisfy(item, version) - : !p() - ); - } - return !!p(); -} -var ensureExistence = function(scopeName, key) { - var scope = __webpack_require__.S[scopeName]; - if(!scope || !__webpack_require__.o(scope, key)) throw new Error("Shared module " + key + " doesn't exist in shared scope " + scopeName); - return scope; -}; -var findVersion = function(scope, key) { - var versions = scope[key]; - var key = Object.keys(versions).reduce(function(a, b) { - return !a || versionLt(a, b) ? b : a; - }, 0); - return key && versions[key] -}; -var findSingletonVersionKey = function(scope, key) { - var versions = scope[key]; - return Object.keys(versions).reduce(function(a, b) { - return !a || (!versions[a].loaded && versionLt(a, b)) ? b : a; - }, 0); -}; -var getInvalidSingletonVersionMessage = function(scope, key, version, requiredVersion) { - return "Unsatisfied version " + version + " from " + (version && scope[key][version].from) + " of shared singleton module " + key + " (required " + rangeToString(requiredVersion) + ")" -}; -var getSingleton = function(scope, scopeName, key, requiredVersion) { - var version = findSingletonVersionKey(scope, key); - return get(scope[key][version]); -}; -var getSingletonVersion = function(scope, scopeName, key, requiredVersion) { - var version = findSingletonVersionKey(scope, key); - if (!satisfy(requiredVersion, version)) warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion)); - return get(scope[key][version]); -}; -var getStrictSingletonVersion = function(scope, scopeName, key, requiredVersion) { - var version = findSingletonVersionKey(scope, key); - if (!satisfy(requiredVersion, version)) throw new Error(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion)); - return get(scope[key][version]); -}; -var findValidVersion = function(scope, key, requiredVersion) { - var versions = scope[key]; - var key = Object.keys(versions).reduce(function(a, b) { - if (!satisfy(requiredVersion, b)) return a; - return !a || versionLt(a, b) ? b : a; - }, 0); - return key && versions[key] -}; -var getInvalidVersionMessage = function(scope, scopeName, key, requiredVersion) { - var versions = scope[key]; - return "No satisfying version (" + rangeToString(requiredVersion) + ") of shared module " + key + " found in shared scope " + scopeName + ".\\n" + - "Available versions: " + Object.keys(versions).map(function(key) { - return key + " from " + versions[key].from; - }).join(", "); -}; -var getValidVersion = function(scope, scopeName, key, requiredVersion) { - var entry = findValidVersion(scope, key, requiredVersion); - if(entry) return get(entry); - throw new Error(getInvalidVersionMessage(scope, scopeName, key, requiredVersion)); -}; -var warn = function(msg) { - if (typeof console !== "undefined" && console.warn) console.warn(msg); -}; -var warnInvalidVersion = function(scope, scopeName, key, requiredVersion) { - warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion)); -}; -var get = function(entry) { - entry.loaded = 1; - return entry.get() -}; -var init = function(fn) { return function(scopeName, a, b, c) { - var promise = __webpack_require__.I(scopeName); - if (promise && promise.then) return promise.then(fn.bind(fn, scopeName, __webpack_require__.S[scopeName], a, b, c)); - return fn(scopeName, __webpack_require__.S[scopeName], a, b, c); -}; }; - -var load = /*#__PURE__*/ init(function(scopeName, scope, key) { - ensureExistence(scopeName, key); - return get(findVersion(scope, key)); -}); -var loadFallback = /*#__PURE__*/ init(function(scopeName, scope, key, fallback) { - return scope && __webpack_require__.o(scope, key) ? get(findVersion(scope, key)) : fallback(); -}); -var loadVersionCheck = /*#__PURE__*/ init(function(scopeName, scope, key, version) { - ensureExistence(scopeName, key); - return get(findValidVersion(scope, key, version) || warnInvalidVersion(scope, scopeName, key, version) || findVersion(scope, key)); -}); -var loadSingleton = /*#__PURE__*/ init(function(scopeName, scope, key) { - ensureExistence(scopeName, key); - return getSingleton(scope, scopeName, key); -}); -var loadSingletonVersionCheck = /*#__PURE__*/ init(function(scopeName, scope, key, version) { - ensureExistence(scopeName, key); - return getSingletonVersion(scope, scopeName, key, version); -}); -var loadStrictVersionCheck = /*#__PURE__*/ init(function(scopeName, scope, key, version) { - ensureExistence(scopeName, key); - return getValidVersion(scope, scopeName, key, version); -}); -var loadStrictSingletonVersionCheck = /*#__PURE__*/ init(function(scopeName, scope, key, version) { - ensureExistence(scopeName, key); - return getStrictSingletonVersion(scope, scopeName, key, version); -}); -var loadVersionCheckFallback = /*#__PURE__*/ init(function(scopeName, scope, key, version, fallback) { - if(!scope || !__webpack_require__.o(scope, key)) return fallback(); - return get(findValidVersion(scope, key, version) || warnInvalidVersion(scope, scopeName, key, version) || findVersion(scope, key)); -}); -var loadSingletonFallback = /*#__PURE__*/ init(function(scopeName, scope, key, fallback) { - if(!scope || !__webpack_require__.o(scope, key)) return fallback(); - return getSingleton(scope, scopeName, key); -}); -var loadSingletonVersionCheckFallback = /*#__PURE__*/ init(function(scopeName, scope, key, version, fallback) { - if(!scope || !__webpack_require__.o(scope, key)) return fallback(); - return getSingletonVersion(scope, scopeName, key, version); -}); -var loadStrictVersionCheckFallback = /*#__PURE__*/ init(function(scopeName, scope, key, version, fallback) { - var entry = scope && __webpack_require__.o(scope, key) && findValidVersion(scope, key, version); - return entry ? get(entry) : fallback(); -}); -var loadStrictSingletonVersionCheckFallback = /*#__PURE__*/ init(function(scopeName, scope, key, version, fallback) { - if(!scope || !__webpack_require__.o(scope, key)) return fallback(); - return getStrictSingletonVersion(scope, scopeName, key, version); -}); -var resolveHandler = function(data) { - var strict = false - var singleton = false - var versionCheck = false - var fallback = false - var args = [data.shareScope, data.shareKey]; - if (data.requiredVersion) { - if (data.strictVersion) strict = true; - if (data.singleton) singleton = true; - args.push(parseRange(data.requiredVersion)); - versionCheck = true - } else if (data.singleton) singleton = true; - if (data.fallback) { - fallback = true; - args.push(data.fallback); - } - if (strict && singleton && versionCheck && fallback) return function() { return loadStrictSingletonVersionCheckFallback.apply(null, args); } - if (strict && versionCheck && fallback) return function() { return loadStrictVersionCheckFallback.apply(null, args); } - if (singleton && versionCheck && fallback) return function() { return loadSingletonVersionCheckFallback.apply(null, args); } - if (strict && singleton && versionCheck) return function() { return loadStrictSingletonVersionCheck.apply(null, args); } - if (singleton && fallback) return function() { return loadSingletonFallback.apply(null, args); } - if (versionCheck && fallback) return function() { return loadVersionCheckFallback.apply(null, args); } - if (strict && versionCheck) return function() { return loadStrictVersionCheck.apply(null, args); } - if (singleton && versionCheck) return function() { return loadSingletonVersionCheck.apply(null, args); } - if (singleton) return function() { return loadSingleton.apply(null, args); } - if (versionCheck) return function() { return loadVersionCheck.apply(null, args); } - if (fallback) return function() { return loadFallback.apply(null, args); } - return function() { return load.apply(null, args); } -}; -var installedModules = {}; - -})(); -// webpack/runtime/rspack_unique_id -(() => { -__webpack_require__.ruid = "bundler=rspack@1.6.0"; - -})(); -/************************************************************************/ -// module factories are used so entry inlining is disabled -// startup -// Load entry module and return exports -__webpack_require__("./__fixtures__/react-native/polyfill1.js"); -__webpack_require__("./__fixtures__/react-native/polyfill2.js"); -__webpack_require__("./__fixtures__/react-native/Libraries/Core/InitializeCore.js"); -__webpack_require__("../../../../packages/repack/dist/modules/InitializeScriptManager.js"); -__webpack_require__("../../../../packages/repack/dist/modules/IncludeModules.js"); -var __webpack_exports__ = __webpack_require__("./index.js"); -})() -;" -`; - -exports[`NativeEntryPlugin > with Module Federation v2 ('0.15.0') > should execute polyfills runtime module before MF v2 federation runtime 1`] = ` -"(() => { // webpackBootstrap -var __webpack_modules__ = ({ -"@module-federation/runtime/rspack.js!=!data:text/javascript,import __module_federation_bundler_runtime__ from \\"/node_modules/.pnpm/@module-federation+webpack-bundler-runtime@0.15.0/node_modules/@module-federation/webpack-bundler-runtime/dist/index.cjs.cjs\\";const __module_federation_runtime_plugins__ = [];const __module_federation_remote_infos__ = {};const __module_federation_container_name__ = \\"testContainer\\";const __module_federation_share_strategy__ = \\"version-first\\";if((__webpack_require__.initializeSharingData||__webpack_require__.initializeExposesData)&&__webpack_require__.federation){var __webpack_require___remotesLoadingData,__webpack_require___remotesLoadingData1,__webpack_require___initializeSharingData,__webpack_require___consumesLoadingData,__webpack_require___consumesLoadingData1,__webpack_require___initializeExposesData,__webpack_require___consumesLoadingData2;const override=(obj,key,value)=>{if(!obj)return;if(obj[key])obj[key]=value};const merge=(obj,key,fn)=>{const value=fn();if(Array.isArray(value)){var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=[];obj[key].push(...value)}else if(typeof value===\\"object\\"&&value!==null){var _obj1,_key1;var _1;(_1=(_obj1=obj)[_key1=key])!==null&&_1!==void 0?_1:_obj1[_key1]={};Object.assign(obj[key],value)}};const early=(obj,key,initial)=>{var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=initial()};var __webpack_require___remotesLoadingData_chunkMapping;const remotesLoadingChunkMapping=(__webpack_require___remotesLoadingData_chunkMapping=(__webpack_require___remotesLoadingData=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData===void 0?void 0:__webpack_require___remotesLoadingData.chunkMapping)!==null&&__webpack_require___remotesLoadingData_chunkMapping!==void 0?__webpack_require___remotesLoadingData_chunkMapping:{};var __webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping;const remotesLoadingModuleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData1=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData1===void 0?void 0:__webpack_require___remotesLoadingData1.moduleIdToRemoteDataMapping)!==null&&__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping!==void 0?__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping:{};var __webpack_require___initializeSharingData_scopeToSharingDataMapping;const initializeSharingScopeToInitDataMapping=(__webpack_require___initializeSharingData_scopeToSharingDataMapping=(__webpack_require___initializeSharingData=__webpack_require__.initializeSharingData)===null||__webpack_require___initializeSharingData===void 0?void 0:__webpack_require___initializeSharingData.scopeToSharingDataMapping)!==null&&__webpack_require___initializeSharingData_scopeToSharingDataMapping!==void 0?__webpack_require___initializeSharingData_scopeToSharingDataMapping:{};var __webpack_require___consumesLoadingData_chunkMapping;const consumesLoadingChunkMapping=(__webpack_require___consumesLoadingData_chunkMapping=(__webpack_require___consumesLoadingData=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData===void 0?void 0:__webpack_require___consumesLoadingData.chunkMapping)!==null&&__webpack_require___consumesLoadingData_chunkMapping!==void 0?__webpack_require___consumesLoadingData_chunkMapping:{};var __webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping;const consumesLoadingModuleToConsumeDataMapping=(__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping=(__webpack_require___consumesLoadingData1=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData1===void 0?void 0:__webpack_require___consumesLoadingData1.moduleIdToConsumeDataMapping)!==null&&__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping!==void 0?__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping:{};const consumesLoadinginstalledModules={};const initializeSharingInitPromises=[];const initializeSharingInitTokens={};const containerShareScope=(__webpack_require___initializeExposesData=__webpack_require__.initializeExposesData)===null||__webpack_require___initializeExposesData===void 0?void 0:__webpack_require___initializeExposesData.shareScope;for(const key in __module_federation_bundler_runtime__){__webpack_require__.federation[key]=__module_federation_bundler_runtime__[key]}early(__webpack_require__.federation,\\"consumesLoadingModuleToHandlerMapping\\",()=>{const consumesLoadingModuleToHandlerMapping={};for(let[moduleId,data]of Object.entries(consumesLoadingModuleToConsumeDataMapping)){consumesLoadingModuleToHandlerMapping[moduleId]={getter:data.fallback,shareInfo:{shareConfig:{fixedDependencies:false,requiredVersion:data.requiredVersion,strictVersion:data.strictVersion,singleton:data.singleton,eager:data.eager},scope:[data.shareScope]},shareKey:data.shareKey}}return consumesLoadingModuleToHandlerMapping});early(__webpack_require__.federation,\\"initOptions\\",()=>({}));early(__webpack_require__.federation.initOptions,\\"name\\",()=>__module_federation_container_name__);early(__webpack_require__.federation.initOptions,\\"shareStrategy\\",()=>__module_federation_share_strategy__);early(__webpack_require__.federation.initOptions,\\"shared\\",()=>{const shared={};for(let[scope,stages]of Object.entries(initializeSharingScopeToInitDataMapping)){for(let stage of stages){if(typeof stage===\\"object\\"&&stage!==null){const{name,version,factory,eager,singleton,requiredVersion,strictVersion}=stage;const shareConfig={};const isValidValue=function(val){return typeof val!==\\"undefined\\"};if(isValidValue(singleton)){shareConfig.singleton=singleton}if(isValidValue(requiredVersion)){shareConfig.requiredVersion=requiredVersion}if(isValidValue(eager)){shareConfig.eager=eager}if(isValidValue(strictVersion)){shareConfig.strictVersion=strictVersion}const options={version,scope:[scope],shareConfig,get:factory};if(shared[name]){shared[name].push(options)}else{shared[name]=[options]}}}}return shared});merge(__webpack_require__.federation.initOptions,\\"remotes\\",()=>Object.values(__module_federation_remote_infos__).flat().filter(remote=>remote.externalType===\\"script\\"));merge(__webpack_require__.federation.initOptions,\\"plugins\\",()=>__module_federation_runtime_plugins__);early(__webpack_require__.federation,\\"bundlerRuntimeOptions\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions,\\"remotes\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"chunkMapping\\",()=>remotesLoadingChunkMapping);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"remoteInfos\\",()=>__module_federation_remote_infos__);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToExternalAndNameMapping\\",()=>{const remotesLoadingIdToExternalAndNameMappingMapping={};for(let[moduleId,data]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){remotesLoadingIdToExternalAndNameMappingMapping[moduleId]=[data.shareScope,data.name,data.externalModuleId,data.remoteName]}return remotesLoadingIdToExternalAndNameMappingMapping});early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"webpackRequire\\",()=>__webpack_require__);merge(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToRemoteMap\\",()=>{const idToRemoteMap={};for(let[id,remoteData]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){const info=__module_federation_remote_infos__[remoteData.remoteName];if(info)idToRemoteMap[id]=info}return idToRemoteMap});override(__webpack_require__,\\"S\\",__webpack_require__.federation.bundlerRuntime.S);if(__webpack_require__.federation.attachShareScopeMap){__webpack_require__.federation.attachShareScopeMap(__webpack_require__)}override(__webpack_require__.f,\\"remotes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.remotes({chunkId,promises,chunkMapping:remotesLoadingChunkMapping,idToExternalAndNameMapping:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToExternalAndNameMapping,idToRemoteMap:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToRemoteMap,webpackRequire:__webpack_require__}));override(__webpack_require__.f,\\"consumes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.consumes({chunkId,promises,chunkMapping:consumesLoadingChunkMapping,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping,installedModules:consumesLoadinginstalledModules,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"I\\",(name,initScope)=>__webpack_require__.federation.bundlerRuntime.I({shareScopeName:name,initScope,initPromises:initializeSharingInitPromises,initTokens:initializeSharingInitTokens,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"initContainer\\",(shareScope,initScope,remoteEntryInitOptions)=>__webpack_require__.federation.bundlerRuntime.initContainerEntry({shareScope,initScope,remoteEntryInitOptions,shareScopeKey:containerShareScope,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"getContainer\\",(module1,getScope)=>{var moduleMap=__webpack_require__.initializeExposesData.moduleMap;__webpack_require__.R=getScope;getScope=Object.prototype.hasOwnProperty.call(moduleMap,module1)?moduleMap[module1]():Promise.resolve().then(()=>{throw new Error('Module \\"'+module1+'\\" does not exist in container.')});__webpack_require__.R=undefined;return getScope});__webpack_require__.federation.instance=__webpack_require__.federation.runtime.init(__webpack_require__.federation.initOptions);if((__webpack_require___consumesLoadingData2=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData2===void 0?void 0:__webpack_require___consumesLoadingData2.initialConsumes){__webpack_require__.federation.bundlerRuntime.installInitialConsumes({webpackRequire:__webpack_require__,installedModules:consumesLoadinginstalledModules,initialConsumes:__webpack_require__.consumesLoadingData.initialConsumes,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping})}}": -/*!*********************************************!*\\ - !*** external "globalThis.__MF_EXTERNAL__" ***! - \\*********************************************/ -(function (module) { -"use strict"; -module.exports = globalThis.__MF_EXTERNAL__; - -}), -"../../../../packages/repack/dist/modules/IncludeModules.js": -/*!******************************************************************!*\\ - !*** ../../../../packages/repack/dist/modules/IncludeModules.js ***! - \\******************************************************************/ -(function () { -/* - * This module is added as an entry module to prevent stripping of these React Native deep imports from the bundle. - * We use require.resolve from Rspack/Webpack to ensure these modules are included even if not directly used. - * This allows us to include the modules into the bundle without evaluating them. - * These modules are required by assetsLoader and should be shared as deep imports when using ModuleFederation. - */ - -/*require.resolve*/(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'react-native/Libraries/Image/AssetRegistry'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); -/*require.resolve*/(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'react-native/Libraries/Image/AssetSourceResolver'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); - -}), -"../../../../packages/repack/dist/modules/InitializeScriptManager.js": -/*!***************************************************************************!*\\ - !*** ../../../../packages/repack/dist/modules/InitializeScriptManager.js ***! - \\***************************************************************************/ -(function () { -throw new Error(" × Module parse failed:\\n ╰─▶ × JavaScript parse error: 'import', and 'export' cannot be used outside of module code\\n ╭─[1:0]\\n 1 │ import { ScriptManager } from './ScriptManager/ScriptManager.js';\\n · ──────\\n 2 │ ScriptManager.init();\\n ╰────\\n \\n help: \\n You may need an appropriate loader to handle this file type.\\n"); - - -}), -"./__fixtures__/react-native/Libraries/Core/InitializeCore.js": -/*!********************************************************************!*\\ - !*** ./__fixtures__/react-native/Libraries/Core/InitializeCore.js ***! - \\********************************************************************/ -(function () { -globalThis.__INITIALIZE_CORE__ = true; - - -}), -"./__fixtures__/react-native/polyfill1.js": -/*!************************************************!*\\ - !*** ./__fixtures__/react-native/polyfill1.js ***! - \\************************************************/ -(function () { -globalThis.__POLYFILL_1__ = true; - - -}), -"./__fixtures__/react-native/polyfill2.js": -/*!************************************************!*\\ - !*** ./__fixtures__/react-native/polyfill2.js ***! - \\************************************************/ -(function () { -globalThis.__POLYFILL_2__ = true; - - -}), -"./index.js": -/*!******************!*\\ - !*** ./index.js ***! - \\******************/ -(function (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { -"use strict"; -__webpack_require__.r(__webpack_exports__); -globalThis.__APP_ENTRY__ = true; - -}), - -}); -/************************************************************************/ -// The module cache -var __webpack_module_cache__ = {}; - -// The require function -function __webpack_require__(moduleId) { - -// Check if module is in cache -var cachedModule = __webpack_module_cache__[moduleId]; -if (cachedModule !== undefined) { -return cachedModule.exports; -} -// Create a new module (and put it into the cache) -var module = (__webpack_module_cache__[moduleId] = { -exports: {} -}); -// Execute the module function -__webpack_modules__[moduleId](module, module.exports, __webpack_require__); - -// Return the exports of the module -return module.exports; - -} - -// expose the modules object (__webpack_modules__) -__webpack_require__.m = __webpack_modules__; - -// expose the module cache -__webpack_require__.c = __webpack_module_cache__; - -// the startup function -__webpack_require__.x = () => { -// Load entry module and return exports -__webpack_require__("./__fixtures__/react-native/polyfill1.js"); -__webpack_require__("./__fixtures__/react-native/polyfill2.js"); -__webpack_require__("./__fixtures__/react-native/Libraries/Core/InitializeCore.js"); -__webpack_require__("../../../../packages/repack/dist/modules/InitializeScriptManager.js"); -__webpack_require__("../../../../packages/repack/dist/modules/IncludeModules.js"); -var __webpack_exports__ = __webpack_require__("./index.js"); -return __webpack_exports__ -}; - -/************************************************************************/ -// module_federation/runtime -(() => { - -if(!__webpack_require__.federation){ - __webpack_require__.federation = { - -chunkMatcher: function(chunkId) { - return true; -}, -rootOutputDir: "", - - }; -} - -})(); -// webpack/runtime/embed_federation_runtime -(() => { -var prevStartup = __webpack_require__.x; -var hasRun = false; -__webpack_require__.x = function() { - if (!hasRun) { - hasRun = true; - __webpack_require__("@module-federation/runtime/rspack.js!=!data:text/javascript,import __module_federation_bundler_runtime__ from \\"/node_modules/.pnpm/@module-federation+webpack-bundler-runtime@0.15.0/node_modules/@module-federation/webpack-bundler-runtime/dist/index.cjs.cjs\\";const __module_federation_runtime_plugins__ = [];const __module_federation_remote_infos__ = {};const __module_federation_container_name__ = \\"testContainer\\";const __module_federation_share_strategy__ = \\"version-first\\";if((__webpack_require__.initializeSharingData||__webpack_require__.initializeExposesData)&&__webpack_require__.federation){var __webpack_require___remotesLoadingData,__webpack_require___remotesLoadingData1,__webpack_require___initializeSharingData,__webpack_require___consumesLoadingData,__webpack_require___consumesLoadingData1,__webpack_require___initializeExposesData,__webpack_require___consumesLoadingData2;const override=(obj,key,value)=>{if(!obj)return;if(obj[key])obj[key]=value};const merge=(obj,key,fn)=>{const value=fn();if(Array.isArray(value)){var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=[];obj[key].push(...value)}else if(typeof value===\\"object\\"&&value!==null){var _obj1,_key1;var _1;(_1=(_obj1=obj)[_key1=key])!==null&&_1!==void 0?_1:_obj1[_key1]={};Object.assign(obj[key],value)}};const early=(obj,key,initial)=>{var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=initial()};var __webpack_require___remotesLoadingData_chunkMapping;const remotesLoadingChunkMapping=(__webpack_require___remotesLoadingData_chunkMapping=(__webpack_require___remotesLoadingData=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData===void 0?void 0:__webpack_require___remotesLoadingData.chunkMapping)!==null&&__webpack_require___remotesLoadingData_chunkMapping!==void 0?__webpack_require___remotesLoadingData_chunkMapping:{};var __webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping;const remotesLoadingModuleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData1=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData1===void 0?void 0:__webpack_require___remotesLoadingData1.moduleIdToRemoteDataMapping)!==null&&__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping!==void 0?__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping:{};var __webpack_require___initializeSharingData_scopeToSharingDataMapping;const initializeSharingScopeToInitDataMapping=(__webpack_require___initializeSharingData_scopeToSharingDataMapping=(__webpack_require___initializeSharingData=__webpack_require__.initializeSharingData)===null||__webpack_require___initializeSharingData===void 0?void 0:__webpack_require___initializeSharingData.scopeToSharingDataMapping)!==null&&__webpack_require___initializeSharingData_scopeToSharingDataMapping!==void 0?__webpack_require___initializeSharingData_scopeToSharingDataMapping:{};var __webpack_require___consumesLoadingData_chunkMapping;const consumesLoadingChunkMapping=(__webpack_require___consumesLoadingData_chunkMapping=(__webpack_require___consumesLoadingData=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData===void 0?void 0:__webpack_require___consumesLoadingData.chunkMapping)!==null&&__webpack_require___consumesLoadingData_chunkMapping!==void 0?__webpack_require___consumesLoadingData_chunkMapping:{};var __webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping;const consumesLoadingModuleToConsumeDataMapping=(__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping=(__webpack_require___consumesLoadingData1=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData1===void 0?void 0:__webpack_require___consumesLoadingData1.moduleIdToConsumeDataMapping)!==null&&__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping!==void 0?__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping:{};const consumesLoadinginstalledModules={};const initializeSharingInitPromises=[];const initializeSharingInitTokens={};const containerShareScope=(__webpack_require___initializeExposesData=__webpack_require__.initializeExposesData)===null||__webpack_require___initializeExposesData===void 0?void 0:__webpack_require___initializeExposesData.shareScope;for(const key in __module_federation_bundler_runtime__){__webpack_require__.federation[key]=__module_federation_bundler_runtime__[key]}early(__webpack_require__.federation,\\"consumesLoadingModuleToHandlerMapping\\",()=>{const consumesLoadingModuleToHandlerMapping={};for(let[moduleId,data]of Object.entries(consumesLoadingModuleToConsumeDataMapping)){consumesLoadingModuleToHandlerMapping[moduleId]={getter:data.fallback,shareInfo:{shareConfig:{fixedDependencies:false,requiredVersion:data.requiredVersion,strictVersion:data.strictVersion,singleton:data.singleton,eager:data.eager},scope:[data.shareScope]},shareKey:data.shareKey}}return consumesLoadingModuleToHandlerMapping});early(__webpack_require__.federation,\\"initOptions\\",()=>({}));early(__webpack_require__.federation.initOptions,\\"name\\",()=>__module_federation_container_name__);early(__webpack_require__.federation.initOptions,\\"shareStrategy\\",()=>__module_federation_share_strategy__);early(__webpack_require__.federation.initOptions,\\"shared\\",()=>{const shared={};for(let[scope,stages]of Object.entries(initializeSharingScopeToInitDataMapping)){for(let stage of stages){if(typeof stage===\\"object\\"&&stage!==null){const{name,version,factory,eager,singleton,requiredVersion,strictVersion}=stage;const shareConfig={};const isValidValue=function(val){return typeof val!==\\"undefined\\"};if(isValidValue(singleton)){shareConfig.singleton=singleton}if(isValidValue(requiredVersion)){shareConfig.requiredVersion=requiredVersion}if(isValidValue(eager)){shareConfig.eager=eager}if(isValidValue(strictVersion)){shareConfig.strictVersion=strictVersion}const options={version,scope:[scope],shareConfig,get:factory};if(shared[name]){shared[name].push(options)}else{shared[name]=[options]}}}}return shared});merge(__webpack_require__.federation.initOptions,\\"remotes\\",()=>Object.values(__module_federation_remote_infos__).flat().filter(remote=>remote.externalType===\\"script\\"));merge(__webpack_require__.federation.initOptions,\\"plugins\\",()=>__module_federation_runtime_plugins__);early(__webpack_require__.federation,\\"bundlerRuntimeOptions\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions,\\"remotes\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"chunkMapping\\",()=>remotesLoadingChunkMapping);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"remoteInfos\\",()=>__module_federation_remote_infos__);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToExternalAndNameMapping\\",()=>{const remotesLoadingIdToExternalAndNameMappingMapping={};for(let[moduleId,data]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){remotesLoadingIdToExternalAndNameMappingMapping[moduleId]=[data.shareScope,data.name,data.externalModuleId,data.remoteName]}return remotesLoadingIdToExternalAndNameMappingMapping});early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"webpackRequire\\",()=>__webpack_require__);merge(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToRemoteMap\\",()=>{const idToRemoteMap={};for(let[id,remoteData]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){const info=__module_federation_remote_infos__[remoteData.remoteName];if(info)idToRemoteMap[id]=info}return idToRemoteMap});override(__webpack_require__,\\"S\\",__webpack_require__.federation.bundlerRuntime.S);if(__webpack_require__.federation.attachShareScopeMap){__webpack_require__.federation.attachShareScopeMap(__webpack_require__)}override(__webpack_require__.f,\\"remotes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.remotes({chunkId,promises,chunkMapping:remotesLoadingChunkMapping,idToExternalAndNameMapping:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToExternalAndNameMapping,idToRemoteMap:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToRemoteMap,webpackRequire:__webpack_require__}));override(__webpack_require__.f,\\"consumes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.consumes({chunkId,promises,chunkMapping:consumesLoadingChunkMapping,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping,installedModules:consumesLoadinginstalledModules,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"I\\",(name,initScope)=>__webpack_require__.federation.bundlerRuntime.I({shareScopeName:name,initScope,initPromises:initializeSharingInitPromises,initTokens:initializeSharingInitTokens,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"initContainer\\",(shareScope,initScope,remoteEntryInitOptions)=>__webpack_require__.federation.bundlerRuntime.initContainerEntry({shareScope,initScope,remoteEntryInitOptions,shareScopeKey:containerShareScope,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"getContainer\\",(module1,getScope)=>{var moduleMap=__webpack_require__.initializeExposesData.moduleMap;__webpack_require__.R=getScope;getScope=Object.prototype.hasOwnProperty.call(moduleMap,module1)?moduleMap[module1]():Promise.resolve().then(()=>{throw new Error('Module \\"'+module1+'\\" does not exist in container.')});__webpack_require__.R=undefined;return getScope});__webpack_require__.federation.instance=__webpack_require__.federation.runtime.init(__webpack_require__.federation.initOptions);if((__webpack_require___consumesLoadingData2=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData2===void 0?void 0:__webpack_require___consumesLoadingData2.initialConsumes){__webpack_require__.federation.bundlerRuntime.installInitialConsumes({webpackRequire:__webpack_require__,installedModules:consumesLoadinginstalledModules,initialConsumes:__webpack_require__.consumesLoadingData.initialConsumes,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping})}}") - } - if (typeof prevStartup === 'function') { - return prevStartup(); - } else { - console.warn('[MF] Invalid prevStartup'); - } -}; -})(); -// webpack/runtime/has_own_property -(() => { -__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -})(); -// webpack/runtime/make_namespace_object -(() => { -// define __esModule on exports -__webpack_require__.r = (exports) => { - if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { - Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); - } - Object.defineProperty(exports, '__esModule', { value: true }); -}; -})(); -// webpack/runtime/rspack_version -(() => { -__webpack_require__.rv = () => ("1.6.0") -})(); -// webpack/runtime/sharing -(() => { - -__webpack_require__.S = {}; -__webpack_require__.initializeSharingData = { scopeToSharingDataMapping: { }, uniqueName: "" }; -__webpack_require__.I = __webpack_require__.I || function() { throw new Error("should have __webpack_require__.I") } - -})(); -// webpack/runtime/repack/polyfills -(() => { -__webpack_require__("./__fixtures__/react-native/polyfill1.js"); -__webpack_require__("./__fixtures__/react-native/polyfill2.js"); -})(); -// webpack/runtime/consumes_loading -(() => { - -__webpack_require__.consumesLoadingData = { chunkMapping: {}, moduleIdToConsumeDataMapping: {}, initialConsumes: [] }; - -})(); -// webpack/runtime/rspack_unique_id -(() => { -__webpack_require__.ruid = "bundler=rspack@1.6.0"; - -})(); -/************************************************************************/ -// module factories are used so entry inlining is disabled -// run startup -var __webpack_exports__ = __webpack_require__.x(); -})() -;" -`; - -exports[`NativeEntryPlugin > with Module Federation v2 ('0.21.0') > should execute polyfills runtime module before MF v2 federation runtime 1`] = ` -"(() => { // webpackBootstrap -var __webpack_modules__ = ({ -"@module-federation/runtime/rspack.js!=!data:text/javascript,import __module_federation_bundler_runtime__ from \\"/node_modules/.pnpm/@module-federation+webpack-bundler-runtime@0.21.0/node_modules/@module-federation/webpack-bundler-runtime/dist/index.cjs.cjs\\";const __module_federation_runtime_plugins__ = [];const __module_federation_remote_infos__ = {};const __module_federation_container_name__ = \\"testContainer\\";const __module_federation_share_strategy__ = \\"version-first\\";if((__webpack_require__.initializeSharingData||__webpack_require__.initializeExposesData)&&__webpack_require__.federation){var __webpack_require___remotesLoadingData,__webpack_require___remotesLoadingData1,__webpack_require___initializeSharingData,__webpack_require___consumesLoadingData,__webpack_require___consumesLoadingData1,__webpack_require___initializeExposesData,__webpack_require___consumesLoadingData2;const override=(obj,key,value)=>{if(!obj)return;if(obj[key])obj[key]=value};const merge=(obj,key,fn)=>{const value=fn();if(Array.isArray(value)){var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=[];obj[key].push(...value)}else if(typeof value===\\"object\\"&&value!==null){var _obj1,_key1;var _1;(_1=(_obj1=obj)[_key1=key])!==null&&_1!==void 0?_1:_obj1[_key1]={};Object.assign(obj[key],value)}};const early=(obj,key,initial)=>{var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=initial()};var __webpack_require___remotesLoadingData_chunkMapping;const remotesLoadingChunkMapping=(__webpack_require___remotesLoadingData_chunkMapping=(__webpack_require___remotesLoadingData=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData===void 0?void 0:__webpack_require___remotesLoadingData.chunkMapping)!==null&&__webpack_require___remotesLoadingData_chunkMapping!==void 0?__webpack_require___remotesLoadingData_chunkMapping:{};var __webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping;const remotesLoadingModuleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData1=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData1===void 0?void 0:__webpack_require___remotesLoadingData1.moduleIdToRemoteDataMapping)!==null&&__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping!==void 0?__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping:{};var __webpack_require___initializeSharingData_scopeToSharingDataMapping;const initializeSharingScopeToInitDataMapping=(__webpack_require___initializeSharingData_scopeToSharingDataMapping=(__webpack_require___initializeSharingData=__webpack_require__.initializeSharingData)===null||__webpack_require___initializeSharingData===void 0?void 0:__webpack_require___initializeSharingData.scopeToSharingDataMapping)!==null&&__webpack_require___initializeSharingData_scopeToSharingDataMapping!==void 0?__webpack_require___initializeSharingData_scopeToSharingDataMapping:{};var __webpack_require___consumesLoadingData_chunkMapping;const consumesLoadingChunkMapping=(__webpack_require___consumesLoadingData_chunkMapping=(__webpack_require___consumesLoadingData=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData===void 0?void 0:__webpack_require___consumesLoadingData.chunkMapping)!==null&&__webpack_require___consumesLoadingData_chunkMapping!==void 0?__webpack_require___consumesLoadingData_chunkMapping:{};var __webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping;const consumesLoadingModuleToConsumeDataMapping=(__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping=(__webpack_require___consumesLoadingData1=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData1===void 0?void 0:__webpack_require___consumesLoadingData1.moduleIdToConsumeDataMapping)!==null&&__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping!==void 0?__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping:{};const consumesLoadinginstalledModules={};const initializeSharingInitPromises=[];const initializeSharingInitTokens={};const containerShareScope=(__webpack_require___initializeExposesData=__webpack_require__.initializeExposesData)===null||__webpack_require___initializeExposesData===void 0?void 0:__webpack_require___initializeExposesData.shareScope;for(const key in __module_federation_bundler_runtime__){__webpack_require__.federation[key]=__module_federation_bundler_runtime__[key]}early(__webpack_require__.federation,\\"consumesLoadingModuleToHandlerMapping\\",()=>{const consumesLoadingModuleToHandlerMapping={};for(let[moduleId,data]of Object.entries(consumesLoadingModuleToConsumeDataMapping)){consumesLoadingModuleToHandlerMapping[moduleId]={getter:data.fallback,shareInfo:{shareConfig:{fixedDependencies:false,requiredVersion:data.requiredVersion,strictVersion:data.strictVersion,singleton:data.singleton,eager:data.eager},scope:[data.shareScope]},shareKey:data.shareKey}}return consumesLoadingModuleToHandlerMapping});early(__webpack_require__.federation,\\"initOptions\\",()=>({}));early(__webpack_require__.federation.initOptions,\\"name\\",()=>__module_federation_container_name__);early(__webpack_require__.federation.initOptions,\\"shareStrategy\\",()=>__module_federation_share_strategy__);early(__webpack_require__.federation.initOptions,\\"shared\\",()=>{const shared={};for(let[scope,stages]of Object.entries(initializeSharingScopeToInitDataMapping)){for(let stage of stages){if(typeof stage===\\"object\\"&&stage!==null){const{name,version,factory,eager,singleton,requiredVersion,strictVersion}=stage;const shareConfig={};const isValidValue=function(val){return typeof val!==\\"undefined\\"};if(isValidValue(singleton)){shareConfig.singleton=singleton}if(isValidValue(requiredVersion)){shareConfig.requiredVersion=requiredVersion}if(isValidValue(eager)){shareConfig.eager=eager}if(isValidValue(strictVersion)){shareConfig.strictVersion=strictVersion}const options={version,scope:[scope],shareConfig,get:factory};if(shared[name]){shared[name].push(options)}else{shared[name]=[options]}}}}return shared});merge(__webpack_require__.federation.initOptions,\\"remotes\\",()=>Object.values(__module_federation_remote_infos__).flat().filter(remote=>remote.externalType===\\"script\\"));merge(__webpack_require__.federation.initOptions,\\"plugins\\",()=>__module_federation_runtime_plugins__);early(__webpack_require__.federation,\\"bundlerRuntimeOptions\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions,\\"remotes\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"chunkMapping\\",()=>remotesLoadingChunkMapping);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"remoteInfos\\",()=>__module_federation_remote_infos__);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToExternalAndNameMapping\\",()=>{const remotesLoadingIdToExternalAndNameMappingMapping={};for(let[moduleId,data]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){remotesLoadingIdToExternalAndNameMappingMapping[moduleId]=[data.shareScope,data.name,data.externalModuleId,data.remoteName]}return remotesLoadingIdToExternalAndNameMappingMapping});early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"webpackRequire\\",()=>__webpack_require__);merge(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToRemoteMap\\",()=>{const idToRemoteMap={};for(let[id,remoteData]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){const info=__module_federation_remote_infos__[remoteData.remoteName];if(info)idToRemoteMap[id]=info}return idToRemoteMap});override(__webpack_require__,\\"S\\",__webpack_require__.federation.bundlerRuntime.S);if(__webpack_require__.federation.attachShareScopeMap){__webpack_require__.federation.attachShareScopeMap(__webpack_require__)}override(__webpack_require__.f,\\"remotes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.remotes({chunkId,promises,chunkMapping:remotesLoadingChunkMapping,idToExternalAndNameMapping:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToExternalAndNameMapping,idToRemoteMap:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToRemoteMap,webpackRequire:__webpack_require__}));override(__webpack_require__.f,\\"consumes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.consumes({chunkId,promises,chunkMapping:consumesLoadingChunkMapping,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping,installedModules:consumesLoadinginstalledModules,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"I\\",(name,initScope)=>__webpack_require__.federation.bundlerRuntime.I({shareScopeName:name,initScope,initPromises:initializeSharingInitPromises,initTokens:initializeSharingInitTokens,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"initContainer\\",(shareScope,initScope,remoteEntryInitOptions)=>__webpack_require__.federation.bundlerRuntime.initContainerEntry({shareScope,initScope,remoteEntryInitOptions,shareScopeKey:containerShareScope,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"getContainer\\",(module1,getScope)=>{var moduleMap=__webpack_require__.initializeExposesData.moduleMap;__webpack_require__.R=getScope;getScope=Object.prototype.hasOwnProperty.call(moduleMap,module1)?moduleMap[module1]():Promise.resolve().then(()=>{throw new Error('Module \\"'+module1+'\\" does not exist in container.')});__webpack_require__.R=undefined;return getScope});__webpack_require__.federation.instance=__webpack_require__.federation.runtime.init(__webpack_require__.federation.initOptions);if((__webpack_require___consumesLoadingData2=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData2===void 0?void 0:__webpack_require___consumesLoadingData2.initialConsumes){__webpack_require__.federation.bundlerRuntime.installInitialConsumes({webpackRequire:__webpack_require__,installedModules:consumesLoadinginstalledModules,initialConsumes:__webpack_require__.consumesLoadingData.initialConsumes,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping})}}": -/*!*********************************************!*\\ - !*** external "globalThis.__MF_EXTERNAL__" ***! - \\*********************************************/ -(function (module) { -"use strict"; -module.exports = globalThis.__MF_EXTERNAL__; - -}), -"../../../../packages/repack/dist/modules/IncludeModules.js": -/*!******************************************************************!*\\ - !*** ../../../../packages/repack/dist/modules/IncludeModules.js ***! - \\******************************************************************/ -(function () { -/* - * This module is added as an entry module to prevent stripping of these React Native deep imports from the bundle. - * We use require.resolve from Rspack/Webpack to ensure these modules are included even if not directly used. - * This allows us to include the modules into the bundle without evaluating them. - * These modules are required by assetsLoader and should be shared as deep imports when using ModuleFederation. - */ - -/*require.resolve*/(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'react-native/Libraries/Image/AssetRegistry'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); -/*require.resolve*/(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'react-native/Libraries/Image/AssetSourceResolver'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); - -}), -"../../../../packages/repack/dist/modules/InitializeScriptManager.js": -/*!***************************************************************************!*\\ - !*** ../../../../packages/repack/dist/modules/InitializeScriptManager.js ***! - \\***************************************************************************/ -(function () { -throw new Error(" × Module parse failed:\\n ╰─▶ × JavaScript parse error: 'import', and 'export' cannot be used outside of module code\\n ╭─[1:0]\\n 1 │ import { ScriptManager } from './ScriptManager/ScriptManager.js';\\n · ──────\\n 2 │ ScriptManager.init();\\n ╰────\\n \\n help: \\n You may need an appropriate loader to handle this file type.\\n"); - - -}), -"./__fixtures__/react-native/Libraries/Core/InitializeCore.js": -/*!********************************************************************!*\\ - !*** ./__fixtures__/react-native/Libraries/Core/InitializeCore.js ***! - \\********************************************************************/ -(function () { -globalThis.__INITIALIZE_CORE__ = true; - - -}), -"./__fixtures__/react-native/polyfill1.js": -/*!************************************************!*\\ - !*** ./__fixtures__/react-native/polyfill1.js ***! - \\************************************************/ -(function () { -globalThis.__POLYFILL_1__ = true; - - -}), -"./__fixtures__/react-native/polyfill2.js": -/*!************************************************!*\\ - !*** ./__fixtures__/react-native/polyfill2.js ***! - \\************************************************/ -(function () { -globalThis.__POLYFILL_2__ = true; - - -}), -"./index.js": -/*!******************!*\\ - !*** ./index.js ***! - \\******************/ -(function (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { -"use strict"; -__webpack_require__.r(__webpack_exports__); -globalThis.__APP_ENTRY__ = true; - -}), - -}); -/************************************************************************/ -// The module cache -var __webpack_module_cache__ = {}; - -// The require function -function __webpack_require__(moduleId) { - -// Check if module is in cache -var cachedModule = __webpack_module_cache__[moduleId]; -if (cachedModule !== undefined) { -return cachedModule.exports; -} -// Create a new module (and put it into the cache) -var module = (__webpack_module_cache__[moduleId] = { -exports: {} -}); -// Execute the module function -__webpack_modules__[moduleId](module, module.exports, __webpack_require__); - -// Return the exports of the module -return module.exports; - -} - -// expose the modules object (__webpack_modules__) -__webpack_require__.m = __webpack_modules__; - -// expose the module cache -__webpack_require__.c = __webpack_module_cache__; - -// the startup function -__webpack_require__.x = () => { -// Load entry module and return exports -__webpack_require__("./__fixtures__/react-native/polyfill1.js"); -__webpack_require__("./__fixtures__/react-native/polyfill2.js"); -__webpack_require__("./__fixtures__/react-native/Libraries/Core/InitializeCore.js"); -__webpack_require__("../../../../packages/repack/dist/modules/InitializeScriptManager.js"); -__webpack_require__("../../../../packages/repack/dist/modules/IncludeModules.js"); -var __webpack_exports__ = __webpack_require__("./index.js"); -return __webpack_exports__ -}; - -/************************************************************************/ -// module_federation/runtime -(() => { - -if(!__webpack_require__.federation){ - __webpack_require__.federation = { - -chunkMatcher: function(chunkId) { - return true; -}, -rootOutputDir: "", - - }; -} - -})(); -// webpack/runtime/embed_federation_runtime -(() => { -var prevStartup = __webpack_require__.x; -var hasRun = false; -__webpack_require__.x = function() { - if (!hasRun) { - hasRun = true; - __webpack_require__("@module-federation/runtime/rspack.js!=!data:text/javascript,import __module_federation_bundler_runtime__ from \\"/node_modules/.pnpm/@module-federation+webpack-bundler-runtime@0.21.0/node_modules/@module-federation/webpack-bundler-runtime/dist/index.cjs.cjs\\";const __module_federation_runtime_plugins__ = [];const __module_federation_remote_infos__ = {};const __module_federation_container_name__ = \\"testContainer\\";const __module_federation_share_strategy__ = \\"version-first\\";if((__webpack_require__.initializeSharingData||__webpack_require__.initializeExposesData)&&__webpack_require__.federation){var __webpack_require___remotesLoadingData,__webpack_require___remotesLoadingData1,__webpack_require___initializeSharingData,__webpack_require___consumesLoadingData,__webpack_require___consumesLoadingData1,__webpack_require___initializeExposesData,__webpack_require___consumesLoadingData2;const override=(obj,key,value)=>{if(!obj)return;if(obj[key])obj[key]=value};const merge=(obj,key,fn)=>{const value=fn();if(Array.isArray(value)){var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=[];obj[key].push(...value)}else if(typeof value===\\"object\\"&&value!==null){var _obj1,_key1;var _1;(_1=(_obj1=obj)[_key1=key])!==null&&_1!==void 0?_1:_obj1[_key1]={};Object.assign(obj[key],value)}};const early=(obj,key,initial)=>{var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=initial()};var __webpack_require___remotesLoadingData_chunkMapping;const remotesLoadingChunkMapping=(__webpack_require___remotesLoadingData_chunkMapping=(__webpack_require___remotesLoadingData=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData===void 0?void 0:__webpack_require___remotesLoadingData.chunkMapping)!==null&&__webpack_require___remotesLoadingData_chunkMapping!==void 0?__webpack_require___remotesLoadingData_chunkMapping:{};var __webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping;const remotesLoadingModuleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData1=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData1===void 0?void 0:__webpack_require___remotesLoadingData1.moduleIdToRemoteDataMapping)!==null&&__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping!==void 0?__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping:{};var __webpack_require___initializeSharingData_scopeToSharingDataMapping;const initializeSharingScopeToInitDataMapping=(__webpack_require___initializeSharingData_scopeToSharingDataMapping=(__webpack_require___initializeSharingData=__webpack_require__.initializeSharingData)===null||__webpack_require___initializeSharingData===void 0?void 0:__webpack_require___initializeSharingData.scopeToSharingDataMapping)!==null&&__webpack_require___initializeSharingData_scopeToSharingDataMapping!==void 0?__webpack_require___initializeSharingData_scopeToSharingDataMapping:{};var __webpack_require___consumesLoadingData_chunkMapping;const consumesLoadingChunkMapping=(__webpack_require___consumesLoadingData_chunkMapping=(__webpack_require___consumesLoadingData=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData===void 0?void 0:__webpack_require___consumesLoadingData.chunkMapping)!==null&&__webpack_require___consumesLoadingData_chunkMapping!==void 0?__webpack_require___consumesLoadingData_chunkMapping:{};var __webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping;const consumesLoadingModuleToConsumeDataMapping=(__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping=(__webpack_require___consumesLoadingData1=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData1===void 0?void 0:__webpack_require___consumesLoadingData1.moduleIdToConsumeDataMapping)!==null&&__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping!==void 0?__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping:{};const consumesLoadinginstalledModules={};const initializeSharingInitPromises=[];const initializeSharingInitTokens={};const containerShareScope=(__webpack_require___initializeExposesData=__webpack_require__.initializeExposesData)===null||__webpack_require___initializeExposesData===void 0?void 0:__webpack_require___initializeExposesData.shareScope;for(const key in __module_federation_bundler_runtime__){__webpack_require__.federation[key]=__module_federation_bundler_runtime__[key]}early(__webpack_require__.federation,\\"consumesLoadingModuleToHandlerMapping\\",()=>{const consumesLoadingModuleToHandlerMapping={};for(let[moduleId,data]of Object.entries(consumesLoadingModuleToConsumeDataMapping)){consumesLoadingModuleToHandlerMapping[moduleId]={getter:data.fallback,shareInfo:{shareConfig:{fixedDependencies:false,requiredVersion:data.requiredVersion,strictVersion:data.strictVersion,singleton:data.singleton,eager:data.eager},scope:[data.shareScope]},shareKey:data.shareKey}}return consumesLoadingModuleToHandlerMapping});early(__webpack_require__.federation,\\"initOptions\\",()=>({}));early(__webpack_require__.federation.initOptions,\\"name\\",()=>__module_federation_container_name__);early(__webpack_require__.federation.initOptions,\\"shareStrategy\\",()=>__module_federation_share_strategy__);early(__webpack_require__.federation.initOptions,\\"shared\\",()=>{const shared={};for(let[scope,stages]of Object.entries(initializeSharingScopeToInitDataMapping)){for(let stage of stages){if(typeof stage===\\"object\\"&&stage!==null){const{name,version,factory,eager,singleton,requiredVersion,strictVersion}=stage;const shareConfig={};const isValidValue=function(val){return typeof val!==\\"undefined\\"};if(isValidValue(singleton)){shareConfig.singleton=singleton}if(isValidValue(requiredVersion)){shareConfig.requiredVersion=requiredVersion}if(isValidValue(eager)){shareConfig.eager=eager}if(isValidValue(strictVersion)){shareConfig.strictVersion=strictVersion}const options={version,scope:[scope],shareConfig,get:factory};if(shared[name]){shared[name].push(options)}else{shared[name]=[options]}}}}return shared});merge(__webpack_require__.federation.initOptions,\\"remotes\\",()=>Object.values(__module_federation_remote_infos__).flat().filter(remote=>remote.externalType===\\"script\\"));merge(__webpack_require__.federation.initOptions,\\"plugins\\",()=>__module_federation_runtime_plugins__);early(__webpack_require__.federation,\\"bundlerRuntimeOptions\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions,\\"remotes\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"chunkMapping\\",()=>remotesLoadingChunkMapping);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"remoteInfos\\",()=>__module_federation_remote_infos__);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToExternalAndNameMapping\\",()=>{const remotesLoadingIdToExternalAndNameMappingMapping={};for(let[moduleId,data]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){remotesLoadingIdToExternalAndNameMappingMapping[moduleId]=[data.shareScope,data.name,data.externalModuleId,data.remoteName]}return remotesLoadingIdToExternalAndNameMappingMapping});early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"webpackRequire\\",()=>__webpack_require__);merge(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToRemoteMap\\",()=>{const idToRemoteMap={};for(let[id,remoteData]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){const info=__module_federation_remote_infos__[remoteData.remoteName];if(info)idToRemoteMap[id]=info}return idToRemoteMap});override(__webpack_require__,\\"S\\",__webpack_require__.federation.bundlerRuntime.S);if(__webpack_require__.federation.attachShareScopeMap){__webpack_require__.federation.attachShareScopeMap(__webpack_require__)}override(__webpack_require__.f,\\"remotes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.remotes({chunkId,promises,chunkMapping:remotesLoadingChunkMapping,idToExternalAndNameMapping:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToExternalAndNameMapping,idToRemoteMap:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToRemoteMap,webpackRequire:__webpack_require__}));override(__webpack_require__.f,\\"consumes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.consumes({chunkId,promises,chunkMapping:consumesLoadingChunkMapping,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping,installedModules:consumesLoadinginstalledModules,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"I\\",(name,initScope)=>__webpack_require__.federation.bundlerRuntime.I({shareScopeName:name,initScope,initPromises:initializeSharingInitPromises,initTokens:initializeSharingInitTokens,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"initContainer\\",(shareScope,initScope,remoteEntryInitOptions)=>__webpack_require__.federation.bundlerRuntime.initContainerEntry({shareScope,initScope,remoteEntryInitOptions,shareScopeKey:containerShareScope,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"getContainer\\",(module1,getScope)=>{var moduleMap=__webpack_require__.initializeExposesData.moduleMap;__webpack_require__.R=getScope;getScope=Object.prototype.hasOwnProperty.call(moduleMap,module1)?moduleMap[module1]():Promise.resolve().then(()=>{throw new Error('Module \\"'+module1+'\\" does not exist in container.')});__webpack_require__.R=undefined;return getScope});__webpack_require__.federation.instance=__webpack_require__.federation.runtime.init(__webpack_require__.federation.initOptions);if((__webpack_require___consumesLoadingData2=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData2===void 0?void 0:__webpack_require___consumesLoadingData2.initialConsumes){__webpack_require__.federation.bundlerRuntime.installInitialConsumes({webpackRequire:__webpack_require__,installedModules:consumesLoadinginstalledModules,initialConsumes:__webpack_require__.consumesLoadingData.initialConsumes,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping})}}") - } - if (typeof prevStartup === 'function') { - return prevStartup(); - } else { - console.warn('[MF] Invalid prevStartup'); - } -}; -})(); -// webpack/runtime/has_own_property -(() => { -__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -})(); -// webpack/runtime/make_namespace_object -(() => { -// define __esModule on exports -__webpack_require__.r = (exports) => { - if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { - Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); - } - Object.defineProperty(exports, '__esModule', { value: true }); -}; -})(); -// webpack/runtime/rspack_version -(() => { -__webpack_require__.rv = () => ("1.6.0") -})(); -// webpack/runtime/sharing -(() => { - -__webpack_require__.S = {}; -__webpack_require__.initializeSharingData = { scopeToSharingDataMapping: { }, uniqueName: "" }; -__webpack_require__.I = __webpack_require__.I || function() { throw new Error("should have __webpack_require__.I") } - -})(); -// webpack/runtime/repack/polyfills -(() => { -__webpack_require__("./__fixtures__/react-native/polyfill1.js"); -__webpack_require__("./__fixtures__/react-native/polyfill2.js"); -})(); -// webpack/runtime/consumes_loading -(() => { - -__webpack_require__.consumesLoadingData = { chunkMapping: {}, moduleIdToConsumeDataMapping: {}, initialConsumes: [] }; - -})(); -// webpack/runtime/rspack_unique_id -(() => { -__webpack_require__.ruid = "bundler=rspack@1.6.0"; - -})(); -/************************************************************************/ -// module factories are used so entry inlining is disabled -// run startup -var __webpack_exports__ = __webpack_require__.x(); -})() -;" -`; - -exports[`NativeEntryPlugin > with Module Federation v2 ('2.0.1') > should execute polyfills runtime module before MF v2 federation runtime 1`] = ` +exports[`NativeEntryPlugin > with Module Federation v2 (2.0.1) > should execute polyfills runtime module before MF v2 federation runtime 1`] = ` "(() => { // webpackBootstrap var __webpack_modules__ = ({ "@module-federation/runtime/rspack.js!=!data:text/javascript,import __module_federation_bundler_runtime__ from \\"/node_modules/.pnpm/@module-federation+webpack-bundler-runtime@2.0.1/node_modules/@module-federation/webpack-bundler-runtime/dist/index.cjs.cjs\\";const __module_federation_runtime_plugins__ = [];const __module_federation_remote_infos__ = {};const __module_federation_container_name__ = \\"testContainer\\";const __module_federation_share_strategy__ = \\"version-first\\";if((__webpack_require__.initializeSharingData||__webpack_require__.initializeExposesData)&&__webpack_require__.federation){var __webpack_require___remotesLoadingData,__webpack_require___remotesLoadingData1,__webpack_require___initializeSharingData,__webpack_require___consumesLoadingData,__webpack_require___consumesLoadingData1,__webpack_require___initializeExposesData,__webpack_require___consumesLoadingData2;const override=(obj,key,value)=>{if(!obj)return;if(obj[key])obj[key]=value};const merge=(obj,key,fn)=>{const value=fn();if(Array.isArray(value)){var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=[];obj[key].push(...value)}else if(typeof value===\\"object\\"&&value!==null){var _obj1,_key1;var _1;(_1=(_obj1=obj)[_key1=key])!==null&&_1!==void 0?_1:_obj1[_key1]={};Object.assign(obj[key],value)}};const early=(obj,key,initial)=>{var _obj,_key;var _;(_=(_obj=obj)[_key=key])!==null&&_!==void 0?_:_obj[_key]=initial()};var __webpack_require___remotesLoadingData_chunkMapping;const remotesLoadingChunkMapping=(__webpack_require___remotesLoadingData_chunkMapping=(__webpack_require___remotesLoadingData=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData===void 0?void 0:__webpack_require___remotesLoadingData.chunkMapping)!==null&&__webpack_require___remotesLoadingData_chunkMapping!==void 0?__webpack_require___remotesLoadingData_chunkMapping:{};var __webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping;const remotesLoadingModuleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping=(__webpack_require___remotesLoadingData1=__webpack_require__.remotesLoadingData)===null||__webpack_require___remotesLoadingData1===void 0?void 0:__webpack_require___remotesLoadingData1.moduleIdToRemoteDataMapping)!==null&&__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping!==void 0?__webpack_require___remotesLoadingData_moduleIdToRemoteDataMapping:{};var __webpack_require___initializeSharingData_scopeToSharingDataMapping;const initializeSharingScopeToInitDataMapping=(__webpack_require___initializeSharingData_scopeToSharingDataMapping=(__webpack_require___initializeSharingData=__webpack_require__.initializeSharingData)===null||__webpack_require___initializeSharingData===void 0?void 0:__webpack_require___initializeSharingData.scopeToSharingDataMapping)!==null&&__webpack_require___initializeSharingData_scopeToSharingDataMapping!==void 0?__webpack_require___initializeSharingData_scopeToSharingDataMapping:{};var __webpack_require___consumesLoadingData_chunkMapping;const consumesLoadingChunkMapping=(__webpack_require___consumesLoadingData_chunkMapping=(__webpack_require___consumesLoadingData=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData===void 0?void 0:__webpack_require___consumesLoadingData.chunkMapping)!==null&&__webpack_require___consumesLoadingData_chunkMapping!==void 0?__webpack_require___consumesLoadingData_chunkMapping:{};var __webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping;const consumesLoadingModuleToConsumeDataMapping=(__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping=(__webpack_require___consumesLoadingData1=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData1===void 0?void 0:__webpack_require___consumesLoadingData1.moduleIdToConsumeDataMapping)!==null&&__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping!==void 0?__webpack_require___consumesLoadingData_moduleIdToConsumeDataMapping:{};const consumesLoadinginstalledModules={};const initializeSharingInitPromises=[];const initializeSharingInitTokens={};const containerShareScope=(__webpack_require___initializeExposesData=__webpack_require__.initializeExposesData)===null||__webpack_require___initializeExposesData===void 0?void 0:__webpack_require___initializeExposesData.shareScope;for(const key in __module_federation_bundler_runtime__){__webpack_require__.federation[key]=__module_federation_bundler_runtime__[key]}early(__webpack_require__.federation,\\"consumesLoadingModuleToHandlerMapping\\",()=>{const consumesLoadingModuleToHandlerMapping={};for(let[moduleId,data]of Object.entries(consumesLoadingModuleToConsumeDataMapping)){consumesLoadingModuleToHandlerMapping[moduleId]={getter:data.fallback,shareInfo:{shareConfig:{fixedDependencies:false,requiredVersion:data.requiredVersion,strictVersion:data.strictVersion,singleton:data.singleton,eager:data.eager},scope:[data.shareScope]},shareKey:data.shareKey}}return consumesLoadingModuleToHandlerMapping});early(__webpack_require__.federation,\\"initOptions\\",()=>({}));early(__webpack_require__.federation.initOptions,\\"name\\",()=>__module_federation_container_name__);early(__webpack_require__.federation.initOptions,\\"shareStrategy\\",()=>__module_federation_share_strategy__);early(__webpack_require__.federation.initOptions,\\"shared\\",()=>{const shared={};for(let[scope,stages]of Object.entries(initializeSharingScopeToInitDataMapping)){for(let stage of stages){if(typeof stage===\\"object\\"&&stage!==null){const{name,version,factory,eager,singleton,requiredVersion,strictVersion}=stage;const shareConfig={};const isValidValue=function(val){return typeof val!==\\"undefined\\"};if(isValidValue(singleton)){shareConfig.singleton=singleton}if(isValidValue(requiredVersion)){shareConfig.requiredVersion=requiredVersion}if(isValidValue(eager)){shareConfig.eager=eager}if(isValidValue(strictVersion)){shareConfig.strictVersion=strictVersion}const options={version,scope:[scope],shareConfig,get:factory};if(shared[name]){shared[name].push(options)}else{shared[name]=[options]}}}}return shared});merge(__webpack_require__.federation.initOptions,\\"remotes\\",()=>Object.values(__module_federation_remote_infos__).flat().filter(remote=>remote.externalType===\\"script\\"));merge(__webpack_require__.federation.initOptions,\\"plugins\\",()=>__module_federation_runtime_plugins__);early(__webpack_require__.federation,\\"bundlerRuntimeOptions\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions,\\"remotes\\",()=>({}));early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"chunkMapping\\",()=>remotesLoadingChunkMapping);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"remoteInfos\\",()=>__module_federation_remote_infos__);early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToExternalAndNameMapping\\",()=>{const remotesLoadingIdToExternalAndNameMappingMapping={};for(let[moduleId,data]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){remotesLoadingIdToExternalAndNameMappingMapping[moduleId]=[data.shareScope,data.name,data.externalModuleId,data.remoteName]}return remotesLoadingIdToExternalAndNameMappingMapping});early(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"webpackRequire\\",()=>__webpack_require__);merge(__webpack_require__.federation.bundlerRuntimeOptions.remotes,\\"idToRemoteMap\\",()=>{const idToRemoteMap={};for(let[id,remoteData]of Object.entries(remotesLoadingModuleIdToRemoteDataMapping)){const info=__module_federation_remote_infos__[remoteData.remoteName];if(info)idToRemoteMap[id]=info}return idToRemoteMap});override(__webpack_require__,\\"S\\",__webpack_require__.federation.bundlerRuntime.S);if(__webpack_require__.federation.attachShareScopeMap){__webpack_require__.federation.attachShareScopeMap(__webpack_require__)}override(__webpack_require__.f,\\"remotes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.remotes({chunkId,promises,chunkMapping:remotesLoadingChunkMapping,idToExternalAndNameMapping:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToExternalAndNameMapping,idToRemoteMap:__webpack_require__.federation.bundlerRuntimeOptions.remotes.idToRemoteMap,webpackRequire:__webpack_require__}));override(__webpack_require__.f,\\"consumes\\",(chunkId,promises)=>__webpack_require__.federation.bundlerRuntime.consumes({chunkId,promises,chunkMapping:consumesLoadingChunkMapping,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping,installedModules:consumesLoadinginstalledModules,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"I\\",(name,initScope)=>__webpack_require__.federation.bundlerRuntime.I({shareScopeName:name,initScope,initPromises:initializeSharingInitPromises,initTokens:initializeSharingInitTokens,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"initContainer\\",(shareScope,initScope,remoteEntryInitOptions)=>__webpack_require__.federation.bundlerRuntime.initContainerEntry({shareScope,initScope,remoteEntryInitOptions,shareScopeKey:containerShareScope,webpackRequire:__webpack_require__}));override(__webpack_require__,\\"getContainer\\",(module1,getScope)=>{var moduleMap=__webpack_require__.initializeExposesData.moduleMap;__webpack_require__.R=getScope;getScope=Object.prototype.hasOwnProperty.call(moduleMap,module1)?moduleMap[module1]():Promise.resolve().then(()=>{throw new Error('Module \\"'+module1+'\\" does not exist in container.')});__webpack_require__.R=undefined;return getScope});__webpack_require__.federation.instance=__webpack_require__.federation.runtime.init(__webpack_require__.federation.initOptions);if((__webpack_require___consumesLoadingData2=__webpack_require__.consumesLoadingData)===null||__webpack_require___consumesLoadingData2===void 0?void 0:__webpack_require___consumesLoadingData2.initialConsumes){__webpack_require__.federation.bundlerRuntime.installInitialConsumes({webpackRequire:__webpack_require__,installedModules:consumesLoadinginstalledModules,initialConsumes:__webpack_require__.consumesLoadingData.initialConsumes,moduleToHandlerMapping:__webpack_require__.federation.consumesLoadingModuleToHandlerMapping})}}": diff --git a/tests/integration/src/plugins/__snapshots__/webpack/NativeEntryPlugin.test.ts.snap b/tests/integration/src/plugins/__snapshots__/webpack/NativeEntryPlugin.test.ts.snap index 1271284b3..b588326a2 100644 --- a/tests/integration/src/plugins/__snapshots__/webpack/NativeEntryPlugin.test.ts.snap +++ b/tests/integration/src/plugins/__snapshots__/webpack/NativeEntryPlugin.test.ts.snap @@ -1,859 +1,6 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`NativeEntryPlugin > with Module Federation v1 > should execute polyfills runtime module before MF v1 startup 1`] = ` -"/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "../../../../packages/repack/dist/modules/IncludeModules.js" -/*!******************************************************************!*\\ - !*** ../../../../packages/repack/dist/modules/IncludeModules.js ***! - \\******************************************************************/ -() { - -/* - * This module is added as an entry module to prevent stripping of these React Native deep imports from the bundle. - * We use require.resolve from Rspack/Webpack to ensure these modules are included even if not directly used. - * This allows us to include the modules into the bundle without evaluating them. - * These modules are required by assetsLoader and should be shared as deep imports when using ModuleFederation. - */ - -/*require.resolve*/(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'react-native/Libraries/Image/AssetRegistry'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); -/*require.resolve*/(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'react-native/Libraries/Image/AssetSourceResolver'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); - -/***/ }, - -/***/ "../../../../packages/repack/dist/modules/InitializeScriptManager.js" -/*!***************************************************************************!*\\ - !*** ../../../../packages/repack/dist/modules/InitializeScriptManager.js ***! - \\***************************************************************************/ -() { - -throw new Error("Module parse failed: 'import' and 'export' may appear only with 'sourceType: module' (1:0)\\nYou may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders\\n> import { ScriptManager } from './ScriptManager/ScriptManager.js';\\n| ScriptManager.init();"); - -/***/ }, - -/***/ "./__fixtures__/react-native/Libraries/Core/InitializeCore.js" -/*!********************************************************************!*\\ - !*** ./__fixtures__/react-native/Libraries/Core/InitializeCore.js ***! - \\********************************************************************/ -() { - -globalThis.__INITIALIZE_CORE__ = true; - - -/***/ }, - -/***/ "./__fixtures__/react-native/polyfill1.js" -/*!************************************************!*\\ - !*** ./__fixtures__/react-native/polyfill1.js ***! - \\************************************************/ -() { - -globalThis.__POLYFILL_1__ = true; - - -/***/ }, - -/***/ "./__fixtures__/react-native/polyfill2.js" -/*!************************************************!*\\ - !*** ./__fixtures__/react-native/polyfill2.js ***! - \\************************************************/ -() { - -globalThis.__POLYFILL_2__ = true; - - -/***/ }, - -/***/ "./index.js" -/*!******************!*\\ - !*** ./index.js ***! - \\******************/ -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -globalThis.__APP_ENTRY__ = true; - -/***/ } - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ if (!(moduleId in __webpack_modules__)) { -/******/ delete __webpack_module_cache__[moduleId]; -/******/ var e = new Error("Cannot find module '" + moduleId + "'"); -/******/ e.code = 'MODULE_NOT_FOUND'; -/******/ throw e; -/******/ } -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = __webpack_modules__; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = __webpack_module_cache__; -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ (() => { -/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -/******/ })(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ (() => { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = (exports) => { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/sharing */ -/******/ (() => { -/******/ __webpack_require__.S = {}; -/******/ var initPromises = {}; -/******/ var initTokens = {}; -/******/ __webpack_require__.I = (name, initScope) => { -/******/ if(!initScope) initScope = []; -/******/ // handling circular init calls -/******/ var initToken = initTokens[name]; -/******/ if(!initToken) initToken = initTokens[name] = {}; -/******/ if(initScope.indexOf(initToken) >= 0) return; -/******/ initScope.push(initToken); -/******/ // only runs once -/******/ if(initPromises[name]) return initPromises[name]; -/******/ // creates a new share scope if needed -/******/ if(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {}; -/******/ // runs all init snippets from all modules reachable -/******/ var scope = __webpack_require__.S[name]; -/******/ var warn = (msg) => { -/******/ if (typeof console !== "undefined" && console.warn) console.warn(msg); -/******/ }; -/******/ var uniqueName = undefined; -/******/ var register = (name, version, factory, eager) => { -/******/ var versions = scope[name] = scope[name] || {}; -/******/ var activeVersion = versions[version]; -/******/ if(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager }; -/******/ }; -/******/ var initExternal = (id) => { -/******/ var handleError = (err) => (warn("Initialization of sharing external failed: " + err)); -/******/ try { -/******/ var module = __webpack_require__(id); -/******/ if(!module) return; -/******/ var initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope)) -/******/ if(module.then) return promises.push(module.then(initFn, handleError)); -/******/ var initResult = initFn(module); -/******/ if(initResult && initResult.then) return promises.push(initResult['catch'](handleError)); -/******/ } catch(err) { handleError(err); } -/******/ } -/******/ var promises = []; -/******/ switch(name) { -/******/ } -/******/ if(!promises.length) return initPromises[name] = 1; -/******/ return initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1)); -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/repack/polyfills */ -/******/ (() => { -/******/ __webpack_require__("./__fixtures__/react-native/polyfill1.js"); -/******/ __webpack_require__("./__fixtures__/react-native/polyfill2.js"); -/******/ })(); -/******/ -/************************************************************************/ -/******/ -/******/ // module factories are used so entry inlining is disabled -/******/ // startup -/******/ // Load entry module and return exports -/******/ __webpack_require__("./__fixtures__/react-native/polyfill1.js"); -/******/ __webpack_require__("./__fixtures__/react-native/polyfill2.js"); -/******/ __webpack_require__("./__fixtures__/react-native/Libraries/Core/InitializeCore.js"); -/******/ __webpack_require__("../../../../packages/repack/dist/modules/InitializeScriptManager.js"); -/******/ __webpack_require__("../../../../packages/repack/dist/modules/IncludeModules.js"); -/******/ var __webpack_exports__ = __webpack_require__("./index.js"); -/******/ -/******/ })() -;" -`; - -exports[`NativeEntryPlugin > with Module Federation v2 ('0.15.0') > should execute polyfills runtime module before MF v2 federation runtime 1`] = ` -"/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "/node_modules/.pnpm/@module-federation+webpack-bundler-runtime@0.15.0/node_modules/@module-federation/webpack-bundler-runtime/dist/index.esm.js" -/*!*********************************************!*\\ - !*** external "globalThis.__MF_EXTERNAL__" ***! - \\*********************************************/ -(module) { - -"use strict"; -module.exports = globalThis.__MF_EXTERNAL__; - -/***/ }, - -/***/ "../../../../packages/repack/dist/modules/IncludeModules.js" -/*!******************************************************************!*\\ - !*** ../../../../packages/repack/dist/modules/IncludeModules.js ***! - \\******************************************************************/ -() { - -/* - * This module is added as an entry module to prevent stripping of these React Native deep imports from the bundle. - * We use require.resolve from Rspack/Webpack to ensure these modules are included even if not directly used. - * This allows us to include the modules into the bundle without evaluating them. - * These modules are required by assetsLoader and should be shared as deep imports when using ModuleFederation. - */ - -/*require.resolve*/(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'react-native/Libraries/Image/AssetRegistry'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); -/*require.resolve*/(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'react-native/Libraries/Image/AssetSourceResolver'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); - -/***/ }, - -/***/ "../../../../packages/repack/dist/modules/InitializeScriptManager.js" -/*!***************************************************************************!*\\ - !*** ../../../../packages/repack/dist/modules/InitializeScriptManager.js ***! - \\***************************************************************************/ -() { - -throw new Error("Module parse failed: 'import' and 'export' may appear only with 'sourceType: module' (1:0)\\nYou may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders\\n> import { ScriptManager } from './ScriptManager/ScriptManager.js';\\n| ScriptManager.init();"); - -/***/ }, - -/***/ "./__fixtures__/react-native/Libraries/Core/InitializeCore.js" -/*!********************************************************************!*\\ - !*** ./__fixtures__/react-native/Libraries/Core/InitializeCore.js ***! - \\********************************************************************/ -() { - -globalThis.__INITIALIZE_CORE__ = true; - - -/***/ }, - -/***/ "./__fixtures__/react-native/polyfill1.js" -/*!************************************************!*\\ - !*** ./__fixtures__/react-native/polyfill1.js ***! - \\************************************************/ -() { - -globalThis.__POLYFILL_1__ = true; - - -/***/ }, - -/***/ "./__fixtures__/react-native/polyfill2.js" -/*!************************************************!*\\ - !*** ./__fixtures__/react-native/polyfill2.js ***! - \\************************************************/ -() { - -globalThis.__POLYFILL_2__ = true; - - -/***/ }, - -/***/ "../../node_modules/.federation/entry.HASH.js" -/*!********************************************************************************!*\\ - !*** ../../node_modules/.federation/entry.HASH.js ***! - \\********************************************************************************/ -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _rootDir__node_modules_pnpm_module_federation_webpack_bundler_runtime_0_15_0_node_modules_module_federation_webpack_bundler_runtime_dist_index_esm_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/.pnpm/@module-federation+webpack-bundler-runtime@0.15.0/node_modules/@module-federation/webpack-bundler-runtime/dist/index.esm.js */ "/node_modules/.pnpm/@module-federation+webpack-bundler-runtime@0.15.0/node_modules/@module-federation/webpack-bundler-runtime/dist/index.esm.js"); - - -if(!__webpack_require__.federation.runtime){ - var prevFederation = __webpack_require__.federation; - __webpack_require__.federation = {} - for(var key in _rootDir__node_modules_pnpm_module_federation_webpack_bundler_runtime_0_15_0_node_modules_module_federation_webpack_bundler_runtime_dist_index_esm_js__WEBPACK_IMPORTED_MODULE_0__){ - __webpack_require__.federation[key] = _rootDir__node_modules_pnpm_module_federation_webpack_bundler_runtime_0_15_0_node_modules_module_federation_webpack_bundler_runtime_dist_index_esm_js__WEBPACK_IMPORTED_MODULE_0__[key]; - } - for(var key in prevFederation){ - __webpack_require__.federation[key] = prevFederation[key]; - } -} -if(!__webpack_require__.federation.instance){ - - __webpack_require__.federation.instance = __webpack_require__.federation.runtime.init(__webpack_require__.federation.initOptions); - if(__webpack_require__.federation.attachShareScopeMap){ - __webpack_require__.federation.attachShareScopeMap(__webpack_require__) - } - if(__webpack_require__.federation.installInitialConsumes){ - __webpack_require__.federation.installInitialConsumes() - } - - if(!__webpack_require__.federation.isMFRemote && __webpack_require__.federation.prefetch){ - __webpack_require__.federation.prefetch() - } -} - -/***/ }, - -/***/ "./index.js" -/*!******************!*\\ - !*** ./index.js ***! - \\******************/ -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -globalThis.__APP_ENTRY__ = true; - -/***/ } - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ var execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: __webpack_require__ }; -/******/ __webpack_require__.i.forEach(function(handler) { handler(execOptions); }); -/******/ if (!execOptions.factory) { -/******/ delete __webpack_module_cache__[moduleId]; -/******/ var e = new Error("Cannot find module '" + moduleId + "'"); -/******/ e.code = 'MODULE_NOT_FOUND'; -/******/ throw e; -/******/ } -/******/ module = execOptions.module; -/******/ execOptions.factory.call(module.exports, module, module.exports, execOptions.require); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = __webpack_modules__; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = __webpack_module_cache__; -/******/ -/******/ // expose the module execution interceptor -/******/ __webpack_require__.i = []; -/******/ -/******/ // the startup function -/******/ __webpack_require__.x = x => {}; -/************************************************************************/ -/******/ /* webpack/runtime/federation runtime */ -/******/ (() => { -/******/ if(!__webpack_require__.federation){ -/******/ __webpack_require__.federation = { -/******/ initOptions: {"name":"testContainer","remotes":[],"shareStrategy":"version-first"}, -/******/ chunkMatcher: function(chunkId) {return false}, -/******/ rootOutputDir: "", -/******/ initialConsumes: undefined, -/******/ bundlerRuntimeOptions: {} -/******/ }; -/******/ } -/******/ })(); -/******/ -/******/ /* webpack/runtime/compat get default export */ -/******/ (() => { -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = (module) => { -/******/ var getter = module && module.__esModule ? -/******/ () => (module['default']) : -/******/ () => (module); -/******/ __webpack_require__.d(getter, { a: getter }); -/******/ return getter; -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/define property getters */ -/******/ (() => { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = (exports, definition) => { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ (() => { -/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -/******/ })(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ (() => { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = (exports) => { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/sharing */ -/******/ (() => { -/******/ __webpack_require__.S = {}; -/******/ var initPromises = {}; -/******/ var initTokens = {}; -/******/ __webpack_require__.I = (name, initScope) => { -/******/ if(!initScope) initScope = []; -/******/ // handling circular init calls -/******/ var initToken = initTokens[name]; -/******/ if(!initToken) initToken = initTokens[name] = {}; -/******/ if(initScope.indexOf(initToken) >= 0) return; -/******/ initScope.push(initToken); -/******/ // only runs once -/******/ if(initPromises[name]) return initPromises[name]; -/******/ // creates a new share scope if needed -/******/ if(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {}; -/******/ // runs all init snippets from all modules reachable -/******/ var scope = __webpack_require__.S[name]; -/******/ var warn = (msg) => { -/******/ if (typeof console !== "undefined" && console.warn) console.warn(msg); -/******/ }; -/******/ var uniqueName = undefined; -/******/ var register = (name, version, factory, eager) => { -/******/ var versions = scope[name] = scope[name] || {}; -/******/ var activeVersion = versions[version]; -/******/ if(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager }; -/******/ }; -/******/ var initExternal = (id) => { -/******/ var handleError = (err) => (warn("Initialization of sharing external failed: " + err)); -/******/ try { -/******/ var module = __webpack_require__(id); -/******/ if(!module) return; -/******/ var initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope)) -/******/ if(module.then) return promises.push(module.then(initFn, handleError)); -/******/ var initResult = initFn(module); -/******/ if(initResult && initResult.then) return promises.push(initResult['catch'](handleError)); -/******/ } catch(err) { handleError(err); } -/******/ } -/******/ var promises = []; -/******/ switch(name) { -/******/ } -/******/ if(!promises.length) return initPromises[name] = 1; -/******/ return initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1)); -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/sharing */ -/******/ (() => { -/******/ __webpack_require__.federation.initOptions.shared = {} -/******/ __webpack_require__.S = {}; -/******/ var initPromises = {}; -/******/ var initTokens = {}; -/******/ __webpack_require__.I = (name, initScope) => { -/******/ return __webpack_require__.federation.bundlerRuntime.I({ shareScopeName: name, -/******/ webpackRequire: __webpack_require__, -/******/ initPromises: initPromises, -/******/ initTokens: initTokens, -/******/ initScope: initScope, -/******/ }) -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/repack/polyfills */ -/******/ (() => { -/******/ __webpack_require__("./__fixtures__/react-native/polyfill1.js"); -/******/ __webpack_require__("./__fixtures__/react-native/polyfill2.js"); -/******/ })(); -/******/ -/******/ /* webpack/runtime/embed/federation */ -/******/ (() => { -/******/ var oldStartup = __webpack_require__.x; -/******/ var hasRun = false; -/******/ __webpack_require__.x = () => { -/******/ if (!hasRun) { -/******/ hasRun = true; -/******/ __webpack_require__(/*! ../../node_modules/.federation/entry.HASH.js */ "../../node_modules/.federation/entry.HASH.js"); -/******/ } -/******/ return oldStartup(); -/******/ }; -/******/ })(); -/******/ -/************************************************************************/ -/******/ // run runtime startup -/******/ __webpack_require__.x(); -/******/ // module factories are used so entry inlining is disabled -/******/ // startup -/******/ // Load entry module and return exports -/******/ __webpack_require__("./__fixtures__/react-native/polyfill1.js"); -/******/ __webpack_require__("./__fixtures__/react-native/polyfill2.js"); -/******/ __webpack_require__("./__fixtures__/react-native/Libraries/Core/InitializeCore.js"); -/******/ __webpack_require__("../../../../packages/repack/dist/modules/InitializeScriptManager.js"); -/******/ __webpack_require__("../../../../packages/repack/dist/modules/IncludeModules.js"); -/******/ var __webpack_exports__ = __webpack_require__("./index.js"); -/******/ -/******/ })() -;" -`; - -exports[`NativeEntryPlugin > with Module Federation v2 ('0.21.0') > should execute polyfills runtime module before MF v2 federation runtime 1`] = ` -"/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "/node_modules/.pnpm/@module-federation+webpack-bundler-runtime@0.21.0/node_modules/@module-federation/webpack-bundler-runtime/dist/index.esm.js" -/*!*********************************************!*\\ - !*** external "globalThis.__MF_EXTERNAL__" ***! - \\*********************************************/ -(module) { - -"use strict"; -module.exports = globalThis.__MF_EXTERNAL__; - -/***/ }, - -/***/ "../../../../packages/repack/dist/modules/IncludeModules.js" -/*!******************************************************************!*\\ - !*** ../../../../packages/repack/dist/modules/IncludeModules.js ***! - \\******************************************************************/ -() { - -/* - * This module is added as an entry module to prevent stripping of these React Native deep imports from the bundle. - * We use require.resolve from Rspack/Webpack to ensure these modules are included even if not directly used. - * This allows us to include the modules into the bundle without evaluating them. - * These modules are required by assetsLoader and should be shared as deep imports when using ModuleFederation. - */ - -/*require.resolve*/(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'react-native/Libraries/Image/AssetRegistry'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); -/*require.resolve*/(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'react-native/Libraries/Image/AssetSourceResolver'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())); - -/***/ }, - -/***/ "../../../../packages/repack/dist/modules/InitializeScriptManager.js" -/*!***************************************************************************!*\\ - !*** ../../../../packages/repack/dist/modules/InitializeScriptManager.js ***! - \\***************************************************************************/ -() { - -throw new Error("Module parse failed: 'import' and 'export' may appear only with 'sourceType: module' (1:0)\\nYou may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders\\n> import { ScriptManager } from './ScriptManager/ScriptManager.js';\\n| ScriptManager.init();"); - -/***/ }, - -/***/ "./__fixtures__/react-native/Libraries/Core/InitializeCore.js" -/*!********************************************************************!*\\ - !*** ./__fixtures__/react-native/Libraries/Core/InitializeCore.js ***! - \\********************************************************************/ -() { - -globalThis.__INITIALIZE_CORE__ = true; - - -/***/ }, - -/***/ "./__fixtures__/react-native/polyfill1.js" -/*!************************************************!*\\ - !*** ./__fixtures__/react-native/polyfill1.js ***! - \\************************************************/ -() { - -globalThis.__POLYFILL_1__ = true; - - -/***/ }, - -/***/ "./__fixtures__/react-native/polyfill2.js" -/*!************************************************!*\\ - !*** ./__fixtures__/react-native/polyfill2.js ***! - \\************************************************/ -() { - -globalThis.__POLYFILL_2__ = true; - - -/***/ }, - -/***/ "../../node_modules/.federation/entry.HASH.js" -/*!********************************************************************************!*\\ - !*** ../../node_modules/.federation/entry.HASH.js ***! - \\********************************************************************************/ -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _rootDir__node_modules_pnpm_module_federation_webpack_bundler_runtime_0_21_0_node_modules_module_federation_webpack_bundler_runtime_dist_index_esm_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/.pnpm/@module-federation+webpack-bundler-runtime@0.21.0/node_modules/@module-federation/webpack-bundler-runtime/dist/index.esm.js */ "/node_modules/.pnpm/@module-federation+webpack-bundler-runtime@0.21.0/node_modules/@module-federation/webpack-bundler-runtime/dist/index.esm.js"); - - -if(!__webpack_require__.federation.runtime){ - var prevFederation = __webpack_require__.federation; - __webpack_require__.federation = {} - for(var key in _rootDir__node_modules_pnpm_module_federation_webpack_bundler_runtime_0_21_0_node_modules_module_federation_webpack_bundler_runtime_dist_index_esm_js__WEBPACK_IMPORTED_MODULE_0__){ - __webpack_require__.federation[key] = _rootDir__node_modules_pnpm_module_federation_webpack_bundler_runtime_0_21_0_node_modules_module_federation_webpack_bundler_runtime_dist_index_esm_js__WEBPACK_IMPORTED_MODULE_0__[key]; - } - for(var key in prevFederation){ - __webpack_require__.federation[key] = prevFederation[key]; - } -} -if(!__webpack_require__.federation.instance){ - - __webpack_require__.federation.instance = __webpack_require__.federation.runtime.init(__webpack_require__.federation.initOptions); - if(__webpack_require__.federation.attachShareScopeMap){ - __webpack_require__.federation.attachShareScopeMap(__webpack_require__) - } - if(__webpack_require__.federation.installInitialConsumes){ - __webpack_require__.federation.installInitialConsumes() - } - - if(!__webpack_require__.federation.isMFRemote && __webpack_require__.federation.prefetch){ - __webpack_require__.federation.prefetch() - } -} - -/***/ }, - -/***/ "./index.js" -/*!******************!*\\ - !*** ./index.js ***! - \\******************/ -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -globalThis.__APP_ENTRY__ = true; - -/***/ } - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ var execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: __webpack_require__ }; -/******/ __webpack_require__.i.forEach(function(handler) { handler(execOptions); }); -/******/ if (!execOptions.factory) { -/******/ delete __webpack_module_cache__[moduleId]; -/******/ var e = new Error("Cannot find module '" + moduleId + "'"); -/******/ e.code = 'MODULE_NOT_FOUND'; -/******/ throw e; -/******/ } -/******/ module = execOptions.module; -/******/ execOptions.factory.call(module.exports, module, module.exports, execOptions.require); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = __webpack_modules__; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = __webpack_module_cache__; -/******/ -/******/ // expose the module execution interceptor -/******/ __webpack_require__.i = []; -/******/ -/******/ // the startup function -/******/ __webpack_require__.x = x => {}; -/************************************************************************/ -/******/ /* webpack/runtime/federation runtime */ -/******/ (() => { -/******/ if(!__webpack_require__.federation){ -/******/ __webpack_require__.federation = { -/******/ initOptions: {"name":"testContainer","remotes":[],"shareStrategy":"version-first"}, -/******/ chunkMatcher: function(chunkId) {return false}, -/******/ rootOutputDir: "", -/******/ bundlerRuntimeOptions: { remotes: { remoteInfos: {}, webpackRequire: __webpack_require__,idToRemoteMap: {}, chunkMapping: {},idToExternalAndNameMapping: {} } } -/******/ }; -/******/ __webpack_require__.consumesLoadingData = {} -/******/ __webpack_require__.remotesLoadingData = {} -/******/ } -/******/ })(); -/******/ -/******/ /* webpack/runtime/compat get default export */ -/******/ (() => { -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = (module) => { -/******/ var getter = module && module.__esModule ? -/******/ () => (module['default']) : -/******/ () => (module); -/******/ __webpack_require__.d(getter, { a: getter }); -/******/ return getter; -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/define property getters */ -/******/ (() => { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = (exports, definition) => { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ (() => { -/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -/******/ })(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ (() => { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = (exports) => { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/sharing */ -/******/ (() => { -/******/ __webpack_require__.S = {}; -/******/ var initPromises = {}; -/******/ var initTokens = {}; -/******/ __webpack_require__.I = (name, initScope) => { -/******/ if(!initScope) initScope = []; -/******/ // handling circular init calls -/******/ var initToken = initTokens[name]; -/******/ if(!initToken) initToken = initTokens[name] = {}; -/******/ if(initScope.indexOf(initToken) >= 0) return; -/******/ initScope.push(initToken); -/******/ // only runs once -/******/ if(initPromises[name]) return initPromises[name]; -/******/ // creates a new share scope if needed -/******/ if(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {}; -/******/ // runs all init snippets from all modules reachable -/******/ var scope = __webpack_require__.S[name]; -/******/ var warn = (msg) => { -/******/ if (typeof console !== "undefined" && console.warn) console.warn(msg); -/******/ }; -/******/ var uniqueName = undefined; -/******/ var register = (name, version, factory, eager) => { -/******/ var versions = scope[name] = scope[name] || {}; -/******/ var activeVersion = versions[version]; -/******/ if(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager }; -/******/ }; -/******/ var initExternal = (id) => { -/******/ var handleError = (err) => (warn("Initialization of sharing external failed: " + err)); -/******/ try { -/******/ var module = __webpack_require__(id); -/******/ if(!module) return; -/******/ var initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope)) -/******/ if(module.then) return promises.push(module.then(initFn, handleError)); -/******/ var initResult = initFn(module); -/******/ if(initResult && initResult.then) return promises.push(initResult['catch'](handleError)); -/******/ } catch(err) { handleError(err); } -/******/ } -/******/ var promises = []; -/******/ switch(name) { -/******/ } -/******/ if(!promises.length) return initPromises[name] = 1; -/******/ return initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1)); -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/sharing */ -/******/ (() => { -/******/ __webpack_require__.federation.initOptions.shared = {} -/******/ __webpack_require__.S = {}; -/******/ var initPromises = {}; -/******/ var initTokens = {}; -/******/ __webpack_require__.I = (name, initScope) => { -/******/ return __webpack_require__.federation.bundlerRuntime.I({ shareScopeName: name, -/******/ webpackRequire: __webpack_require__, -/******/ initPromises: initPromises, -/******/ initTokens: initTokens, -/******/ initScope: initScope, -/******/ }) -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/repack/polyfills */ -/******/ (() => { -/******/ __webpack_require__("./__fixtures__/react-native/polyfill1.js"); -/******/ __webpack_require__("./__fixtures__/react-native/polyfill2.js"); -/******/ })(); -/******/ -/******/ /* webpack/runtime/embed/federation */ -/******/ (() => { -/******/ var prevStartup = __webpack_require__.x; -/******/ var hasRun = false; -/******/ __webpack_require__.x = () => { -/******/ if (!hasRun) { -/******/ hasRun = true; -/******/ __webpack_require__(/*! ../../node_modules/.federation/entry.HASH.js */ "../../node_modules/.federation/entry.HASH.js"); -/******/ } -/******/ if (typeof prevStartup === 'function') { -/******/ return prevStartup(); -/******/ } else { -/******/ console.warn('[Module Federation] prevStartup is not a function, skipping startup execution'); -/******/ } -/******/ }; -/******/ })(); -/******/ -/************************************************************************/ -/******/ // run runtime startup -/******/ __webpack_require__.x(); -/******/ // module factories are used so entry inlining is disabled -/******/ // startup -/******/ // Load entry module and return exports -/******/ __webpack_require__("./__fixtures__/react-native/polyfill1.js"); -/******/ __webpack_require__("./__fixtures__/react-native/polyfill2.js"); -/******/ __webpack_require__("./__fixtures__/react-native/Libraries/Core/InitializeCore.js"); -/******/ __webpack_require__("../../../../packages/repack/dist/modules/InitializeScriptManager.js"); -/******/ __webpack_require__("../../../../packages/repack/dist/modules/IncludeModules.js"); -/******/ var __webpack_exports__ = __webpack_require__("./index.js"); -/******/ -/******/ })() -;" -`; - -exports[`NativeEntryPlugin > with Module Federation v2 ('2.0.1') > should execute polyfills runtime module before MF v2 federation runtime 1`] = ` +exports[`NativeEntryPlugin > with Module Federation v2 (2.0.1) > should execute polyfills runtime module before MF v2 federation runtime 1`] = ` "/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ From 30ca753b396887c427baf0c9250e4849b4d39380 Mon Sep 17 00:00:00 2001 From: Daniel Williams Date: Fri, 9 Oct 2026 16:32:49 +0100 Subject: [PATCH 3/9] feat!: remove APIs deprecated in Re.Pack 5 Remove ChunksToHermesBytecodePlugin, getPublicPath, the --webpackConfig CLI option, the commands/rspack and commands/webpack entry points and reanimatedModuleRules. OutputPlugin now rejects the no-op output.bundleFilename, output.sourceMapFilename and output.assetsPath options. --- apps/tester-app/__tests__/bundle.test.ts | 2 +- .../__tests__/lazy-compilation.test.ts | 8 ++- apps/tester-app/__tests__/start.test.ts | 2 +- packages/plugin-reanimated/src/index.ts | 6 +-- packages/plugin-reanimated/src/rules.ts | 9 +--- packages/repack/commands/rspack.d.ts | 2 - packages/repack/commands/rspack.js | 5 -- packages/repack/commands/webpack.d.ts | 2 - packages/repack/commands/webpack.js | 5 -- .../src/commands/__tests__/index.test.ts | 49 ------------------- packages/repack/src/commands/bundle.ts | 13 +---- .../config/__tests__/normalizeConfig.test.ts | 8 --- .../common/config/makeCompilerConfig.ts | 6 +-- .../commands/common/config/normalizeConfig.ts | 5 -- packages/repack/src/commands/index.ts | 30 ------------ packages/repack/src/commands/options.ts | 12 ----- packages/repack/src/commands/start.ts | 13 +---- packages/repack/src/commands/types.ts | 2 - .../ChunksToHermesBytecodePlugin.ts | 44 ----------------- .../src/plugins/HermesBytecodePlugin/index.ts | 1 - .../src/plugins/OutputPlugin/OutputPlugin.ts | 9 +--- .../repack/src/plugins/OutputPlugin/config.ts | 32 +----------- packages/repack/src/utils/getPublicPath.ts | 13 ----- packages/repack/src/utils/index.ts | 2 - 24 files changed, 14 insertions(+), 266 deletions(-) delete mode 100644 packages/repack/commands/rspack.d.ts delete mode 100644 packages/repack/commands/rspack.js delete mode 100644 packages/repack/commands/webpack.d.ts delete mode 100644 packages/repack/commands/webpack.js delete mode 100644 packages/repack/src/commands/__tests__/index.test.ts delete mode 100644 packages/repack/src/plugins/HermesBytecodePlugin/ChunksToHermesBytecodePlugin.ts delete mode 100644 packages/repack/src/utils/getPublicPath.ts diff --git a/apps/tester-app/__tests__/bundle.test.ts b/apps/tester-app/__tests__/bundle.test.ts index 67d6e637f..79cf16486 100644 --- a/apps/tester-app/__tests__/bundle.test.ts +++ b/apps/tester-app/__tests__/bundle.test.ts @@ -139,7 +139,7 @@ describe('bundle command', () => { entryFile: 'index.js', bundleOutput: bundleOutputPath, dev: false, - webpackConfig: path.join(__dirname, 'configs', configFile), + config: path.join(__dirname, 'configs', configFile), }; // @ts-expect-error diff --git a/apps/tester-app/__tests__/lazy-compilation.test.ts b/apps/tester-app/__tests__/lazy-compilation.test.ts index 3e0192a13..c1ec4d56d 100644 --- a/apps/tester-app/__tests__/lazy-compilation.test.ts +++ b/apps/tester-app/__tests__/lazy-compilation.test.ts @@ -1,6 +1,6 @@ import fs from 'node:fs'; import path from 'node:path'; -import rspackCommands from '@callstack/repack/commands/rspack'; +import commands from '@callstack/repack/commands'; import { MultiCompiler } from '@rspack/core'; import getPort from 'get-port'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; @@ -11,9 +11,7 @@ let port: number; let stopServer: (() => Promise) | undefined; describe('lazy compilation', () => { - const startCommand = rspackCommands.find( - (command) => command.name === 'start' - ); + const startCommand = commands.find((command) => command.name === 'start'); if (!startCommand) throw new Error('start command not found'); const getStats = (platform: string) => @@ -37,7 +35,7 @@ describe('lazy compilation', () => { // No `platform` arg — both ios and android are configured, // which enables the lazy compilation watchRun gate mechanism. logFile: path.join(TMP_DIR, 'server.log'), - webpackConfig: path.join(__dirname, 'configs', './rspack.config.mjs'), + config: path.join(__dirname, 'configs', './rspack.config.mjs'), }; // @ts-expect-error diff --git a/apps/tester-app/__tests__/start.test.ts b/apps/tester-app/__tests__/start.test.ts index 57cb10801..47912db28 100644 --- a/apps/tester-app/__tests__/start.test.ts +++ b/apps/tester-app/__tests__/start.test.ts @@ -104,7 +104,7 @@ describe('start command', () => { port, platform, logFile: path.join(TMP_DIR, 'server.log'), - webpackConfig: path.join(__dirname, 'configs', configFile), + config: path.join(__dirname, 'configs', configFile), }; // @ts-expect-error diff --git a/packages/plugin-reanimated/src/index.ts b/packages/plugin-reanimated/src/index.ts index bedbccb9e..6dce66e78 100644 --- a/packages/plugin-reanimated/src/index.ts +++ b/packages/plugin-reanimated/src/index.ts @@ -1,6 +1,2 @@ export { ReanimatedPlugin } from './plugin.js'; -export { - reanimated3ModuleRules, - reanimated4ModuleRules, - reanimatedModuleRules, -} from './rules.js'; +export { reanimated3ModuleRules, reanimated4ModuleRules } from './rules.js'; diff --git a/packages/plugin-reanimated/src/rules.ts b/packages/plugin-reanimated/src/rules.ts index f05a55976..363e3757a 100644 --- a/packages/plugin-reanimated/src/rules.ts +++ b/packages/plugin-reanimated/src/rules.ts @@ -69,11 +69,4 @@ export const createReanimatedModuleRules = ( const reanimated3ModuleRules = createReanimatedModuleRules(3); const reanimated4ModuleRules = createReanimatedModuleRules(4); -// backwards compatibility export -const reanimatedModuleRules = reanimated3ModuleRules; - -export { - reanimated3ModuleRules, - reanimated4ModuleRules, - reanimatedModuleRules, -}; +export { reanimated3ModuleRules, reanimated4ModuleRules }; diff --git a/packages/repack/commands/rspack.d.ts b/packages/repack/commands/rspack.d.ts deleted file mode 100644 index 5802c7661..000000000 --- a/packages/repack/commands/rspack.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import commands from '../dist/commands/index.js'; -export = commands; diff --git a/packages/repack/commands/rspack.js b/packages/repack/commands/rspack.js deleted file mode 100644 index d71161aeb..000000000 --- a/packages/repack/commands/rspack.js +++ /dev/null @@ -1,5 +0,0 @@ -console.warn( - 'Importing "@callstack/repack/commands/rspack" is deprecated. Use "@callstack/repack/commands" instead.' -); -const { createBoundCommands } = require('../dist/commands/index.js'); -module.exports = createBoundCommands('rspack'); diff --git a/packages/repack/commands/webpack.d.ts b/packages/repack/commands/webpack.d.ts deleted file mode 100644 index 5802c7661..000000000 --- a/packages/repack/commands/webpack.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import commands from '../dist/commands/index.js'; -export = commands; diff --git a/packages/repack/commands/webpack.js b/packages/repack/commands/webpack.js deleted file mode 100644 index b2568fff1..000000000 --- a/packages/repack/commands/webpack.js +++ /dev/null @@ -1,5 +0,0 @@ -console.warn( - 'Importing "@callstack/repack/commands/webpack" is deprecated. Use "@callstack/repack/commands" instead.' -); -const { createBoundCommands } = require('../dist/commands/index.js'); -module.exports = createBoundCommands('webpack'); diff --git a/packages/repack/src/commands/__tests__/index.test.ts b/packages/repack/src/commands/__tests__/index.test.ts deleted file mode 100644 index ecf0f5c2e..000000000 --- a/packages/repack/src/commands/__tests__/index.test.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { bundle } from '../bundle.js'; -import { createBoundCommands } from '../index.js'; -import type { BundleArguments, CliConfig, StartArguments } from '../types.js'; - -jest.mock('../bundle.js'); -jest.mock('../start.js'); - -const cliConfig: CliConfig = { - root: '/project', - platforms: ['ios'], - reactNativePath: '/project/node_modules/react-native', -}; - -const args = { - dev: true, - host: '', - platform: 'ios', -} satisfies BundleArguments & StartArguments; - -describe('createBoundCommands', () => { - const consoleWarn = jest.spyOn(console, 'warn').mockImplementation(); - - test('warns when the bound command overrides --bundler', async () => { - const [command] = createBoundCommands('webpack'); - - await command.func([], cliConfig, { ...args, bundler: 'rspack' }); - - expect(consoleWarn).toHaveBeenCalledWith( - 'Ignoring "--bundler rspack" because the deprecated "@callstack/repack/commands/webpack" entry point explicitly selects webpack. Use "@callstack/repack/commands" to select a bundler with --bundler.' - ); - expect(bundle).toHaveBeenCalledWith( - [], - cliConfig, - { ...args, bundler: 'rspack' }, - 'webpack' - ); - }); - - test.each([undefined, 'webpack' as const])( - 'does not warn when --bundler is %s', - async (bundler) => { - const [command] = createBoundCommands('webpack'); - - await command.func([], cliConfig, { ...args, bundler }); - - expect(consoleWarn).not.toHaveBeenCalled(); - } - ); -}); diff --git a/packages/repack/src/commands/bundle.ts b/packages/repack/src/commands/bundle.ts index 894da4639..d83e9cdfe 100644 --- a/packages/repack/src/commands/bundle.ts +++ b/packages/repack/src/commands/bundle.ts @@ -11,7 +11,6 @@ import { } from './common/index.js'; import type { BundleArguments, - Bundler, CliConfig, ConfigurationObject, } from './types.js'; @@ -52,21 +51,13 @@ interface BundleStats { * @param _ Original, non-parsed arguments that were provided when running this command. * @param cliConfig Configuration object containing platform and project settings. * @param args Parsed command line arguments. - * @param forcedBundler Optional bundler override from deprecated entry points. */ export async function bundle( _: string[], cliConfig: CliConfig, - args: BundleArguments, - forcedBundler?: Bundler + args: BundleArguments ) { - const bundler = - forcedBundler ?? - detectBundler( - cliConfig.root, - args.config ?? args.webpackConfig, - args.bundler - ); + const bundler = detectBundler(cliConfig.root, args.config, args.bundler); const [config] = await makeCompilerConfig({ args: args, diff --git a/packages/repack/src/commands/common/config/__tests__/normalizeConfig.test.ts b/packages/repack/src/commands/common/config/__tests__/normalizeConfig.test.ts index a7d987e3d..b5c50a6b4 100644 --- a/packages/repack/src/commands/common/config/__tests__/normalizeConfig.test.ts +++ b/packages/repack/src/commands/common/config/__tests__/normalizeConfig.test.ts @@ -62,14 +62,6 @@ describe('normalizeConfig', () => { }); describe('output.publicPath normalization', () => { - it('should set publicPath to noop if it uses deprecated getPublicPath', () => { - const config = { - output: { publicPath: 'DEPRECATED_GET_PUBLIC_PATH' }, - } as ConfigurationObject; - const normalized = normalizeConfig(config, 'ios'); - expect(normalized.output?.publicPath).toBe('noop:///'); - }); - it('should set publicPath to devServer public path if it uses DEV_SERVER_PUBLIC_PATH', () => { const config = { devServer: { host: 'example.com', port: 3000 }, diff --git a/packages/repack/src/commands/common/config/makeCompilerConfig.ts b/packages/repack/src/commands/common/config/makeCompilerConfig.ts index c5a96bbe9..e3867bd18 100644 --- a/packages/repack/src/commands/common/config/makeCompilerConfig.ts +++ b/packages/repack/src/commands/common/config/makeCompilerConfig.ts @@ -27,11 +27,7 @@ export async function makeCompilerConfig( ): Promise { const { args, bundler, command, rootDir, reactNativePath } = options; // discover location of project config - const configPath = getConfigFilePath( - bundler, - rootDir, - args.config ?? args.webpackConfig - ); + const configPath = getConfigFilePath(bundler, rootDir, args.config); // get env options for backwards compatibility with 4.X configs // injected as first argument to config functions diff --git a/packages/repack/src/commands/common/config/normalizeConfig.ts b/packages/repack/src/commands/common/config/normalizeConfig.ts index 8e0029d7d..06990b1f2 100644 --- a/packages/repack/src/commands/common/config/normalizeConfig.ts +++ b/packages/repack/src/commands/common/config/normalizeConfig.ts @@ -30,11 +30,6 @@ function normalizePublicPath( host?: string, port?: number ): string { - /* set public path to noop if it's using the deprecated `getPublicPath` function */ - if (publicPath === 'DEPRECATED_GET_PUBLIC_PATH') { - return 'noop:///'; - } - if (publicPath === 'DEV_SERVER_PUBLIC_PATH') { return `http://${host}:${port}/${platform}/`; } diff --git a/packages/repack/src/commands/index.ts b/packages/repack/src/commands/index.ts index 858fb2fcb..5436af0ee 100644 --- a/packages/repack/src/commands/index.ts +++ b/packages/repack/src/commands/index.ts @@ -1,12 +1,6 @@ import { bundle } from './bundle.js'; import { bundleCommandOptions, startCommandOptions } from './options.js'; import { start } from './start.js'; -import type { - BundleArguments, - Bundler, - CliConfig, - StartArguments, -} from './types.js'; const commands = [ { @@ -36,27 +30,3 @@ const commands = [ ] as const; export default commands; - -/** - * Creates command definitions with a forced bundler engine. - * Used by deprecated entry points (`commands/rspack`, `commands/webpack`) - * to maintain backwards compatibility. - */ -export function createBoundCommands(bundler: Bundler) { - return commands.map((cmd) => ({ - ...cmd, - func: ( - _: string[], - cliConfig: CliConfig, - args: BundleArguments & StartArguments - ) => { - if (args.bundler && args.bundler !== bundler) { - console.warn( - `Ignoring "--bundler ${args.bundler}" because the deprecated "@callstack/repack/commands/${bundler}" entry point explicitly selects ${bundler}. Use "@callstack/repack/commands" to select a bundler with --bundler.` - ); - } - - return cmd.func(_, cliConfig, args, bundler); - }, - })); -} diff --git a/packages/repack/src/commands/options.ts b/packages/repack/src/commands/options.ts index fa7e18819..2f9063843 100644 --- a/packages/repack/src/commands/options.ts +++ b/packages/repack/src/commands/options.ts @@ -82,12 +82,6 @@ export const startCommandOptions = [ description: 'Path to a bundler config file, e.g webpack.config.js', parse: (val: string) => path.resolve(val), }, - { - name: '--webpackConfig ', - description: - '[DEPRECATED] Path to a bundler config file, e.g webpack.config.js. Please use --config instead.', - parse: (val: string) => path.resolve(val), - }, { name: '--bundler ', description: @@ -184,12 +178,6 @@ export const bundleCommandOptions = [ description: 'Path to a bundler config file, e.g webpack.config.js', parse: (val: string) => path.resolve(val), }, - { - name: '--webpackConfig ', - description: - '[DEPRECATED] Path to a bundler config file, e.g webpack.config.js. Please use --config instead.', - parse: (val: string) => path.resolve(val), - }, { name: '--bundler ', description: diff --git a/packages/repack/src/commands/start.ts b/packages/repack/src/commands/start.ts index f1d81865f..7bde8e1cf 100644 --- a/packages/repack/src/commands/start.ts +++ b/packages/repack/src/commands/start.ts @@ -26,7 +26,6 @@ import { } from './common/index.js'; import logo from './common/logo.js'; import type { - Bundler, CliConfig, CompilerInterface, ConfigurationObject, @@ -43,21 +42,13 @@ import type { * @param _ Original, non-parsed arguments that were provided when running this command. * @param cliConfig Configuration object containing platform and project settings. * @param args Parsed command line arguments. - * @param forcedBundler Optional bundler override from deprecated entry points. */ export async function start( _: string[], cliConfig: CliConfig, - args: StartArguments, - forcedBundler?: Bundler + args: StartArguments ) { - const bundler = - forcedBundler ?? - detectBundler( - cliConfig.root, - args.config ?? args.webpackConfig, - args.bundler - ); + const bundler = detectBundler(cliConfig.root, args.config, args.bundler); const detectedPlatforms = Object.keys(cliConfig.platforms); diff --git a/packages/repack/src/commands/types.ts b/packages/repack/src/commands/types.ts index ee98126e6..dd08a8187 100644 --- a/packages/repack/src/commands/types.ts +++ b/packages/repack/src/commands/types.ts @@ -18,7 +18,6 @@ export interface BundleArguments { watch?: boolean; maxWorkers?: number; config?: string; - webpackConfig?: string; bundler?: Bundler; } @@ -38,7 +37,6 @@ export interface StartArguments { verbose?: boolean; maxWorkers?: number; config?: string; - webpackConfig?: string; bundler?: Bundler; } diff --git a/packages/repack/src/plugins/HermesBytecodePlugin/ChunksToHermesBytecodePlugin.ts b/packages/repack/src/plugins/HermesBytecodePlugin/ChunksToHermesBytecodePlugin.ts deleted file mode 100644 index a6546b8af..000000000 --- a/packages/repack/src/plugins/HermesBytecodePlugin/ChunksToHermesBytecodePlugin.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { Compiler as RspackCompiler } from '@rspack/core'; -import type { Compiler as WebpackCompiler } from 'webpack'; -import { - HermesBytecodePlugin, - type HermesBytecodePluginConfig, -} from './HermesBytecodePlugin.js'; - -/** - * @deprecated Use `HermesBytecodePlugin` instead. - * - * ChunksToHermesBytecodePlugin was renamed to HermesBytecodePlugin. - * This is a deprecated alias that will be removed in the next major version. - */ -export class ChunksToHermesBytecodePlugin extends HermesBytecodePlugin { - // biome-ignore lint/complexity/noUselessConstructor: needed for jsdocs - constructor(config: HermesBytecodePluginConfig) { - super(config); - } - - apply(compiler: RspackCompiler): void; - apply(compiler: WebpackCompiler): void; - - apply(__compiler: unknown) { - const compiler = __compiler as RspackCompiler; - - const logger = compiler.getInfrastructureLogger( - 'RepackChunksToHermesBytecodePlugin' - ); - - compiler.hooks.beforeCompile.tap( - 'RepackChunksToHermesBytecodePlugin', - () => { - logger.warn( - 'Notice: ChunksToHermesBytecodePlugin has been renamed ' + - 'and is now available as HermesBytecodePlugin. ' + - 'Please use HermesBytecodePlugin instead as this alias ' + - 'is deprecated and will be removed in the next major version.' - ); - } - ); - - super.apply(compiler); - } -} diff --git a/packages/repack/src/plugins/HermesBytecodePlugin/index.ts b/packages/repack/src/plugins/HermesBytecodePlugin/index.ts index 6c4a58b16..4e0226071 100644 --- a/packages/repack/src/plugins/HermesBytecodePlugin/index.ts +++ b/packages/repack/src/plugins/HermesBytecodePlugin/index.ts @@ -1,2 +1 @@ -export * from './ChunksToHermesBytecodePlugin.js'; export * from './HermesBytecodePlugin.js'; diff --git a/packages/repack/src/plugins/OutputPlugin/OutputPlugin.ts b/packages/repack/src/plugins/OutputPlugin/OutputPlugin.ts index b5c1768cd..b06c64e6d 100644 --- a/packages/repack/src/plugins/OutputPlugin/OutputPlugin.ts +++ b/packages/repack/src/plugins/OutputPlugin/OutputPlugin.ts @@ -14,7 +14,7 @@ import { } from '../../env.js'; import { AssetsCopyProcessor } from '../utils/AssetsCopyProcessor.js'; import { AuxiliaryAssetsCopyProcessor } from '../utils/AuxiliaryAssetsCopyProcessor.js'; -import { getDeprecationMessages, validateConfig } from './config.js'; +import { validateConfig } from './config.js'; import type { DestinationSpec, OutputPluginConfig } from './types.js'; /** @@ -154,13 +154,6 @@ export class OutputPlugin { assert(compiler.options.output.path, "Can't infer output path from config"); - compiler.hooks.beforeCompile.tap('RepackOutputPlugin', () => { - const deprecationMessages = getDeprecationMessages(this.config); - deprecationMessages.forEach((message) => { - logger.warn(message); - }); - }); - const logger = compiler.getInfrastructureLogger('RepackOutputPlugin'); const outputPath = compiler.options.output.path as string; diff --git a/packages/repack/src/plugins/OutputPlugin/config.ts b/packages/repack/src/plugins/OutputPlugin/config.ts index 8f003d6d2..9f7492537 100644 --- a/packages/repack/src/plugins/OutputPlugin/config.ts +++ b/packages/repack/src/plugins/OutputPlugin/config.ts @@ -27,7 +27,7 @@ const configSchema: Schema = { properties: { auxiliaryAssetsPath: { type: 'string' }, }, - additionalProperties: true, + additionalProperties: false, }, extraChunks: { type: 'array', @@ -67,33 +67,3 @@ const configSchema: Schema = { export function validateConfig(config: OutputPluginConfig) { validate(configSchema, config, { name: 'RepackOutputPlugin' }); } - -export function getDeprecationMessages(config: OutputPluginConfig) { - const deprecationMessages: string[] = []; - - if ('bundleFilename' in config.output) { - deprecationMessages.push( - '[NOTICE] `output.bundleFilename` is deprecated since Re.Pack v5.0.0. ' + - 'This option has no effect and will be removed in the next major version. ' + - 'Value passed through CLI flag `--bundle-output` always takes precedence.' - ); - } - - if ('sourceMapFilename' in config.output) { - deprecationMessages.push( - '[NOTICE] `output.sourceMapFilename` is deprecated since Re.Pack v5.0.0. ' + - 'This option has no effect and will be removed in the next major version. ' + - 'Value passed through CLI flag `--sourcemap-output` always takes precedence.' - ); - } - - if ('assetsPath' in config.output) { - deprecationMessages.push( - '[NOTICE] `output.assetsPath` is deprecated since Re.Pack v5.0.0. ' + - 'This option has no effect and will be removed in the next major version. ' + - 'Value passed through CLI flag `--assets-dest` always takes precedence.' - ); - } - - return deprecationMessages; -} diff --git a/packages/repack/src/utils/getPublicPath.ts b/packages/repack/src/utils/getPublicPath.ts deleted file mode 100644 index 54254cbc1..000000000 --- a/packages/repack/src/utils/getPublicPath.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @deprecated Since Re.Pack v5.0.0. - * - * You can safely remove this function call - - * the public path configuration is now automatically handled by Re.Pack with the same behavior. - */ -export function getPublicPath() { - console.warn( - '[NOTICE] `getPublicPath` is deprecated since Re.Pack v5.0.0.\n' + - 'You can safely remove this function call - the public path configuration is now automatically handled by Re.Pack with the same behavior.' - ); - return 'DEPRECATED_GET_PUBLIC_PATH'; -} diff --git a/packages/repack/src/utils/index.ts b/packages/repack/src/utils/index.ts index 46fe65969..001a0c871 100644 --- a/packages/repack/src/utils/index.ts +++ b/packages/repack/src/utils/index.ts @@ -1,12 +1,10 @@ export * from './assetExtensions.js'; export * from './defineConfig.js'; -export * from './federated.js'; export * from './getAssetTransformRules.js'; export * from './getCodegenTransformRules.js'; export * from './getDirname.js'; export * from './getFlowTransformRules.js'; export * from './getJsTransformRules.js'; export * from './getModulePaths.js'; -export * from './getPublicPath.js'; export * from './getResolveOptions.js'; export * from './getSwcLoaderOptions.js'; From 1ed80b64beacd421e0dc8e71858a920be66266d8 Mon Sep 17 00:00:00 2001 From: Daniel Williams Date: Fri, 9 Oct 2026 16:32:58 +0100 Subject: [PATCH 4/9] chore!: raise version baselines and update dependencies Require Node.js 22.12, React Native 0.79 and @module-federation/enhanced 2.0 in package manifests, compile for Node 22 and drop Node 18/20 from the CI matrix. Update dependencies that were held back by the old floors: vitest 5 with vite 8 (now an explicit peer), @types/node 22, @rslib/core 1, open 11, and execa 10, chalk 6, yargs 18 and @manypkg/find-root 3 in repack-init. Move the Module Federation type dependencies to 2.8.0, lift the terser-webpack-plugin 5.5.0 pin and drop the unused @types/react-dom. Remove the commands/* export for the deleted entry points. --- .github/workflows/test-main-matrix.yml | 2 +- CONTRIBUTING.md | 2 +- apps/tester-app/package.json | 1 + packages/dev-server/package.json | 5 +- packages/init/package.json | 10 +- packages/init/rslib.config.ts | 2 +- packages/plugin-expo-modules/package.json | 2 +- packages/plugin-nativewind/package.json | 2 +- packages/plugin-reanimated/package.json | 2 +- packages/repack-expo/package.json | 2 +- packages/repack/babel.config.js | 4 +- packages/repack/package.json | 14 +- pnpm-lock.yaml | 3498 ++++++--------------- pnpm-workspace.yaml | 13 +- tests/integration/package.json | 5 +- tests/metro-compat/package.json | 2 +- tests/resolver-cases/package.json | 1 + tsconfig.base.json | 2 +- 18 files changed, 943 insertions(+), 2626 deletions(-) diff --git a/.github/workflows/test-main-matrix.yml b/.github/workflows/test-main-matrix.yml index a0ebf6171..bfb1f1465 100644 --- a/.github/workflows/test-main-matrix.yml +++ b/.github/workflows/test-main-matrix.yml @@ -17,7 +17,7 @@ jobs: strategy: fail-fast: false matrix: - node_version: ['18', '20', '22', '24', '26'] + node_version: ['22', '24', '26'] os: [ubuntu-latest] steps: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c9c81d5bc..4ef417ae4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ We want this community to be friendly and respectful to each other. Please read ## Requirements -- Node 20+ (although Node 18 is still supported but has now reached EOL) +- Node 22.12+ (Node 24 recommended, see `mise.toml`) - pnpm 8 (use it via `corepack install`) ## Our Development Process diff --git a/apps/tester-app/package.json b/apps/tester-app/package.json index ad9ed2b14..d51ab5e8f 100644 --- a/apps/tester-app/package.json +++ b/apps/tester-app/package.json @@ -61,6 +61,7 @@ "terser-webpack-plugin": "catalog:", "thread-loader": "^4.0.4", "typescript": "catalog:", + "vite": "catalog:", "vitest": "catalog:", "webpack": "catalog:" } diff --git a/packages/dev-server/package.json b/packages/dev-server/package.json index 43326ab3d..7b9545654 100644 --- a/packages/dev-server/package.json +++ b/packages/dev-server/package.json @@ -28,7 +28,7 @@ ], "author": "zamotany ", "engines": { - "node": ">=18" + "node": ">=22.12.0" }, "publishConfig": { "registry": "https://registry.npmjs.org/", @@ -50,7 +50,7 @@ "fastify-plugin": "^5.0.0", "http-proxy-middleware": "^3.0.7", "launch-editor": "^2.14.1", - "open": "^10.1.0", + "open": "^11.0.4", "pretty-format": "^28.1.0", "source-map": "^0.7.4", "ws": "^8.21.1" @@ -61,6 +61,7 @@ "@types/node": "catalog:", "@types/ws": "^8.18.0", "typescript": "catalog:", + "vite": "catalog:", "vitest": "catalog:" } } diff --git a/packages/init/package.json b/packages/init/package.json index 87f0e710d..6d5bbea21 100644 --- a/packages/init/package.json +++ b/packages/init/package.json @@ -26,7 +26,7 @@ ], "engineStrict": true, "engines": { - "node": ">=18" + "node": ">=22.12.0" }, "type": "module", "scripts": { @@ -40,19 +40,19 @@ }, "devDependencies": { "@clack/prompts": "^0.9.1", - "@manypkg/find-root": "^2.2.3", + "@manypkg/find-root": "^3.1.0", "@rslib/core": "catalog:", "@types/node": "catalog:", "@types/semver": "^7.5.8", "@types/which-pm-runs": "^1.0.2", "@types/yargs": "^17.0.33", - "chalk": "^5.4.1", + "chalk": "^6.0.1", "dedent": "^1.5.3", - "execa": "^9.5.2", + "execa": "^10.1.0", "gradient-string": "^3.0.0", "semver": "^7.6.3", "typescript": "catalog:", "which-pm-runs": "^1.1.0", - "yargs": "^17.7.2" + "yargs": "^18.2.0" } } diff --git a/packages/init/rslib.config.ts b/packages/init/rslib.config.ts index c11f073a5..dff3ca7cf 100644 --- a/packages/init/rslib.config.ts +++ b/packages/init/rslib.config.ts @@ -4,7 +4,7 @@ export default defineConfig({ lib: [ { format: 'esm', - syntax: 'es2021', + syntax: 'es2023', dts: false, source: { entry: { diff --git a/packages/plugin-expo-modules/package.json b/packages/plugin-expo-modules/package.json index 698475bbf..fef69c49d 100644 --- a/packages/plugin-expo-modules/package.json +++ b/packages/plugin-expo-modules/package.json @@ -35,7 +35,7 @@ }, "engineStrict": true, "engines": { - "node": ">=18" + "node": ">=22.12.0" }, "peerDependencies": { "@callstack/repack": "workspace:^" diff --git a/packages/plugin-nativewind/package.json b/packages/plugin-nativewind/package.json index 6dc68c9a4..8aa194e3b 100644 --- a/packages/plugin-nativewind/package.json +++ b/packages/plugin-nativewind/package.json @@ -44,7 +44,7 @@ }, "engineStrict": true, "engines": { - "node": ">=18" + "node": ">=22.12.0" }, "dependencies": { "dedent": "^0.7.0" diff --git a/packages/plugin-reanimated/package.json b/packages/plugin-reanimated/package.json index afdaffead..4fdec2d2d 100644 --- a/packages/plugin-reanimated/package.json +++ b/packages/plugin-reanimated/package.json @@ -40,7 +40,7 @@ }, "engineStrict": true, "engines": { - "node": ">=18" + "node": ">=22.12.0" }, "dependencies": { "semver": "^7.7.2" diff --git a/packages/repack-expo/package.json b/packages/repack-expo/package.json index 298fe6da6..3e53aec3a 100644 --- a/packages/repack-expo/package.json +++ b/packages/repack-expo/package.json @@ -43,7 +43,7 @@ ], "engineStrict": true, "engines": { - "node": ">=20.19" + "node": ">=22.12.0" }, "dependencies": { "@callstack/repack-plugin-expo-modules": "workspace:^", diff --git a/packages/repack/babel.config.js b/packages/repack/babel.config.js index c64d92ff5..584a66f0f 100644 --- a/packages/repack/babel.config.js +++ b/packages/repack/babel.config.js @@ -16,7 +16,7 @@ module.exports = { [ '@babel/preset-env', { - targets: { node: 18 }, + targets: { node: 22 }, // Disable CJS transform and add it manually. // Otherwise it will replace `import(...)` with `require(...)`, which // is not what we want. @@ -30,7 +30,7 @@ module.exports = { env: { // Transform everything in `test` environment, so unit test can pass. test: { - presets: [['@babel/preset-env', { targets: { node: 18 } }]], + presets: [['@babel/preset-env', { targets: { node: 22 } }]], }, }, }; diff --git a/packages/repack/package.json b/packages/repack/package.json index 69cf9c512..814269cdd 100644 --- a/packages/repack/package.json +++ b/packages/repack/package.json @@ -9,7 +9,6 @@ ".": "./dist/index.js", "./client": "./client/index.js", "./commands": "./commands/index.js", - "./commands/*": "./commands/*.js", "./assets-loader": "./dist/loaders/assetsLoader/index.js", "./babel-loader": "./dist/loaders/babelLoader/index.js", "./babel-swc-loader": "./dist/loaders/babelSwcLoader/index.js", @@ -47,7 +46,7 @@ "author": "zamotany ", "license": "MIT", "engines": { - "node": ">=18" + "node": ">=22.12.0" }, "publishConfig": { "registry": "https://registry.npmjs.org/", @@ -65,9 +64,9 @@ "clang-format:android": "find android/src/ -iname \"*.h\" -o -iname \"*.cpp\" | xargs clang-format -i" }, "peerDependencies": { - "@module-federation/enhanced": ">=0.6.10", + "@module-federation/enhanced": ">=2.0.0", "@rspack/core": ">=1", - "react-native": ">=0.74", + "react-native": ">=0.79", "webpack": ">=5.90" }, "peerDependenciesMeta": { @@ -104,7 +103,7 @@ "semver": "^7.7.2", "shallowequal": "^1.1.0", "tapable": "^2.2.1", - "terser-webpack-plugin": "5.5.0", + "terser-webpack-plugin": "^5.6.1", "throttleit": "^2.1.0", "webpack-merge": "^6.0.1" }, @@ -113,8 +112,8 @@ "@babel/core": "^7.29.7", "@babel/plugin-transform-export-namespace-from": "^7.29.7", "@babel/plugin-transform-modules-commonjs": "^7.29.7", - "@module-federation/enhanced": "0.8.9", - "@module-federation/sdk": "0.6.10", + "@module-federation/enhanced": "catalog:testers", + "@module-federation/sdk": "2.8.0", "@rspack/core": "catalog:", "@swc/helpers": "catalog:", "@types/babel__core": "^7.20.5", @@ -125,7 +124,6 @@ "@types/mime-types": "^2.1.1", "@types/node": "catalog:", "@types/react": "catalog:testers", - "@types/react-dom": "^17.0.7", "@types/semver": "^7.7.0", "@types/shallowequal": "^1.1.1", "babel-jest": "^29.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e31f3e5eb..89a6bd5fe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,8 +10,8 @@ catalogs: specifier: ^7.29.7 version: 7.29.7 '@rslib/core': - specifier: ^0.6.3 - version: 0.6.9 + specifier: ^1.0.3 + version: 1.0.3 '@rspack/core': specifier: 1.6.0 version: 1.6.0 @@ -19,8 +19,8 @@ catalogs: specifier: ~0.5.17 version: 0.5.23 '@types/node': - specifier: ^20.19.31 - version: 20.19.43 + specifier: ^22.20.5 + version: 22.20.5 react: specifier: 19.2.8 version: 19.2.8 @@ -28,14 +28,17 @@ catalogs: specifier: 0.86.3 version: 0.86.3 terser-webpack-plugin: - specifier: 5.5.0 - version: 5.5.0 + specifier: ^5.6.1 + version: 5.6.1 typescript: specifier: ^7.0.2 version: 7.0.2 + vite: + specifier: ^8.3.4 + version: 8.3.4 vitest: - specifier: ^4.1.11 - version: 4.1.11 + specifier: ^5.0.3 + version: 5.0.3 webpack: specifier: ~5.105.0 version: 5.105.4 @@ -119,7 +122,6 @@ overrides: adm-zip: ^0.6.1 esbuild@<0.25.0: ^0.25.0 uuid@7: ^11.1.1 - vite: ^7.3.1 react-native-screens: 4.26.2 importers: @@ -243,7 +245,7 @@ importers: version: 0.86.3 '@rsdoctor/rspack-plugin': specifier: 1.6.4 - version: 1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) + version: 1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) '@rspack/core': specifier: 'catalog:' version: 1.6.0(@swc/helpers@0.5.23) @@ -279,7 +281,7 @@ importers: version: 8.5.23 postcss-loader: specifier: ^8.1.1 - version: 8.2.1(@rspack/core@1.6.0(@swc/helpers@0.5.23))(postcss@8.5.23)(typescript@7.0.2)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) + version: 8.2.1(@rspack/core@1.6.0(@swc/helpers@0.5.23))(postcss@8.5.23)(typescript@7.0.2)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) react-native-test-app: specifier: catalog:testers version: 5.4.5(@expo/config-plugins@57.0.10(typescript@7.0.2))(@react-native-community/cli-types@20.2.0)(memfs@4.64.0)(metro@0.84.6)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) @@ -288,19 +290,22 @@ importers: version: 3.4.19(yaml@2.9.0) terser-webpack-plugin: specifier: 'catalog:' - version: 5.5.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) + version: 5.6.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) thread-loader: specifier: ^4.0.4 - version: 4.0.4(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) + version: 4.0.4(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) typescript: specifier: 'catalog:' version: 7.0.2 + vite: + specifier: 'catalog:' + version: 8.3.4(@types/node@26.1.1)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.11(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0) + version: 5.0.3(@types/node@26.1.1)(vite@8.3.4(@types/node@26.1.1)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) webpack: specifier: 'catalog:' - version: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)) + version: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23) apps/tester-expo: dependencies: @@ -333,7 +338,7 @@ importers: version: 57.0.12(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) expo-router: specifier: catalog:expo57 - version: 57.0.25(070bba2580d5a65057f5194baa7f9812) + version: 57.0.25(e065c737c32861a7840897c5f802228a) expo-status-bar: specifier: catalog:expo57 version: 57.0.1(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) @@ -454,79 +459,6 @@ importers: specifier: 'catalog:' version: 7.0.2 - apps/tester-federation: - dependencies: - '@callstack/repack': - specifier: workspace:* - version: link:../../packages/repack - '@react-native-async-storage/async-storage': - specifier: catalog:testers - version: 3.1.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - '@react-navigation/native': - specifier: 7.3.14 - version: 7.3.14(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - '@react-navigation/native-stack': - specifier: 7.18.6 - version: 7.18.6(@react-native-masked-view/masked-view@0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(@react-navigation/native@7.3.14(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native-safe-area-context@5.8.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native-screens@4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - react: - specifier: 'catalog:' - version: 19.2.8 - react-native: - specifier: 'catalog:' - version: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8) - react-native-safe-area-context: - specifier: catalog:testers - version: 5.8.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - react-native-screens: - specifier: 4.26.2 - version: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - devDependencies: - '@babel/core': - specifier: ^7.29.7 - version: 7.29.7 - '@react-native-community/cli': - specifier: catalog:testers - version: 20.2.0(typescript@7.0.2) - '@react-native-community/cli-platform-android': - specifier: catalog:testers - version: 20.2.0 - '@react-native-community/cli-platform-ios': - specifier: catalog:testers - version: 20.2.0 - '@react-native/babel-preset': - specifier: catalog:testers - version: 0.86.3(@babel/core@7.29.7) - '@react-native/typescript-config': - specifier: catalog:testers - version: 0.86.3 - '@rsdoctor/rspack-plugin': - specifier: 1.6.4 - version: 1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4) - '@rspack/core': - specifier: 'catalog:' - version: 1.6.0(@swc/helpers@0.5.23) - '@swc/helpers': - specifier: 'catalog:' - version: 0.5.23 - '@types/jest': - specifier: ^29.5.13 - version: 29.5.14 - '@types/react': - specifier: catalog:testers - version: 19.2.17 - react-native-test-app: - specifier: catalog:testers - version: 5.4.5(@expo/config-plugins@57.0.10(typescript@7.0.2))(@react-native-community/cli-types@20.2.0)(memfs@4.64.0)(metro@0.84.6)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - terser-webpack-plugin: - specifier: 'catalog:' - version: 5.5.0(webpack@5.105.4) - typescript: - specifier: 'catalog:' - version: 7.0.2 - webpack: - specifier: 'catalog:' - version: 5.105.4 - apps/tester-federation-v2: dependencies: '@callstack/repack': @@ -586,7 +518,7 @@ importers: version: 0.86.3 '@rsdoctor/rspack-plugin': specifier: 1.6.4 - version: 1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4) + version: 1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4) '@rspack/core': specifier: 'catalog:' version: 1.6.0(@swc/helpers@0.5.23) @@ -604,7 +536,7 @@ importers: version: 5.4.5(@expo/config-plugins@57.0.10(typescript@7.0.2))(@react-native-community/cli-types@20.2.0)(memfs@4.64.0)(metro@0.84.6)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) terser-webpack-plugin: specifier: 'catalog:' - version: 5.5.0(webpack@5.105.4) + version: 5.6.1(webpack@5.105.4) typescript: specifier: 'catalog:' version: 7.0.2 @@ -639,8 +571,8 @@ importers: specifier: ^2.14.1 version: 2.14.1 open: - specifier: ^10.1.0 - version: 10.2.0 + specifier: ^11.0.4 + version: 11.0.4 pretty-format: specifier: ^28.1.0 version: 28.1.3 @@ -659,16 +591,19 @@ importers: version: 7.27.0 '@types/node': specifier: 'catalog:' - version: 20.19.43 + version: 22.20.5 '@types/ws': specifier: ^8.18.0 version: 8.18.1 typescript: specifier: 'catalog:' version: 7.0.2 + vite: + specifier: 'catalog:' + version: 8.3.4(@types/node@22.20.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.11(@types/node@20.19.43)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0) + version: 5.0.3(@types/node@22.20.5)(vite@8.3.4(@types/node@22.20.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) packages/init: dependencies: @@ -683,14 +618,14 @@ importers: specifier: ^0.9.1 version: 0.9.1 '@manypkg/find-root': - specifier: ^2.2.3 - version: 2.2.3 + specifier: ^3.1.0 + version: 3.1.0 '@rslib/core': specifier: 'catalog:' - version: 0.6.9(typescript@7.0.2) + version: 1.0.3(@module-federation/runtime-tools@2.9.2)(typescript@7.0.2) '@types/node': specifier: 'catalog:' - version: 20.19.43 + version: 22.20.5 '@types/semver': specifier: ^7.5.8 version: 7.7.1 @@ -701,14 +636,14 @@ importers: specifier: ^17.0.33 version: 17.0.35 chalk: - specifier: ^5.4.1 - version: 5.6.2 + specifier: ^6.0.1 + version: 6.0.1 dedent: specifier: ^1.5.3 version: 1.7.2 execa: - specifier: ^9.5.2 - version: 9.6.1 + specifier: ^10.1.0 + version: 10.1.0 gradient-string: specifier: ^3.0.0 version: 3.0.0 @@ -722,8 +657,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 yargs: - specifier: ^17.7.2 - version: 17.7.3 + specifier: ^18.2.0 + version: 18.2.0 packages/plugin-expo-modules: devDependencies: @@ -735,7 +670,7 @@ importers: version: 1.6.0(@swc/helpers@0.5.23) '@types/node': specifier: 'catalog:' - version: 20.19.43 + version: 22.20.5 webpack: specifier: 'catalog:' version: 5.105.4 @@ -757,7 +692,7 @@ importers: version: 0.7.2 '@types/node': specifier: 'catalog:' - version: 20.19.43 + version: 22.20.5 nativewind: specifier: ^4.1.23 version: 4.2.6(react-native-reanimated@4.5.3(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8)(tailwindcss@3.4.19(yaml@2.9.0)) @@ -785,7 +720,7 @@ importers: version: 7.20.5 '@types/node': specifier: 'catalog:' - version: 20.19.43 + version: 22.20.5 '@types/semver': specifier: ^7.7.0 version: 7.7.1 @@ -862,8 +797,8 @@ importers: specifier: ^2.2.1 version: 2.3.3 terser-webpack-plugin: - specifier: 5.5.0 - version: 5.5.0(webpack@5.105.4) + specifier: ^5.6.1 + version: 5.6.1(webpack@5.105.4) throttleit: specifier: ^2.1.0 version: 2.1.0 @@ -884,11 +819,11 @@ importers: specifier: ^7.29.7 version: 7.29.7(@babel/core@7.29.7) '@module-federation/enhanced': - specifier: 0.8.9 - version: 0.8.9(@rspack/core@1.6.0(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@7.0.2)(webpack@5.105.4) + specifier: catalog:testers + version: 2.9.2(@rspack/core@1.6.0(@swc/helpers@0.5.23))(typescript@7.0.2)(webpack@5.105.4) '@module-federation/sdk': - specifier: 0.6.10 - version: 0.6.10 + specifier: 2.8.0 + version: 2.8.0 '@rspack/core': specifier: 'catalog:' version: 1.6.0(@swc/helpers@0.5.23) @@ -915,13 +850,10 @@ importers: version: 2.1.4 '@types/node': specifier: 'catalog:' - version: 20.19.43 + version: 22.20.5 '@types/react': specifier: catalog:testers version: 19.2.17 - '@types/react-dom': - specifier: ^17.0.7 - version: 17.0.26(@types/react@19.2.17) '@types/semver': specifier: ^7.7.0 version: 7.7.1 @@ -936,7 +868,7 @@ importers: version: 1.8.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.43) + version: 29.7.0(@types/node@22.20.5) react: specifier: 'catalog:' version: 19.2.8 @@ -982,7 +914,7 @@ importers: version: 1.6.0(@swc/helpers@0.5.23) '@types/node': specifier: 'catalog:' - version: 20.19.43 + version: 22.20.5 babel-preset-expo: specifier: catalog:expo57 version: 57.0.14(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo@57.0.27)(react-refresh@0.19.0) @@ -991,7 +923,7 @@ importers: version: 57.0.27(@babel/core@7.29.7)(@expo/metro-runtime@57.0.16)(expo-router@57.0.25)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8)(typescript@7.0.2) expo-router: specifier: catalog:expo57 - version: 57.0.25(66ea6cfd90df0a40c40648bd22be227d) + version: 57.0.25(b78e73ef552e7de7587f9ac112282727) react: specifier: 'catalog:' version: 19.2.8 @@ -1019,12 +951,6 @@ importers: '@module-federation/enhanced': specifier: 2.0.1 version: 2.0.1(@rspack/core@1.6.0(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@7.0.2)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) - '@module-federation/enhanced-v15': - specifier: npm:@module-federation/enhanced@0.15.0 - version: '@module-federation/enhanced@0.15.0(@rspack/core@1.6.0(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@7.0.2)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)))' - '@module-federation/enhanced-v21': - specifier: npm:@module-federation/enhanced@0.21.0 - version: '@module-federation/enhanced@0.21.0(@rspack/core@1.6.0(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@7.0.2)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)))' '@react-native/babel-preset-current': specifier: npm:@react-native/babel-preset@0.88.0-rc.3 version: '@react-native/babel-preset@0.88.0-rc.3' @@ -1039,7 +965,7 @@ importers: version: 1.15.46(@swc/helpers@0.5.23) '@types/node': specifier: 'catalog:' - version: 20.19.43 + version: 22.20.5 hermes-parser: specifier: 0.36.0 version: 0.36.0 @@ -1049,9 +975,12 @@ importers: typescript: specifier: 'catalog:' version: 7.0.2 + vite: + specifier: 'catalog:' + version: 8.3.4(@types/node@22.20.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.11(@types/node@20.19.43)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0) + version: 5.0.3(@types/node@22.20.5)(vite@8.3.4(@types/node@22.20.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) webpack: specifier: 'catalog:' version: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)) @@ -1069,7 +998,7 @@ importers: version: 29.5.14 '@types/node': specifier: 'catalog:' - version: 20.19.43 + version: 22.20.5 babel-jest: specifier: ^29.7.0 version: 29.7.0(@babel/core@7.29.7) @@ -1084,7 +1013,7 @@ importers: version: 5.24.3 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.43) + version: 29.7.0(@types/node@22.20.5) memfs: specifier: ^4.11.1 version: 4.64.0 @@ -1099,7 +1028,7 @@ importers: version: link:../../packages/repack '@types/node': specifier: 'catalog:' - version: 20.19.43 + version: 22.20.5 enhanced-resolve: specifier: ^5.18.1 version: 5.24.3 @@ -1109,25 +1038,28 @@ importers: typescript: specifier: 'catalog:' version: 7.0.2 + vite: + specifier: 'catalog:' + version: 8.3.4(@types/node@22.20.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.11(@types/node@20.19.43)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0) + version: 5.0.3(@types/node@22.20.5)(vite@8.3.4(@types/node@22.20.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) website: dependencies: '@callstack/rspress-preset': specifier: 0.6.0 - version: 0.6.0(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(core-js@3.42.0)(micromark-util-types@2.0.2)(micromark@4.0.2))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + version: 0.6.0(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@callstack/rspress-theme': specifier: 0.6.0 - version: 0.6.0(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(core-js@3.42.0)(micromark-util-types@2.0.2)(micromark@4.0.2))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + version: 0.6.0(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@rspress/core': specifier: 2.0.23 - version: 2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(core-js@3.42.0)(micromark-util-types@2.0.2)(micromark@4.0.2) + version: 2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2) devDependencies: '@types/node': specifier: 'catalog:' - version: 20.19.43 + version: 22.20.5 '@types/react': specifier: ^18.2.64 version: 18.3.31 @@ -1141,66 +1073,66 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ast-grep/napi-darwin-arm64@0.37.0': - resolution: {integrity: sha512-QAiIiaAbLvMEg/yBbyKn+p1gX2/FuaC0SMf7D7capm/oG4xGMzdeaQIcSosF4TCxxV+hIH4Bz9e4/u7w6Bnk3Q==} + '@ast-grep/napi-darwin-arm64@0.45.3': + resolution: {integrity: sha512-rMZJ6frSpR/xSbeV4hiA9WR5hHqk3rVYX8lOqEoUCaUnjEuFXvHdGN4WawJ8pVDq/IqM1UnTtsDSYgUdVmO5DA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@ast-grep/napi-darwin-x64@0.37.0': - resolution: {integrity: sha512-zvcvdgekd4ySV3zUbUp8HF5nk5zqwiMXTuVzTUdl/w08O7JjM6XPOIVT+d2o/MqwM9rsXdzdergY5oY2RdhSPA==} + '@ast-grep/napi-darwin-x64@0.45.3': + resolution: {integrity: sha512-tIclZ5pM+YSgk8NNTBoTkaclbS39cU5lbVfSrFWX4LUnxXfUPG+F+ppxyFjKwJTBELsGHEO4LdX3/Lc+FDwPNA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@ast-grep/napi-linux-arm64-gnu@0.37.0': - resolution: {integrity: sha512-L7Sj0lXy8X+BqSMgr1LB8cCoWk0rericdeu+dC8/c8zpsav5Oo2IQKY1PmiZ7H8IHoFBbURLf8iklY9wsD+cyA==} + '@ast-grep/napi-linux-arm64-gnu@0.45.3': + resolution: {integrity: sha512-Bm8F7/oRHQkDXbjH+gBi9oB5huJ0q12r/AIOMIypf5PWlAVvh206Tsw468phw4Oh6kd4Ad1Z+gflNW1MutgK2g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@ast-grep/napi-linux-arm64-musl@0.37.0': - resolution: {integrity: sha512-LF9sAvYy6es/OdyJDO3RwkX3I82Vkfsng1sqUBcoWC1jVb1wX5YVzHtpQox9JrEhGl+bNp7FYxB4Qba9OdA5GA==} + '@ast-grep/napi-linux-arm64-musl@0.45.3': + resolution: {integrity: sha512-yr5xcRerV41GeRxmZ8SKbfGeyZRhQePoNNCgTAb4OrWMelWwbMI80aY7/IlF2bo1sN40BSW4hZdGIO/akTd1RQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@ast-grep/napi-linux-x64-gnu@0.37.0': - resolution: {integrity: sha512-TViz5/klqre6aSmJzswEIjApnGjJzstG/SE8VDWsrftMBMYt2PTu3MeluZVwzSqDao8doT/P+6U11dU05UOgxw==} + '@ast-grep/napi-linux-x64-gnu@0.45.3': + resolution: {integrity: sha512-lluRK3hxfHMQdFuVID6seAKVx4FH0kEwF6rCh5/I40Sf3EtNR2UCBXAqd6RBA6hqlSckktvBxCfw+h4aescDmg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@ast-grep/napi-linux-x64-musl@0.37.0': - resolution: {integrity: sha512-/BcCH33S9E3ovOAEoxYngUNXgb+JLg991sdyiNP2bSoYd30a9RHrG7CYwW6fMgua3ijQ474eV6cq9yZO1bCpXg==} + '@ast-grep/napi-linux-x64-musl@0.45.3': + resolution: {integrity: sha512-09wJQKq86LqILqQtw0+X09SzhcPwUnMVFKyia7S3XLbLqSeQpAMF55Y+zll53JRQ1dCzFEZJyvTT/7j9vwfE3w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@ast-grep/napi-win32-arm64-msvc@0.37.0': - resolution: {integrity: sha512-TjQA4cFoIEW2bgjLkaL9yqT4XWuuLa5MCNd0VCDhGRDMNQ9+rhwi9eLOWRaap3xzT7g+nlbcEHL3AkVCD2+b3A==} + '@ast-grep/napi-win32-arm64-msvc@0.45.3': + resolution: {integrity: sha512-/HiVgw2cdtzXLDLoG4eBBcauekNXewfagy7qiVbjkVu/KcCH8dJ9lpj8DzeWwuBNtZxuD8jpiwP0M1pz3Bc3uw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@ast-grep/napi-win32-ia32-msvc@0.37.0': - resolution: {integrity: sha512-uNmVka8fJCdYsyOlF9aZqQMLTatEYBynjChVTzUfFMDfmZ0bihs/YTqJVbkSm8TZM7CUX82apvn50z/dX5iWRA==} + '@ast-grep/napi-win32-ia32-msvc@0.45.3': + resolution: {integrity: sha512-/gwJrJQUw65uNtAFcG2rtSTr117Gqqy3bfjaljCPKsa65dTeRcMMnjKLlZ6V9/g8z+4Xf78kdhp5ECbir4yfSw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@ast-grep/napi-win32-x64-msvc@0.37.0': - resolution: {integrity: sha512-vCiFOT3hSCQuHHfZ933GAwnPzmL0G04JxQEsBRfqONywyT8bSdDc/ECpAfr3S9VcS4JZ9/F6tkePKW/Om2Dq2g==} + '@ast-grep/napi-win32-x64-msvc@0.45.3': + resolution: {integrity: sha512-CEZAMAsaDoQoVE3MT2c/ry3/ydfyaqlTjxv8DK5PG355SrdAYPgevGC2Me6tz4dhphJin89Y20VsnrS5UrYV5Q==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@ast-grep/napi@0.37.0': - resolution: {integrity: sha512-Hb4o6h1Pf6yRUAX07DR4JVY7dmQw+RVQMW5/m55GoiAT/VRoKCWBtIUPPOnqDVhbx1Cjfil9b6EDrgJsUAujEQ==} + '@ast-grep/napi@0.45.3': + resolution: {integrity: sha512-bjJsUt0g3UCwbn9bjv7MnoR15rszSm79yPCXn4DWWK0NuYUUqBU/srtNMR4WnpfR7TnfBRdYFoqSNx0pGCNWJg==} engines: {node: '>= 10'} '@babel/cli@7.29.7': @@ -2078,429 +2010,123 @@ packages: '@emnapi/wasi-threads@1.2.3': resolution: {integrity: sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==} - '@esbuild/aix-ppc64@0.25.5': - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] + '@expo-google-fonts/material-symbols@0.4.49': + resolution: {integrity: sha512-HtoaXYCk7A9kOjwoxrjq6i0iDtAoQnOPm31zUn+TgmKlHVUU+yyqvQDxN830MvGmBQV8eINv/SK7JRtWhB2xcg==} - '@esbuild/aix-ppc64@0.28.1': - resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] + '@expo/cli@57.0.28': + resolution: {integrity: sha512-4969gk/B2JyP3kAv2ftpwU1f9dLG2j9TsQuYCTTjfnyRx0O49Jwu1O1mie2c3HmKXbwfNA6QTS+3i3sNetMTag==} + hasBin: true + peerDependencies: + expo: '*' + expo-router: '*' + react-native: '*' + peerDependenciesMeta: + expo-router: + optional: true + react-native: + optional: true - '@esbuild/android-arm64@0.25.5': - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] + '@expo/code-signing-certificates@0.0.6': + resolution: {integrity: sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==} - '@esbuild/android-arm64@0.28.1': - resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] + '@expo/config-plugins@57.0.10': + resolution: {integrity: sha512-XFcj01blofSohoOxibrPsrsFPt2gAigrcWE3s6Vg+rSHvP9QVEfnyfmJNVsuIVT0EjY/1rZVJ4SajNDR5cJjpA==} - '@esbuild/android-arm@0.25.5': - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] + '@expo/config-types@57.0.2': + resolution: {integrity: sha512-ewW08OonrcRIsRKIlFvvcmmafE5zemb1ocu3HkNwtVPyRtj2w42pZCAkMIROYpcVBaPnc3mDT9UZDzwXWC3i6g==} - '@esbuild/android-arm@0.28.1': - resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] + '@expo/config@57.0.10': + resolution: {integrity: sha512-YpexTqLWEXdbbXgHh7Zhpq+qA5diuvO46lb7TiY81JwqKLAl9zK31APY1D7jUFlDX56owje5RtK0o5bMmGIMUg==} - '@esbuild/android-x64@0.25.5': - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] + '@expo/devcert@1.2.2': + resolution: {integrity: sha512-wz1YedXwdNbYqk/PRr34vixnuw1+l6uSwmPXUj649cot5iYNccb2zIOnK7Nonb1Pfd/dxAY6CvU6KM3uSdxC7A==} - '@esbuild/android-x64@0.28.1': - resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] + '@expo/devtools@57.0.1': + resolution: {integrity: sha512-GyUf+wFNkbttaX0jR7MZa9bm77U0IrLg6d2AjpxdyoXw/w4abHoXG0oFufwLMgP9zLTd5+Ct4X/ffNUTnlzZgg==} + peerDependencies: + react: '*' + react-native: '*' + peerDependenciesMeta: + react: + optional: true + react-native: + optional: true - '@esbuild/darwin-arm64@0.25.5': - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] + '@expo/dom-webview@57.0.1': + resolution: {integrity: sha512-lAKsME4SAq+8sf56oN0DX5TBYyruupoRxbWbD2xf9RnKY8y6x8eb9LCE5pxSN0qyWdqnp+0wmyWzDkKboThKAw==} + peerDependencies: + expo: '*' + react: '*' + react-native: '*' - '@esbuild/darwin-arm64@0.28.1': - resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] + '@expo/env@2.3.1': + resolution: {integrity: sha512-JvBdZa5OkTd+dGEtt3fLW9OF6RlIp9SNu9VyMSiWPV5szMDTSAYbX8Uj3cRvZcU1zzaRbqnTSsHk2AE8WXHfxQ==} + engines: {node: '>=20.12.0'} - '@esbuild/darwin-x64@0.25.5': - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] + '@expo/env@2.4.3': + resolution: {integrity: sha512-M1NXeZCA1mkMkYOyIe7PlyRX0/jqFtMoJgyblnlq/vpCRfmueFT7RnGSQG8uEFDF5WHOFGijAQ3fogPh3/n5Ng==} + engines: {node: '>=20.12.0'} - '@esbuild/darwin-x64@0.28.1': - resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] + '@expo/expo-modules-macros-plugin@0.6.1': + resolution: {integrity: sha512-cpsLZE4rqkc1Y3eZTkxB98jrqY1YXgetmtxFt8q89jBRmk3quRuk1BZo+VcnCSObZardjg99r1k5xijEMONFGA==} - '@esbuild/freebsd-arm64@0.25.5': - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] + '@expo/fingerprint@0.20.13': + resolution: {integrity: sha512-h1x+w+JpNRu88a/5SMZRzJs9YDGR/f7R8ApCr7OdenhqmJ00hFxQMzvxajDLL+1P2Y2g/ND0xksusqvBqWSW5Q==} + hasBin: true - '@esbuild/freebsd-arm64@0.28.1': - resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] + '@expo/image-utils@0.11.6': + resolution: {integrity: sha512-rmMpn7QGp6pUGRCQ3vvB9RP/vqq2q/PpToRh4dL/FbhSZOLZ1YTotpuLHf71FGOEfgKil/4PCd3hkWe/CCeiEg==} - '@esbuild/freebsd-x64@0.25.5': - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] + '@expo/inline-modules@0.1.7': + resolution: {integrity: sha512-Bz/khd1gIJqDkje7t5ejD5e9jFbm4xEJzWSwRKadRo6gruepbw1xJ3Eb+e58OS8fY1ZNQYjzZbspnuph67sN0g==} - '@esbuild/freebsd-x64@0.28.1': - resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] + '@expo/json-file@11.0.1': + resolution: {integrity: sha512-zxHWj4MKKMAL29ZQSY/Fssx4Thluk40JmuGNaeS078wy/NhlFhnVi+rHHunulE3xJAJ0CM73m8VK2+GkF9eRwQ==} - '@esbuild/linux-arm64@0.25.5': - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] + '@expo/local-build-cache-provider@57.0.8': + resolution: {integrity: sha512-SEdE0pAQrr90bRh3MNR0ZuwoIBw390cYdFgbn7Vk0Mtm9EHaBfP7kYj+2hXnXZJgOEm3/JMtfoD3rV7rWA9FGg==} - '@esbuild/linux-arm64@0.28.1': - resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] + '@expo/log-box@57.0.4': + resolution: {integrity: sha512-IxwS9s1L2muj8mj8AQSuiy7u8OFJdc02NRFo2me/Tj6DiaeG5SREqmpBE4rQpR2cadqSg5jl8Qab8Cjie616dg==} + peerDependencies: + expo: '*' + react: '*' + react-native: '*' - '@esbuild/linux-arm@0.25.5': - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] + '@expo/metro-config@57.0.13': + resolution: {integrity: sha512-r+YCwqh8FM5cymkC3MdYO32DqLZQ2wDWkGEnzwgwI40Bj355BvL4XoY0hGgao9vNHjYa7be7XxbVqtMTi76snw==} + peerDependencies: + expo: '*' + peerDependenciesMeta: + expo: + optional: true - '@esbuild/linux-arm@0.28.1': - resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] + '@expo/metro-file-map@57.0.4': + resolution: {integrity: sha512-gLABIbU3SlxRVVCe56ZfYFbxjhdpAKomQYr6LIeDYf7rca8Pfvzv8FS39hH0+IcdpEHly2Jy0X2nd4/obd8Kig==} - '@esbuild/linux-ia32@0.25.5': - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] + '@expo/metro-runtime@57.0.16': + resolution: {integrity: sha512-x43WgZoICpp37BhDV7vixe0bNxbVPPGaBLHYc98ZJ8MU+UC2dk39Y2XvkfYMRRbAUSIkCIJiwdERnptlPg0Ckw==} + peerDependencies: + expo: '*' + react: '*' + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true - '@esbuild/linux-ia32@0.28.1': - resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] + '@expo/metro@56.0.2': + resolution: {integrity: sha512-Ld5AeYMCCDa8bLeWhfuLbZFFjlV3f6ORqyPz2glGh6RltIngMuLf9BTC2yvHFjkKuGxL5SynijmA8xmNNWn5iA==} - '@esbuild/linux-loong64@0.25.5': - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] + '@expo/osascript@2.7.1': + resolution: {integrity: sha512-Zn03EX6In7ts2lPUW2ESUSkEhEWQN1qqsiXjadtZMJOuZRkMiAg1ZQHuvz9DjByDWNJ2pBwAGyrts9lj9k389g==} + engines: {node: '>=12'} - '@esbuild/linux-loong64@0.28.1': - resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] + '@expo/package-manager@1.13.1': + resolution: {integrity: sha512-y/K+CaYYpZpNGZhSX4HyLT/vyIunFjNfyoxNysPBCefeLKI/VCx6f9LNPzrxayr3rCYO5bl9O8H+HRQK265Nkg==} - '@esbuild/linux-mips64el@0.25.5': - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.28.1': - resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.5': - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.28.1': - resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.5': - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.28.1': - resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.5': - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.28.1': - resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.5': - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.28.1': - resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.5': - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.28.1': - resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.5': - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.28.1': - resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.5': - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.28.1': - resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.5': - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.28.1': - resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.28.1': - resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.25.5': - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.28.1': - resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.5': - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.28.1': - resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.5': - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.28.1': - resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.5': - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.28.1': - resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@expo-google-fonts/material-symbols@0.4.49': - resolution: {integrity: sha512-HtoaXYCk7A9kOjwoxrjq6i0iDtAoQnOPm31zUn+TgmKlHVUU+yyqvQDxN830MvGmBQV8eINv/SK7JRtWhB2xcg==} - - '@expo/cli@57.0.28': - resolution: {integrity: sha512-4969gk/B2JyP3kAv2ftpwU1f9dLG2j9TsQuYCTTjfnyRx0O49Jwu1O1mie2c3HmKXbwfNA6QTS+3i3sNetMTag==} - hasBin: true - peerDependencies: - expo: '*' - expo-router: '*' - react-native: '*' - peerDependenciesMeta: - expo-router: - optional: true - react-native: - optional: true - - '@expo/code-signing-certificates@0.0.6': - resolution: {integrity: sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==} - - '@expo/config-plugins@57.0.10': - resolution: {integrity: sha512-XFcj01blofSohoOxibrPsrsFPt2gAigrcWE3s6Vg+rSHvP9QVEfnyfmJNVsuIVT0EjY/1rZVJ4SajNDR5cJjpA==} - - '@expo/config-types@57.0.2': - resolution: {integrity: sha512-ewW08OonrcRIsRKIlFvvcmmafE5zemb1ocu3HkNwtVPyRtj2w42pZCAkMIROYpcVBaPnc3mDT9UZDzwXWC3i6g==} - - '@expo/config@57.0.10': - resolution: {integrity: sha512-YpexTqLWEXdbbXgHh7Zhpq+qA5diuvO46lb7TiY81JwqKLAl9zK31APY1D7jUFlDX56owje5RtK0o5bMmGIMUg==} - - '@expo/devcert@1.2.2': - resolution: {integrity: sha512-wz1YedXwdNbYqk/PRr34vixnuw1+l6uSwmPXUj649cot5iYNccb2zIOnK7Nonb1Pfd/dxAY6CvU6KM3uSdxC7A==} - - '@expo/devtools@57.0.1': - resolution: {integrity: sha512-GyUf+wFNkbttaX0jR7MZa9bm77U0IrLg6d2AjpxdyoXw/w4abHoXG0oFufwLMgP9zLTd5+Ct4X/ffNUTnlzZgg==} - peerDependencies: - react: '*' - react-native: '*' - peerDependenciesMeta: - react: - optional: true - react-native: - optional: true - - '@expo/dom-webview@57.0.1': - resolution: {integrity: sha512-lAKsME4SAq+8sf56oN0DX5TBYyruupoRxbWbD2xf9RnKY8y6x8eb9LCE5pxSN0qyWdqnp+0wmyWzDkKboThKAw==} - peerDependencies: - expo: '*' - react: '*' - react-native: '*' - - '@expo/env@2.3.1': - resolution: {integrity: sha512-JvBdZa5OkTd+dGEtt3fLW9OF6RlIp9SNu9VyMSiWPV5szMDTSAYbX8Uj3cRvZcU1zzaRbqnTSsHk2AE8WXHfxQ==} - engines: {node: '>=20.12.0'} - - '@expo/env@2.4.3': - resolution: {integrity: sha512-M1NXeZCA1mkMkYOyIe7PlyRX0/jqFtMoJgyblnlq/vpCRfmueFT7RnGSQG8uEFDF5WHOFGijAQ3fogPh3/n5Ng==} - engines: {node: '>=20.12.0'} - - '@expo/expo-modules-macros-plugin@0.6.1': - resolution: {integrity: sha512-cpsLZE4rqkc1Y3eZTkxB98jrqY1YXgetmtxFt8q89jBRmk3quRuk1BZo+VcnCSObZardjg99r1k5xijEMONFGA==} - - '@expo/fingerprint@0.20.13': - resolution: {integrity: sha512-h1x+w+JpNRu88a/5SMZRzJs9YDGR/f7R8ApCr7OdenhqmJ00hFxQMzvxajDLL+1P2Y2g/ND0xksusqvBqWSW5Q==} - hasBin: true - - '@expo/image-utils@0.11.6': - resolution: {integrity: sha512-rmMpn7QGp6pUGRCQ3vvB9RP/vqq2q/PpToRh4dL/FbhSZOLZ1YTotpuLHf71FGOEfgKil/4PCd3hkWe/CCeiEg==} - - '@expo/inline-modules@0.1.7': - resolution: {integrity: sha512-Bz/khd1gIJqDkje7t5ejD5e9jFbm4xEJzWSwRKadRo6gruepbw1xJ3Eb+e58OS8fY1ZNQYjzZbspnuph67sN0g==} - - '@expo/json-file@11.0.1': - resolution: {integrity: sha512-zxHWj4MKKMAL29ZQSY/Fssx4Thluk40JmuGNaeS078wy/NhlFhnVi+rHHunulE3xJAJ0CM73m8VK2+GkF9eRwQ==} - - '@expo/local-build-cache-provider@57.0.8': - resolution: {integrity: sha512-SEdE0pAQrr90bRh3MNR0ZuwoIBw390cYdFgbn7Vk0Mtm9EHaBfP7kYj+2hXnXZJgOEm3/JMtfoD3rV7rWA9FGg==} - - '@expo/log-box@57.0.4': - resolution: {integrity: sha512-IxwS9s1L2muj8mj8AQSuiy7u8OFJdc02NRFo2me/Tj6DiaeG5SREqmpBE4rQpR2cadqSg5jl8Qab8Cjie616dg==} - peerDependencies: - expo: '*' - react: '*' - react-native: '*' - - '@expo/metro-config@57.0.13': - resolution: {integrity: sha512-r+YCwqh8FM5cymkC3MdYO32DqLZQ2wDWkGEnzwgwI40Bj355BvL4XoY0hGgao9vNHjYa7be7XxbVqtMTi76snw==} - peerDependencies: - expo: '*' - peerDependenciesMeta: - expo: - optional: true - - '@expo/metro-file-map@57.0.4': - resolution: {integrity: sha512-gLABIbU3SlxRVVCe56ZfYFbxjhdpAKomQYr6LIeDYf7rca8Pfvzv8FS39hH0+IcdpEHly2Jy0X2nd4/obd8Kig==} - - '@expo/metro-runtime@57.0.16': - resolution: {integrity: sha512-x43WgZoICpp37BhDV7vixe0bNxbVPPGaBLHYc98ZJ8MU+UC2dk39Y2XvkfYMRRbAUSIkCIJiwdERnptlPg0Ckw==} - peerDependencies: - expo: '*' - react: '*' - react-dom: '*' - react-native: '*' - peerDependenciesMeta: - react-dom: - optional: true - - '@expo/metro@56.0.2': - resolution: {integrity: sha512-Ld5AeYMCCDa8bLeWhfuLbZFFjlV3f6ORqyPz2glGh6RltIngMuLf9BTC2yvHFjkKuGxL5SynijmA8xmNNWn5iA==} - - '@expo/osascript@2.7.1': - resolution: {integrity: sha512-Zn03EX6In7ts2lPUW2ESUSkEhEWQN1qqsiXjadtZMJOuZRkMiAg1ZQHuvz9DjByDWNJ2pBwAGyrts9lj9k389g==} - engines: {node: '>=12'} - - '@expo/package-manager@1.13.1': - resolution: {integrity: sha512-y/K+CaYYpZpNGZhSX4HyLT/vyIunFjNfyoxNysPBCefeLKI/VCx6f9LNPzrxayr3rCYO5bl9O8H+HRQK265Nkg==} - - '@expo/plist@0.8.1': - resolution: {integrity: sha512-3gTReGIUm0oRaMClsAJYxBnVPCl6fVpsl8HS+DTVxDhW4GyVyxg9E/Znm3BvcHtUJ51RJJI14pC1wvrNilCRHw==} + '@expo/plist@0.8.1': + resolution: {integrity: sha512-3gTReGIUm0oRaMClsAJYxBnVPCl6fVpsl8HS+DTVxDhW4GyVyxg9E/Znm3BvcHtUJ51RJJI14pC1wvrNilCRHw==} '@expo/prebuild-config@57.0.17': resolution: {integrity: sha512-PnPw4QT8afAA1RqTktK89+JpyJz46cZsZx6gEAe6QCHgOHc7dlA0rXlOFy0xbHpBnYT8x7wl6vTz2ydT99gykw==} @@ -2719,6 +2345,9 @@ packages: '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} + '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} @@ -2849,16 +2478,16 @@ packages: '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} - '@manypkg/find-root@2.2.3': - resolution: {integrity: sha512-jtEZKczWTueJYHjGpxU3KJQ08Gsrf4r6Q2GjmPp/RGk5leeYAA1eyDADSAF+KVCsQ6EwZd/FMcOFCoMhtqdCtQ==} - engines: {node: '>=14.18.0'} + '@manypkg/find-root@3.1.0': + resolution: {integrity: sha512-BcSqCyKhBVZ5YkSzOiheMCV41kqAFptW6xGqYSTjkVTl9XQpr+pqHhwgGCOHQtjDCv7Is6EFyA14Sm5GVbVABA==} + engines: {node: '>=20.0.0'} '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@manypkg/tools@1.1.2': - resolution: {integrity: sha512-3lBouSuF7CqlseLB+FKES0K4FQ02JrbEoRtJhxnsyB1s5v4AP03gsoohN8jp7DcOImhaR9scYdztq3/sLfk/qQ==} - engines: {node: '>=14.18.0'} + '@manypkg/tools@2.1.2': + resolution: {integrity: sha512-6QEf6yqFbETdwGITKq57aYoPfX/3K8XFNwsAlx0C1M7o8cb79sv1M3w+tWuWvIcSbNqrLF7OD7YpZMVVz335hQ==} + engines: {node: '>=20.0.0'} '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} @@ -2869,43 +2498,12 @@ packages: '@types/react': '>=16' react: '>=16' - '@modern-js/node-bundle-require@2.67.6': - resolution: {integrity: sha512-rRiDQkrm3kgn0E/GNrcvqo4c71PaUs2R8Xmpv6GUKbEr6lz7VNgfZmAhdAQPtNfRfiBe+1sFLzEcwfEdDo/dTA==} - - '@modern-js/node-bundle-require@2.68.2': - resolution: {integrity: sha512-MWk/pYx7KOsp+A/rN0as2ji/Ba8x0m129aqZ3Lj6T6CCTWdz0E/IsamPdTmF9Jnb6whQoBKtWSaLTCQlmCoY0Q==} - - '@modern-js/utils@2.67.6': - resolution: {integrity: sha512-cxY7HsSH0jIN3rlL6RZ0tgzC1tH0gHW++8X6h7sXCNCylhUdbGZI9yTGbpAS8bU7c97NmPaTKg+/ILt00Kju1Q==} - - '@modern-js/utils@2.68.2': - resolution: {integrity: sha512-revom/i/EhKfI0STNLo/AUbv7gY0JY0Ni2gO6P/Z4cTyZZRgd5j90678YB2DGn+LtmSrEWtUphyDH5Jn1RKjgg==} - - '@module-federation/bridge-react-webpack-plugin@0.15.0': - resolution: {integrity: sha512-bbinV0gC82x0JGrT6kNV1tQHi4UBxqY79mZJKWVbGpSMPM+nifC9y/nQCYhZZajT7D/5zIHNkP0BKrQmPA7ArA==} - - '@module-federation/bridge-react-webpack-plugin@0.21.0': - resolution: {integrity: sha512-k4C55EgRhvnErMztKAGakIFCidAT9f/5ErjDBJtcYCcrycFpEltIbQ5922+dPMuekYQGI8eBYLM34814kGI/6w==} - - '@module-federation/bridge-react-webpack-plugin@0.8.9': - resolution: {integrity: sha512-gM5fnWvFfTEfh5UjSmNod1H/np/pUUjvJnnN31ucKcZ21mL6wJo0A+Vfj8a5gv34S+1n5lWR1b6eVv9CofwgDQ==} - '@module-federation/bridge-react-webpack-plugin@2.0.1': resolution: {integrity: sha512-D7LMW5EMAJShOMR1aZDAJ6s+MdsYDHaQyJADLQ3LaY0sne/BkVqkPikUwcO1IwOwKbXjYsDlQVOEvk9wZVRFhA==} '@module-federation/bridge-react-webpack-plugin@2.9.2': resolution: {integrity: sha512-6ikuvP1639g8jzSxveDLz/BOk0VTIkO7aSuvrZgq0waB0h553zFtkTJAXQETezzO+s1taHGhEvFoCtl6DJWu6A==} - '@module-federation/cli@0.15.0': - resolution: {integrity: sha512-ZFQ7TA7vwSro4n21/+9cGxVkeRU9IcXcQGs1GIToz/JFvomTHbGN33iplR3GNMhuMNyXQ/wxe2gWkEmIBCzW2w==} - engines: {node: '>=16.0.0'} - hasBin: true - - '@module-federation/cli@0.21.0': - resolution: {integrity: sha512-nLsYHsD3CsocUwe58MZnFD2XvqS1C9sJW60kH3+Y2hYVFW9EkhPRuJGuoV2DS2EZlP22UfnZphqVZ08nwurLZw==} - engines: {node: '>=16.0.0'} - hasBin: true - '@module-federation/cli@2.0.1': resolution: {integrity: sha512-2SL5Y8iODNX10y9T3CBLhHjSXo4afnA1BK82m4sNfZebuVO+o34bxewqwod9xfWq9xhTZmOSFZ+n+lgTKRv+CQ==} engines: {node: '>=16.0.0'} @@ -2916,24 +2514,6 @@ packages: engines: {node: '>=16.0.0'} hasBin: true - '@module-federation/data-prefetch@0.15.0': - resolution: {integrity: sha512-ivAnthD4SbBoT3590qLzCyKELGyfa7nj8BEjWjb6BNrP5Eu8sHX3Q2wHf76QsYfuwErtjaMU87N7dTe2ELZPVg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@module-federation/data-prefetch@0.21.0': - resolution: {integrity: sha512-cwvD55fqTx+XFlYQ/G+rOhWN0Jbd37PaVdyKPLtgYHQ+7DUya2H3xDH1RbSkDKw3esAn91NZq00nXEfL8ccvKA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@module-federation/data-prefetch@0.8.9': - resolution: {integrity: sha512-doUzJ5uuLPrN5e/NMvKuyUE/lqiZFgGzFITwBF90/KKqOq7R2ZWh43R4RJgkUYfs/F119AYXZ9jxrSphIh+cjg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - '@module-federation/data-prefetch@2.0.1': resolution: {integrity: sha512-Kq0P1OABGt6QAvs6TaE/zY9Ut9Y/oJFrzoSF3eWaCYbUAr2KD2SpTyMsPz4ssBzjeKXTgimugh6tHHd6mpCBIQ==} peerDependencies: @@ -2945,33 +2525,6 @@ packages: react-dom: optional: true - '@module-federation/dts-plugin@0.15.0': - resolution: {integrity: sha512-UztaFAhpCpsy+EUOP1BiqlYpRdD4h2TUITphCmThO1grOCqU7dYYwGjWNy37NtJeykRRznH3FU0+iGBG3Oiw6w==} - peerDependencies: - typescript: ^4.9.0 || ^5.0.0 - vue-tsc: '>=1.0.24' - peerDependenciesMeta: - vue-tsc: - optional: true - - '@module-federation/dts-plugin@0.21.0': - resolution: {integrity: sha512-G191VJqnKijul0nMLAvzF8LpeXVOqeJMLVRAQXoiL1P2/Y1C5OctKGq7QevA93vhLu79Ck2OGr2pOd3yH9NvnQ==} - peerDependencies: - typescript: ^4.9.0 || ^5.0.0 - vue-tsc: '>=1.0.24' - peerDependenciesMeta: - vue-tsc: - optional: true - - '@module-federation/dts-plugin@0.8.9': - resolution: {integrity: sha512-Q40yqdQvTV8QRoegjUquTejhLl2gZoPv623hc8MWmGuP2vXLBIJJ9iV849LkFLeE8xaUgtwmn2uCQeBh2aJNjg==} - peerDependencies: - typescript: ^4.9.0 || ^5.0.0 - vue-tsc: '>=1.0.24' - peerDependenciesMeta: - vue-tsc: - optional: true - '@module-federation/dts-plugin@2.0.1': resolution: {integrity: sha512-PLneTsf1fQS5/RTBedtLAAmCPRdMfIlhfJkOa8QH3WDJaQsqm8Wb3r2cTUBf2aNj/bP3aH/y6Hs9JFB/4x0l5g==} peerDependencies: @@ -2990,50 +2543,6 @@ packages: vue-tsc: optional: true - '@module-federation/enhanced@0.15.0': - resolution: {integrity: sha512-YzGcjdggtR+VrNdIgT1nvhT+V6I+LnrdsLV3YfOB0iVkOe4+YFbDLZJK16CuYRSm/HTR38LVbziE/6tWcibKYw==} - hasBin: true - peerDependencies: - typescript: ^4.9.0 || ^5.0.0 - vue-tsc: '>=1.0.24' - webpack: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - vue-tsc: - optional: true - webpack: - optional: true - - '@module-federation/enhanced@0.21.0': - resolution: {integrity: sha512-fpeERj4ymaiY52hyLNLdOqMjOBvvmd3rcbBTyoss06B4XagW+RcDrQ+DImZot259Vbac6AxA1J4V1swFEmYEpA==} - hasBin: true - peerDependencies: - typescript: ^4.9.0 || ^5.0.0 - vue-tsc: '>=1.0.24' - webpack: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - vue-tsc: - optional: true - webpack: - optional: true - - '@module-federation/enhanced@0.8.9': - resolution: {integrity: sha512-feZUhznCyFkyivWNSFPN+FHMZmyrxlKBhWW8ldWsp/LlKIzWI75vMLimpiydBWnWTZgnOhQDBZGZVxSlfnfKHQ==} - peerDependencies: - typescript: ^4.9.0 || ^5.0.0 - vue-tsc: '>=1.0.24' - webpack: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - vue-tsc: - optional: true - webpack: - optional: true - '@module-federation/enhanced@2.0.1': resolution: {integrity: sha512-EZIARQ/8ScoTP6PV8+E4SsmMYWK4ErrikZJ0G/FX8wvK8mCtdoKatFtvDN9++P6Nl78kN9zHYgAV4AHKdBVjfQ==} hasBin: true @@ -3064,42 +2573,15 @@ packages: webpack: optional: true - '@module-federation/error-codes@0.13.1': - resolution: {integrity: sha512-azgGDBnFRfqlivHOl96ZjlFUFlukESz2Rnnz/pINiSqoBBNjUE0fcAZP4X6jgrVITuEg90YkruZa7pW9I3m7Uw==} - - '@module-federation/error-codes@0.15.0': - resolution: {integrity: sha512-CFJSF+XKwTcy0PFZ2l/fSUpR4z247+Uwzp1sXVkdIfJ/ATsnqf0Q01f51qqSEA6MYdQi6FKos9FIcu3dCpQNdg==} - - '@module-federation/error-codes@0.21.0': - resolution: {integrity: sha512-jZLvq4bkDUz9Qt5N+vKRGdJ1qSEt0W637xhAGgoaTNXY1aCoS99zeqWZzt1RCA6BAJjwVC+wz60VLMtZ+6ZQYw==} - '@module-federation/error-codes@0.21.2': resolution: {integrity: sha512-mGbPAAApgjmQUl4J7WAt20aV04a26TyS21GDEpOGXFEQG5FqmZnSJ6FqB8K19HgTKioBT1+fF/Ctl5bGGao/EA==} - '@module-federation/error-codes@0.8.9': - resolution: {integrity: sha512-yUA3GZjOy8Ll6l193faXir2veexDaUiLdmptbzC9tIee/iSQiSwIlibdTafCfqaJ62cLZaytOUdmAFAKLv8QQw==} - '@module-federation/error-codes@2.0.1': resolution: {integrity: sha512-2bJF/ft+qL9L6Zvq2t/G9/f/0wFL73cM8/NJ04uyYz9BjIgvx28K5qu8/6+IwgEEKATG7vOhBBVj6wH3S+5ASA==} '@module-federation/error-codes@2.9.2': resolution: {integrity: sha512-MTpKubqsJSBgnuw+2Pli1kHL4INeHD5cGnHL84oRANwQAWK7b6lN3ZZTmL3FL6lYn65ImineqZNqGWBv5GQVLQ==} - '@module-federation/inject-external-runtime-core-plugin@0.15.0': - resolution: {integrity: sha512-D6+FO2oj2Gr6QpfWv3i9RI9VJM2IFCMiFQKg5zOpKw1qdrPRWb35fiXAXGjw9RrVgrZz0Z1b9OP4zC9hfbpnQQ==} - peerDependencies: - '@module-federation/runtime-tools': 0.15.0 - - '@module-federation/inject-external-runtime-core-plugin@0.21.0': - resolution: {integrity: sha512-geluIyX4VwYGzmjqLpv9HcpoJ1lOxbvDBpRLQmd+m3UDuJWyY+yXuumg64CC7TUWD3DjZqiOLOCTd5XuLIQ5Nw==} - peerDependencies: - '@module-federation/runtime-tools': 0.21.0 - - '@module-federation/inject-external-runtime-core-plugin@0.8.9': - resolution: {integrity: sha512-F3s/3Iny20c0Y0CaXgOZdgl7PzgXj6ftCiT5FO6QWmyhzfl2R0o3KFuv54BmwtoimSFky1ShuC/jPluz4EGG1g==} - peerDependencies: - '@module-federation/runtime-tools': 0.8.9 - '@module-federation/inject-external-runtime-core-plugin@2.0.1': resolution: {integrity: sha512-oAA7G+4GCHM+WRYfscR/x4GwCyM9CEqfdD9/x2L6y8mtLWK9anRLKTocsI759AvzXsbT1m3EQ5ki1O6wlwDu3g==} peerDependencies: @@ -3110,72 +2592,18 @@ packages: peerDependencies: '@module-federation/runtime-tools': 2.9.2 - '@module-federation/managers@0.15.0': - resolution: {integrity: sha512-YMIiFRgMHtuMcLBgOYyfkFpwU9vo6l0VjOZE5Wdr33DltQBUgp9Lo8+2AkyZ4TTkelqjvUWSNKKYV3MV4GL7gw==} - - '@module-federation/managers@0.21.0': - resolution: {integrity: sha512-9YJ7dro1sJeAz6wsZrhtM/K/I9s3CWaQpqcFYUYj4ZNMpVeCNpxKRRbewd/wBKel6T/wMNvAGN5iiJn54TGKSQ==} - - '@module-federation/managers@0.8.9': - resolution: {integrity: sha512-Fb28sa2iAqwSSSgiPBoL5Kp0RB9ZKJvdwLAEwZBV2c2LyZUqJCdTjmYuB5Q2sWB9wsudd/ijV6WWNK/nVoJxdA==} - '@module-federation/managers@2.0.1': resolution: {integrity: sha512-KR01lSlcYRQ9C6hW2a8CQQtAE0LvfTLgtV/6ZNUTagw8sRfeDln+ggrZsYilKu9zl0i8RPDgpv/kS60o4lcxCQ==} '@module-federation/managers@2.9.2': resolution: {integrity: sha512-VtSKLkT2EA1wqCMFXNiklC+XF+5bZPYY3sUQ9LCFHqKS7v7NOJDrwMV6Qtw3fxH4Y6Pe6P28MiU8D9dlzknCKQ==} - '@module-federation/manifest@0.15.0': - resolution: {integrity: sha512-x+UVFkdoKiNZhpUO8H/9jlM3nmC5bIApZvbC2TQuNva+ElCPotdhEO8jduiVkBnc2lr8D9qnFm8U5Kx/aFnGlA==} - - '@module-federation/manifest@0.21.0': - resolution: {integrity: sha512-m2evrpyO9OPF4ul/qHD5P76CfBgFpEDsNAorddNgDOZAjI75lqD4DX/R0gyuTXoSOPz0vFbLLWLy2adze5xRTA==} - - '@module-federation/manifest@0.8.9': - resolution: {integrity: sha512-48jIv50l0tTx+CVzs2JKMlTO0mcUvFRDxqO79nJaL1DLfpRQoCRQjCA8sXUp5PPIyJ8MHQqkHK/dnaal4NlR/A==} - '@module-federation/manifest@2.0.1': resolution: {integrity: sha512-p8nYGjHWp17MsYdW/Vv0ogBDiTTsI1PHWPQbvVIqLQXDqwiesaRSRR1zziECXQoEL8lV5Bs+uSkcaJGhea9P+A==} '@module-federation/manifest@2.9.2': resolution: {integrity: sha512-l9X1g2nHqjdumz9U9jawKo8rKoWXVbSlzLOqs+GYiHfzqSB2/ZQ+4AX0CaJ7orLz2varpGK4qdnQ0saptGuEVw==} - '@module-federation/rspack@0.15.0': - resolution: {integrity: sha512-nRz0JHcoTz+M5A+wXCG3981lmPeEm91EZe4q5GVfbVhvlAf/Ctd26qSz4lXuyUA1Ar5afBTxKvqWy7xh4wcg2A==} - peerDependencies: - '@rspack/core': '>=0.7' - typescript: ^4.9.0 || ^5.0.0 - vue-tsc: '>=1.0.24' - peerDependenciesMeta: - typescript: - optional: true - vue-tsc: - optional: true - - '@module-federation/rspack@0.21.0': - resolution: {integrity: sha512-XQtYSWZxqgpIJg0qEDG5gyQ3WPFrIWnLvA0feQ51Ll8Ubv6sVo+se+gycLbZxJ/rD7D93y523tiiNWjdER7vCg==} - peerDependencies: - '@rspack/core': '>=0.7' - typescript: ^4.9.0 || ^5.0.0 - vue-tsc: '>=1.0.24' - peerDependenciesMeta: - typescript: - optional: true - vue-tsc: - optional: true - - '@module-federation/rspack@0.8.9': - resolution: {integrity: sha512-wuHRx+aUYhsrAQzU5yKQksaOJ8pwhuQJDl8I86xmzkEsnxcWsZcn49xIR4t7v1HcYAqjBXLNXSoQwkIMH9zu2w==} - peerDependencies: - '@rspack/core': '>=0.7' - typescript: ^4.9.0 || ^5.0.0 - vue-tsc: '>=1.0.24' - peerDependenciesMeta: - typescript: - optional: true - vue-tsc: - optional: true - '@module-federation/rspack@2.0.1': resolution: {integrity: sha512-SAlNE8iclFmzrKtx3/C2GivXYx6nPzx4MgQV01QG/a4LpnLbwlxzdZu3rqQ2swp4NNWT/t/GT7Y+7gfhyVa7mg==} peerDependencies: @@ -3200,123 +2628,54 @@ packages: vue-tsc: optional: true - '@module-federation/runtime-core@0.13.1': - resolution: {integrity: sha512-TfyKfkSAentKeuvSsAItk8s5tqQSMfIRTPN2e1aoaq/kFhE+7blps719csyWSX5Lg5Es7WXKMsXHy40UgtBtuw==} - - '@module-federation/runtime-core@0.15.0': - resolution: {integrity: sha512-RYzI61fRDrhyhaEOXH3AgIGlHiot0wPFXu7F43cr+ZnTi+VlSYWLdlZ4NBuT9uV6JSmH54/c+tEZm5SXgKR2sQ==} - - '@module-federation/runtime-core@0.21.0': - resolution: {integrity: sha512-qIvhfON6TQxbybZFNJzJZ0woi0kXaTWIavPdcUxi41LpxxB5Ax1voqpY5NXE2Zq0Uek88b2OgDgXyvIuKM50XQ==} - '@module-federation/runtime-core@0.21.2': resolution: {integrity: sha512-LtDnccPxjR8Xqa3daRYr1cH/6vUzK3mQSzgvnfsUm1fXte5syX4ftWw3Eu55VdqNY3yREFRn77AXdu9PfPEZRw==} - '@module-federation/runtime-core@0.6.17': - resolution: {integrity: sha512-PXFN/TT9f64Un6NQYqH1Z0QLhpytW15jkZvTEOV8W7Ed319BECFI0Rv4xAsAGa8zJGFoaM/c7QOQfdFXtKj5Og==} - '@module-federation/runtime-core@2.0.1': resolution: {integrity: sha512-gOuCPSHoQGUGwlxfSTMInFX+QvLxdEWegGGMiLdU5vqbXuva4E9M+kXBBO7/0MkcBPMmVs0wOJGm0XOLeV2f1Q==} '@module-federation/runtime-core@2.9.2': resolution: {integrity: sha512-S9roTDqLtAWaaDBuug69ZnXXGEx0pUq/yG06J759bjRgfAg2P9+dWEv1q7rB2eMIp7HH4L6s3ColDRYdL6tJ9w==} - '@module-federation/runtime-tools@0.13.1': - resolution: {integrity: sha512-GEF1pxqLc80osIMZmE8j9UKZSaTm2hX2lql8tgIH/O9yK4wnF06k6LL5Ah+wJt+oJv6Dj55ri/MoxMP4SXoPNA==} - - '@module-federation/runtime-tools@0.15.0': - resolution: {integrity: sha512-kzFn3ObUeBp5vaEtN1WMxhTYBuYEErxugu1RzFUERD21X3BZ+b4cWwdFJuBDlsmVjctIg/QSOoZoPXRKAO0foA==} - - '@module-federation/runtime-tools@0.21.0': - resolution: {integrity: sha512-XOjd5yLUTD12ay35rgSEhB9JIqxDZuC1OB6/aNyHf7IWPUNB7s4XZ2JlGn1xW8c0Asq1VRm15DF+BXmyDf+XnQ==} - '@module-federation/runtime-tools@0.21.2': resolution: {integrity: sha512-SgG9NWTYGNYcHSd5MepO3AXf6DNXriIo4sKKM4mu4RqfYhHyP+yNjnF/gvYJl52VD61g0nADmzLWzBqxOqk2tg==} - '@module-federation/runtime-tools@0.8.9': - resolution: {integrity: sha512-xBUGx1oOZNuxXjPGdTMrLtAIDrbrN6jE2Mgb9w1qr2mQ4AW9b5TOlxbARBoX4q98xt9oFCGU6Q0eW5XJpsl8AQ==} - '@module-federation/runtime-tools@2.0.1': resolution: {integrity: sha512-AStdwBtsGB3jIfDg9oP+KyVPsimdaeHsP855gqCxDp1hi2+GKjlZWZx9ThkS8NytVSXSUysxqoUL1ivDoKgcCQ==} '@module-federation/runtime-tools@2.9.2': resolution: {integrity: sha512-rhOvimSLLnnocfOVUfAzH2xDq1pHMw4f/nSC+JQhSztEgP/1UslPPvcBcenx3B8/6CoYmBbGa2OIBTJ225ZHAg==} - '@module-federation/runtime@0.13.1': - resolution: {integrity: sha512-ZHnYvBquDm49LiHfv6fgagMo/cVJneijNJzfPh6S0CJrPS2Tay1bnTXzy8VA5sdIrESagYPaskKMGIj7YfnPug==} - - '@module-federation/runtime@0.15.0': - resolution: {integrity: sha512-dTPsCNum9Bhu3yPOcrPYq0YnM9eCMMMNB1wuiqf1+sFbQlNApF0vfZxooqz3ln0/MpgE0jerVvFsLVGfqvC9Ug==} - - '@module-federation/runtime@0.21.0': - resolution: {integrity: sha512-fl31G2x/+g8/KyMFAlxM8825inuAZu4FQiIg9X2wVKRD1Yx8svg12likGBiorVofO2gBTY7KQ+Nbc6Az90JKQQ==} - '@module-federation/runtime@0.21.2': resolution: {integrity: sha512-97jlOx4RAnAHMBTfgU5FBK6+V/pfT6GNX0YjSf8G+uJ3lFy74Y6kg/BevEkChTGw5waCLAkw/pw4LmntYcNN7g==} - '@module-federation/runtime@0.8.9': - resolution: {integrity: sha512-i+a+/hoT/c+EE52mT+gJrbA6DhL86PY9cd/dIv/oKpLz9i+yYBlG+RA+puc7YsUEO4irbFLvnIMq6AGDUKVzYA==} - '@module-federation/runtime@2.0.1': resolution: {integrity: sha512-UQ72P5Oo40dS6vdhHetwTtIsbGciEr+bjoYvDgh1WLPfFlTYd8zo9cLfqaf3juuPfV3cMVARAVPmh16lQYpUGA==} '@module-federation/runtime@2.9.2': resolution: {integrity: sha512-1lPZVy7TkMTTBMkkjgQt7jA+9FAx226yQqEz+X0lFAIbpxIWfpzNQLD+7IydEe83ZhDJpK3cv/9bn3jjQBZeqQ==} - '@module-federation/sdk@0.13.1': - resolution: {integrity: sha512-bmf2FGQ0ymZuxYnw9bIUfhV3y6zDhaqgydEjbl4msObKMLGXZqhse2pTIIxBFpIxR1oONKX/y2FAolDCTlWKiw==} - - '@module-federation/sdk@0.15.0': - resolution: {integrity: sha512-PWiYbGcJrKUD6JZiEPihrXhV3bgXdll4bV7rU+opV7tHaun+Z0CdcawjZ82Xnpb8MCPGmqHwa1MPFeUs66zksw==} - - '@module-federation/sdk@0.21.0': - resolution: {integrity: sha512-tWQ2j+zH6hLaERcie186gwAULyWI/js4WSyzTF2d52ti8vKf+357S7IL4/96+AaTrvwP50NWeR8Igc176kaGTA==} - '@module-federation/sdk@0.21.2': resolution: {integrity: sha512-t2vHSJ1a9zjg7LLJoEghcytNLzeFCqOat5TbXTav5dgU0xXw82Cf0EfLrxiJL6uUpgbtyvUdqqa2DVAvMPjiiA==} - '@module-federation/sdk@0.6.10': - resolution: {integrity: sha512-i6ofHnImB4zCn/bt7Ft0zh9o/PxvsJj8Wc88EAeJg4IrY6+bzwwo1G2h44w1Yt3go4skZZFQCK0UxoaV6l/t/A==} - - '@module-federation/sdk@0.8.9': - resolution: {integrity: sha512-QJ60itWC/SPjqduT7wDiF8UGwVU/yJ/Sz+QbnoxB9b7gNLzvI//swAXTo9eOtKsCy/V2BMwjt0F3eOcfnaqllA==} - '@module-federation/sdk@2.0.1': resolution: {integrity: sha512-32PwudojGjog51cwpTali7D6ud82oVgsyvOx9JjAzhvXBX96YI4mRsursuWcthDxmigJP9ZvUTXDuRUEDh1OQA==} + '@module-federation/sdk@2.8.0': + resolution: {integrity: sha512-yBP+9+0Z8nlvKEXAZS3AsQVy7bFbZf8eMivGk4q4ZdwG3TsLMlsPjb1dQb2i7gcAG6ux9y2LWLkj/0LVk74cnQ==} + '@module-federation/sdk@2.9.2': resolution: {integrity: sha512-ILtBFPuYpVcRA/Qay1lJ2hMtZI8fDE/v1n7xiN17e5qx5rSBR3FaamTsmRpN1hIt+gVnoa76CzOP/Y73d8hHNg==} - '@module-federation/third-party-dts-extractor@0.15.0': - resolution: {integrity: sha512-rML74G1NB9wtHubXP+ZTMI5HZkYypN/E93w8Zkwr6rc/k1eoZZza2lghw2znCNeu3lDlhvI9i4iaVsJQrX4oQA==} - - '@module-federation/third-party-dts-extractor@0.21.0': - resolution: {integrity: sha512-8aWNbWs0IcuAhf/5321SiIFMAMIFQLE7ttlsOw6rb1U7S9u7LzGHR5eNPhKA7BT9OZUg/1aIa8/Ax2hAhj2VNw==} - - '@module-federation/third-party-dts-extractor@0.8.9': - resolution: {integrity: sha512-53v6B5zfhGlAPpH0SrlJDp9B6kcOcZaUPi6J4L/7ie5F0YVe0vq/mJGOOzAStN9ggJjSrjBZLFT3gFmBYM3Z9A==} - '@module-federation/third-party-dts-extractor@2.0.1': resolution: {integrity: sha512-neKSr6FNUeGRh+YR57l/QZUzPytJXuJx+babF7j5iGJG3FP+kfizr6QD0hgVis5KEoXMVbQ8yyvG0slERizeyw==} '@module-federation/third-party-dts-extractor@2.9.2': resolution: {integrity: sha512-FKJVGx+/jIe16RfmwoyIDVMPAttIFJv6AJCLkKf05IRNvI3RJFqQ1tLP1YjcfGuumCbYuWGa4QKnMla7YjVpqg==} - '@module-federation/webpack-bundler-runtime@0.13.1': - resolution: {integrity: sha512-QSuSIGa09S8mthbB1L6xERqrz+AzPlHR6D7RwAzssAc+IHf40U6NiTLPzUqp9mmKDhC5Tm0EISU0ZHNeJpnpBQ==} - - '@module-federation/webpack-bundler-runtime@0.15.0': - resolution: {integrity: sha512-i+3wu2Ljh2TmuUpsnjwZVupOVqV50jP0ndA8PSP4gwMKlgdGeaZ4VH5KkHAXGr2eiYUxYLMrJXz1+eILJqeGDg==} - - '@module-federation/webpack-bundler-runtime@0.21.0': - resolution: {integrity: sha512-kxXf7TB0CRdtqsXUGhoV/e5+1gZpcjMHt1C6ZZWhLCHZTSpESqPHm2GUk41yzKj/0qn/QyDJ39NGKjALWLws4A==} - '@module-federation/webpack-bundler-runtime@0.21.2': resolution: {integrity: sha512-06R/NDY6Uh5RBIaBOFwYWzJCf1dIiQd/DFHToBVhejUT3ZFG7GzHEPIIsAGqMzne/JSmVsvjlXiJu7UthQ6rFA==} - '@module-federation/webpack-bundler-runtime@0.8.9': - resolution: {integrity: sha512-DYLvVi4b2MUYu/B4g5wIC5SHxiODboKHkYGHYapOhCcqOchca/N16gtiAI8eSNjJPc+fgUXUGIyGiB18IlFEeQ==} - '@module-federation/webpack-bundler-runtime@2.0.1': resolution: {integrity: sha512-u1NId3SF4lHDTmD2CHFEszulmXmIq1TGw9JYvnLx5rKJL7xt3aNxcb1GvkaYbRNVBXhSMjJ75E5LsQlZzyBx9A==} @@ -3357,6 +2716,9 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-project/types@0.153.0': + resolution: {integrity: sha512-jSNrRIyvPVLL5E1z/tS5zLAprosGz/FuI1PWwEOz59j3E4TTTzSpqKb/RDGqJhhW0QHYISGXxq582wGx6T11Tw==} + '@pinojs/redact@0.4.0': resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} @@ -3846,148 +3208,104 @@ packages: resolution: {integrity: sha512-5zFk5wPiAEinfT5XH+t7Ka5I/CUnRf/fqnCS7LDj21ReOgGfdrUQ1wXVsV7EoClCNCgUHvWFDdWkbNOFeFa60A==} engines: {node: '>=18.12'} - '@rollup/rollup-android-arm-eabi@4.62.2': - resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==} + '@rolldown/binding-android-arm-eabi@1.2.13': + resolution: {integrity: sha512-Vu/NICrgdRvUOeaJZIyB2FP63s6fO/4ud5l8dXmxDx9yDyn+mN0y+gsvsVviSli+T361Aqo0h46EuMoobrwawA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.62.2': - resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==} + '@rolldown/binding-android-arm64@1.2.13': + resolution: {integrity: sha512-6LEoIrGy5vvCd2boNnv2soPSUZj/PRvhp8R/t9KlX+mIZxThIE/ZqxrGXxmuNX0FuvQFvLdZr7S4HrYpYBVhEQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.62.2': - resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==} + '@rolldown/binding-darwin-arm64@1.2.13': + resolution: {integrity: sha512-CaJSRzlQ6Q+zkDMVA9OkVxBjVoPRCDEE3v0FSJ9kIQBgRjFApA3Si4ijhbNVUji7ZJt+PfO0e46qy4nPInHUPA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.62.2': - resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==} + '@rolldown/binding-darwin-x64@1.2.13': + resolution: {integrity: sha512-e4r340I5hxSzJkD3YJBxgzq/rJ3wwxwdLLb2FPt1Zpyem20nrQPT11DDEEkazwxaHumH8wpglsp/Ozgj/wT6mw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.62.2': - resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.62.2': - resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==} + '@rolldown/binding-freebsd-x64@1.2.13': + resolution: {integrity: sha512-hoBWDZ4/K/mJKVMbsgUd1jfpA2DiOrJ54mpegObU9TBHBBrtX4FLIXJJQRDPZ/2Dn91GvPob+Z2hwKJzf4E5SQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.62.2': - resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.62.2': - resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.13': + resolution: {integrity: sha512-oF9fZu3vTWnTiVAkDFxU9PJLt1nh20K9RRpuHsR7ZnE2L7XookBbDBVLojCVSLGbvtSlxeUNnjAj6DbNsKyzbg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.62.2': - resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==} + '@rolldown/binding-linux-arm64-gnu@1.2.13': + resolution: {integrity: sha512-DTpb/+jMiqWMPgphn4ksW1zW+XLJ6dJJ9FMvnIk9I291LhCctMPhMYJrP5t9p6C9qa3KXadDdUEZHBaPh3kNxQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.62.2': - resolution: {integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==} + '@rolldown/binding-linux-arm64-musl@1.2.13': + resolution: {integrity: sha512-xU+Kvv9N2A3SY35zFh1FWWNjxbadE/BKeqnkXe7vScU4GZsw757BlVmDLITZEq8DPpk6m7uoDYkK7P+x/uU5Ow==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.62.2': - resolution: {integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-loong64-musl@4.62.2': - resolution: {integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==} - cpu: [loong64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-ppc64-gnu@4.62.2': - resolution: {integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-ppc64-musl@4.62.2': - resolution: {integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==} + '@rolldown/binding-linux-ppc64-gnu@1.2.13': + resolution: {integrity: sha512-XMk/hnhh25oQ756Lclb1Q11h4ll0xC0Esa5w4Vzp+mAE2S3AGJgeM0SonrIgY8fHhjarb6hcoTuwoFG0VVP2ig==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.62.2': - resolution: {integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==} - cpu: [riscv64] - os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.62.2': - resolution: {integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.62.2': - resolution: {integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==} + '@rolldown/binding-linux-s390x-gnu@1.2.13': + resolution: {integrity: sha512-U1BoTHYmlywE2n3HUWjzZ+8EQsKr+OwpxYuDWaubx42tUL8QSL7nOqRz/NVHanibbFP3M1Rxuprz/wNcbMKjqw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.62.2': - resolution: {integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==} + '@rolldown/binding-linux-x64-gnu@1.2.13': + resolution: {integrity: sha512-J4cm80Pc6wEwV5AZ42o62sIQgDk+Y7R2s646jIwuvO+4V46QB58N4vVuMPWCBaNgursXLpmUWJV//WQAkPvHBQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.62.2': - resolution: {integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==} + '@rolldown/binding-linux-x64-musl@1.2.13': + resolution: {integrity: sha512-W0euZS40U4V6JkmEnVCIX9mcsL6cbXQ4X8c2w+MMOIjFg68TXUW+u3RT+2e1t1pv9mg/EP3pDtK3POXdQ7Rxyw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.62.2': - resolution: {integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.62.2': - resolution: {integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==} + '@rolldown/binding-openharmony-arm64@1.2.13': + resolution: {integrity: sha512-do/AF/4n9MRshia3a5aXoy8xM2c6mgfT6D7H/dY6my5z+hfCIR4ab7mk4IRj++nsEQpKy39kd0DQnDq+r692tw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.62.2': - resolution: {integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==} + '@rolldown/binding-win32-arm64-msvc@1.2.13': + resolution: {integrity: sha512-6FtUf2cJZobutJdxnGYX8z0vtbgqU0b2v8vfBhkXb9wp2MppMFtkunE+IaOntyi01rkIQoPW2GHABtfzsC0BRQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.62.2': - resolution: {integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.62.2': - resolution: {integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==} + '@rolldown/binding-win32-x64-msvc@1.2.13': + resolution: {integrity: sha512-UKhFaZTeTcbKrb3iU82m17jVcPEAoqDkCN5MBqgPyZSwp/cQmib21crTS0DdH7T1B7wZRWEI89YQAOJMet5yhg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.62.2': - resolution: {integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==} - cpu: [x64] - os: [win32] - - '@rsbuild/core@1.3.18': - resolution: {integrity: sha512-ocnz3pVapMTeuoP3zZ1shYcxnAQtRf6RzLl8n7acNi8Hu+ku6SiDGR65foclwcubWF6e9nZPohH94rXnmEVfrw==} - engines: {node: '>=16.10.0'} - hasBin: true + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@rsbuild/core@2.2.12': resolution: {integrity: sha512-SnJ81Jf9ZGms8hUq0FGxrqlUxdHKV76VK9gxrEdtWLbTic+qRt0SIAsk5NdIr1tXFzqzQ6Fqeffs+K1EUuZEHw==} @@ -4049,24 +3367,19 @@ packages: '@rsdoctor/utils@1.6.4': resolution: {integrity: sha512-7oliDqtaLVtmVFkfSN3AKWoMQb8kuZA9AURCgb26cUW7+ZD3qgADg9uyD+WevpA6IOeF6gqo3hezTZKlwFR2Sg==} - '@rslib/core@0.6.9': - resolution: {integrity: sha512-xF/JssYVghxoR6qE/O9tdUW029aN4WdWTIve9VrStsFkLK6U/1lykMHtgDu3VhcfYrs2p0Wfku5dLBmo9/WnrA==} - engines: {node: '>=16.7.0'} + '@rslib/core@1.0.3': + resolution: {integrity: sha512-a5IZiyf9sNeeE9jcTsTmz16vxcThpbOSJg0BZXzJAxrUFOZX5xG25PJua9hr0LDWGryBX2UQTruVsLQ8BCpqng==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@microsoft/api-extractor': ^7 - typescript: ^5 + typescript: ^5 || ^6 || ^7 peerDependenciesMeta: '@microsoft/api-extractor': optional: true typescript: optional: true - '@rspack/binding-darwin-arm64@1.3.9': - resolution: {integrity: sha512-lfTmsbUGab9Ak/X6aPLacHLe4MBRra+sLmhoNK8OKEN3qQCjDcomwW5OlmBRV5bcUYWdbK8vgDk2HUUXRuibVg==} - cpu: [arm64] - os: [darwin] - '@rspack/binding-darwin-arm64@1.6.0': resolution: {integrity: sha512-IrigOWnGvQgugsTZgf3dB5uko+y+lkNLYg/8w0DiobxkWhpLO97RAeR1w0ofIPXYVu3UWVf7dgHj3PjTqjC9Tw==} cpu: [arm64] @@ -4077,11 +3390,6 @@ packages: cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-x64@1.3.9': - resolution: {integrity: sha512-rYuOUINhnhLDbG5LHHKurRSuKIsw0LKUHcd6AAsFmijo4RMnGBJ4NOI4tOLAQvkoSTQ+HU5wiTGSQOgHVhYreQ==} - cpu: [x64] - os: [darwin] - '@rspack/binding-darwin-x64@1.6.0': resolution: {integrity: sha512-UYz+Y1XqbHGnkUOsaZRuwiuQaQaQ5rEPSboBPlIVDtblwmB71yxo3ET0nSoUhz8L/WXqQoARiraTCxUP6bvSIg==} cpu: [x64] @@ -4090,13 +3398,7 @@ packages: '@rspack/binding-darwin-x64@2.2.8': resolution: {integrity: sha512-xCVou/jJASjEAjwy1T3hPJcJqA5QZASJfUwHqEk+nA0v44MagwH8tM8lsOvRfhzR7N2+YFac1rfZOUT8uM3awg==} cpu: [x64] - os: [darwin] - - '@rspack/binding-linux-arm64-gnu@1.3.9': - resolution: {integrity: sha512-pBKnS2Fbn9cDtWe1KcD1qRjQlJwQhP9pFW2KpxdjE7qXbaO11IHtem6dLZwdpNqbDn9QgyfdVGXBDvBaP1tGwA==} - cpu: [arm64] - os: [linux] - libc: [glibc] + os: [darwin] '@rspack/binding-linux-arm64-gnu@1.6.0': resolution: {integrity: sha512-Jr7aaxrtwOnh7ge7tZP+Mjpo6uNltvQisL25WcjpP+8PnPT0C9jziKDJso7KxeOINXnQ2yRn2h65+HBNb7FQig==} @@ -4110,12 +3412,6 @@ packages: os: [linux] libc: [glibc] - '@rspack/binding-linux-arm64-musl@1.3.9': - resolution: {integrity: sha512-0B+iiINW0qOEkBE9exsRcdmcHtYIWAoJGnXrz9tUiiewRxX0Cmm0MjD2HAVUAggJZo+9IN8RGz5PopCjJ/dn1g==} - cpu: [arm64] - os: [linux] - libc: [musl] - '@rspack/binding-linux-arm64-musl@1.6.0': resolution: {integrity: sha512-hl17reUhkjgkcLao6ZvNiSRQFGFykqUpIj1//v/XtVd/2XAZ0Kt7jv9UUeaR+2zY8piH+tgCkwgefmjmajMeFg==} cpu: [arm64] @@ -4152,12 +3448,6 @@ packages: os: [linux] libc: [glibc] - '@rspack/binding-linux-x64-gnu@1.3.9': - resolution: {integrity: sha512-82izGJw/qxJ4xaHJy/A4MF7aTRT9tE6VlWoWM4rJmqRszfujN/w54xJRie9jkt041TPvJWGNpYD4Hjpt0/n/oA==} - cpu: [x64] - os: [linux] - libc: [glibc] - '@rspack/binding-linux-x64-gnu@1.6.0': resolution: {integrity: sha512-xdlb+ToerFU/YggndCfIrZI/S/C80CP9ZFw6lhnEFSTJDAG88KptxstsoKUh8YzyPTD45CYaOjYNtUtiv0nScg==} cpu: [x64] @@ -4170,12 +3460,6 @@ packages: os: [linux] libc: [glibc] - '@rspack/binding-linux-x64-musl@1.3.9': - resolution: {integrity: sha512-V9nDg63iPI6Z7kM11UPV5kBdOdLXPIu3IgI2ObON5Rd4KEZr7RLo/Q4HKzj0IH27Zwl5qeBJdx69zZdu66eOqg==} - cpu: [x64] - os: [linux] - libc: [musl] - '@rspack/binding-linux-x64-musl@1.6.0': resolution: {integrity: sha512-IkXEW/FBPPz4EJJTLNZvA+94aLaW2HgUMYu7zCIw5YMc9JJ/UXexY1zjX/A7yidsCiZCRy/ZrB+veFJ5FkZv7w==} cpu: [x64] @@ -4196,11 +3480,6 @@ packages: resolution: {integrity: sha512-3mOJuZTrF56jOh/GD9chLMJKbzPZ6Ty2OIML7+lLz0Yk2XS/xWRfLn85Dmnkb/O6UF65x7+p8VPAIZlBtLTclw==} cpu: [wasm32] - '@rspack/binding-win32-arm64-msvc@1.3.9': - resolution: {integrity: sha512-owWCJTezFkiBOSRzH+eOTN15H5QYyThHE5crZ0I30UmpoSEchcPSCvddliA0W62ZJIOgG4IUSNamKBiiTwdjLQ==} - cpu: [arm64] - os: [win32] - '@rspack/binding-win32-arm64-msvc@1.6.0': resolution: {integrity: sha512-HOA/U7YC6EB74CpIrT2GrvPgd+TLr0anNuOp/8omw9hH1jjsP5cjUMgWeAGmWyXWxwoS8rRJ0xhRA+UIe3cL3g==} cpu: [arm64] @@ -4211,11 +3490,6 @@ packages: cpu: [arm64] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.3.9': - resolution: {integrity: sha512-YUuNA8lkGSXJ07fOjkX+yuWrWcsU5x5uGFuAYsglw+rDTWCS6m9HSwQjbCp7HUp81qPszjSk+Ore5XVh07FKeQ==} - cpu: [ia32] - os: [win32] - '@rspack/binding-win32-ia32-msvc@1.6.0': resolution: {integrity: sha512-ThczdltBOFcq+IrTflCE+8q0GvKoISt6pTupkuGnI1/bCnqhCxPP6kx8Z06fdJUFMhvBtpZa0gDJvhh3JBZrKA==} cpu: [ia32] @@ -4226,11 +3500,6 @@ packages: cpu: [ia32] os: [win32] - '@rspack/binding-win32-x64-msvc@1.3.9': - resolution: {integrity: sha512-E0gtYBVt5vRj0zBeplEf8wsVDPDQ6XBdRiFVUgmgwYUYYkXaalaIvbD1ioB8cA05vfz8HrPGXcMrgletUP4ojA==} - cpu: [x64] - os: [win32] - '@rspack/binding-win32-x64-msvc@1.6.0': resolution: {integrity: sha512-Bhyvsh1m6kIpr1vqZlcdUDUTh0bheRe9SF+f6jw0kPDPbh8FfrRbshPKmRHpRZAUHt20NqgUKR2z2BaKb0IJvQ==} cpu: [x64] @@ -4241,24 +3510,12 @@ packages: cpu: [x64] os: [win32] - '@rspack/binding@1.3.9': - resolution: {integrity: sha512-3FFen1/0F2aP5uuCm8vPaJOrzM3karCPNMsc5gLCGfEy2rsK38Qinf9W4p1bw7+FhjOTzoSdkX+LFHeMDVxJhw==} - '@rspack/binding@1.6.0': resolution: {integrity: sha512-RqlCjvWg/LkJjHpsbI48ebo2SYpIBJsV1eh9SEMfXo1batAPvB5grhAbLX0MRUOtzuQOnZMCDGdr2v7l2L8Siw==} '@rspack/binding@2.2.8': resolution: {integrity: sha512-c9flkSua3khHnOKBCRk8BkHGOwU9YB7niv+5JfQXiLZIvJmgKsZ7PD8QrFklMhsJT3oVAc6c9GN7/wy1YkACjA==} - '@rspack/core@1.3.9': - resolution: {integrity: sha512-u7usd9srCBPBfNJCSvsfh14AOPq6LCVna0Vb/aA2nyJTawHqzfAMz1QRb/e27nP3NrV6RPiwx03W494Dd6r6wg==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@swc/helpers': '>=0.5.1' - peerDependenciesMeta: - '@swc/helpers': - optional: true - '@rspack/core@1.6.0': resolution: {integrity: sha512-u2GDSToEhmgIsy0QbOPA81i9tu87J2HgSsRA3HHZfWIR8Vt8KdlAriQnG8CatDnvFSY/UQEumVf5Z1HUAQwxCg==} engines: {node: '>=18.12.0'} @@ -4438,9 +3695,6 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} @@ -4744,8 +3998,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@20.19.43': - resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==} + '@types/node@22.20.5': + resolution: {integrity: sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA==} '@types/node@26.1.1': resolution: {integrity: sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==} @@ -4753,11 +4007,6 @@ packages: '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - '@types/react-dom@17.0.26': - resolution: {integrity: sha512-Z+2VcYXJwOqQ79HreLU/1fyQ88eXSSFh6I3JdrEHQIfYSI0kCQpTGvOrbE6jFGGYXKsHuwY9tBa/w5Uo6KzrEg==} - peerDependencies: - '@types/react': ^17.0.0 - '@types/react-test-renderer@19.3.0': resolution: {integrity: sha512-TX4p2D4Z2oigM3SXU7+QyLSUnSR0vR1S1Pfxm/qFL9nHQ3jclgi6ioGoWQmlIr1DeKRVmPJrmNlhgM0JlWlLUg==} @@ -4963,34 +4212,19 @@ packages: vue-router: optional: true - '@vitest/expect@4.1.11': - resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==} - - '@vitest/mocker@4.1.11': - resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==} + '@vitest/mocker@5.0.3': + resolution: {integrity: sha512-T8sWAIbkSyAjkwTcaEc3Iu0o9A27X1/kdXrizhZkGuSKScRQtRzclfAMpOTcGdXCsqxeWlpGy3XjqaW8CpLORg==} peerDependencies: msw: ^2.4.9 - vite: ^7.3.1 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@4.1.11': - resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==} - - '@vitest/runner@4.1.11': - resolution: {integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==} - - '@vitest/snapshot@4.1.11': - resolution: {integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==} - - '@vitest/spy@4.1.11': - resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==} - - '@vitest/utils@4.1.11': - resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==} + '@vitest/spy@5.0.3': + resolution: {integrity: sha512-XhFysQTB8AZ+P4gMi+Lpo99vg2AZi0qKpaB9yXQl37+CaMEAPO3iH/wGVnSyL5MPERiLezpqTVtrR6UZH5GCXg==} '@vscode/sudo-prompt@9.3.2': resolution: {integrity: sha512-gcXoCN00METUNFeQOFJ+C9xUI0DKB+0EGMVg7wbVYRHBw2Eq3fKisDZOkRdOz3kqXRKOENMfShPOmypw1/8nOw==} @@ -5168,6 +4402,10 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -5443,10 +4681,6 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cache-content-type@1.0.1: - resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} - engines: {node: '>= 6.0.0'} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -5497,6 +4731,10 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@6.0.1: + resolution: {integrity: sha512-/Ce6KNm3vIbWdMlNna6RVIZ/ICQxnJxCicet5LBKK9ZffBkqzDw0xh9EiKSljdRtiIQ1S1z4YgcscUUGzNCWrA==} + engines: {node: '>=22'} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -5571,6 +4809,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + clone-deep@4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} @@ -5681,10 +4923,6 @@ packages: resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} engines: {node: '>= 0.10.0'} - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - content-disposition@1.0.1: resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} engines: {node: '>=18'} @@ -5718,9 +4956,6 @@ packages: core-js-compat@3.49.0: resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} - core-js@3.42.0: - resolution: {integrity: sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==} - cors@2.8.6: resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} @@ -5872,8 +5107,8 @@ packages: resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} engines: {node: '>=18'} - default-browser@5.5.0: - resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + default-browser@5.5.1: + resolution: {integrity: sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==} engines: {node: '>=18'} defaults@1.0.4: @@ -5983,6 +5218,9 @@ packages: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -6048,6 +5286,9 @@ packages: es-module-lexer@2.3.1: resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} + es-module-lexer@2.3.2: + resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} + es-object-atoms@1.1.2: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} @@ -6065,16 +5306,6 @@ packages: esast-util-from-js@2.0.1: resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.28.1: - resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} - engines: {node: '>=18'} - hasBin: true - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -6162,14 +5393,14 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + execa@10.1.0: + resolution: {integrity: sha512-5HT/600HqXEtmkb9mK/PkTWw+bQSCzPnWiZ4/87wD3Hi0wFzCapOuNT9p4M08PDd+KLHdHvFhKjOWmNx/npRNQ==} + engines: {node: '>=22'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - execa@9.6.1: - resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} - engines: {node: ^18.19.0 || >=20.5.0} - exit-hook@4.0.0: resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==} engines: {node: '>=18'} @@ -6545,10 +5776,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -6938,10 +6165,6 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -6954,6 +6177,10 @@ packages: engines: {node: '>=18'} hasBin: true + is-in-ssh@1.0.0: + resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==} + engines: {node: '>=20'} + is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -6979,10 +6206,6 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -7029,10 +6252,6 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} - isomorphic-rslog@0.0.7: - resolution: {integrity: sha512-n6/XnKnZ5eLEj6VllG4XmamXG7/F69nls8dcynHyhcTpsPUYgcgx4ifEaCo4lQJ2uzwfmIT+F0KBGwBcMKmt5g==} - engines: {node: '>=14.17.6'} - isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -7286,14 +6505,6 @@ packages: koa-compose@4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} - koa-convert@2.0.0: - resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} - engines: {node: '>= 10'} - - koa@2.16.4: - resolution: {integrity: sha512-3An0GCLDSR34tsCO4H8Tef8Pp2ngtaZDAZnsWJYelqXUK5wyiHvGItgK/xcSkmHLSTn1Jcho1mRQs2ehRzvKKw==} - engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} - koa@3.2.1: resolution: {integrity: sha512-e7IpWJrnanNUroVK2taAgMxoEZvHLXdQiNjeExSu/DEIWm83jaKGBgb7tLmu2rMYpA027qFB3iLR/k3AVpFRnA==} engines: {node: '>= 18'} @@ -7525,9 +6736,6 @@ packages: lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} - lodash@4.18.1: - resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - log-symbols@2.2.0: resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} engines: {node: '>=4'} @@ -7571,8 +6779,8 @@ packages: resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} engines: {node: '>=12'} - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@1.4.3: + resolution: {integrity: sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==} make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} @@ -7674,10 +6882,6 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - media-typer@1.1.1: resolution: {integrity: sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==} engines: {node: '>= 0.8'} @@ -8179,12 +7383,9 @@ packages: oniguruma-to-es@4.3.6: resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} - only@0.0.2: - resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} - - open@10.2.0: - resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} - engines: {node: '>=18'} + open@11.0.4: + resolution: {integrity: sha512-++Zlftm0kVLPmzC06t6epuWmcRMDbI4z5P3NNX979WA/k23+NtSOynEGzsVfZwguKw2mi5umVgnBlJQMwRz4Pg==} + engines: {node: '>=20'} open@6.4.0: resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} @@ -8331,9 +7532,6 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -8345,6 +7543,10 @@ packages: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -8455,6 +7657,14 @@ packages: resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.29: + resolution: {integrity: sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==} + engines: {node: ^10 || ^12 || >=14} + + powershell-utils@0.2.1: + resolution: {integrity: sha512-C+y9x90UElAddDZmV4qOx9W53B61PO7cIqWz2dQsWlwswuq4mr8NEwytdGKboYbQlGZ3awrkTeNvcZiZNHnQ8A==} + engines: {node: '>=20'} + preferred-pm@4.1.1: resolution: {integrity: sha512-rU+ZAv1Ur9jAUZtGPebQVQPzdGhNzaEiQ7VL9+cjsAWPHFYOccNXPNiev1CCDSOg/2j7UujM7ojNhpkuILEVNQ==} engines: {node: '>=18.12'} @@ -8476,8 +7686,8 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - pretty-ms@9.3.0: - resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + pretty-ms@9.3.1: + resolution: {integrity: sha512-HzMy3Geq23nVALD/M2LliU+F+M+gVNsvkQWWqeBZ8HDiCgzo6YPJ/Omrmtq24EFrIsk0a3EkQGEd7bDOo+IhGA==} engines: {node: '>=18'} proc-log@4.2.0: @@ -8939,18 +8149,18 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.62.2: - resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} + rolldown@1.2.13: + resolution: {integrity: sha512-/5apOkwWxtACcQtZ5WlrAsKS4JwXVThQPJZ3RqIruRY9UG9M8e0VlXN068xum/JRKA4aIUoJ13ghe/kGCvidiQ==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rsbuild-plugin-dts@0.6.9: - resolution: {integrity: sha512-mcB4mxfUqkHHzR5VV6PuXRGpLC1Gdly0BN/jRzbPmdWDtvfBO6LLOniiBzVVemibqs9gBQhl2OEilJs4Cyoq5w==} - engines: {node: '>=16.7.0'} + rsbuild-plugin-dts@1.0.3: + resolution: {integrity: sha512-wVxMYvWmVPam6SeZsz8OixHm+4JPfLJAAMTD0Q2te2SxksvjuHC3wuvU12teSmloQ3nFX1YC6guNzuYqDYw+vQ==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@microsoft/api-extractor': ^7 - '@rsbuild/core': 1.x - typescript: ^5 + '@rsbuild/core': ^2.0.0 + typescript: ^5 || ^6 || ^7 peerDependenciesMeta: '@microsoft/api-extractor': optional: true @@ -8965,9 +8175,6 @@ packages: '@rsbuild/core': optional: true - rslog@1.3.2: - resolution: {integrity: sha512-1YyYXBvN0a2b1MSIDLwDTqqgjDzRKxUg/S/+KO6EAgbtZW1B3fdLHAMhEEtvk1patJYMqcRvlp3HQwnxj7AdGQ==} - rslog@2.3.0: resolution: {integrity: sha512-g2wW/ermwzGTLlzGdJBDRc4YKz2/yPBjf57w9g5CvhtpZ91Xq95OaWku0oNHYi+XsuV6v8QrCo2oJJR/pCUR8g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -8988,10 +8195,6 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - safe-regex2@5.1.1: resolution: {integrity: sha512-mOSBvHGDZMuIEZMdOz/aCEYDCv0E7nfcNsIhUF+/P+xC7Hyf3FkvymqgPbg9D1EdSGu+uKbJgy09K/RKKc7kJA==} hasBin: true @@ -9117,9 +8320,6 @@ packages: resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} engines: {node: '>= 0.4'} - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -9219,9 +8419,6 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} @@ -9268,6 +8465,14 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string-width@8.3.0: + resolution: {integrity: sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==} + engines: {node: '>=20'} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -9375,27 +8580,49 @@ packages: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} - terser-webpack-plugin@5.5.0: - resolution: {integrity: sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==} + terser-webpack-plugin@5.6.1: + resolution: {integrity: sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==} engines: {node: '>= 10.13.0'} peerDependencies: + '@minify-html/node': '*' '@swc/core': '*' + '@swc/css': '*' + '@swc/html': '*' + clean-css: '*' + cssnano: '*' + csso: '*' esbuild: '*' + html-minifier-terser: '*' + lightningcss: '*' + postcss: '*' uglify-js: '*' webpack: ^5.1.0 peerDependenciesMeta: + '@minify-html/node': + optional: true '@swc/core': optional: true + '@swc/css': + optional: true + '@swc/html': + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true esbuild: optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true uglify-js: optional: true - terser@5.49.0: - resolution: {integrity: sha512-SNiDnXyHSrxVcIOtVbULzcTmniUiwcV7Nwdyj1twVubeTmbjoa8p69KKDpfkdoOavuM4/GRm1+ykI8qqnavHoA==} - engines: {node: '>=10'} - hasBin: true - terser@5.51.2: resolution: {integrity: sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==} engines: {node: '>=10'} @@ -9435,14 +8662,15 @@ packages: resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} engines: {node: '>=18'} - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinybench@6.2.1: + resolution: {integrity: sha512-IAbQaPJIIdhVxi0mqy9lez1wEwje0UQf9F1vwtbelEG5Nbgn0nPOxCvU+mNeNS9gyJTAhrHp74CbUaSynQpZcQ==} + engines: {node: '>=20.0.0'} tinycolor2@1.6.0: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - tinyexec@1.2.4: - resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + tinyexec@1.3.1: + resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==} engines: {node: '>=18'} tinyglobby@0.2.17: @@ -9452,10 +8680,6 @@ packages: tinygradient@1.1.5: resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} - tinyrainbow@3.1.0: - resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} - engines: {node: '>=14.0.0'} - tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -9495,10 +8719,6 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -9530,10 +8750,6 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - type-is@2.1.0: resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} engines: {node: '>= 18'} @@ -9697,15 +8913,16 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@7.3.6: - resolution: {integrity: sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==} + vite@8.3.4: + resolution: {integrity: sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.7.1 + esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 - lightningcss: ^1.21.0 sass: ^1.70.0 sass-embedded: ^1.70.0 stylus: '>=0.54.8' @@ -9716,12 +8933,14 @@ packages: peerDependenciesMeta: '@types/node': optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -9737,22 +8956,23 @@ packages: yaml: optional: true - vitest@4.1.11: - resolution: {integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + vitest@5.0.3: + resolution: {integrity: sha512-xMw97S3rjdtj5dkVat7jCsqWBpvchs3RlpQctUqwJD0KkERk40vz2fJ77lDwW/Vzh/pk18eItYAzkodhSes3jQ==} + engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.11 - '@vitest/browser-preview': 4.1.11 - '@vitest/browser-webdriverio': 4.1.11 - '@vitest/coverage-istanbul': 4.1.11 - '@vitest/coverage-v8': 4.1.11 - '@vitest/ui': 4.1.11 + '@types/node': ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 5.0.3 + '@vitest/browser-preview': 5.0.3 + '@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0 + '@vitest/coverage-istanbul': 5.0.3 + '@vitest/coverage-v8': 5.0.3 + '@vitest/ui': 5.0.3 happy-dom: '*' jsdom: '*' + vite: ^6.4.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -9837,6 +9057,11 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-command@0.1.0: + resolution: {integrity: sha512-XZyoF5/5hZtXitIwzrU4NKK+Wtbb9aB9CezUEw2Q0wlYK8NUYQxC1rRXgNueYLtBAJwXIb+/tFVk4dozciNJMA==} + engines: {node: '>=22'} + hasBin: true + which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} @@ -9857,9 +9082,9 @@ packages: engines: {node: '>= 8'} hasBin: true - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} + why-is-node-running@3.2.1: + resolution: {integrity: sha512-Tb2FUhB4vUsGQlfSquQLYkApkuPAFQXGFzxWKHHumVz2dK+X1RUm/HnID4+TfIGYJ1kTcwOaCk/buYCEJr6YjQ==} + engines: {node: '>=20.11'} hasBin: true wildcard@2.0.1: @@ -9873,6 +9098,10 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -9927,9 +9156,9 @@ packages: utf-8-validate: optional: true - wsl-utils@0.1.0: - resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} - engines: {node: '>=18'} + wsl-utils@1.0.1: + resolution: {integrity: sha512-c16PKLIRxBYpR3jSWsdS7SFp0COm5SOQdiFjY818dYFHJbMGuLBszpF07LBWmOS1uzrHa9VGdynsEgoeKy0oOQ==} + engines: {node: '>=20'} xcode@3.0.1: resolution: {integrity: sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==} @@ -9974,6 +9203,10 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} @@ -9982,9 +9215,9 @@ packages: resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} engines: {node: '>=12'} - ylru@1.4.0: - resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} - engines: {node: '>= 4.0.0'} + yargs@18.2.0: + resolution: {integrity: sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} @@ -9994,8 +9227,8 @@ packages: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} - yoctocolors@2.1.2: - resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + yoctocolors@2.2.0: + resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==} engines: {node: '>=18'} zod@3.25.76: @@ -10008,44 +9241,44 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@ast-grep/napi-darwin-arm64@0.37.0': + '@ast-grep/napi-darwin-arm64@0.45.3': optional: true - '@ast-grep/napi-darwin-x64@0.37.0': + '@ast-grep/napi-darwin-x64@0.45.3': optional: true - '@ast-grep/napi-linux-arm64-gnu@0.37.0': + '@ast-grep/napi-linux-arm64-gnu@0.45.3': optional: true - '@ast-grep/napi-linux-arm64-musl@0.37.0': + '@ast-grep/napi-linux-arm64-musl@0.45.3': optional: true - '@ast-grep/napi-linux-x64-gnu@0.37.0': + '@ast-grep/napi-linux-x64-gnu@0.45.3': optional: true - '@ast-grep/napi-linux-x64-musl@0.37.0': + '@ast-grep/napi-linux-x64-musl@0.45.3': optional: true - '@ast-grep/napi-win32-arm64-msvc@0.37.0': + '@ast-grep/napi-win32-arm64-msvc@0.45.3': optional: true - '@ast-grep/napi-win32-ia32-msvc@0.37.0': + '@ast-grep/napi-win32-ia32-msvc@0.45.3': optional: true - '@ast-grep/napi-win32-x64-msvc@0.37.0': + '@ast-grep/napi-win32-x64-msvc@0.45.3': optional: true - '@ast-grep/napi@0.37.0': + '@ast-grep/napi@0.45.3': optionalDependencies: - '@ast-grep/napi-darwin-arm64': 0.37.0 - '@ast-grep/napi-darwin-x64': 0.37.0 - '@ast-grep/napi-linux-arm64-gnu': 0.37.0 - '@ast-grep/napi-linux-arm64-musl': 0.37.0 - '@ast-grep/napi-linux-x64-gnu': 0.37.0 - '@ast-grep/napi-linux-x64-musl': 0.37.0 - '@ast-grep/napi-win32-arm64-msvc': 0.37.0 - '@ast-grep/napi-win32-ia32-msvc': 0.37.0 - '@ast-grep/napi-win32-x64-msvc': 0.37.0 + '@ast-grep/napi-darwin-arm64': 0.45.3 + '@ast-grep/napi-darwin-x64': 0.45.3 + '@ast-grep/napi-linux-arm64-gnu': 0.45.3 + '@ast-grep/napi-linux-arm64-musl': 0.45.3 + '@ast-grep/napi-linux-x64-gnu': 0.45.3 + '@ast-grep/napi-linux-x64-musl': 0.45.3 + '@ast-grep/napi-win32-arm64-msvc': 0.45.3 + '@ast-grep/napi-win32-ia32-msvc': 0.45.3 + '@ast-grep/napi-win32-x64-msvc': 0.45.3 '@babel/cli@7.29.7(@babel/core@7.29.7)': dependencies: @@ -10991,13 +10224,13 @@ snapshots: '@biomejs/cli-win32-x64@2.5.6': optional: true - '@callstack/rspress-preset@0.6.0(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(core-js@3.42.0)(micromark-util-types@2.0.2)(micromark@4.0.2))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@callstack/rspress-preset@0.6.0(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@callstack/rspress-theme': 0.6.0(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(core-js@3.42.0)(micromark-util-types@2.0.2)(micromark@4.0.2))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@rspress/core': 2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(core-js@3.42.0)(micromark-util-types@2.0.2)(micromark@4.0.2) - '@rspress/plugin-sitemap': 2.0.18(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(core-js@3.42.0)(micromark-util-types@2.0.2)(micromark@4.0.2)) + '@callstack/rspress-theme': 0.6.0(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@rspress/core': 2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2) + '@rspress/plugin-sitemap': 2.0.18(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2)) '@vercel/analytics': 1.6.1(react@19.2.8) - rsbuild-plugin-open-graph: 1.1.3(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0)) + rsbuild-plugin-open-graph: 1.1.3(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)) zod: 3.25.76 transitivePeerDependencies: - '@remix-run/react' @@ -11010,9 +10243,9 @@ snapshots: - vue - vue-router - '@callstack/rspress-theme@0.6.0(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(core-js@3.42.0)(micromark-util-types@2.0.2)(micromark@4.0.2))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@callstack/rspress-theme@0.6.0(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@rspress/core': 2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(core-js@3.42.0)(micromark-util-types@2.0.2)(micromark@4.0.2) + '@rspress/core': 2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) @@ -11167,197 +10400,44 @@ snapshots: '@changesets/types@6.1.0': {} - '@changesets/write@0.4.0': - dependencies: - '@changesets/types': 6.1.0 - fs-extra: 7.0.1 - human-id: 4.2.0 - prettier: 2.8.8 - - '@clack/core@0.4.1': - dependencies: - picocolors: 1.1.1 - sisteransi: 1.0.5 - - '@clack/prompts@0.9.1': - dependencies: - '@clack/core': 0.4.1 - picocolors: 1.1.1 - sisteransi: 1.0.5 - - '@discoveryjs/json-ext@0.5.7': {} - - '@egjs/hammerjs@2.0.17': - dependencies: - '@types/hammerjs': 2.0.46 - - '@emnapi/core@1.11.3': - dependencies: - '@emnapi/wasi-threads': 1.2.3 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.11.3': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.2.3': - dependencies: - tslib: 2.8.1 - optional: true - - '@esbuild/aix-ppc64@0.25.5': - optional: true - - '@esbuild/aix-ppc64@0.28.1': - optional: true - - '@esbuild/android-arm64@0.25.5': - optional: true - - '@esbuild/android-arm64@0.28.1': - optional: true - - '@esbuild/android-arm@0.25.5': - optional: true - - '@esbuild/android-arm@0.28.1': - optional: true - - '@esbuild/android-x64@0.25.5': - optional: true - - '@esbuild/android-x64@0.28.1': - optional: true - - '@esbuild/darwin-arm64@0.25.5': - optional: true - - '@esbuild/darwin-arm64@0.28.1': - optional: true - - '@esbuild/darwin-x64@0.25.5': - optional: true - - '@esbuild/darwin-x64@0.28.1': - optional: true - - '@esbuild/freebsd-arm64@0.25.5': - optional: true - - '@esbuild/freebsd-arm64@0.28.1': - optional: true - - '@esbuild/freebsd-x64@0.25.5': - optional: true - - '@esbuild/freebsd-x64@0.28.1': - optional: true - - '@esbuild/linux-arm64@0.25.5': - optional: true - - '@esbuild/linux-arm64@0.28.1': - optional: true - - '@esbuild/linux-arm@0.25.5': - optional: true - - '@esbuild/linux-arm@0.28.1': - optional: true - - '@esbuild/linux-ia32@0.25.5': - optional: true - - '@esbuild/linux-ia32@0.28.1': - optional: true - - '@esbuild/linux-loong64@0.25.5': - optional: true - - '@esbuild/linux-loong64@0.28.1': - optional: true - - '@esbuild/linux-mips64el@0.25.5': - optional: true - - '@esbuild/linux-mips64el@0.28.1': - optional: true - - '@esbuild/linux-ppc64@0.25.5': - optional: true - - '@esbuild/linux-ppc64@0.28.1': - optional: true - - '@esbuild/linux-riscv64@0.25.5': - optional: true - - '@esbuild/linux-riscv64@0.28.1': - optional: true - - '@esbuild/linux-s390x@0.25.5': - optional: true - - '@esbuild/linux-s390x@0.28.1': - optional: true - - '@esbuild/linux-x64@0.25.5': - optional: true - - '@esbuild/linux-x64@0.28.1': - optional: true - - '@esbuild/netbsd-arm64@0.25.5': - optional: true - - '@esbuild/netbsd-arm64@0.28.1': - optional: true - - '@esbuild/netbsd-x64@0.25.5': - optional: true - - '@esbuild/netbsd-x64@0.28.1': - optional: true - - '@esbuild/openbsd-arm64@0.25.5': - optional: true - - '@esbuild/openbsd-arm64@0.28.1': - optional: true - - '@esbuild/openbsd-x64@0.25.5': - optional: true - - '@esbuild/openbsd-x64@0.28.1': - optional: true - - '@esbuild/openharmony-arm64@0.28.1': - optional: true - - '@esbuild/sunos-x64@0.25.5': - optional: true + '@changesets/write@0.4.0': + dependencies: + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + human-id: 4.2.0 + prettier: 2.8.8 - '@esbuild/sunos-x64@0.28.1': - optional: true + '@clack/core@0.4.1': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 - '@esbuild/win32-arm64@0.25.5': - optional: true + '@clack/prompts@0.9.1': + dependencies: + '@clack/core': 0.4.1 + picocolors: 1.1.1 + sisteransi: 1.0.5 - '@esbuild/win32-arm64@0.28.1': - optional: true + '@discoveryjs/json-ext@0.5.7': {} - '@esbuild/win32-ia32@0.25.5': - optional: true + '@egjs/hammerjs@2.0.17': + dependencies: + '@types/hammerjs': 2.0.46 - '@esbuild/win32-ia32@0.28.1': + '@emnapi/core@1.11.3': + dependencies: + '@emnapi/wasi-threads': 1.2.3 + tslib: 2.8.1 optional: true - '@esbuild/win32-x64@0.25.5': + '@emnapi/runtime@1.11.3': + dependencies: + tslib: 2.8.1 optional: true - '@esbuild/win32-x64@0.28.1': + '@emnapi/wasi-threads@1.2.3': + dependencies: + tslib: 2.8.1 optional: true '@expo-google-fonts/material-symbols@0.4.49': {} @@ -11425,7 +10505,7 @@ snapshots: ws: 8.21.1 zod: 3.25.76 optionalDependencies: - expo-router: 57.0.25(070bba2580d5a65057f5194baa7f9812) + expo-router: 57.0.25(e065c737c32861a7840897c5f802228a) react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8) transitivePeerDependencies: - '@expo/metro-runtime' @@ -11502,7 +10582,7 @@ snapshots: ws: 8.21.1 zod: 3.25.76 optionalDependencies: - expo-router: 57.0.25(66ea6cfd90df0a40c40648bd22be227d) + expo-router: 57.0.25(b78e73ef552e7de7587f9ac112282727) react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8) transitivePeerDependencies: - '@expo/metro-runtime' @@ -11820,7 +10900,7 @@ snapshots: react: 19.2.8 optionalDependencies: '@expo/metro-runtime': 57.0.16(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - expo-router: 57.0.25(070bba2580d5a65057f5194baa7f9812) + expo-router: 57.0.25(e065c737c32861a7840897c5f802228a) react-dom: 19.2.8(react@19.2.8) transitivePeerDependencies: - supports-color @@ -11835,13 +10915,13 @@ snapshots: '@expo/sudo-prompt@9.3.2': {} - '@expo/ui@57.0.22(@babel/core@7.29.7)(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8)': + '@expo/ui@57.0.22(@babel/core@7.29.7)(@types/react@19.2.17)(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8)': dependencies: expo: 57.0.27(@babel/core@7.29.7)(@expo/metro-runtime@57.0.16)(expo-router@57.0.25)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8)(typescript@7.0.2) react: 19.2.8 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8) sf-symbols-typescript: 2.2.0 - vaul: 1.1.2(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + vaul: 1.1.2(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) optionalDependencies: '@babel/core': 7.29.7 react-dom: 19.2.8(react@19.2.8) @@ -11850,13 +10930,13 @@ snapshots: - '@types/react' - '@types/react-dom' - '@expo/ui@57.0.22(@babel/core@7.29.7)(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8)': + '@expo/ui@57.0.22(@babel/core@7.29.7)(@types/react@19.3.0)(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8)': dependencies: expo: 57.0.27(@babel/core@7.29.7)(@expo/metro-runtime@57.0.16)(expo-router@57.0.25)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8)(typescript@7.0.2) react: 19.2.8 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8) sf-symbols-typescript: 2.2.0 - vaul: 1.1.2(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + vaul: 1.1.2(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) optionalDependencies: '@babel/core': 7.29.7 react-dom: 19.2.8(react@19.2.8) @@ -11946,7 +11026,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 26.1.1 + '@types/node': 22.20.5 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -11959,14 +11039,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 26.1.1 + '@types/node': 22.20.5 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@26.1.1) + jest-config: 29.7.0(@types/node@22.20.5) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -11991,7 +11071,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 26.1.1 + '@types/node': 22.20.5 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -12009,7 +11089,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 26.1.1 + '@types/node': 22.20.5 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12031,7 +11111,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 26.1.1 + '@types/node': 22.20.5 chalk: 4.1.2 collect-v8-coverage: 1.0.3 exit: 0.1.2 @@ -12104,7 +11184,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 26.1.1 + '@types/node': 22.20.5 '@types/yargs': 15.0.20 chalk: 4.1.2 @@ -12113,7 +11193,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 26.1.1 + '@types/node': 22.20.5 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -12136,6 +11216,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/sourcemap-codec@1.6.0': {} + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -12278,9 +11360,9 @@ snapshots: find-up: 4.1.0 fs-extra: 8.1.0 - '@manypkg/find-root@2.2.3': + '@manypkg/find-root@3.1.0': dependencies: - '@manypkg/tools': 1.1.2 + '@manypkg/tools': 2.1.2 '@manypkg/get-packages@1.1.3': dependencies: @@ -12291,11 +11373,11 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@manypkg/tools@1.1.2': + '@manypkg/tools@2.1.2': dependencies: - fast-glob: 3.3.3 jju: 1.4.0 - js-yaml: 4.3.2 + tinyglobby: 0.2.17 + yaml: 2.9.0 '@mdx-js/mdx@3.1.1': dependencies: @@ -12303,7 +11385,7 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdx': 2.0.14 - acorn: 8.17.0 + acorn: 8.19.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 @@ -12312,7 +11394,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.17.0) + recma-jsx: 1.0.1(acorn@8.19.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 remark-mdx: 3.1.1 @@ -12333,50 +11415,6 @@ snapshots: '@types/react': 19.3.0 react: 19.2.8 - '@modern-js/node-bundle-require@2.67.6': - dependencies: - '@modern-js/utils': 2.67.6 - '@swc/helpers': 0.5.23 - esbuild: 0.25.5 - - '@modern-js/node-bundle-require@2.68.2': - dependencies: - '@modern-js/utils': 2.68.2 - '@swc/helpers': 0.5.23 - esbuild: 0.25.5 - - '@modern-js/utils@2.67.6': - dependencies: - '@swc/helpers': 0.5.23 - caniuse-lite: 1.0.30001806 - lodash: 4.18.1 - rslog: 1.3.2 - - '@modern-js/utils@2.68.2': - dependencies: - '@swc/helpers': 0.5.23 - caniuse-lite: 1.0.30001806 - lodash: 4.18.1 - rslog: 1.3.2 - - '@module-federation/bridge-react-webpack-plugin@0.15.0': - dependencies: - '@module-federation/sdk': 0.15.0 - '@types/semver': 7.5.8 - semver: 7.6.3 - - '@module-federation/bridge-react-webpack-plugin@0.21.0': - dependencies: - '@module-federation/sdk': 0.21.0 - '@types/semver': 7.5.8 - semver: 7.6.3 - - '@module-federation/bridge-react-webpack-plugin@0.8.9': - dependencies: - '@module-federation/sdk': 0.8.9 - '@types/semver': 7.5.8 - semver: 7.6.3 - '@module-federation/bridge-react-webpack-plugin@2.0.1': dependencies: '@module-federation/sdk': 2.0.1 @@ -12387,36 +11425,6 @@ snapshots: dependencies: '@module-federation/sdk': 2.9.2 - '@module-federation/cli@0.15.0(typescript@7.0.2)': - dependencies: - '@modern-js/node-bundle-require': 2.67.6 - '@module-federation/dts-plugin': 0.15.0(typescript@7.0.2) - '@module-federation/sdk': 0.15.0 - chalk: 3.0.0 - commander: 11.1.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - typescript - - utf-8-validate - - vue-tsc - - '@module-federation/cli@0.21.0(typescript@7.0.2)': - dependencies: - '@modern-js/node-bundle-require': 2.68.2 - '@module-federation/dts-plugin': 0.21.0(typescript@7.0.2) - '@module-federation/sdk': 0.21.0 - chalk: 3.0.0 - commander: 11.1.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - typescript - - utf-8-validate - - vue-tsc - '@module-federation/cli@2.0.1(typescript@7.0.2)': dependencies: '@module-federation/dts-plugin': 2.0.1(typescript@7.0.2) @@ -12444,30 +11452,6 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/data-prefetch@0.15.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': - dependencies: - '@module-federation/runtime': 0.15.0 - '@module-federation/sdk': 0.15.0 - fs-extra: 9.1.0 - react: 19.2.8 - react-dom: 19.2.8(react@19.2.8) - - '@module-federation/data-prefetch@0.21.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': - dependencies: - '@module-federation/runtime': 0.21.0 - '@module-federation/sdk': 0.21.0 - fs-extra: 9.1.0 - react: 19.2.8 - react-dom: 19.2.8(react@19.2.8) - - '@module-federation/data-prefetch@0.8.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': - dependencies: - '@module-federation/runtime': 0.8.9 - '@module-federation/sdk': 0.8.9 - fs-extra: 9.1.0 - react: 19.2.8 - react-dom: 19.2.8(react@19.2.8) - '@module-federation/data-prefetch@2.0.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@module-federation/runtime': 2.0.1 @@ -12477,81 +11461,6 @@ snapshots: react: 19.2.8 react-dom: 19.2.8(react@19.2.8) - '@module-federation/dts-plugin@0.15.0(typescript@7.0.2)': - dependencies: - '@module-federation/error-codes': 0.15.0 - '@module-federation/managers': 0.15.0 - '@module-federation/sdk': 0.15.0 - '@module-federation/third-party-dts-extractor': 0.15.0 - adm-zip: 0.6.1 - ansi-colors: 4.1.3 - axios: 1.20.0 - chalk: 3.0.0 - fs-extra: 9.1.0 - isomorphic-ws: 5.0.0(ws@8.21.3) - koa: 2.16.4 - lodash.clonedeepwith: 4.5.0 - log4js: 6.9.1 - node-schedule: 2.1.1 - rambda: 9.4.2 - typescript: 7.0.2 - ws: 8.21.3 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - - '@module-federation/dts-plugin@0.21.0(typescript@7.0.2)': - dependencies: - '@module-federation/error-codes': 0.21.0 - '@module-federation/managers': 0.21.0 - '@module-federation/sdk': 0.21.0 - '@module-federation/third-party-dts-extractor': 0.21.0 - adm-zip: 0.6.1 - ansi-colors: 4.1.3 - axios: 1.20.0 - chalk: 3.0.0 - fs-extra: 9.1.0 - isomorphic-ws: 5.0.0(ws@8.21.3) - koa: 3.2.1 - lodash.clonedeepwith: 4.5.0 - log4js: 6.9.1 - node-schedule: 2.1.1 - rambda: 9.4.2 - typescript: 7.0.2 - ws: 8.21.3 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - - '@module-federation/dts-plugin@0.8.9(typescript@7.0.2)': - dependencies: - '@module-federation/error-codes': 0.8.9 - '@module-federation/managers': 0.8.9 - '@module-federation/sdk': 0.8.9 - '@module-federation/third-party-dts-extractor': 0.8.9 - adm-zip: 0.6.1 - ansi-colors: 4.1.3 - axios: 1.20.0 - chalk: 3.0.0 - fs-extra: 9.1.0 - isomorphic-ws: 5.0.0(ws@8.21.3) - koa: 2.16.4 - lodash.clonedeepwith: 4.5.0 - log4js: 6.9.1 - node-schedule: 2.1.1 - rambda: 9.4.2 - typescript: 7.0.2 - ws: 8.21.3 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - '@module-federation/dts-plugin@2.0.1(typescript@7.0.2)': dependencies: '@module-federation/error-codes': 2.0.1 @@ -12592,88 +11501,6 @@ snapshots: - bufferutil - utf-8-validate - '@module-federation/enhanced@0.15.0(@rspack/core@1.6.0(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@7.0.2)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)))': - dependencies: - '@module-federation/bridge-react-webpack-plugin': 0.15.0 - '@module-federation/cli': 0.15.0(typescript@7.0.2) - '@module-federation/data-prefetch': 0.15.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@module-federation/dts-plugin': 0.15.0(typescript@7.0.2) - '@module-federation/error-codes': 0.15.0 - '@module-federation/inject-external-runtime-core-plugin': 0.15.0(@module-federation/runtime-tools@0.15.0) - '@module-federation/managers': 0.15.0 - '@module-federation/manifest': 0.15.0(typescript@7.0.2) - '@module-federation/rspack': 0.15.0(@rspack/core@1.6.0(@swc/helpers@0.5.23))(typescript@7.0.2) - '@module-federation/runtime-tools': 0.15.0 - '@module-federation/sdk': 0.15.0 - btoa: 1.2.1 - schema-utils: 4.3.3 - upath: 2.0.1 - optionalDependencies: - typescript: 7.0.2 - webpack: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)) - transitivePeerDependencies: - - '@rspack/core' - - bufferutil - - debug - - react - - react-dom - - supports-color - - utf-8-validate - - '@module-federation/enhanced@0.21.0(@rspack/core@1.6.0(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@7.0.2)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)))': - dependencies: - '@module-federation/bridge-react-webpack-plugin': 0.21.0 - '@module-federation/cli': 0.21.0(typescript@7.0.2) - '@module-federation/data-prefetch': 0.21.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@module-federation/dts-plugin': 0.21.0(typescript@7.0.2) - '@module-federation/error-codes': 0.21.0 - '@module-federation/inject-external-runtime-core-plugin': 0.21.0(@module-federation/runtime-tools@0.21.0) - '@module-federation/managers': 0.21.0 - '@module-federation/manifest': 0.21.0(typescript@7.0.2) - '@module-federation/rspack': 0.21.0(@rspack/core@1.6.0(@swc/helpers@0.5.23))(typescript@7.0.2) - '@module-federation/runtime-tools': 0.21.0 - '@module-federation/sdk': 0.21.0 - btoa: 1.2.1 - schema-utils: 4.3.3 - upath: 2.0.1 - optionalDependencies: - typescript: 7.0.2 - webpack: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)) - transitivePeerDependencies: - - '@rspack/core' - - bufferutil - - debug - - react - - react-dom - - supports-color - - utf-8-validate - - '@module-federation/enhanced@0.8.9(@rspack/core@1.6.0(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@7.0.2)(webpack@5.105.4)': - dependencies: - '@module-federation/bridge-react-webpack-plugin': 0.8.9 - '@module-federation/data-prefetch': 0.8.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@module-federation/dts-plugin': 0.8.9(typescript@7.0.2) - '@module-federation/error-codes': 0.8.9 - '@module-federation/inject-external-runtime-core-plugin': 0.8.9(@module-federation/runtime-tools@0.8.9) - '@module-federation/managers': 0.8.9 - '@module-federation/manifest': 0.8.9(typescript@7.0.2) - '@module-federation/rspack': 0.8.9(@rspack/core@1.6.0(@swc/helpers@0.5.23))(typescript@7.0.2) - '@module-federation/runtime-tools': 0.8.9 - '@module-federation/sdk': 0.8.9 - btoa: 1.2.1 - upath: 2.0.1 - optionalDependencies: - typescript: 7.0.2 - webpack: 5.105.4 - transitivePeerDependencies: - - '@rspack/core' - - bufferutil - - debug - - react - - react-dom - - supports-color - - utf-8-validate - '@module-federation/enhanced@2.0.1(@rspack/core@1.6.0(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@7.0.2)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)))': dependencies: '@module-federation/bridge-react-webpack-plugin': 2.0.1 @@ -12725,32 +11552,12 @@ snapshots: - bufferutil - utf-8-validate - '@module-federation/error-codes@0.13.1': {} - - '@module-federation/error-codes@0.15.0': {} - - '@module-federation/error-codes@0.21.0': {} - '@module-federation/error-codes@0.21.2': {} - '@module-federation/error-codes@0.8.9': {} - '@module-federation/error-codes@2.0.1': {} '@module-federation/error-codes@2.9.2': {} - '@module-federation/inject-external-runtime-core-plugin@0.15.0(@module-federation/runtime-tools@0.15.0)': - dependencies: - '@module-federation/runtime-tools': 0.15.0 - - '@module-federation/inject-external-runtime-core-plugin@0.21.0(@module-federation/runtime-tools@0.21.0)': - dependencies: - '@module-federation/runtime-tools': 0.21.0 - - '@module-federation/inject-external-runtime-core-plugin@0.8.9(@module-federation/runtime-tools@0.8.9)': - dependencies: - '@module-federation/runtime-tools': 0.8.9 - '@module-federation/inject-external-runtime-core-plugin@2.0.1(@module-federation/runtime-tools@2.0.1)': dependencies: '@module-federation/runtime-tools': 2.0.1 @@ -12759,78 +11566,15 @@ snapshots: dependencies: '@module-federation/runtime-tools': 2.9.2 - '@module-federation/managers@0.15.0': - dependencies: - '@module-federation/sdk': 0.15.0 - find-pkg: 2.0.0 - fs-extra: 9.1.0 - - '@module-federation/managers@0.21.0': - dependencies: - '@module-federation/sdk': 0.21.0 - find-pkg: 2.0.0 - fs-extra: 9.1.0 - - '@module-federation/managers@0.8.9': - dependencies: - '@module-federation/sdk': 0.8.9 - find-pkg: 2.0.0 - fs-extra: 9.1.0 - - '@module-federation/managers@2.0.1': - dependencies: - '@module-federation/sdk': 2.0.1 - find-pkg: 2.0.0 - fs-extra: 9.1.0 - - '@module-federation/managers@2.9.2': - dependencies: - '@module-federation/sdk': 2.9.2 - - '@module-federation/manifest@0.15.0(typescript@7.0.2)': - dependencies: - '@module-federation/dts-plugin': 0.15.0(typescript@7.0.2) - '@module-federation/managers': 0.15.0 - '@module-federation/sdk': 0.15.0 - chalk: 3.0.0 - find-pkg: 2.0.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - typescript - - utf-8-validate - - vue-tsc - - '@module-federation/manifest@0.21.0(typescript@7.0.2)': + '@module-federation/managers@2.0.1': dependencies: - '@module-federation/dts-plugin': 0.21.0(typescript@7.0.2) - '@module-federation/managers': 0.21.0 - '@module-federation/sdk': 0.21.0 - chalk: 3.0.0 + '@module-federation/sdk': 2.0.1 find-pkg: 2.0.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - typescript - - utf-8-validate - - vue-tsc + fs-extra: 9.1.0 - '@module-federation/manifest@0.8.9(typescript@7.0.2)': + '@module-federation/managers@2.9.2': dependencies: - '@module-federation/dts-plugin': 0.8.9(typescript@7.0.2) - '@module-federation/managers': 0.8.9 - '@module-federation/sdk': 0.8.9 - chalk: 3.0.0 - find-pkg: 2.0.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - typescript - - utf-8-validate - - vue-tsc + '@module-federation/sdk': 2.9.2 '@module-federation/manifest@2.0.1(typescript@7.0.2)': dependencies: @@ -12858,62 +11602,6 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/rspack@0.15.0(@rspack/core@1.6.0(@swc/helpers@0.5.23))(typescript@7.0.2)': - dependencies: - '@module-federation/bridge-react-webpack-plugin': 0.15.0 - '@module-federation/dts-plugin': 0.15.0(typescript@7.0.2) - '@module-federation/inject-external-runtime-core-plugin': 0.15.0(@module-federation/runtime-tools@0.15.0) - '@module-federation/managers': 0.15.0 - '@module-federation/manifest': 0.15.0(typescript@7.0.2) - '@module-federation/runtime-tools': 0.15.0 - '@module-federation/sdk': 0.15.0 - '@rspack/core': 1.6.0(@swc/helpers@0.5.23) - btoa: 1.2.1 - optionalDependencies: - typescript: 7.0.2 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - - '@module-federation/rspack@0.21.0(@rspack/core@1.6.0(@swc/helpers@0.5.23))(typescript@7.0.2)': - dependencies: - '@module-federation/bridge-react-webpack-plugin': 0.21.0 - '@module-federation/dts-plugin': 0.21.0(typescript@7.0.2) - '@module-federation/inject-external-runtime-core-plugin': 0.21.0(@module-federation/runtime-tools@0.21.0) - '@module-federation/managers': 0.21.0 - '@module-federation/manifest': 0.21.0(typescript@7.0.2) - '@module-federation/runtime-tools': 0.21.0 - '@module-federation/sdk': 0.21.0 - '@rspack/core': 1.6.0(@swc/helpers@0.5.23) - btoa: 1.2.1 - optionalDependencies: - typescript: 7.0.2 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - - '@module-federation/rspack@0.8.9(@rspack/core@1.6.0(@swc/helpers@0.5.23))(typescript@7.0.2)': - dependencies: - '@module-federation/bridge-react-webpack-plugin': 0.8.9 - '@module-federation/dts-plugin': 0.8.9(typescript@7.0.2) - '@module-federation/inject-external-runtime-core-plugin': 0.8.9(@module-federation/runtime-tools@0.8.9) - '@module-federation/managers': 0.8.9 - '@module-federation/manifest': 0.8.9(typescript@7.0.2) - '@module-federation/runtime-tools': 0.8.9 - '@module-federation/sdk': 0.8.9 - '@rspack/core': 1.6.0(@swc/helpers@0.5.23) - optionalDependencies: - typescript: 7.0.2 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - '@module-federation/rspack@2.0.1(@rspack/core@1.6.0(@swc/helpers@0.5.23))(typescript@7.0.2)': dependencies: '@module-federation/bridge-react-webpack-plugin': 2.0.1 @@ -12949,31 +11637,11 @@ snapshots: - bufferutil - utf-8-validate - '@module-federation/runtime-core@0.13.1': - dependencies: - '@module-federation/error-codes': 0.13.1 - '@module-federation/sdk': 0.13.1 - - '@module-federation/runtime-core@0.15.0': - dependencies: - '@module-federation/error-codes': 0.15.0 - '@module-federation/sdk': 0.15.0 - - '@module-federation/runtime-core@0.21.0': - dependencies: - '@module-federation/error-codes': 0.21.0 - '@module-federation/sdk': 0.21.0 - '@module-federation/runtime-core@0.21.2': dependencies: '@module-federation/error-codes': 0.21.2 '@module-federation/sdk': 0.21.2 - '@module-federation/runtime-core@0.6.17': - dependencies: - '@module-federation/error-codes': 0.8.9 - '@module-federation/sdk': 0.8.9 - '@module-federation/runtime-core@2.0.1': dependencies: '@module-federation/error-codes': 2.0.1 @@ -12984,31 +11652,11 @@ snapshots: '@module-federation/error-codes': 2.9.2 '@module-federation/sdk': 2.9.2 - '@module-federation/runtime-tools@0.13.1': - dependencies: - '@module-federation/runtime': 0.13.1 - '@module-federation/webpack-bundler-runtime': 0.13.1 - - '@module-federation/runtime-tools@0.15.0': - dependencies: - '@module-federation/runtime': 0.15.0 - '@module-federation/webpack-bundler-runtime': 0.15.0 - - '@module-federation/runtime-tools@0.21.0': - dependencies: - '@module-federation/runtime': 0.21.0 - '@module-federation/webpack-bundler-runtime': 0.21.0 - '@module-federation/runtime-tools@0.21.2': dependencies: '@module-federation/runtime': 0.21.2 '@module-federation/webpack-bundler-runtime': 0.21.2 - '@module-federation/runtime-tools@0.8.9': - dependencies: - '@module-federation/runtime': 0.8.9 - '@module-federation/webpack-bundler-runtime': 0.8.9 - '@module-federation/runtime-tools@2.0.1': dependencies: '@module-federation/runtime': 2.0.1 @@ -13019,36 +11667,12 @@ snapshots: '@module-federation/runtime': 2.9.2 '@module-federation/webpack-bundler-runtime': 2.9.2 - '@module-federation/runtime@0.13.1': - dependencies: - '@module-federation/error-codes': 0.13.1 - '@module-federation/runtime-core': 0.13.1 - '@module-federation/sdk': 0.13.1 - - '@module-federation/runtime@0.15.0': - dependencies: - '@module-federation/error-codes': 0.15.0 - '@module-federation/runtime-core': 0.15.0 - '@module-federation/sdk': 0.15.0 - - '@module-federation/runtime@0.21.0': - dependencies: - '@module-federation/error-codes': 0.21.0 - '@module-federation/runtime-core': 0.21.0 - '@module-federation/sdk': 0.21.0 - '@module-federation/runtime@0.21.2': dependencies: '@module-federation/error-codes': 0.21.2 '@module-federation/runtime-core': 0.21.2 '@module-federation/sdk': 0.21.2 - '@module-federation/runtime@0.8.9': - dependencies: - '@module-federation/error-codes': 0.8.9 - '@module-federation/runtime-core': 0.6.17 - '@module-federation/sdk': 0.8.9 - '@module-federation/runtime@2.0.1': dependencies: '@module-federation/error-codes': 2.0.1 @@ -13061,41 +11685,13 @@ snapshots: '@module-federation/runtime-core': 2.9.2 '@module-federation/sdk': 2.9.2 - '@module-federation/sdk@0.13.1': {} - - '@module-federation/sdk@0.15.0': {} - - '@module-federation/sdk@0.21.0': {} - '@module-federation/sdk@0.21.2': {} - '@module-federation/sdk@0.6.10': {} - - '@module-federation/sdk@0.8.9': - dependencies: - isomorphic-rslog: 0.0.7 - '@module-federation/sdk@2.0.1': {} - '@module-federation/sdk@2.9.2': {} - - '@module-federation/third-party-dts-extractor@0.15.0': - dependencies: - find-pkg: 2.0.0 - fs-extra: 9.1.0 - resolve: 1.22.8 - - '@module-federation/third-party-dts-extractor@0.21.0': - dependencies: - find-pkg: 2.0.0 - fs-extra: 9.1.0 - resolve: 1.22.8 + '@module-federation/sdk@2.8.0': {} - '@module-federation/third-party-dts-extractor@0.8.9': - dependencies: - find-pkg: 2.0.0 - fs-extra: 9.1.0 - resolve: 1.22.8 + '@module-federation/sdk@2.9.2': {} '@module-federation/third-party-dts-extractor@2.0.1': dependencies: @@ -13105,31 +11701,11 @@ snapshots: '@module-federation/third-party-dts-extractor@2.9.2': {} - '@module-federation/webpack-bundler-runtime@0.13.1': - dependencies: - '@module-federation/runtime': 0.13.1 - '@module-federation/sdk': 0.13.1 - - '@module-federation/webpack-bundler-runtime@0.15.0': - dependencies: - '@module-federation/runtime': 0.15.0 - '@module-federation/sdk': 0.15.0 - - '@module-federation/webpack-bundler-runtime@0.21.0': - dependencies: - '@module-federation/runtime': 0.21.0 - '@module-federation/sdk': 0.21.0 - '@module-federation/webpack-bundler-runtime@0.21.2': dependencies: '@module-federation/runtime': 0.21.2 '@module-federation/sdk': 0.21.2 - '@module-federation/webpack-bundler-runtime@0.8.9': - dependencies: - '@module-federation/runtime': 0.8.9 - '@module-federation/sdk': 0.8.9 - '@module-federation/webpack-bundler-runtime@2.0.1': dependencies: '@module-federation/runtime': 2.0.1 @@ -13179,33 +11755,33 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@oxc-project/types@0.153.0': {} + '@pinojs/redact@0.4.0': {} '@radix-ui/primitive@1.1.7': {} - '@radix-ui/react-collection@1.1.16(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-collection@1.1.16(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.17)(react@19.2.8) '@radix-ui/react-context': 1.2.2(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-slot': 1.4.0(@types/react@19.2.17)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.2.17 - '@types/react-dom': 17.0.26(@types/react@19.2.17) - '@radix-ui/react-collection@1.1.16(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-collection@1.1.16(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.3.0)(react@19.2.8) '@radix-ui/react-context': 1.2.2(@types/react@19.3.0)(react@19.2.8) - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-slot': 1.4.0(@types/react@19.3.0)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.3.0 - '@types/react-dom': 17.0.26(@types/react@19.3.0) '@radix-ui/react-compose-refs@1.1.5(@types/react@19.2.17)(react@19.2.8)': dependencies: @@ -13231,18 +11807,18 @@ snapshots: optionalDependencies: '@types/react': 19.3.0 - '@radix-ui/react-dialog@1.2.0(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-dialog@1.2.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/primitive': 1.1.7 '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.17)(react@19.2.8) '@radix-ui/react-context': 1.2.2(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-dismissable-layer': 1.1.20(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-dismissable-layer': 1.1.20(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-focus-guards': 1.1.6(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-focus-scope': 1.2.0(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-focus-scope': 1.2.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-id': 1.1.4(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-portal': 1.1.18(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-presence': 1.1.11(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-portal': 1.1.18(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-presence': 1.1.11(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-slot': 1.4.0(@types/react@19.2.17)(react@19.2.8) '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.17)(react@19.2.8) '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.17)(react@19.2.8) @@ -13252,20 +11828,19 @@ snapshots: react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.8) optionalDependencies: '@types/react': 19.2.17 - '@types/react-dom': 17.0.26(@types/react@19.2.17) - '@radix-ui/react-dialog@1.2.0(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-dialog@1.2.0(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/primitive': 1.1.7 '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.3.0)(react@19.2.8) '@radix-ui/react-context': 1.2.2(@types/react@19.3.0)(react@19.2.8) - '@radix-ui/react-dismissable-layer': 1.1.20(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-dismissable-layer': 1.1.20(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-focus-guards': 1.1.6(@types/react@19.3.0)(react@19.2.8) - '@radix-ui/react-focus-scope': 1.2.0(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-focus-scope': 1.2.0(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-id': 1.1.4(@types/react@19.3.0)(react@19.2.8) - '@radix-ui/react-portal': 1.1.18(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-presence': 1.1.11(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-portal': 1.1.18(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-presence': 1.1.11(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-slot': 1.4.0(@types/react@19.3.0)(react@19.2.8) '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.3.0)(react@19.2.8) '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.3.0)(react@19.2.8) @@ -13275,7 +11850,6 @@ snapshots: react-remove-scroll: 2.7.2(@types/react@19.3.0)(react@19.2.8) optionalDependencies: '@types/react': 19.3.0 - '@types/react-dom': 17.0.26(@types/react@19.3.0) '@radix-ui/react-direction@1.1.5(@types/react@19.2.17)(react@19.2.8)': dependencies: @@ -13289,31 +11863,29 @@ snapshots: optionalDependencies: '@types/react': 19.3.0 - '@radix-ui/react-dismissable-layer@1.1.20(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-dismissable-layer@1.1.20(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/primitive': 1.1.7 '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.17)(react@19.2.8) '@radix-ui/react-use-effect-event': 0.0.5(@types/react@19.2.17)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.2.17 - '@types/react-dom': 17.0.26(@types/react@19.2.17) - '@radix-ui/react-dismissable-layer@1.1.20(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-dismissable-layer@1.1.20(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/primitive': 1.1.7 '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.3.0)(react@19.2.8) - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.3.0)(react@19.2.8) '@radix-ui/react-use-effect-event': 0.0.5(@types/react@19.3.0)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.3.0 - '@types/react-dom': 17.0.26(@types/react@19.3.0) '@radix-ui/react-focus-guards@1.1.6(@types/react@19.2.17)(react@19.2.8)': dependencies: @@ -13327,27 +11899,25 @@ snapshots: optionalDependencies: '@types/react': 19.3.0 - '@radix-ui/react-focus-scope@1.2.0(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-focus-scope@1.2.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.17)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.2.17 - '@types/react-dom': 17.0.26(@types/react@19.2.17) - '@radix-ui/react-focus-scope@1.2.0(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-focus-scope@1.2.0(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.3.0)(react@19.2.8) - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.3.0)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.3.0 - '@types/react-dom': 17.0.26(@types/react@19.3.0) '@radix-ui/react-id@1.1.4(@types/react@19.2.17)(react@19.2.8)': dependencies: @@ -13363,71 +11933,65 @@ snapshots: optionalDependencies: '@types/react': 19.3.0 - '@radix-ui/react-portal@1.1.18(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-portal@1.1.18(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.17)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.2.17 - '@types/react-dom': 17.0.26(@types/react@19.2.17) - '@radix-ui/react-portal@1.1.18(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-portal@1.1.18(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.3.0)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.3.0 - '@types/react-dom': 17.0.26(@types/react@19.3.0) - '@radix-ui/react-presence@1.1.11(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-presence@1.1.11(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.17)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.2.17 - '@types/react-dom': 17.0.26(@types/react@19.2.17) - '@radix-ui/react-presence@1.1.11(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-presence@1.1.11(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.3.0)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.3.0 - '@types/react-dom': 17.0.26(@types/react@19.3.0) - '@radix-ui/react-primitive@2.1.11(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-primitive@2.1.11(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/react-slot': 1.4.0(@types/react@19.2.17)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.2.17 - '@types/react-dom': 17.0.26(@types/react@19.2.17) - '@radix-ui/react-primitive@2.1.11(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-primitive@2.1.11(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/react-slot': 1.4.0(@types/react@19.3.0)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.3.0 - '@types/react-dom': 17.0.26(@types/react@19.3.0) - '@radix-ui/react-roving-focus@1.1.20(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-roving-focus@1.1.20(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/primitive': 1.1.7 - '@radix-ui/react-collection': 1.1.16(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-collection': 1.1.16(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.17)(react@19.2.8) '@radix-ui/react-context': 1.2.2(@types/react@19.2.17)(react@19.2.8) '@radix-ui/react-direction': 1.1.5(@types/react@19.2.17)(react@19.2.8) '@radix-ui/react-id': 1.1.4(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.17)(react@19.2.8) '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.17)(react@19.2.8) '@radix-ui/react-use-is-hydrated': 0.1.3(@types/react@19.2.17)(react@19.2.8) @@ -13436,17 +12000,16 @@ snapshots: react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.2.17 - '@types/react-dom': 17.0.26(@types/react@19.2.17) - '@radix-ui/react-roving-focus@1.1.20(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-roving-focus@1.1.20(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/primitive': 1.1.7 - '@radix-ui/react-collection': 1.1.16(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-collection': 1.1.16(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.3.0)(react@19.2.8) '@radix-ui/react-context': 1.2.2(@types/react@19.3.0)(react@19.2.8) '@radix-ui/react-direction': 1.1.5(@types/react@19.3.0)(react@19.2.8) '@radix-ui/react-id': 1.1.4(@types/react@19.3.0)(react@19.2.8) - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.3.0)(react@19.2.8) '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.3.0)(react@19.2.8) '@radix-ui/react-use-is-hydrated': 0.1.3(@types/react@19.3.0)(react@19.2.8) @@ -13455,7 +12018,6 @@ snapshots: react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.3.0 - '@types/react-dom': 17.0.26(@types/react@19.3.0) '@radix-ui/react-slot@1.4.0(@types/react@19.2.17)(react@19.2.8)': dependencies: @@ -13471,37 +12033,35 @@ snapshots: optionalDependencies: '@types/react': 19.3.0 - '@radix-ui/react-tabs@1.1.22(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-tabs@1.1.22(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/primitive': 1.1.7 '@radix-ui/react-context': 1.2.2(@types/react@19.2.17)(react@19.2.8) '@radix-ui/react-direction': 1.1.5(@types/react@19.2.17)(react@19.2.8) '@radix-ui/react-id': 1.1.4(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-presence': 1.1.11(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-roving-focus': 1.1.20(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-presence': 1.1.11(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-roving-focus': 1.1.20(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.17)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.2.17 - '@types/react-dom': 17.0.26(@types/react@19.2.17) - '@radix-ui/react-tabs@1.1.22(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@radix-ui/react-tabs@1.1.22(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/primitive': 1.1.7 '@radix-ui/react-context': 1.2.2(@types/react@19.3.0)(react@19.2.8) '@radix-ui/react-direction': 1.1.5(@types/react@19.3.0)(react@19.2.8) '@radix-ui/react-id': 1.1.4(@types/react@19.3.0)(react@19.2.8) - '@radix-ui/react-presence': 1.1.11(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-primitive': 2.1.11(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-roving-focus': 1.1.20(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-presence': 1.1.11(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-primitive': 2.1.11(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-roving-focus': 1.1.20(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.3.0)(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: '@types/react': 19.3.0 - '@types/react-dom': 17.0.26(@types/react@19.3.0) '@radix-ui/react-use-callback-ref@1.1.4(@types/react@19.2.17)(react@19.2.8)': dependencies: @@ -14076,126 +12636,88 @@ snapshots: '@rnx-kit/types-plugin-typescript@1.0.0': {} - '@rollup/rollup-android-arm-eabi@4.62.2': - optional: true - - '@rollup/rollup-android-arm64@4.62.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.62.2': - optional: true - - '@rollup/rollup-darwin-x64@4.62.2': - optional: true - - '@rollup/rollup-freebsd-arm64@4.62.2': - optional: true - - '@rollup/rollup-freebsd-x64@4.62.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.62.2': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.62.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.62.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.62.2': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.62.2': + '@rolldown/binding-android-arm-eabi@1.2.13': optional: true - '@rollup/rollup-linux-loong64-musl@4.62.2': + '@rolldown/binding-android-arm64@1.2.13': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.62.2': + '@rolldown/binding-darwin-arm64@1.2.13': optional: true - '@rollup/rollup-linux-ppc64-musl@4.62.2': + '@rolldown/binding-darwin-x64@1.2.13': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.62.2': + '@rolldown/binding-freebsd-x64@1.2.13': optional: true - '@rollup/rollup-linux-riscv64-musl@4.62.2': + '@rolldown/binding-linux-arm-gnueabihf@1.2.13': optional: true - '@rollup/rollup-linux-s390x-gnu@4.62.2': + '@rolldown/binding-linux-arm64-gnu@1.2.13': optional: true - '@rollup/rollup-linux-x64-gnu@4.62.2': + '@rolldown/binding-linux-arm64-musl@1.2.13': optional: true - '@rollup/rollup-linux-x64-musl@4.62.2': + '@rolldown/binding-linux-ppc64-gnu@1.2.13': optional: true - '@rollup/rollup-openbsd-x64@4.62.2': + '@rolldown/binding-linux-s390x-gnu@1.2.13': optional: true - '@rollup/rollup-openharmony-arm64@4.62.2': + '@rolldown/binding-linux-x64-gnu@1.2.13': optional: true - '@rollup/rollup-win32-arm64-msvc@4.62.2': + '@rolldown/binding-linux-x64-musl@1.2.13': optional: true - '@rollup/rollup-win32-ia32-msvc@4.62.2': + '@rolldown/binding-openharmony-arm64@1.2.13': optional: true - '@rollup/rollup-win32-x64-gnu@4.62.2': + '@rolldown/binding-win32-arm64-msvc@1.2.13': optional: true - '@rollup/rollup-win32-x64-msvc@4.62.2': + '@rolldown/binding-win32-x64-msvc@1.2.13': optional: true - '@rsbuild/core@1.3.18': - dependencies: - '@rspack/core': 1.3.9(@swc/helpers@0.5.23) - '@rspack/lite-tapable': 1.0.1 - '@swc/helpers': 0.5.23 - core-js: 3.42.0 - jiti: 2.7.0 + '@rolldown/pluginutils@1.0.1': {} - '@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0)': + '@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)': dependencies: '@rspack/core': 2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23) '@swc/helpers': 0.5.23 - optionalDependencies: - core-js: 3.42.0 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rsbuild/plugin-check-syntax@1.6.1(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))': + '@rsbuild/plugin-check-syntax@1.6.1(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))': dependencies: - acorn: 8.17.0 + acorn: 8.19.0 browserslist-to-es-version: 1.4.2 htmlparser2: 10.0.0 picocolors: 1.1.1 source-map: 0.7.6 optionalDependencies: - '@rsbuild/core': 2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0) + '@rsbuild/core': 2.2.12(@module-federation/runtime-tools@2.9.2) - '@rsbuild/plugin-react@2.1.1(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))': + '@rsbuild/plugin-react@2.1.1(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))': dependencies: '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(react-refresh@0.19.0) react-refresh: 0.19.0 optionalDependencies: - '@rsbuild/core': 2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0) + '@rsbuild/core': 2.2.12(@module-federation/runtime-tools@2.9.2) transitivePeerDependencies: - '@rspack/core' '@rsdoctor/client@1.6.4': {} - '@rsdoctor/core@1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)))': + '@rsdoctor/core@1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23))': dependencies: - '@rsbuild/plugin-check-syntax': 1.6.1(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0)) - '@rsdoctor/graph': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) - '@rsdoctor/sdk': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) - '@rsdoctor/types': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) - '@rsdoctor/utils': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) + '@rsbuild/plugin-check-syntax': 1.6.1(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)) + '@rsdoctor/graph': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) + '@rsdoctor/sdk': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) + '@rsdoctor/types': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) + '@rsdoctor/utils': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) '@rspack/resolver': 0.2.8(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) browserslist-load-config: 1.0.3 es-toolkit: 1.50.0 @@ -14213,9 +12735,9 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/core@1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4)': + '@rsdoctor/core@1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4)': dependencies: - '@rsbuild/plugin-check-syntax': 1.6.1(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0)) + '@rsbuild/plugin-check-syntax': 1.6.1(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)) '@rsdoctor/graph': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4) '@rsdoctor/sdk': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4) '@rsdoctor/types': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4) @@ -14237,10 +12759,10 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/graph@1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)))': + '@rsdoctor/graph@1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23))': dependencies: - '@rsdoctor/types': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) - '@rsdoctor/utils': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) + '@rsdoctor/types': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) + '@rsdoctor/utils': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) es-toolkit: 1.50.0 path-browserify: 1.0.1 source-map: 0.7.6 @@ -14259,13 +12781,13 @@ snapshots: - '@rspack/core' - webpack - '@rsdoctor/rspack-plugin@1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)))': + '@rsdoctor/rspack-plugin@1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23))': dependencies: - '@rsdoctor/core': 1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) - '@rsdoctor/graph': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) - '@rsdoctor/sdk': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) - '@rsdoctor/types': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) - '@rsdoctor/utils': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) + '@rsdoctor/core': 1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) + '@rsdoctor/graph': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) + '@rsdoctor/sdk': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) + '@rsdoctor/types': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) + '@rsdoctor/utils': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) optionalDependencies: '@rspack/core': 1.6.0(@swc/helpers@0.5.23) transitivePeerDependencies: @@ -14277,9 +12799,9 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/rspack-plugin@1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4)': + '@rsdoctor/rspack-plugin@1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4)': dependencies: - '@rsdoctor/core': 1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4) + '@rsdoctor/core': 1.6.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4) '@rsdoctor/graph': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4) '@rsdoctor/sdk': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4) '@rsdoctor/types': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4) @@ -14295,12 +12817,12 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/sdk@1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)))': + '@rsdoctor/sdk@1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23))': dependencies: '@rsdoctor/client': 1.6.4 - '@rsdoctor/graph': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) - '@rsdoctor/types': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) - '@rsdoctor/utils': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) + '@rsdoctor/graph': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) + '@rsdoctor/types': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) + '@rsdoctor/utils': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) launch-editor: 2.14.1 safer-buffer: 2.1.2 socket.io: 4.8.1 @@ -14329,7 +12851,7 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/types@1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)))': + '@rsdoctor/types@1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23))': dependencies: '@types/connect': 3.4.38 '@types/estree': 1.0.5 @@ -14337,7 +12859,7 @@ snapshots: source-map: 0.7.6 optionalDependencies: '@rspack/core': 1.6.0(@swc/helpers@0.5.23) - webpack: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)) + webpack: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23) '@rsdoctor/types@1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4)': dependencies: @@ -14349,10 +12871,10 @@ snapshots: '@rspack/core': 1.6.0(@swc/helpers@0.5.23) webpack: 5.105.4 - '@rsdoctor/utils@1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)))': + '@rsdoctor/utils@1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23))': dependencies: '@babel/code-frame': 7.26.2 - '@rsdoctor/types': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) + '@rsdoctor/types': 1.6.4(@rspack/core@1.6.0(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) '@types/estree': 1.0.5 acorn: 8.17.0 acorn-import-attributes: 1.9.5(acorn@8.17.0) @@ -14391,16 +12913,15 @@ snapshots: - '@rspack/core' - webpack - '@rslib/core@0.6.9(typescript@7.0.2)': + '@rslib/core@1.0.3(@module-federation/runtime-tools@2.9.2)(typescript@7.0.2)': dependencies: - '@rsbuild/core': 1.3.18 - rsbuild-plugin-dts: 0.6.9(@rsbuild/core@1.3.18)(typescript@7.0.2) - tinyglobby: 0.2.17 + '@rsbuild/core': 2.2.12(@module-federation/runtime-tools@2.9.2) + rsbuild-plugin-dts: 1.0.3(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(typescript@7.0.2) optionalDependencies: typescript: 7.0.2 - - '@rspack/binding-darwin-arm64@1.3.9': - optional: true + transitivePeerDependencies: + - '@module-federation/runtime-tools' + - core-js '@rspack/binding-darwin-arm64@1.6.0': optional: true @@ -14408,27 +12929,18 @@ snapshots: '@rspack/binding-darwin-arm64@2.2.8': optional: true - '@rspack/binding-darwin-x64@1.3.9': - optional: true - '@rspack/binding-darwin-x64@1.6.0': optional: true '@rspack/binding-darwin-x64@2.2.8': optional: true - '@rspack/binding-linux-arm64-gnu@1.3.9': - optional: true - '@rspack/binding-linux-arm64-gnu@1.6.0': optional: true '@rspack/binding-linux-arm64-gnu@2.2.8': optional: true - '@rspack/binding-linux-arm64-musl@1.3.9': - optional: true - '@rspack/binding-linux-arm64-musl@1.6.0': optional: true @@ -14447,18 +12959,12 @@ snapshots: '@rspack/binding-linux-s390x-gnu@2.2.8': optional: true - '@rspack/binding-linux-x64-gnu@1.3.9': - optional: true - '@rspack/binding-linux-x64-gnu@1.6.0': optional: true '@rspack/binding-linux-x64-gnu@2.2.8': optional: true - '@rspack/binding-linux-x64-musl@1.3.9': - optional: true - '@rspack/binding-linux-x64-musl@1.6.0': optional: true @@ -14477,45 +12983,24 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) optional: true - '@rspack/binding-win32-arm64-msvc@1.3.9': - optional: true - '@rspack/binding-win32-arm64-msvc@1.6.0': optional: true '@rspack/binding-win32-arm64-msvc@2.2.8': optional: true - '@rspack/binding-win32-ia32-msvc@1.3.9': - optional: true - '@rspack/binding-win32-ia32-msvc@1.6.0': optional: true '@rspack/binding-win32-ia32-msvc@2.2.8': optional: true - '@rspack/binding-win32-x64-msvc@1.3.9': - optional: true - '@rspack/binding-win32-x64-msvc@1.6.0': optional: true '@rspack/binding-win32-x64-msvc@2.2.8': optional: true - '@rspack/binding@1.3.9': - optionalDependencies: - '@rspack/binding-darwin-arm64': 1.3.9 - '@rspack/binding-darwin-x64': 1.3.9 - '@rspack/binding-linux-arm64-gnu': 1.3.9 - '@rspack/binding-linux-arm64-musl': 1.3.9 - '@rspack/binding-linux-x64-gnu': 1.3.9 - '@rspack/binding-linux-x64-musl': 1.3.9 - '@rspack/binding-win32-arm64-msvc': 1.3.9 - '@rspack/binding-win32-ia32-msvc': 1.3.9 - '@rspack/binding-win32-x64-msvc': 1.3.9 - '@rspack/binding@1.6.0': optionalDependencies: '@rspack/binding-darwin-arm64': 1.6.0 @@ -14546,15 +13031,6 @@ snapshots: '@rspack/binding-win32-ia32-msvc': 2.2.8 '@rspack/binding-win32-x64-msvc': 2.2.8 - '@rspack/core@1.3.9(@swc/helpers@0.5.23)': - dependencies: - '@module-federation/runtime-tools': 0.13.1 - '@rspack/binding': 1.3.9 - '@rspack/lite-tapable': 1.0.1 - caniuse-lite: 1.0.30001806 - optionalDependencies: - '@swc/helpers': 0.5.23 - '@rspack/core@1.6.0(@swc/helpers@0.5.23)': dependencies: '@module-federation/runtime-tools': 0.21.2 @@ -14636,13 +13112,13 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' - '@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(core-js@3.42.0)(micromark-util-types@2.0.2)(micromark@4.0.2)': + '@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2)': dependencies: '@mdx-js/mdx': 3.1.1 '@mdx-js/react': 3.1.1(@types/react@19.3.0)(react@19.2.8) - '@rsbuild/core': 2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0) - '@rsbuild/plugin-react': 2.1.1(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0))(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23)) - '@rspress/shared': 2.0.23(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0) + '@rsbuild/core': 2.2.12(@module-federation/runtime-tools@2.9.2) + '@rsbuild/plugin-react': 2.1.1(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23)) + '@rspress/shared': 2.0.23(@module-federation/runtime-tools@2.9.2) '@shikijs/rehype': 4.5.0 '@types/mdast': 4.0.4 '@types/react': 19.3.0 @@ -14684,13 +13160,13 @@ snapshots: - micromark-util-types - supports-color - '@rspress/plugin-sitemap@2.0.18(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(core-js@3.42.0)(micromark-util-types@2.0.2)(micromark@4.0.2))': + '@rspress/plugin-sitemap@2.0.18(@rspress/core@2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2))': dependencies: - '@rspress/core': 2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(core-js@3.42.0)(micromark-util-types@2.0.2)(micromark@4.0.2) + '@rspress/core': 2.0.23(@module-federation/runtime-tools@2.9.2)(@rspack/core@2.2.8(@module-federation/runtime-tools@2.9.2)(@swc/helpers@0.5.23))(micromark-util-types@2.0.2)(micromark@4.0.2) - '@rspress/shared@2.0.23(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0)': + '@rspress/shared@2.0.23(@module-federation/runtime-tools@2.9.2)': dependencies: - '@rsbuild/core': 2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0) + '@rsbuild/core': 2.2.12(@module-federation/runtime-tools@2.9.2) '@shikijs/rehype': 4.5.0 '@types/react': 19.3.0 mdast-util-mdx-jsx: 3.2.0 @@ -14775,8 +13251,6 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@standard-schema/spec@1.1.0': {} - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -15022,7 +13496,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 26.1.1 + '@types/node': 22.20.5 '@types/gradient-string@1.1.6': dependencies: @@ -15036,7 +13510,7 @@ snapshots: '@types/http-proxy@1.17.17': dependencies: - '@types/node': 26.1.1 + '@types/node': 22.20.5 '@types/istanbul-lib-coverage@2.0.6': {} @@ -15058,7 +13532,7 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 20.19.43 + '@types/node': 22.20.5 '@types/mdast@4.0.4': dependencies: @@ -15072,7 +13546,7 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@20.19.43': + '@types/node@22.20.5': dependencies: undici-types: 6.21.0 @@ -15082,15 +13556,6 @@ snapshots: '@types/prop-types@15.7.15': {} - '@types/react-dom@17.0.26(@types/react@19.2.17)': - dependencies: - '@types/react': 19.2.17 - - '@types/react-dom@17.0.26(@types/react@19.3.0)': - dependencies: - '@types/react': 19.3.0 - optional: true - '@types/react-test-renderer@19.3.0': dependencies: '@types/react': 18.3.31 @@ -15130,7 +13595,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 20.19.43 + '@types/node': 22.20.5 '@types/yargs-parser@21.0.3': {} @@ -15213,54 +13678,25 @@ snapshots: optionalDependencies: react: 19.2.8 - '@vitest/expect@4.1.11': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.1.11 - '@vitest/utils': 4.1.11 - chai: 6.2.2 - tinyrainbow: 3.1.0 - - '@vitest/mocker@4.1.11(vite@7.3.6(@types/node@20.19.43)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0))': + '@vitest/mocker@5.0.3(vite@8.3.4(@types/node@22.20.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))': dependencies: - '@vitest/spy': 4.1.11 + '@jridgewell/trace-mapping': 0.3.31 + '@vitest/spy': 5.0.3 estree-walker: 3.0.3 - magic-string: 0.30.21 + magic-string: 1.4.3 optionalDependencies: - vite: 7.3.6(@types/node@20.19.43)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0) + vite: 8.3.4(@types/node@22.20.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) - '@vitest/mocker@4.1.11(vite@7.3.6(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0))': + '@vitest/mocker@5.0.3(vite@8.3.4(@types/node@26.1.1)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0))': dependencies: - '@vitest/spy': 4.1.11 + '@jridgewell/trace-mapping': 0.3.31 + '@vitest/spy': 5.0.3 estree-walker: 3.0.3 - magic-string: 0.30.21 + magic-string: 1.4.3 optionalDependencies: - vite: 7.3.6(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0) - - '@vitest/pretty-format@4.1.11': - dependencies: - tinyrainbow: 3.1.0 - - '@vitest/runner@4.1.11': - dependencies: - '@vitest/utils': 4.1.11 - pathe: 2.0.3 - - '@vitest/snapshot@4.1.11': - dependencies: - '@vitest/pretty-format': 4.1.11 - '@vitest/utils': 4.1.11 - magic-string: 0.30.21 - pathe: 2.0.3 - - '@vitest/spy@4.1.11': {} + vite: 8.3.4(@types/node@26.1.1)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) - '@vitest/utils@4.1.11': - dependencies: - '@vitest/pretty-format': 4.1.11 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 + '@vitest/spy@5.0.3': {} '@vscode/sudo-prompt@9.3.2': {} @@ -15372,13 +13808,13 @@ snapshots: dependencies: acorn: 8.17.0 - acorn-jsx@5.3.2(acorn@8.17.0): + acorn-jsx@5.3.2(acorn@8.19.0): dependencies: - acorn: 8.17.0 + acorn: 8.19.0 acorn-walk@8.3.5: dependencies: - acorn: 8.17.0 + acorn: 8.19.0 acorn@8.17.0: {} @@ -15446,6 +13882,8 @@ snapshots: ansi-styles@5.2.0: {} + ansi-styles@6.2.3: {} + any-promise@1.3.0: {} anymatch@3.1.3: @@ -15853,11 +14291,6 @@ snapshots: bytes@3.1.2: {} - cache-content-type@1.0.1: - dependencies: - mime-types: 2.1.35 - ylru: 1.4.0 - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -15900,6 +14333,8 @@ snapshots: chalk@5.6.2: {} + chalk@6.0.1: {} + char-regex@1.0.2: {} character-entities-html4@2.1.0: {} @@ -15926,7 +14361,7 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 26.1.1 + '@types/node': 22.20.5 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -15937,7 +14372,7 @@ snapshots: chromium-edge-launcher@0.3.0: dependencies: - '@types/node': 26.1.1 + '@types/node': 22.20.5 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -15985,6 +14420,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + clone-deep@4.0.1: dependencies: is-plain-object: 2.0.4 @@ -16086,10 +14527,6 @@ snapshots: transitivePeerDependencies: - supports-color - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - content-disposition@1.0.1: {} content-type@1.0.5: {} @@ -16115,8 +14552,6 @@ snapshots: dependencies: browserslist: 4.28.7 - core-js@3.42.0: {} - cors@2.8.6: dependencies: object-assign: 4.1.1 @@ -16142,13 +14577,13 @@ snapshots: optionalDependencies: typescript: 7.0.2 - create-jest@29.7.0(@types/node@20.19.43): + create-jest@29.7.0(@types/node@22.20.5): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.19.43) + jest-config: 29.7.0(@types/node@22.20.5) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -16244,7 +14679,7 @@ snapshots: default-browser-id@5.0.1: {} - default-browser@5.5.0: + default-browser@5.5.1: dependencies: bundle-name: 4.1.0 default-browser-id: 5.0.1 @@ -16334,6 +14769,8 @@ snapshots: emittery@0.13.1: {} + emoji-regex@10.6.0: {} + emoji-regex@8.0.0: {} encodeurl@1.0.2: {} @@ -16352,7 +14789,7 @@ snapshots: cors: 2.8.6 debug: 4.4.3 engine.io-parser: 5.2.3 - ws: 8.21.1 + ws: 8.21.3 transitivePeerDependencies: - bufferutil - supports-color @@ -16395,6 +14832,8 @@ snapshots: es-module-lexer@2.3.1: {} + es-module-lexer@2.3.2: {} + es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 @@ -16418,67 +14857,10 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.17.0 + acorn: 8.19.0 esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 - esbuild@0.25.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.5 - '@esbuild/android-arm': 0.25.5 - '@esbuild/android-arm64': 0.25.5 - '@esbuild/android-x64': 0.25.5 - '@esbuild/darwin-arm64': 0.25.5 - '@esbuild/darwin-x64': 0.25.5 - '@esbuild/freebsd-arm64': 0.25.5 - '@esbuild/freebsd-x64': 0.25.5 - '@esbuild/linux-arm': 0.25.5 - '@esbuild/linux-arm64': 0.25.5 - '@esbuild/linux-ia32': 0.25.5 - '@esbuild/linux-loong64': 0.25.5 - '@esbuild/linux-mips64el': 0.25.5 - '@esbuild/linux-ppc64': 0.25.5 - '@esbuild/linux-riscv64': 0.25.5 - '@esbuild/linux-s390x': 0.25.5 - '@esbuild/linux-x64': 0.25.5 - '@esbuild/netbsd-arm64': 0.25.5 - '@esbuild/netbsd-x64': 0.25.5 - '@esbuild/openbsd-arm64': 0.25.5 - '@esbuild/openbsd-x64': 0.25.5 - '@esbuild/sunos-x64': 0.25.5 - '@esbuild/win32-arm64': 0.25.5 - '@esbuild/win32-ia32': 0.25.5 - '@esbuild/win32-x64': 0.25.5 - - esbuild@0.28.1: - optionalDependencies: - '@esbuild/aix-ppc64': 0.28.1 - '@esbuild/android-arm': 0.28.1 - '@esbuild/android-arm64': 0.28.1 - '@esbuild/android-x64': 0.28.1 - '@esbuild/darwin-arm64': 0.28.1 - '@esbuild/darwin-x64': 0.28.1 - '@esbuild/freebsd-arm64': 0.28.1 - '@esbuild/freebsd-x64': 0.28.1 - '@esbuild/linux-arm': 0.28.1 - '@esbuild/linux-arm64': 0.28.1 - '@esbuild/linux-ia32': 0.28.1 - '@esbuild/linux-loong64': 0.28.1 - '@esbuild/linux-mips64el': 0.28.1 - '@esbuild/linux-ppc64': 0.28.1 - '@esbuild/linux-riscv64': 0.28.1 - '@esbuild/linux-s390x': 0.28.1 - '@esbuild/linux-x64': 0.28.1 - '@esbuild/netbsd-arm64': 0.28.1 - '@esbuild/netbsd-x64': 0.28.1 - '@esbuild/openbsd-arm64': 0.28.1 - '@esbuild/openbsd-x64': 0.28.1 - '@esbuild/openharmony-arm64': 0.28.1 - '@esbuild/sunos-x64': 0.28.1 - '@esbuild/win32-arm64': 0.28.1 - '@esbuild/win32-ia32': 0.28.1 - '@esbuild/win32-x64': 0.28.1 - escalade@3.2.0: {} escape-html@1.0.3: {} @@ -16551,6 +14933,21 @@ snapshots: events@3.3.0: {} + execa@10.1.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.1 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + which-command: 0.1.0 + yoctocolors: 2.2.0 + execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -16563,21 +14960,6 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - execa@9.6.1: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - cross-spawn: 7.0.6 - figures: 6.1.0 - get-stream: 9.0.1 - human-signals: 8.0.1 - is-plain-obj: 4.1.0 - is-stream: 4.0.1 - npm-run-path: 6.0.0 - pretty-ms: 9.3.0 - signal-exit: 4.1.0 - strip-final-newline: 4.0.0 - yoctocolors: 2.1.2 - exit-hook@4.0.0: {} exit@0.1.2: {} @@ -16733,25 +15115,25 @@ snapshots: dependencies: react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8) - expo-router@57.0.25(070bba2580d5a65057f5194baa7f9812): + expo-router@57.0.25(b78e73ef552e7de7587f9ac112282727): dependencies: - '@expo/log-box': 57.0.4(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - '@expo/metro-runtime': 57.0.16(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) + '@expo/log-box': 57.0.4(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) + '@expo/metro-runtime': 57.0.16(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) '@expo/schema-utils': 57.0.2 - '@expo/ui': 57.0.22(@babel/core@7.29.7)(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - '@radix-ui/react-slot': 1.4.0(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-tabs': 1.1.22(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@react-native-masked-view/masked-view': 0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) + '@expo/ui': 57.0.22(@babel/core@7.29.7)(@types/react@19.3.0)(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) + '@radix-ui/react-slot': 1.4.0(@types/react@19.3.0)(react@19.2.8) + '@radix-ui/react-tabs': 1.1.22(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@react-native-masked-view/masked-view': 0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) client-only: 0.0.1 color: 4.2.3 debug: 4.4.3 escape-string-regexp: 4.0.0 - expo: 57.0.27(@babel/core@7.29.7)(@expo/metro-runtime@57.0.16)(expo-router@57.0.25)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8)(typescript@7.0.2) - expo-constants: 57.0.21(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8)) - expo-glass-effect: 57.0.4(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - expo-linking: 57.0.12(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) + expo: 57.0.27(@babel/core@7.29.7)(@expo/metro-runtime@57.0.16)(expo-router@57.0.25)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8)(typescript@7.0.2) + expo-constants: 57.0.21(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8)) + expo-glass-effect: 57.0.4(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) + expo-linking: 57.0.12(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) expo-server: 57.0.3 - expo-symbols: 57.0.3(expo-font@57.0.4)(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) + expo-symbols: 57.0.3(expo-font@57.0.4)(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) fast-deep-equal: 3.1.3 invariant: 2.2.4 nanoid: 3.3.20 @@ -16759,19 +15141,19 @@ snapshots: react: 19.2.8 react-fast-compare: 3.2.2 react-is: 19.2.8 - react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8) - react-native-drawer-layout: 4.2.11(react-native-gesture-handler@2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native-reanimated@4.5.3(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - react-native-safe-area-context: 5.8.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - react-native-screens: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8) + react-native-drawer-layout: 4.2.11(react-native-gesture-handler@2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native-reanimated@4.5.3(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) + react-native-safe-area-context: 5.8.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) + react-native-screens: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) server-only: 0.0.1 sf-symbols-typescript: 2.2.0 shallowequal: 1.1.0 standard-navigation: 0.0.5 - vaul: 1.1.2(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + vaul: 1.1.2(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) optionalDependencies: react-dom: 19.2.8(react@19.2.8) - react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) - react-native-reanimated: 4.5.3(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) + react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) + react-native-reanimated: 4.5.3(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) transitivePeerDependencies: - '@babel/core' - '@types/react' @@ -16780,25 +15162,25 @@ snapshots: - react-native-worklets - supports-color - expo-router@57.0.25(66ea6cfd90df0a40c40648bd22be227d): + expo-router@57.0.25(e065c737c32861a7840897c5f802228a): dependencies: - '@expo/log-box': 57.0.4(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) - '@expo/metro-runtime': 57.0.16(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) + '@expo/log-box': 57.0.4(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) + '@expo/metro-runtime': 57.0.16(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) '@expo/schema-utils': 57.0.2 - '@expo/ui': 57.0.22(@babel/core@7.29.7)(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) - '@radix-ui/react-slot': 1.4.0(@types/react@19.3.0)(react@19.2.8) - '@radix-ui/react-tabs': 1.1.22(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@react-native-masked-view/masked-view': 0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) + '@expo/ui': 57.0.22(@babel/core@7.29.7)(@types/react@19.2.17)(expo@57.0.27)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) + '@radix-ui/react-slot': 1.4.0(@types/react@19.2.17)(react@19.2.8) + '@radix-ui/react-tabs': 1.1.22(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@react-native-masked-view/masked-view': 0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) client-only: 0.0.1 color: 4.2.3 debug: 4.4.3 escape-string-regexp: 4.0.0 - expo: 57.0.27(@babel/core@7.29.7)(@expo/metro-runtime@57.0.16)(expo-router@57.0.25)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8)(typescript@7.0.2) - expo-constants: 57.0.21(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8)) - expo-glass-effect: 57.0.4(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) - expo-linking: 57.0.12(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) + expo: 57.0.27(@babel/core@7.29.7)(@expo/metro-runtime@57.0.16)(expo-router@57.0.25)(react-dom@19.2.8(react@19.2.8))(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8)(typescript@7.0.2) + expo-constants: 57.0.21(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8)) + expo-glass-effect: 57.0.4(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) + expo-linking: 57.0.12(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) expo-server: 57.0.3 - expo-symbols: 57.0.3(expo-font@57.0.4)(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) + expo-symbols: 57.0.3(expo-font@57.0.4)(expo@57.0.27)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) fast-deep-equal: 3.1.3 invariant: 2.2.4 nanoid: 3.3.20 @@ -16806,19 +15188,19 @@ snapshots: react: 19.2.8 react-fast-compare: 3.2.2 react-is: 19.2.8 - react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8) - react-native-drawer-layout: 4.2.11(react-native-gesture-handler@2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native-reanimated@4.5.3(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) - react-native-safe-area-context: 5.8.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) - react-native-screens: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8) + react-native-drawer-layout: 4.2.11(react-native-gesture-handler@2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native-reanimated@4.5.3(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) + react-native-safe-area-context: 5.8.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) + react-native-screens: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) server-only: 0.0.1 sf-symbols-typescript: 2.2.0 shallowequal: 1.1.0 standard-navigation: 0.0.5 - vaul: 1.1.2(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + vaul: 1.1.2(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) optionalDependencies: react-dom: 19.2.8(react@19.2.8) - react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) - react-native-reanimated: 4.5.3(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.3.0)(react@19.2.8))(react@19.2.8) + react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) + react-native-reanimated: 4.5.3(react-native-worklets@0.11.3(@babel/core@7.29.7)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.2.0(typescript@7.0.2))(@types/react@19.2.17)(react@19.2.8))(react@19.2.8) transitivePeerDependencies: - '@babel/core' - '@types/react' @@ -17022,9 +15404,9 @@ snapshots: dependencies: bser: 2.1.1 - fdir@6.5.0(picomatch@4.0.5): + fdir@6.5.0(picomatch@4.0.7): optionalDependencies: - picomatch: 4.0.5 + picomatch: 4.0.7 fetch-nodeshim@0.4.10: {} @@ -17175,8 +15557,6 @@ snapshots: function-bind@1.1.2: {} - generator-function@2.0.1: {} - gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -17655,14 +16035,6 @@ snapshots: is-generator-fn@2.1.0: {} - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -17671,6 +16043,8 @@ snapshots: is-in-ci@1.0.0: {} + is-in-ssh@1.0.0: {} + is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 @@ -17687,13 +16061,6 @@ snapshots: is-plain-object@5.0.0: {} - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - is-stream@2.0.1: {} is-stream@4.0.1: {} @@ -17724,8 +16091,6 @@ snapshots: isobject@3.0.1: {} - isomorphic-rslog@0.0.7: {} - isomorphic-ws@5.0.0(ws@8.21.3): dependencies: ws: 8.21.3 @@ -17783,7 +16148,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 26.1.1 + '@types/node': 22.20.5 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.2 @@ -17803,16 +16168,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.19.43): + jest-cli@29.7.0(@types/node@22.20.5): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.43) + create-jest: 29.7.0(@types/node@22.20.5) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.43) + jest-config: 29.7.0(@types/node@22.20.5) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.3 @@ -17822,37 +16187,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.19.43): - dependencies: - '@babel/core': 7.29.7 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.29.7) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.19.43 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-config@29.7.0(@types/node@26.1.1): + jest-config@29.7.0(@types/node@22.20.5): dependencies: '@babel/core': 7.29.7 '@jest/test-sequencer': 29.7.0 @@ -17877,7 +16212,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 26.1.1 + '@types/node': 22.20.5 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -17906,7 +16241,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 26.1.1 + '@types/node': 22.20.5 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -17916,7 +16251,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 26.1.1 + '@types/node': 22.20.5 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -17955,7 +16290,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 26.1.1 + '@types/node': 22.20.5 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -17990,7 +16325,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 26.1.1 + '@types/node': 22.20.5 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -18018,7 +16353,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 26.1.1 + '@types/node': 22.20.5 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.3 @@ -18083,7 +16418,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 26.1.1 + '@types/node': 22.20.5 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -18103,12 +16438,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.19.43): + jest@29.7.0(@types/node@22.20.5): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.43) + jest-cli: 29.7.0(@types/node@22.20.5) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -18206,39 +16541,6 @@ snapshots: koa-compose@4.1.0: {} - koa-convert@2.0.0: - dependencies: - co: 4.6.0 - koa-compose: 4.1.0 - - koa@2.16.4: - dependencies: - accepts: 1.3.8 - cache-content-type: 1.0.1 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookies: 0.9.1 - debug: 4.4.3 - delegates: 1.0.0 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - fresh: 0.5.2 - http-assert: 1.5.0 - http-errors: 1.8.1 - is-generator-function: 1.1.2 - koa-compose: 4.1.0 - koa-convert: 2.0.0 - on-finished: 2.4.1 - only: 0.0.2 - parseurl: 1.3.3 - statuses: 1.5.0 - type-is: 1.6.18 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - koa@3.2.1: dependencies: accepts: 1.3.8 @@ -18430,8 +16732,6 @@ snapshots: lodash.throttle@4.1.1: {} - lodash@4.18.1: {} - log-symbols@2.2.0: dependencies: chalk: 2.4.2 @@ -18479,9 +16779,9 @@ snapshots: luxon@3.7.2: {} - magic-string@0.30.21: + magic-string@1.4.3: dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 make-dir@2.1.0: dependencies: @@ -18695,8 +16995,6 @@ snapshots: mdn-data@2.0.30: {} - media-typer@0.3.0: {} - media-typer@1.1.1: {} medium-zoom@1.1.0: {} @@ -18843,7 +17141,7 @@ snapshots: metro-minify-terser@0.84.5: dependencies: flow-enums-runtime: 0.0.6 - terser: 5.49.0 + terser: 5.51.2 metro-minify-terser@0.84.6: dependencies: @@ -19221,8 +17519,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.17.0 - acorn-jsx: 5.3.2(acorn@8.17.0) + acorn: 8.19.0 + acorn-jsx: 5.3.2(acorn@8.19.0) micromark-extension-mdx-expression: 3.0.1 micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 @@ -19566,14 +17864,14 @@ snapshots: regex: 6.1.0 regex-recursion: 6.0.2 - only@0.0.2: {} - - open@10.2.0: + open@11.0.4: dependencies: - default-browser: 5.5.0 + default-browser: 5.5.1 define-lazy-prop: 3.0.0 + is-in-ssh: 1.0.0 is-inside-container: 1.0.0 - wsl-utils: 0.1.0 + powershell-utils: 0.2.1 + wsl-utils: 1.0.1 open@6.4.0: dependencies: @@ -19716,14 +18014,14 @@ snapshots: path-type@4.0.0: {} - pathe@2.0.3: {} - picocolors@1.1.1: {} picomatch@2.3.2: {} picomatch@4.0.5: {} + picomatch@4.0.7: {} + pify@2.3.0: {} pify@4.0.1: {} @@ -19801,7 +18099,7 @@ snapshots: postcss: 8.5.23 yaml: 2.9.0 - postcss-loader@8.2.1(@rspack/core@1.6.0(@swc/helpers@0.5.23))(postcss@8.5.23)(typescript@7.0.2)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))): + postcss-loader@8.2.1(@rspack/core@1.6.0(@swc/helpers@0.5.23))(postcss@8.5.23)(typescript@7.0.2)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)): dependencies: cosmiconfig: 9.0.2(typescript@7.0.2) jiti: 2.7.0 @@ -19809,7 +18107,7 @@ snapshots: semver: 7.8.5 optionalDependencies: '@rspack/core': 1.6.0(@swc/helpers@0.5.23) - webpack: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)) + webpack: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23) transitivePeerDependencies: - typescript @@ -19831,6 +18129,14 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.2 + postcss@8.5.29: + dependencies: + nanoid: 3.3.20 + picocolors: 1.1.1 + source-map-js: 1.2.2 + + powershell-utils@0.2.1: {} + preferred-pm@4.1.1: dependencies: find-up-simple: 1.0.1 @@ -19859,7 +18165,7 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - pretty-ms@9.3.0: + pretty-ms@9.3.1: dependencies: parse-ms: 4.0.0 @@ -20353,10 +18659,10 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.1(acorn@8.17.0): + recma-jsx@1.0.1(acorn@8.19.0): dependencies: - acorn: 8.17.0 - acorn-jsx: 5.3.2(acorn@8.17.0) + acorn: 8.19.0 + acorn-jsx: 5.3.2(acorn@8.19.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -20552,53 +18858,37 @@ snapshots: rfdc@1.4.1: {} - rollup@4.62.2: + rolldown@1.2.13: dependencies: - '@types/estree': 1.0.9 + '@oxc-project/types': 0.153.0 + '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.62.2 - '@rollup/rollup-android-arm64': 4.62.2 - '@rollup/rollup-darwin-arm64': 4.62.2 - '@rollup/rollup-darwin-x64': 4.62.2 - '@rollup/rollup-freebsd-arm64': 4.62.2 - '@rollup/rollup-freebsd-x64': 4.62.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.62.2 - '@rollup/rollup-linux-arm-musleabihf': 4.62.2 - '@rollup/rollup-linux-arm64-gnu': 4.62.2 - '@rollup/rollup-linux-arm64-musl': 4.62.2 - '@rollup/rollup-linux-loong64-gnu': 4.62.2 - '@rollup/rollup-linux-loong64-musl': 4.62.2 - '@rollup/rollup-linux-ppc64-gnu': 4.62.2 - '@rollup/rollup-linux-ppc64-musl': 4.62.2 - '@rollup/rollup-linux-riscv64-gnu': 4.62.2 - '@rollup/rollup-linux-riscv64-musl': 4.62.2 - '@rollup/rollup-linux-s390x-gnu': 4.62.2 - '@rollup/rollup-linux-x64-gnu': 4.62.2 - '@rollup/rollup-linux-x64-musl': 4.62.2 - '@rollup/rollup-openbsd-x64': 4.62.2 - '@rollup/rollup-openharmony-arm64': 4.62.2 - '@rollup/rollup-win32-arm64-msvc': 4.62.2 - '@rollup/rollup-win32-ia32-msvc': 4.62.2 - '@rollup/rollup-win32-x64-gnu': 4.62.2 - '@rollup/rollup-win32-x64-msvc': 4.62.2 - fsevents: 2.3.3 - - rsbuild-plugin-dts@0.6.9(@rsbuild/core@1.3.18)(typescript@7.0.2): - dependencies: - '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 1.3.18 - magic-string: 0.30.21 - picocolors: 1.1.1 - tinyglobby: 0.2.17 - tsconfig-paths: 4.2.0 + '@rolldown/binding-android-arm-eabi': 1.2.13 + '@rolldown/binding-android-arm64': 1.2.13 + '@rolldown/binding-darwin-arm64': 1.2.13 + '@rolldown/binding-darwin-x64': 1.2.13 + '@rolldown/binding-freebsd-x64': 1.2.13 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.13 + '@rolldown/binding-linux-arm64-gnu': 1.2.13 + '@rolldown/binding-linux-arm64-musl': 1.2.13 + '@rolldown/binding-linux-ppc64-gnu': 1.2.13 + '@rolldown/binding-linux-s390x-gnu': 1.2.13 + '@rolldown/binding-linux-x64-gnu': 1.2.13 + '@rolldown/binding-linux-x64-musl': 1.2.13 + '@rolldown/binding-openharmony-arm64': 1.2.13 + '@rolldown/binding-win32-arm64-msvc': 1.2.13 + '@rolldown/binding-win32-x64-msvc': 1.2.13 + + rsbuild-plugin-dts@1.0.3(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2))(typescript@7.0.2): + dependencies: + '@ast-grep/napi': 0.45.3 + '@rsbuild/core': 2.2.12(@module-federation/runtime-tools@2.9.2) optionalDependencies: typescript: 7.0.2 - rsbuild-plugin-open-graph@1.1.3(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0)): + rsbuild-plugin-open-graph@1.1.3(@rsbuild/core@2.2.12(@module-federation/runtime-tools@2.9.2)): optionalDependencies: - '@rsbuild/core': 2.2.12(@module-federation/runtime-tools@2.9.2)(core-js@3.42.0) - - rslog@1.3.2: {} + '@rsbuild/core': 2.2.12(@module-federation/runtime-tools@2.9.2) rslog@2.3.0: {} @@ -20616,12 +18906,6 @@ snapshots: safe-buffer@5.2.1: {} - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - safe-regex2@5.1.1: dependencies: ret: 0.5.0 @@ -20758,8 +19042,6 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - siginfo@2.0.0: {} - signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -20798,7 +19080,7 @@ snapshots: socket.io-adapter@2.5.8: dependencies: debug: 4.4.3 - ws: 8.21.1 + ws: 8.21.3 transitivePeerDependencies: - bufferutil - supports-color @@ -20866,8 +19148,6 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 - stackback@0.0.2: {} - stackframe@1.3.4: {} stacktrace-parser@0.1.11: @@ -20909,6 +19189,17 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.7.0 + strip-ansi: 7.2.0 + + string-width@8.3.0: + dependencies: + get-east-asian-width: 1.7.0 + strip-ansi: 7.2.0 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -21036,30 +19327,34 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.5.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))): + terser-webpack-plugin@5.6.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.49.0 - webpack: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)) + terser: 5.51.2 + webpack: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23) optionalDependencies: '@swc/core': 1.15.46(@swc/helpers@0.5.23) + postcss: 8.5.23 - terser-webpack-plugin@5.5.0(webpack@5.105.4): + terser-webpack-plugin@5.6.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.49.0 - webpack: 5.105.4 + terser: 5.51.2 + webpack: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)) + optionalDependencies: + '@swc/core': 1.15.46(@swc/helpers@0.5.23) - terser@5.49.0: + terser-webpack-plugin@5.6.1(webpack@5.105.4): dependencies: - '@jridgewell/source-map': 0.3.11 - acorn: 8.17.0 - commander: 2.20.3 - source-map-support: 0.5.21 + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.51.2 + webpack: 5.105.4 terser@5.51.2: dependencies: @@ -21086,13 +19381,13 @@ snapshots: dependencies: tslib: 2.8.1 - thread-loader@4.0.4(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))): + thread-loader@4.0.4(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)): dependencies: json-parse-better-errors: 1.0.2 loader-runner: 4.3.2 neo-async: 2.6.2 schema-utils: 4.3.3 - webpack: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)) + webpack: 5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23) thread-stream@4.2.0: dependencies: @@ -21102,24 +19397,22 @@ snapshots: throttleit@2.1.0: {} - tinybench@2.9.0: {} + tinybench@6.2.1: {} tinycolor2@1.6.0: {} - tinyexec@1.2.4: {} + tinyexec@1.3.1: {} tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.5) - picomatch: 4.0.5 + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 tinygradient@1.1.5: dependencies: '@types/tinycolor2': 1.4.6 tinycolor2: 1.6.0 - tinyrainbow@3.1.0: {} - tmpl@1.0.5: {} to-regex-range@5.0.1: @@ -21146,12 +19439,6 @@ snapshots: ts-interface-checker@0.1.13: {} - tsconfig-paths@4.2.0: - dependencies: - json5: 2.2.3 - minimist: 1.2.8 - strip-bom: 3.0.0 - tslib@2.8.1: {} tsscmp@1.0.6: {} @@ -21175,11 +19462,6 @@ snapshots: type-fest@4.41.0: {} - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - type-is@2.1.0: dependencies: content-type: 2.0.0 @@ -21347,18 +19629,18 @@ snapshots: vary@1.1.2: {} - vaul@1.1.2(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + vaul@1.1.2(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: - '@radix-ui/react-dialog': 1.2.0(@types/react-dom@17.0.26(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-dialog': 1.2.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) transitivePeerDependencies: - '@types/react' - '@types/react-dom' - vaul@1.1.2(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + vaul@1.1.2(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: - '@radix-ui/react-dialog': 1.2.0(@types/react-dom@17.0.26(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-dialog': 1.2.0(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) transitivePeerDependencies: @@ -21380,111 +19662,75 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@7.3.6(@types/node@20.19.43)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0): + vite@8.3.4(@types/node@22.20.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0): dependencies: - esbuild: 0.28.1 - fdir: 6.5.0(picomatch@4.0.5) - picomatch: 4.0.5 - postcss: 8.5.23 - rollup: 4.62.2 + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.29 + rolldown: 1.2.13 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 20.19.43 + '@types/node': 22.20.5 fsevents: 2.3.3 jiti: 2.7.0 - lightningcss: 1.33.0 terser: 5.51.2 yaml: 2.9.0 - vite@7.3.6(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0): + vite@8.3.4(@types/node@26.1.1)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0): dependencies: - esbuild: 0.28.1 - fdir: 6.5.0(picomatch@4.0.5) - picomatch: 4.0.5 - postcss: 8.5.23 - rollup: 4.62.2 + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.29 + rolldown: 1.2.13 tinyglobby: 0.2.17 optionalDependencies: '@types/node': 26.1.1 fsevents: 2.3.3 jiti: 2.7.0 - lightningcss: 1.33.0 terser: 5.51.2 yaml: 2.9.0 - vitest@4.1.11(@types/node@20.19.43)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0): + vitest@5.0.3(@types/node@22.20.5)(vite@8.3.4(@types/node@22.20.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)): dependencies: - '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(vite@7.3.6(@types/node@20.19.43)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.11 - '@vitest/runner': 4.1.11 - '@vitest/snapshot': 4.1.11 - '@vitest/spy': 4.1.11 - '@vitest/utils': 4.1.11 - es-module-lexer: 2.3.1 + '@types/chai': 5.2.3 + '@vitest/mocker': 5.0.3(vite@8.3.4(@types/node@22.20.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + chai: 6.2.2 + es-module-lexer: 2.3.2 expect-type: 1.4.0 - magic-string: 0.30.21 + magic-string: 1.4.3 obug: 2.1.4 - pathe: 2.0.3 - picomatch: 4.0.5 + picomatch: 4.0.7 std-env: 4.2.0 - tinybench: 2.9.0 - tinyexec: 1.2.4 + tinybench: 6.2.1 + tinyexec: 1.3.1 tinyglobby: 0.2.17 - tinyrainbow: 3.1.0 - vite: 7.3.6(@types/node@20.19.43)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0) - why-is-node-running: 2.3.0 + vite: 8.3.4(@types/node@22.20.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) + why-is-node-running: 3.2.1 optionalDependencies: - '@types/node': 20.19.43 + '@types/node': 22.20.5 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - vitest@4.1.11(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0): + vitest@5.0.3(@types/node@26.1.1)(vite@8.3.4(@types/node@26.1.1)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)): dependencies: - '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(vite@7.3.6(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.11 - '@vitest/runner': 4.1.11 - '@vitest/snapshot': 4.1.11 - '@vitest/spy': 4.1.11 - '@vitest/utils': 4.1.11 - es-module-lexer: 2.3.1 + '@types/chai': 5.2.3 + '@vitest/mocker': 5.0.3(vite@8.3.4(@types/node@26.1.1)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0)) + chai: 6.2.2 + es-module-lexer: 2.3.2 expect-type: 1.4.0 - magic-string: 0.30.21 + magic-string: 1.4.3 obug: 2.1.4 - pathe: 2.0.3 - picomatch: 4.0.5 + picomatch: 4.0.7 std-env: 4.2.0 - tinybench: 2.9.0 - tinyexec: 1.2.4 + tinybench: 6.2.1 + tinyexec: 1.3.1 tinyglobby: 0.2.17 - tinyrainbow: 3.1.0 - vite: 7.3.6(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.33.0)(terser@5.51.2)(yaml@2.9.0) - why-is-node-running: 2.3.0 + vite: 8.3.4(@types/node@26.1.1)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.0) + why-is-node-running: 3.2.1 optionalDependencies: '@types/node': 26.1.1 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml vlq@0.2.3: {} @@ -21542,12 +19788,21 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.3 - terser-webpack-plugin: 5.5.0(webpack@5.105.4) + terser-webpack-plugin: 5.6.1(webpack@5.105.4) watchpack: 2.5.2 webpack-sources: 3.5.1 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23)): @@ -21574,12 +19829,62 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.3 - terser-webpack-plugin: 5.5.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) + terser-webpack-plugin: 5.6.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))) + watchpack: 2.5.2 + webpack-sources: 3.5.1 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - uglify-js + + webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.9 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.7 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.24.3 + es-module-lexer: 2.3.1 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.2 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.3 + terser-webpack-plugin: 5.6.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)(webpack@5.105.4(@swc/core@1.15.46(@swc/helpers@0.5.23))(postcss@8.5.23)) watchpack: 2.5.2 webpack-sources: 3.5.1 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js whatwg-encoding@2.0.0: @@ -21595,6 +19900,8 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + which-command@0.1.0: {} + which-module@2.0.1: {} which-pm-runs@1.1.0: {} @@ -21611,10 +19918,7 @@ snapshots: dependencies: isexe: 2.0.0 - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 + why-is-node-running@3.2.1: {} wildcard@2.0.1: {} @@ -21630,6 +19934,12 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrappy@1.0.2: {} write-file-atomic@4.0.2: @@ -21647,9 +19957,10 @@ snapshots: ws@8.21.3: {} - wsl-utils@0.1.0: + wsl-utils@1.0.1: dependencies: is-wsl: 3.1.1 + powershell-utils: 0.2.1 xcode@3.0.1: dependencies: @@ -21682,6 +19993,8 @@ snapshots: yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs@15.4.1: dependencies: cliui: 6.0.0 @@ -21706,13 +20019,20 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - ylru@1.4.0: {} + yargs@18.2.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 8.3.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 yocto-queue@0.1.0: {} yocto-queue@1.2.2: {} - yoctocolors@2.1.2: {} + yoctocolors@2.2.0: {} zod@3.25.76: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e7b3b4548..44c7d912b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -26,9 +26,6 @@ overrides: # Security fix for GHSA-w5hq-g745-h8pq. xcode pins uuid to ^7 and is # unmaintained; it only calls uuid.v4(), which is unaffected either way. "uuid@7": ^11.1.1 - # Held: vite 8 is rolldown-based; rolldown requires Node >=20.19, which - # would drop Node 18 from the supported test matrix. - "vite": ^7.3.1 # expo-router declares react-native-screens as a regular dependency, which # would otherwise resolve a second, newer copy than the apps' native one. "react-native-screens": "catalog:testers" @@ -43,17 +40,17 @@ catalog: "@babel/core": ^7.29.7 # Pinned: 1.6.2+ breaks MF v2 polyfill ordering; 1.6.4+ fails typecheck. "@rspack/core": 1.6.0 - "@rslib/core": ^0.6.3 + "@rslib/core": ^1.0.3 "@swc/helpers": ~0.5.17 - "@types/node": ^20.19.31 - # Pinned: 5.6+ silently skips minification (#1390). - "terser-webpack-plugin": 5.5.0 + "@types/node": ^22.20.5 + "terser-webpack-plugin": ^5.6.1 "typescript": ^7.0.2 # Held: 5.106+ removes a webpack internal needed by @module-federation/enhanced <2.4.0. "webpack": ~5.105.0 "react": "19.2.8" "react-native": "0.86.3" - "vitest": ^4.1.11 + "vite": ^8.3.4 + "vitest": ^5.0.3 catalogs: # Expo-only packages. Libraries shared with the other testers come from the diff --git a/tests/integration/package.json b/tests/integration/package.json index c098876ce..0c72e4e33 100644 --- a/tests/integration/package.json +++ b/tests/integration/package.json @@ -5,7 +5,7 @@ "private": true, "type": "module", "engines": { - "node": ">=22" + "node": ">=22.12.0" }, "scripts": { "test": "vitest run", @@ -15,8 +15,6 @@ "@babel/runtime": "^7.29.7", "@callstack/repack": "workspace:*", "@module-federation/enhanced": "2.0.1", - "@module-federation/enhanced-v15": "npm:@module-federation/enhanced@0.15.0", - "@module-federation/enhanced-v21": "npm:@module-federation/enhanced@0.21.0", "@react-native/babel-preset-current": "npm:@react-native/babel-preset@0.88.0-rc.3", "@react-native/babel-preset-legacy": "npm:@react-native/babel-preset@0.87.0", "@rspack/core": "catalog:", @@ -25,6 +23,7 @@ "hermes-parser": "0.36.0", "memfs": "^4.11.1", "typescript": "catalog:", + "vite": "catalog:", "vitest": "catalog:", "webpack": "catalog:", "webpack-virtual-modules": "^0.6.2" diff --git a/tests/metro-compat/package.json b/tests/metro-compat/package.json index 8559a642f..c35ef7097 100644 --- a/tests/metro-compat/package.json +++ b/tests/metro-compat/package.json @@ -7,7 +7,7 @@ "private": true, "engineStrict": true, "engines": { - "node": ">=20" + "node": ">=22.12.0" }, "scripts": { "test": "jest --noStackTrace", diff --git a/tests/resolver-cases/package.json b/tests/resolver-cases/package.json index 71d351458..f50f4ec73 100644 --- a/tests/resolver-cases/package.json +++ b/tests/resolver-cases/package.json @@ -13,6 +13,7 @@ "enhanced-resolve": "^5.18.1", "memfs": "^4.11.1", "typescript": "catalog:", + "vite": "catalog:", "vitest": "catalog:" } } diff --git a/tsconfig.base.json b/tsconfig.base.json index 7fe8ed21e..4ce7dcd1a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "ES2021", + "target": "ES2023", "module": "nodenext", "moduleResolution": "nodenext", "strict": true, From d103ab17e08194da64f60beeea1c2d592a75dc25 Mon Sep 17 00:00:00 2001 From: Daniel Williams Date: Fri, 9 Oct 2026 16:32:58 +0100 Subject: [PATCH 5/9] docs: document Re.Pack 6 requirements and removals Add a Re.Pack 5 to 6 migration guide, update the minimum requirements, remove the ModuleFederationPluginV1 and --webpackConfig references and switch examples to the unified commands entry point. Add changesets. --- .changeset/mf-runtime-plugin-options.md | 5 + .changeset/terser-plugin-unpin.md | 5 + .changeset/v6-module-federation-v2.md | 5 + .changeset/v6-node-22.md | 10 ++ .changeset/v6-react-native-079.md | 6 ++ .changeset/v6-remove-deprecated.md | 6 ++ website/src/latest/api/cli/bundle.mdx | 7 -- website/src/latest/api/cli/start.mdx | 7 -- website/src/latest/api/plugins/_meta.json | 5 - .../src/latest/api/plugins/code-signing.md | 42 +++----- .../api/plugins/module-federation-v1.mdx | 98 ------------------- .../api/plugins/module-federation-v2.mdx | 6 +- .../latest/docs/features/module-federation.md | 4 +- .../docs/getting-started/quick-start.mdx | 10 +- .../latest/docs/migration-guides/_meta.json | 2 +- .../latest/docs/migration-guides/metro.mdx | 23 ++--- .../docs/migration-guides/repack-v5.mdx | 82 ++++++++++++++++ .../latest/docs/migration-guides/rspack.mdx | 5 +- 18 files changed, 152 insertions(+), 176 deletions(-) create mode 100644 .changeset/mf-runtime-plugin-options.md create mode 100644 .changeset/terser-plugin-unpin.md create mode 100644 .changeset/v6-module-federation-v2.md create mode 100644 .changeset/v6-node-22.md create mode 100644 .changeset/v6-react-native-079.md create mode 100644 .changeset/v6-remove-deprecated.md delete mode 100644 website/src/latest/api/plugins/module-federation-v1.mdx create mode 100644 website/src/latest/docs/migration-guides/repack-v5.mdx diff --git a/.changeset/mf-runtime-plugin-options.md b/.changeset/mf-runtime-plugin-options.md new file mode 100644 index 000000000..03ffef5e1 --- /dev/null +++ b/.changeset/mf-runtime-plugin-options.md @@ -0,0 +1,5 @@ +--- +'@callstack/repack': patch +--- + +Keep Module Federation runtime plugins passed as `[path, options]` tuples in `ModuleFederationPluginV2`. They were previously dropped silently. diff --git a/.changeset/terser-plugin-unpin.md b/.changeset/terser-plugin-unpin.md new file mode 100644 index 000000000..2ae7080e2 --- /dev/null +++ b/.changeset/terser-plugin-unpin.md @@ -0,0 +1,5 @@ +--- +'@callstack/repack': patch +--- + +Depend on `terser-webpack-plugin@^5.6.1` instead of pinning `5.5.0`. diff --git a/.changeset/v6-module-federation-v2.md b/.changeset/v6-module-federation-v2.md new file mode 100644 index 000000000..96e2ec577 --- /dev/null +++ b/.changeset/v6-module-federation-v2.md @@ -0,0 +1,5 @@ +--- +'@callstack/repack': major +--- + +Drop Module Federation V1 and require `@module-federation/enhanced` 2.0 or newer. Removed `ModuleFederationPluginV1` and the `Federated` helpers (`Federated.SHARED_REACT`, `Federated.SHARED_REACT_NATIVE` and `Federated.createRemote` from `@callstack/repack`, `Federated.createURLResolver` and `Federated.importModule` from `@callstack/repack/client`). `Repack.plugins.ModuleFederationPlugin` is now an alias of `ModuleFederationPluginV2`. diff --git a/.changeset/v6-node-22.md b/.changeset/v6-node-22.md new file mode 100644 index 000000000..cb3d88408 --- /dev/null +++ b/.changeset/v6-node-22.md @@ -0,0 +1,10 @@ +--- +'@callstack/repack': major +'@callstack/repack-dev-server': major +'@callstack/repack-init': major +'@callstack/repack-plugin-expo-modules': major +'@callstack/repack-plugin-nativewind': major +'@callstack/repack-plugin-reanimated': major +--- + +Require Node.js 22.12 or newer. Node.js 18 and 20 are no longer supported. diff --git a/.changeset/v6-react-native-079.md b/.changeset/v6-react-native-079.md new file mode 100644 index 000000000..5bd2d91d6 --- /dev/null +++ b/.changeset/v6-react-native-079.md @@ -0,0 +1,6 @@ +--- +'@callstack/repack': major +'@callstack/repack-dev-server': major +--- + +Require React Native 0.79 or newer. Removed code paths for older React Native versions: the pre-0.79 `HMRClient` named exports, `text/plain` symbolication requests, the `enableNewDebugger` dev-middleware experiment, the React Native <= 0.73 Android `CallInvoker` sources and the AGP < 7.3 / pre-0.76 Android build branches. The iOS pod now uses React Native's `min_ios_version_supported` deployment target instead of iOS 12. diff --git a/.changeset/v6-remove-deprecated.md b/.changeset/v6-remove-deprecated.md new file mode 100644 index 000000000..68091c8ee --- /dev/null +++ b/.changeset/v6-remove-deprecated.md @@ -0,0 +1,6 @@ +--- +'@callstack/repack': major +'@callstack/repack-plugin-reanimated': major +--- + +Remove APIs deprecated in Re.Pack 5: `ChunksToHermesBytecodePlugin` (use `HermesBytecodePlugin`), `getPublicPath`, the `--webpackConfig` CLI option (use `--config`), the `@callstack/repack/commands/rspack` and `@callstack/repack/commands/webpack` entry points (use `@callstack/repack/commands`), and `reanimatedModuleRules` from `@callstack/repack-plugin-reanimated` (use `reanimated3ModuleRules` or `reanimated4ModuleRules`). `OutputPlugin` now rejects the no-op `output.bundleFilename`, `output.sourceMapFilename` and `output.assetsPath` options. diff --git a/website/src/latest/api/cli/bundle.mdx b/website/src/latest/api/cli/bundle.mdx index a8fecc25e..d2ecd97c1 100644 --- a/website/src/latest/api/cli/bundle.mdx +++ b/website/src/latest/api/cli/bundle.mdx @@ -138,13 +138,6 @@ Path to a bundler config file, e.g rspack.config.js. Select the bundler explicitly. Without this option, Re.Pack infers the bundler from the `--config` filename, then checks the standard Rspack and webpack config filenames, and defaults to Rspack. -### `--webpackConfig` - -- Type: `string` -- Deprecated: Use [`--config`](#--config) instead - -Path to a bundler config file, e.g webpack.config.js. - ### `-h`, `--help` Display help for command. diff --git a/website/src/latest/api/cli/start.mdx b/website/src/latest/api/cli/start.mdx index 95aa0d258..404481ee3 100644 --- a/website/src/latest/api/cli/start.mdx +++ b/website/src/latest/api/cli/start.mdx @@ -116,13 +116,6 @@ Path to a bundler config file, e.g webpack.config.js. Select the bundler explicitly. Without this option, Re.Pack infers the bundler from the `--config` filename, then checks the standard Rspack and webpack config filenames, and defaults to Rspack. -### `--webpackConfig` - -- Type: `path` -- Deprecated: Use [`--config`](#--config) instead - -Path to a bundler config file, e.g webpack.config.js. - ### `-h`, `--help` Display help for command. diff --git a/website/src/latest/api/plugins/_meta.json b/website/src/latest/api/plugins/_meta.json index 3d3c3ddad..43eca7e18 100644 --- a/website/src/latest/api/plugins/_meta.json +++ b/website/src/latest/api/plugins/_meta.json @@ -4,11 +4,6 @@ "name": "repack", "label": "RepackPlugin" }, - { - "type": "file", - "name": "module-federation-v1", - "label": "ModuleFederationPluginV1" - }, { "type": "file", "name": "module-federation-v2", diff --git a/website/src/latest/api/plugins/code-signing.md b/website/src/latest/api/plugins/code-signing.md index 4cca3cfff..b70b70fd1 100644 --- a/website/src/latest/api/plugins/code-signing.md +++ b/website/src/latest/api/plugins/code-signing.md @@ -198,24 +198,16 @@ Integrity verification can be set (through `verifyScriptSignature`) to one of th Go to `index.js` and modify your `ScriptManager` setup like this: -```js title="index.js" {17} -import { ScriptManager, Federated } from "@callstack/repack/client"; +```js title="index.js" {9} +import { Platform } from "react-native"; +import { ScriptManager } from "@callstack/repack/client"; -const containers = { - MiniApp: "http://localhost:9000/[name][ext]", -}; - -ScriptManager.shared.addResolver(async (scriptId, caller) => { - const resolveURL = Federated.createURLResolver({ containers }); - - const url = resolveURL(scriptId, caller); - if (url) { - return { - url, - query: { platform: Platform.OS }, - verifyScriptSignature: __DEV__ ? "off" : "strict", - }; - } +ScriptManager.shared.addResolver(async (scriptId) => { + return { + url: `https://cdn.example.com/${Platform.OS}/${scriptId}.chunk.bundle`, + query: { platform: Platform.OS }, + verifyScriptSignature: __DEV__ ? "off" : "strict", + }; }); ``` @@ -224,19 +216,11 @@ ScriptManager.shared.addResolver(async (scriptId, caller) => { If different teams sign different bundles, the resolver can provide a script-specific public key at runtime. When `publicKey` is present, Re.Pack uses it for verification. When it is omitted, Re.Pack falls back to the key embedded in the app under `RepackPublicKey`. ```js title="index.js" -import { ScriptManager, Federated } from "@callstack/repack/client"; - -const containers = { - MiniApp: "https://cdn.example.com/[name][ext]", -}; - -ScriptManager.shared.addResolver(async (scriptId, caller) => { - const resolveURL = Federated.createURLResolver({ containers }); - const url = resolveURL(scriptId, caller); +import { Platform } from "react-native"; +import { ScriptManager } from "@callstack/repack/client"; - if (!url) { - return; - } +ScriptManager.shared.addResolver(async (scriptId) => { + const url = `https://cdn.example.com/${Platform.OS}/${scriptId}.chunk.bundle`; const metadata = await fetch( `https://api.example.com/miniapps/${scriptId}/bundle-metadata` diff --git a/website/src/latest/api/plugins/module-federation-v1.mdx b/website/src/latest/api/plugins/module-federation-v1.mdx deleted file mode 100644 index 036e97cd1..000000000 --- a/website/src/latest/api/plugins/module-federation-v1.mdx +++ /dev/null @@ -1,98 +0,0 @@ -# ModuleFederationPluginV1 - -:::caution Deprecated -This plugin is deprecated and maintained only for compatibility reasons. - -You should be using [Module Federation Plugin V2](/api/plugins/module-federation-v2) -which provides enhanced features like dynamic type hinting, manifest support and Federation Runtime - learn more in the [Module Federation 2.0 documentation](https://module-federation.io/guide/start/index.html#-what-is-module-federation-20). -::: - -This plugin is designed to configure Module Federation. It's an enhanced version of the standard Module Federation plugin that's specifically tailored for React Native environments. - -:::info About configuration options - -This documentation describes only Re.Pack-specific configuration options. - -For the complete configuration reference, please use the official bundler specific documentation: -- [Rspack's ModuleFederationPlugin](https://rspack.rs/plugins/module-federation-plugin-v1) -- [Webpack's ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) - -::: - -## Usage - -```js title="rspack.config.cjs" -const Repack = require("@callstack/repack"); - -module.exports = { - output: { - // set uniqueName explicitly to make HMR works - uniqueName: 'host', - }, - plugins: [ - new Repack.plugins.ModuleFederationPluginV1({ - // options - }), - ], -}; -``` - -## Configuration - -### reactNativeDeepImports - -- Type: `boolean` -- Default: `true` - -Enable or disable adding React Native deep imports to shared dependencies. When enabled, the plugin will automatically add: - -- `react-native/` for deep imports from React Native core -- `@react-native/` for deep imports from official React Native packages - -This ensures proper sharing of deep imports and single instances of things like `assetsRegistry`. - -:::info What are deep imports? -Deep imports are when you import from a specific subdirectory or file within a package rather than the package's main entry point. For example: - -```js -// Deep import from React Native core -import { PixelRatio } from "react-native/Libraries/Utilities/PixelRatio"; - -// Deep import from React Native package -import { something } from "@react-native/assets-registry"; -``` - -React Native uses deep imports extensively in its internal implementation. The `reactNativeDeepImports` option ensures these imports are properly shared between federated modules. - -This feature solves a common Module Federation issue where deep imports create separate instances in host and remote apps - see this [Stack Overflow discussion](https://stackoverflow.com/questions/65636979/wp5-module-federation-sharing-deep-imports) for the original problem. -::: - -## Examples - -### Host Configuration - -```js -new Repack.plugins.ModuleFederationPluginV1({ - name: "host", - shared: { - react: { singleton: true, eager: true }, - "react-native": { singleton: true, eager: true }, - }, -}); -``` - -### Remote Configuration - -```js -new Repack.plugins.ModuleFederationPluginV1({ - name: "module1", - exposes: { - "./entry": "./src/entry.js", - }, - shared: { - react: { singleton: true, eager: false }, - "react-native": { singleton: true, eager: false }, - }, -}); -``` - diff --git a/website/src/latest/api/plugins/module-federation-v2.mdx b/website/src/latest/api/plugins/module-federation-v2.mdx index 8eec43407..a7bee557a 100644 --- a/website/src/latest/api/plugins/module-federation-v2.mdx +++ b/website/src/latest/api/plugins/module-federation-v2.mdx @@ -9,6 +9,10 @@ This documentation describes only Re.Pack-specific configuration options. For th All standard Module Federation 2.0 options are supported in addition to the options described below. ::: +:::tip Alias +Since Re.Pack 6, `Repack.plugins.ModuleFederationPlugin` is an alias of `ModuleFederationPluginV2`. +::: + ## Mobile MF Quirks @@ -25,7 +29,7 @@ The plugin extends the standard Module Federation 2.0 plugin with functionality ## Installation -First, install the official `@module-federation/enhanced` package which is required by Re.Pack: +First, install the official `@module-federation/enhanced` package (version 2.0 or newer) which is required by Re.Pack: import { PackageManagerTabs } from '@theme'; diff --git a/website/src/latest/docs/features/module-federation.md b/website/src/latest/docs/features/module-federation.md index 625ce9f5f..f676d266a 100644 --- a/website/src/latest/docs/features/module-federation.md +++ b/website/src/latest/docs/features/module-federation.md @@ -153,9 +153,9 @@ npx react-native start --port 8082 ## Migrating from V1 -`ModuleFederationPluginV1` will be removed in the next major. To move to V2: +`ModuleFederationPluginV1` and the `Federated` helpers were removed in Re.Pack 6. To move to V2: -1. Install `@module-federation/enhanced` and replace `ModuleFederationPluginV1` with `ModuleFederationPluginV2` in every config. +1. Install `@module-federation/enhanced` (2.0 or newer) and replace `ModuleFederationPluginV1` with `ModuleFederationPluginV2` in every config. 2. Point remotes to the manifest instead of the container bundle: ```diff diff --git a/website/src/latest/docs/getting-started/quick-start.mdx b/website/src/latest/docs/getting-started/quick-start.mdx index cfb325eb2..c5832b5dc 100644 --- a/website/src/latest/docs/getting-started/quick-start.mdx +++ b/website/src/latest/docs/getting-started/quick-start.mdx @@ -11,13 +11,9 @@ If you're already familiar with JavaScript, React Native and webpack, then you'l ## Minimum requirements -- Node >= 18 (we recommend 22 or newer) - -:::note On React Native Version - -The absolute minimum required version of React Native is 0.74.0, which contains fixes enabling proper SWC transpilation. While versions lower than 0.74 might work, they will most likely only function with Webpack. - -::: +- Node >= 22.12 (we recommend 24 or newer) +- React Native >= 0.79 +- `@module-federation/enhanced` >= 2.0 (only when using Module Federation) :::info Version Support Policy diff --git a/website/src/latest/docs/migration-guides/_meta.json b/website/src/latest/docs/migration-guides/_meta.json index 1b19855b6..5be6da17b 100644 --- a/website/src/latest/docs/migration-guides/_meta.json +++ b/website/src/latest/docs/migration-guides/_meta.json @@ -1 +1 @@ -["metro", "repack-v4", "rspack"] +["metro", "repack-v5", "repack-v4", "rspack"] diff --git a/website/src/latest/docs/migration-guides/metro.mdx b/website/src/latest/docs/migration-guides/metro.mdx index 3e2ff5e0e..6f8f75906 100644 --- a/website/src/latest/docs/migration-guides/metro.mdx +++ b/website/src/latest/docs/migration-guides/metro.mdx @@ -31,22 +31,13 @@ Once the dependencies are installed, you need to tell React Native Community CLI Add the following content to `react-native.config.js` (or create it if it doesn't exist): - - - ```js title="react-native.config.js" - module.exports = { - commands: require('@callstack/repack/commands/rspack'), - }; - ``` - - - ```js title="react-native.config.js" - module.exports = { - commands: require('@callstack/repack/commands/webpack'), - }; - ``` - - +```js title="react-native.config.js" +module.exports = { + commands: require('@callstack/repack/commands'), +}; +``` + +Re.Pack picks Rspack or webpack based on your config file name (`rspack.config.*` or `webpack.config.*`). Use the [`--bundler`](/api/cli/start#--bundler) option to select one explicitly. This will allow you to use Re.Pack when running `react-native start` and `react-native bundle` commands. diff --git a/website/src/latest/docs/migration-guides/repack-v5.mdx b/website/src/latest/docs/migration-guides/repack-v5.mdx new file mode 100644 index 000000000..b9c07df84 --- /dev/null +++ b/website/src/latest/docs/migration-guides/repack-v5.mdx @@ -0,0 +1,82 @@ +# Migrating from Re.Pack 5 + +Re.Pack 6 raises the minimum supported versions of Node.js, React Native and Module Federation, and removes APIs that were deprecated in Re.Pack 5. + +## Update dependencies in `package.json` + +```diff +{ + "devDependencies": { +- "@callstack/repack": "5.x.x" ++ "@callstack/repack": "^6.0.0" + } +} +``` + +Update the Re.Pack plugins you use (`@callstack/repack-plugin-*`) to the same major version. + +## Minimum supported versions + +| Dependency | Re.Pack 5 | Re.Pack 6 | +| ----------------------------- | ----------- | --------- | +| Node.js | `>=18` | `>=22.12` | +| React Native | `>=0.74` | `>=0.79` | +| `@module-federation/enhanced` | `>=0.6.10` | `>=2.0.0` | + +## Module Federation V1 was removed + +`ModuleFederationPluginV1` is no longer available, and `Repack.plugins.ModuleFederationPlugin` now points to [`ModuleFederationPluginV2`](/api/plugins/module-federation-v2). Follow [Migrating from V1](/docs/features/module-federation#migrating-from-v1) to move your configs to Module Federation 2.0. + +The `Federated` helpers, which only worked with V1, were removed as well: + +- `Federated.SHARED_REACT`, `Federated.SHARED_REACT_NATIVE` and `Federated.createRemote` from `@callstack/repack` +- `Federated.createURLResolver` and `Federated.importModule` from `@callstack/repack/client` + +## Removed deprecated APIs + +### `ChunksToHermesBytecodePlugin` + +Use `HermesBytecodePlugin` instead. The options are the same. + +```diff +- new Repack.plugins.ChunksToHermesBytecodePlugin({ ... }) ++ new Repack.plugins.HermesBytecodePlugin({ ... }) +``` + +### `getPublicPath` + +Remove the call. Re.Pack configures `output.publicPath` out of the box. + +```diff + output: { +- publicPath: Repack.getPublicPath({ platform, devServer }), + }, +``` + +### `--webpackConfig` CLI option + +Use [`--config`](/api/cli/start#--config) instead. + +```diff +- react-native start --webpackConfig webpack.config.js ++ react-native start --config webpack.config.js +``` + +### `@callstack/repack/commands/rspack` and `@callstack/repack/commands/webpack` + +Use the unified commands. They pick the bundler based on the config file name, or the [`--bundler`](/api/cli/start#--bundler) option. + +```diff title="react-native.config.js" +module.exports = { +- commands: require('@callstack/repack/commands/rspack'), ++ commands: require('@callstack/repack/commands'), +}; +``` + +### `OutputPlugin` output options + +`output.bundleFilename`, `output.sourceMapFilename` and `output.assetsPath` had no effect since Re.Pack 5 and are now rejected by `OutputPlugin`'s option validation. Remove them and use the `--bundle-output`, `--sourcemap-output` and `--assets-dest` CLI options instead. + +### `reanimatedModuleRules` from `@callstack/repack-plugin-reanimated` + +Use `reanimated3ModuleRules` or `reanimated4ModuleRules`, matching the version of `react-native-reanimated` in your project. `reanimatedModuleRules` was an alias of `reanimated3ModuleRules`. diff --git a/website/src/latest/docs/migration-guides/rspack.mdx b/website/src/latest/docs/migration-guides/rspack.mdx index 3883b4e29..724d32fa0 100644 --- a/website/src/latest/docs/migration-guides/rspack.mdx +++ b/website/src/latest/docs/migration-guides/rspack.mdx @@ -25,13 +25,12 @@ To use Rspack, you'll need to update your dependencies by adding the following: ## Update `react-native.config.js` -Since Re.Pack now supports multiple bundlers, you need to specify that you want to use Rspack commands explicitly. -Update your `react-native.config.js` file to use Rspack commands: +Make sure your `react-native.config.js` uses the unified Re.Pack commands. They pick the bundler based on the config file name, so renaming the config to `rspack.config.*` (see below) is enough to switch to Rspack: ```diff title="react-native.config.js" module.exports = { - commands: require('@callstack/repack/commands/webpack'), -+ commands: require('@callstack/repack/commands/rspack'), ++ commands: require('@callstack/repack/commands'), }; ``` From fe389be4c8f124104b9804ba6ce0c26d012162cf Mon Sep 17 00:00:00 2001 From: Daniel Williams Date: Fri, 9 Oct 2026 19:36:47 +0100 Subject: [PATCH 6/9] refactor!: remove remaining React Native < 0.79 code paths Load DevLoadingView and AssetSourceResolver through their default exports only, drop the dev-only __REACT_NATIVE_*_VERSION__ globals that existed to pick between them, and remove the NDK < 27 page-size flag, the merged libreactnativejni.so exclude and the AGP 7.3.1 buildscript from the Android library. ScriptManagerPackage now extends BaseReactPackage and uses the non-deprecated ReactModuleInfo constructor. --- .changeset/v6-react-native-079.md | 2 +- packages/repack/android/CMakeLists.txt | 5 ---- packages/repack/android/build.gradle | 25 +++-------------- .../callstack/repack/ScriptManagerPackage.kt | 12 ++++----- .../assetsLoader/convertToRemoteAssets.ts | 3 +-- .../src/loaders/assetsLoader/inlineAssets.ts | 11 ++------ .../repack/src/modules/WebpackHMRClient.ts | 27 ++++--------------- .../repack/src/plugins/DevelopmentPlugin.ts | 8 ------ .../repack/src/types/runtime-globals.d.ts | 3 --- tests/integration/src/helpers.ts | 2 +- 10 files changed, 19 insertions(+), 79 deletions(-) diff --git a/.changeset/v6-react-native-079.md b/.changeset/v6-react-native-079.md index 5bd2d91d6..ad445ffdd 100644 --- a/.changeset/v6-react-native-079.md +++ b/.changeset/v6-react-native-079.md @@ -3,4 +3,4 @@ '@callstack/repack-dev-server': major --- -Require React Native 0.79 or newer. Removed code paths for older React Native versions: the pre-0.79 `HMRClient` named exports, `text/plain` symbolication requests, the `enableNewDebugger` dev-middleware experiment, the React Native <= 0.73 Android `CallInvoker` sources and the AGP < 7.3 / pre-0.76 Android build branches. The iOS pod now uses React Native's `min_ios_version_supported` deployment target instead of iOS 12. +Require React Native 0.79 or newer. Removed code paths for older React Native versions: the pre-0.79 `HMRClient` named exports, the pre-0.79 `DevLoadingView` / `LoadingView` and `AssetSourceResolver` interop, the dev-only `__REACT_NATIVE_MAJOR_VERSION__`, `__REACT_NATIVE_MINOR_VERSION__` and `__REACT_NATIVE_PATCH_VERSION__` globals, `text/plain` symbolication requests, the `enableNewDebugger` dev-middleware experiment, the React Native <= 0.73 Android `CallInvoker` sources and the AGP < 7.3 / pre-0.76 / NDK < 27 Android build branches. The Android library no longer declares its own Android Gradle Plugin classpath and uses `BaseReactPackage`. The iOS pod now uses React Native's `min_ios_version_supported` deployment target instead of iOS 12. diff --git a/packages/repack/android/CMakeLists.txt b/packages/repack/android/CMakeLists.txt index 2f0640a1e..d597c68de 100644 --- a/packages/repack/android/CMakeLists.txt +++ b/packages/repack/android/CMakeLists.txt @@ -42,8 +42,3 @@ target_link_libraries( fbjni::fbjni ReactAndroid::jsi ) - -# Enable Android 16kb native library alignment -if(CMAKE_ANDROID_NDK_VERSION VERSION_LESS "27") - target_link_options(${PACKAGE_NAME} PRIVATE "-Wl,-z,max-page-size=16384") -endif() diff --git a/packages/repack/android/build.gradle b/packages/repack/android/build.gradle index 09701cbec..415a91156 100644 --- a/packages/repack/android/build.gradle +++ b/packages/repack/android/build.gradle @@ -1,21 +1,5 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -buildscript { - // Buildscript is evaluated before everything else so we can't use getExtOrDefault - def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : project.properties['RePack_kotlinVersion'] - - repositories { - google() - mavenCentral() - } - - dependencies { - classpath("com.android.tools.build:gradle:7.3.1") - // noinspection DifferentKotlinGradleVersion - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - def isNewArchitectureEnabled() { return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" } @@ -67,7 +51,7 @@ def IS_NEW_ARCHITECTURE_ENABLED = isNewArchitectureEnabled() android { namespace "com.callstack.repack" - compileSdkVersion getExtOrIntegerDefault('compileSdkVersion') + compileSdk getExtOrIntegerDefault('compileSdkVersion') if (rootProject.hasProperty("ndkPath")) { ndkPath rootProject.ext.ndkPath @@ -81,8 +65,8 @@ android { } defaultConfig { - minSdkVersion getExtOrIntegerDefault('minSdkVersion') - targetSdkVersion getExtOrIntegerDefault('targetSdkVersion') + minSdk getExtOrIntegerDefault('minSdkVersion') + targetSdk getExtOrIntegerDefault('targetSdkVersion') versionCode 1 versionName "1.0" consumerProguardFiles "consumer-rules.pro" @@ -104,7 +88,7 @@ android { } } - lintOptions { + lint { disable 'GradleCompatible' } @@ -122,7 +106,6 @@ android { "**/libjsi.so", "**/libc++_shared.so", "**/libfbjni.so", - "**/libreactnativejni.so", "**/libreactnative.so", "**/libhermestooling.so", ] diff --git a/packages/repack/android/src/main/java/com/callstack/repack/ScriptManagerPackage.kt b/packages/repack/android/src/main/java/com/callstack/repack/ScriptManagerPackage.kt index 129857ac3..c2f327ca9 100644 --- a/packages/repack/android/src/main/java/com/callstack/repack/ScriptManagerPackage.kt +++ b/packages/repack/android/src/main/java/com/callstack/repack/ScriptManagerPackage.kt @@ -1,12 +1,12 @@ package com.callstack.repack -import com.facebook.react.TurboReactPackage +import com.facebook.react.BaseReactPackage import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.module.model.ReactModuleInfo import com.facebook.react.module.model.ReactModuleInfoProvider -class ScriptManagerPackage : TurboReactPackage() { +class ScriptManagerPackage : BaseReactPackage() { override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? { return if (name == ScriptManagerModule.NAME) { ScriptManagerModule(reactContext) @@ -19,14 +19,12 @@ class ScriptManagerPackage : TurboReactPackage() { return ReactModuleInfoProvider { val moduleInfos: MutableMap = HashMap() val isTurboModule: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - // Use deprecated constructor for backwards compatibility moduleInfos[ScriptManagerModule.NAME] = ReactModuleInfo( ScriptManagerModule.NAME, ScriptManagerModule.NAME, - false, - true, - false, - false, + false, // canOverrideExistingModule + true, // needsEagerInit + false, // isCxxModule isTurboModule ) moduleInfos diff --git a/packages/repack/src/loaders/assetsLoader/convertToRemoteAssets.ts b/packages/repack/src/loaders/assetsLoader/convertToRemoteAssets.ts index b8e95f1a4..15d331507 100644 --- a/packages/repack/src/loaders/assetsLoader/convertToRemoteAssets.ts +++ b/packages/repack/src/loaders/assetsLoader/convertToRemoteAssets.ts @@ -43,8 +43,7 @@ export function convertToRemoteAssets({ }); return dedent` - var AssetSourceResolver = require('react-native/Libraries/Image/AssetSourceResolver'); - if ('default' in AssetSourceResolver) AssetSourceResolver = AssetSourceResolver.default; + var AssetSourceResolver = require('react-native/Libraries/Image/AssetSourceResolver').default; var resolver = new AssetSourceResolver(undefined, undefined, ${asset}); module.exports = resolver.scaledAssetPath(); diff --git a/packages/repack/src/loaders/assetsLoader/inlineAssets.ts b/packages/repack/src/loaders/assetsLoader/inlineAssets.ts index 9dd776c5e..45f002a62 100644 --- a/packages/repack/src/loaders/assetsLoader/inlineAssets.ts +++ b/packages/repack/src/loaders/assetsLoader/inlineAssets.ts @@ -33,17 +33,10 @@ export function inlineAssets({ const scales = JSON.stringify(Object.keys(sourceSet).map(Number)); - /** - * To enable scale resolution in runtime we need to import PixelRatio & AssetSourceResolver - * Although we could use AssetSourceResolver as it is, we need to import PixelRatio to remain - * compatible with older versions of React-Native. Newer versions of React-Native use - * ESM for PixelRatio, so we need to check if PixelRatio is an ESM module and if so, adjust the import. - */ + // Pick the scale matching the device pixel ratio at runtime. return dedent` var PixelRatio = require('react-native').PixelRatio; - var AssetSourceResolver = require('react-native/Libraries/Image/AssetSourceResolver'); - - if ('default' in AssetSourceResolver) AssetSourceResolver = AssetSourceResolver.default; + var AssetSourceResolver = require('react-native/Libraries/Image/AssetSourceResolver').default; var prefferedScale = AssetSourceResolver.pickScale(${scales}, PixelRatio.get()); module.exports = ${JSON.stringify(sourceSet)}[prefferedScale]; diff --git a/packages/repack/src/modules/WebpackHMRClient.ts b/packages/repack/src/modules/WebpackHMRClient.ts index c421e1f7e..347d74e67 100644 --- a/packages/repack/src/modules/WebpackHMRClient.ts +++ b/packages/repack/src/modules/WebpackHMRClient.ts @@ -173,32 +173,15 @@ if (__DEV__ && module.hot) { LogBox.clearAllLogs(); }; - const showLoadingView = (text: string, type: 'load' | 'refresh') => { - let LoadingView: RNLoadingView; - if (__REACT_NATIVE_MINOR_VERSION__ >= 79) { - LoadingView = - require('react-native/Libraries/Utilities/DevLoadingView').default; - } else if (__REACT_NATIVE_MINOR_VERSION__ >= 75) { - LoadingView = require('react-native/Libraries/Utilities/DevLoadingView'); - } else { - LoadingView = require('react-native/Libraries/Utilities/LoadingView'); - } + const getLoadingView = (): RNLoadingView => + require('react-native/Libraries/Utilities/DevLoadingView').default; - LoadingView.showMessage(text, type); + const showLoadingView = (text: string, type: 'load' | 'refresh') => { + getLoadingView().showMessage(text, type); }; const hideLoadingView = () => { - let LoadingView: RNLoadingView; - if (__REACT_NATIVE_MINOR_VERSION__ >= 79) { - LoadingView = - require('react-native/Libraries/Utilities/DevLoadingView').default; - } else if (__REACT_NATIVE_MINOR_VERSION__ >= 75) { - LoadingView = require('react-native/Libraries/Utilities/DevLoadingView'); - } else { - LoadingView = require('react-native/Libraries/Utilities/LoadingView'); - } - - LoadingView.hide(); + getLoadingView().hide(); }; new HMRClient({ diff --git a/packages/repack/src/plugins/DevelopmentPlugin.ts b/packages/repack/src/plugins/DevelopmentPlugin.ts index d6dccfda3..942c2dc19 100644 --- a/packages/repack/src/plugins/DevelopmentPlugin.ts +++ b/packages/repack/src/plugins/DevelopmentPlugin.ts @@ -12,7 +12,6 @@ import { isRspackCompiler, moveElementBefore } from '../helpers/index.js'; const [reactRefreshEntryPath, reactRefreshPath, refreshUtilsPath] = ReactRefreshPlugin.deprecated_runtimePaths; -type PackageJSON = { version: string }; /** * {@link DevelopmentPlugin} configuration options. */ @@ -97,10 +96,6 @@ export class DevelopmentPlugin { return; } - const reactNativePackageJson: PackageJSON = require('react-native/package.json'); - const [majorVersion, minorVersion, patchVersion] = - reactNativePackageJson.version.split('-')[0].split('.'); - const host = compiler.options.devServer.host; const port = compiler.options.devServer.port; // @ts-expect-error: devServertypes here are not being overridden properly @@ -112,9 +107,6 @@ export class DevelopmentPlugin { __PUBLIC_PROTOCOL__: JSON.stringify(protocol), __PUBLIC_HOST__: JSON.stringify(host), __PUBLIC_PORT__: Number(port), - __REACT_NATIVE_MAJOR_VERSION__: Number(majorVersion), - __REACT_NATIVE_MINOR_VERSION__: Number(minorVersion), - __REACT_NATIVE_PATCH_VERSION__: Number(patchVersion), }).apply(compiler); if (compiler.options.devServer.hot) { diff --git a/packages/repack/src/types/runtime-globals.d.ts b/packages/repack/src/types/runtime-globals.d.ts index 6f4c03db3..6afb2ef3f 100644 --- a/packages/repack/src/types/runtime-globals.d.ts +++ b/packages/repack/src/types/runtime-globals.d.ts @@ -94,9 +94,6 @@ declare var __PUBLIC_PROTOCOL__: string; declare var __PUBLIC_HOST__: string; declare var __PUBLIC_PORT__: number; declare var __PLATFORM__: string; -declare var __REACT_NATIVE_MAJOR_VERSION__: number; -declare var __REACT_NATIVE_MINOR_VERSION__: number; -declare var __REACT_NATIVE_PATCH_VERSION__: number; declare var __webpack_public_path__: string; declare var __webpack_hash__: string; declare var __repack__: RepackRuntimeGlobals.RepackRuntimeObject; diff --git a/tests/integration/src/helpers.ts b/tests/integration/src/helpers.ts index ea231fe62..f75c69341 100644 --- a/tests/integration/src/helpers.ts +++ b/tests/integration/src/helpers.ts @@ -91,7 +91,7 @@ export function getReactNativeVirtualModules( 'node_modules/react-native/Libraries/Image/AssetRegistry.js': 'module.exports = { registerAsset: (spec) => spec };', 'node_modules/react-native/Libraries/Image/AssetSourceResolver.js': ` - module.exports = class AssetSourceResolver { + exports.default = class AssetSourceResolver { constructor(a, b, c) { this.asset = c; } From d1124501504628358e0f69a75522618c80cde74f Mon Sep 17 00:00:00 2001 From: Daniel Williams Date: Fri, 9 Oct 2026 20:07:18 +0100 Subject: [PATCH 7/9] feat!: require React Native 0.82 React Native 0.82 removed the legacy architecture, so the native module is now built only as a TurboModule. Remove the Android oldarch/newarch spec sources and the IS_NEW_ARCHITECTURE_ENABLED build config field, always apply the React Native Gradle plugin, and read the call invoker from ReactContext instead of CatalystInstance. On iOS, drop the RCT_NEW_ARCH_ENABLED branches; the codegen spec conformance moves into ScriptManager.mm so the public headers stay importable from the pod's Swift module. Reanimated 3 does not support React Native 0.82, so ReanimatedPlugin now requires Reanimated 4 with react-native-worklets and reanimated3ModuleRules is removed. The hermesc fallback stays because React Native 0.82 still ships hermesc inside the react-native package. --- .changeset/v6-react-native-079.md | 6 ---- .changeset/v6-react-native-082.md | 6 ++++ .changeset/v6-reanimated-4.md | 5 +++ .changeset/v6-remove-deprecated.md | 2 +- packages/plugin-reanimated/src/index.ts | 2 +- packages/plugin-reanimated/src/loader.ts | 3 +- packages/plugin-reanimated/src/plugin.ts | 19 +++++++---- packages/plugin-reanimated/src/rules.ts | 13 +++---- packages/repack/android/build.gradle | 29 ++-------------- .../callstack/repack/NativeScriptLoader.kt | 4 +-- .../callstack/repack/ScriptManagerModule.kt | 3 +- .../callstack/repack/ScriptManagerPackage.kt | 3 +- .../android/src/newarch/ScriptManagerSpec.kt | 7 ---- .../android/src/oldarch/ScriptManagerSpec.kt | 15 -------- packages/repack/ios/ScriptConfig.h | 6 ++-- packages/repack/ios/ScriptConfig.mm | 28 --------------- packages/repack/ios/ScriptManager.h | 8 ++--- packages/repack/ios/ScriptManager.mm | 29 +++------------- packages/repack/package.json | 2 +- .../utils/getHermesCLIPath.ts | 2 +- .../src/latest/docs/features/reanimated.mdx | 34 ++----------------- .../docs/getting-started/quick-start.mdx | 2 +- .../docs/migration-guides/repack-v5.mdx | 15 ++++++-- 23 files changed, 63 insertions(+), 180 deletions(-) delete mode 100644 .changeset/v6-react-native-079.md create mode 100644 .changeset/v6-react-native-082.md create mode 100644 .changeset/v6-reanimated-4.md delete mode 100644 packages/repack/android/src/newarch/ScriptManagerSpec.kt delete mode 100644 packages/repack/android/src/oldarch/ScriptManagerSpec.kt diff --git a/.changeset/v6-react-native-079.md b/.changeset/v6-react-native-079.md deleted file mode 100644 index ad445ffdd..000000000 --- a/.changeset/v6-react-native-079.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@callstack/repack': major -'@callstack/repack-dev-server': major ---- - -Require React Native 0.79 or newer. Removed code paths for older React Native versions: the pre-0.79 `HMRClient` named exports, the pre-0.79 `DevLoadingView` / `LoadingView` and `AssetSourceResolver` interop, the dev-only `__REACT_NATIVE_MAJOR_VERSION__`, `__REACT_NATIVE_MINOR_VERSION__` and `__REACT_NATIVE_PATCH_VERSION__` globals, `text/plain` symbolication requests, the `enableNewDebugger` dev-middleware experiment, the React Native <= 0.73 Android `CallInvoker` sources and the AGP < 7.3 / pre-0.76 / NDK < 27 Android build branches. The Android library no longer declares its own Android Gradle Plugin classpath and uses `BaseReactPackage`. The iOS pod now uses React Native's `min_ios_version_supported` deployment target instead of iOS 12. diff --git a/.changeset/v6-react-native-082.md b/.changeset/v6-react-native-082.md new file mode 100644 index 000000000..21c1e96f6 --- /dev/null +++ b/.changeset/v6-react-native-082.md @@ -0,0 +1,6 @@ +--- +'@callstack/repack': major +'@callstack/repack-dev-server': major +--- + +Require React Native 0.82 or newer with the New Architecture. The native module is now built only as a TurboModule: the legacy architecture Android sources, the `IS_NEW_ARCHITECTURE_ENABLED` build config field and the iOS `RCT_NEW_ARCH_ENABLED` branches were removed, and Android reads the call invoker from `ReactContext` instead of `CatalystInstance`. Also removed code paths for older React Native versions: the pre-0.79 `HMRClient` named exports, the pre-0.79 `DevLoadingView` / `LoadingView` and `AssetSourceResolver` interop, the dev-only `__REACT_NATIVE_MAJOR_VERSION__`, `__REACT_NATIVE_MINOR_VERSION__` and `__REACT_NATIVE_PATCH_VERSION__` globals, `text/plain` symbolication requests, the `enableNewDebugger` dev-middleware experiment, the React Native <= 0.73 Android `CallInvoker` sources and the AGP < 7.3 / pre-0.76 / NDK < 27 Android build branches. The Android library no longer declares its own Android Gradle Plugin classpath and uses `BaseReactPackage`. The iOS pod now uses React Native's `min_ios_version_supported` deployment target instead of iOS 12. diff --git a/.changeset/v6-reanimated-4.md b/.changeset/v6-reanimated-4.md new file mode 100644 index 000000000..2a5f7be5d --- /dev/null +++ b/.changeset/v6-reanimated-4.md @@ -0,0 +1,5 @@ +--- +'@callstack/repack-plugin-reanimated': major +--- + +Require `react-native-reanimated` 4 or newer, since Reanimated 3 doesn't support React Native 0.82. `ReanimatedPlugin` now throws for Reanimated 3, always requires `react-native-worklets`, and only uses `react-native-worklets/plugin`. `reanimated3ModuleRules` was removed; use `reanimated4ModuleRules`. diff --git a/.changeset/v6-remove-deprecated.md b/.changeset/v6-remove-deprecated.md index 68091c8ee..e41dce76f 100644 --- a/.changeset/v6-remove-deprecated.md +++ b/.changeset/v6-remove-deprecated.md @@ -3,4 +3,4 @@ '@callstack/repack-plugin-reanimated': major --- -Remove APIs deprecated in Re.Pack 5: `ChunksToHermesBytecodePlugin` (use `HermesBytecodePlugin`), `getPublicPath`, the `--webpackConfig` CLI option (use `--config`), the `@callstack/repack/commands/rspack` and `@callstack/repack/commands/webpack` entry points (use `@callstack/repack/commands`), and `reanimatedModuleRules` from `@callstack/repack-plugin-reanimated` (use `reanimated3ModuleRules` or `reanimated4ModuleRules`). `OutputPlugin` now rejects the no-op `output.bundleFilename`, `output.sourceMapFilename` and `output.assetsPath` options. +Remove APIs deprecated in Re.Pack 5: `ChunksToHermesBytecodePlugin` (use `HermesBytecodePlugin`), `getPublicPath`, the `--webpackConfig` CLI option (use `--config`), the `@callstack/repack/commands/rspack` and `@callstack/repack/commands/webpack` entry points (use `@callstack/repack/commands`), and `reanimatedModuleRules` from `@callstack/repack-plugin-reanimated` (use `reanimated4ModuleRules`). `OutputPlugin` now rejects the no-op `output.bundleFilename`, `output.sourceMapFilename` and `output.assetsPath` options. diff --git a/packages/plugin-reanimated/src/index.ts b/packages/plugin-reanimated/src/index.ts index 6dce66e78..ee6857ab9 100644 --- a/packages/plugin-reanimated/src/index.ts +++ b/packages/plugin-reanimated/src/index.ts @@ -1,2 +1,2 @@ export { ReanimatedPlugin } from './plugin.js'; -export { reanimated3ModuleRules, reanimated4ModuleRules } from './rules.js'; +export { reanimated4ModuleRules } from './rules.js'; diff --git a/packages/plugin-reanimated/src/loader.ts b/packages/plugin-reanimated/src/loader.ts index 58ae72e48..a267f0546 100644 --- a/packages/plugin-reanimated/src/loader.ts +++ b/packages/plugin-reanimated/src/loader.ts @@ -99,8 +99,7 @@ export function pitch( '`@callstack/repack/babel-swc-loader` you should turn off the ' + 'transforms for `react-native-reanimated` via the ' + '`unstable_disableTransform` option. Instead, please add the ' + - '`react-native-reanimated/plugin` (or ' + - '`react-native-worklets/plugin`) directly to your list of babel ' + + '`react-native-worklets/plugin` directly to your list of babel ' + 'plugins in the `babel.config.js` file in the project root.' ); } diff --git a/packages/plugin-reanimated/src/plugin.ts b/packages/plugin-reanimated/src/plugin.ts index bfcf76c02..1c331535a 100644 --- a/packages/plugin-reanimated/src/plugin.ts +++ b/packages/plugin-reanimated/src/plugin.ts @@ -46,7 +46,7 @@ function warningToSearchableText(warning: unknown): string { interface ReanimatedPluginOptions { /** - * Custom options passed to 'react-native-reanimated/plugin' or 'react-native-worklets/plugin' babel plugins. + * Custom options passed to the 'react-native-worklets/plugin' babel plugin. */ babelPluginOptions?: Record; @@ -74,18 +74,23 @@ export class ReanimatedPlugin { const reanimatedVersion = this.getReanimatedVersion(reanimatedPath); - if (reanimatedVersion.major >= 4) { - this.ensureDependencyInstalled(compiler.context, 'react-native-worklets'); + if (reanimatedVersion.major < 4) { + const error = new Error( + `[RepackReanimatedPlugin] react-native-reanimated ${reanimatedVersion.version} is not supported. ` + + 'Re.Pack 6 requires react-native-reanimated 4 or newer.' + ); + // remove the stack trace to make the error more readable + error.stack = undefined; + throw error; } + this.ensureDependencyInstalled(compiler.context, 'react-native-worklets'); + if (!this.options.unstable_disableTransform) { // add rules for transpiling with reanimated loader // TODO made obsolete by the new babel-swc-loader, remove in 6.0 compiler.options.module.rules.push( - createReanimatedModuleRules( - reanimatedVersion.major, - this.options.babelPluginOptions - ) + createReanimatedModuleRules(this.options.babelPluginOptions) ); } diff --git a/packages/plugin-reanimated/src/rules.ts b/packages/plugin-reanimated/src/rules.ts index 363e3757a..c12fc3a20 100644 --- a/packages/plugin-reanimated/src/rules.ts +++ b/packages/plugin-reanimated/src/rules.ts @@ -1,14 +1,10 @@ import { getModulePaths } from '@callstack/repack'; +const workletsBabelPlugin = 'react-native-worklets/plugin'; + export const createReanimatedModuleRules = ( - majorVersion: number, pluginOptions: Record = {} ) => { - const workletsBabelPlugin = - majorVersion < 4 - ? 'react-native-reanimated/plugin' - : 'react-native-worklets/plugin'; - return { exclude: getModulePaths([ 'react', @@ -66,7 +62,6 @@ export const createReanimatedModuleRules = ( }; }; -const reanimated3ModuleRules = createReanimatedModuleRules(3); -const reanimated4ModuleRules = createReanimatedModuleRules(4); +const reanimated4ModuleRules = createReanimatedModuleRules(); -export { reanimated3ModuleRules, reanimated4ModuleRules }; +export { reanimated4ModuleRules }; diff --git a/packages/repack/android/build.gradle b/packages/repack/android/build.gradle index 415a91156..0745a3943 100644 --- a/packages/repack/android/build.gradle +++ b/packages/repack/android/build.gradle @@ -1,9 +1,3 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - -def isNewArchitectureEnabled() { - return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" -} - apply plugin: 'com.android.library' // AGP 9 ships built-in Kotlin support and registers the `kotlin` extension // itself. Applying the Kotlin plugin on top of it fails configuration with @@ -14,9 +8,7 @@ if (appliesKotlinPlugin) { apply plugin: 'kotlin-android' } -if (isNewArchitectureEnabled()) { - apply plugin: "com.facebook.react" -} +apply plugin: "com.facebook.react" def getExtOrDefault(name) { return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['RePack_' + name] @@ -46,8 +38,6 @@ def REACT_NATIVE_DIR = REACT_NATIVE_BUILD_FROM_SOURCE commandLine("node", "--print", "require.resolve('react-native/package.json')") }.standardOutput.asText.get().trim()).parent -def IS_NEW_ARCHITECTURE_ENABLED = isNewArchitectureEnabled() - android { namespace "com.callstack.repack" @@ -70,7 +60,6 @@ android { versionCode 1 versionName "1.0" consumerProguardFiles "consumer-rules.pro" - buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", IS_NEW_ARCHITECTURE_ENABLED.toString() externalNativeBuild { cmake { cppFlags "-O2 -frtti -fexceptions -Wall -Wno-unused-variable -fstack-protector-all" @@ -111,21 +100,9 @@ android { ] } - // Force rebuild when changing architecture - tasks.withType(KotlinCompile) { - inputs.property 'newArchEnabled', IS_NEW_ARCHITECTURE_ENABLED - } - sourceSets.main { - if (IS_NEW_ARCHITECTURE_ENABLED) { - java.srcDirs += [ - "src/newarch", - // This is needed to build Kotlin project with NewArch enabled - "${project.buildDir}/generated/source/codegen/java" - ] - } else { - java.srcDirs += ["src/oldarch"] - } + // Codegen output for the ScriptManager TurboModule spec + java.srcDirs += ["${project.buildDir}/generated/source/codegen/java"] } } diff --git a/packages/repack/android/src/main/java/com/callstack/repack/NativeScriptLoader.kt b/packages/repack/android/src/main/java/com/callstack/repack/NativeScriptLoader.kt index a0fb5c2ca..3cc727805 100644 --- a/packages/repack/android/src/main/java/com/callstack/repack/NativeScriptLoader.kt +++ b/packages/repack/android/src/main/java/com/callstack/repack/NativeScriptLoader.kt @@ -22,9 +22,7 @@ class NativeScriptLoader(private val reactContext: ReactContext) { ) fun evaluate(script: ByteArray, url: String, promise: Promise? = null) { - // CatalystInstance or BridgelessCatalystInstance - val catalystInstance = reactContext.catalystInstance - val callInvoker = catalystInstance?.jsCallInvokerHolder as? CallInvokerHolderImpl + val callInvoker = reactContext.jsCallInvokerHolder as? CallInvokerHolderImpl ?: throw Exception("Missing CallInvoker") val jsRuntime = reactContext.javaScriptContextHolder?.get() ?: throw Exception("Missing RN Runtime") diff --git a/packages/repack/android/src/main/java/com/callstack/repack/ScriptManagerModule.kt b/packages/repack/android/src/main/java/com/callstack/repack/ScriptManagerModule.kt index 7b4fc448f..e783e2eec 100644 --- a/packages/repack/android/src/main/java/com/callstack/repack/ScriptManagerModule.kt +++ b/packages/repack/android/src/main/java/com/callstack/repack/ScriptManagerModule.kt @@ -1,9 +1,10 @@ package com.callstack.repack import android.os.Handler +import com.facebook.fbreact.specs.NativeScriptManagerSpec import com.facebook.react.bridge.* -class ScriptManagerModule(reactContext: ReactApplicationContext) : ScriptManagerSpec(reactContext) { +class ScriptManagerModule(reactContext: ReactApplicationContext) : NativeScriptManagerSpec(reactContext) { private val nativeLoader = NativeScriptLoader(reactApplicationContext) private val remoteLoader = RemoteScriptLoader(reactApplicationContext, nativeLoader) private val fileSystemLoader = FileSystemScriptLoader(reactApplicationContext, nativeLoader) diff --git a/packages/repack/android/src/main/java/com/callstack/repack/ScriptManagerPackage.kt b/packages/repack/android/src/main/java/com/callstack/repack/ScriptManagerPackage.kt index c2f327ca9..a7b5e3a66 100644 --- a/packages/repack/android/src/main/java/com/callstack/repack/ScriptManagerPackage.kt +++ b/packages/repack/android/src/main/java/com/callstack/repack/ScriptManagerPackage.kt @@ -18,14 +18,13 @@ class ScriptManagerPackage : BaseReactPackage() { override fun getReactModuleInfoProvider(): ReactModuleInfoProvider { return ReactModuleInfoProvider { val moduleInfos: MutableMap = HashMap() - val isTurboModule: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED moduleInfos[ScriptManagerModule.NAME] = ReactModuleInfo( ScriptManagerModule.NAME, ScriptManagerModule.NAME, false, // canOverrideExistingModule true, // needsEagerInit false, // isCxxModule - isTurboModule + true // isTurboModule ) moduleInfos } diff --git a/packages/repack/android/src/newarch/ScriptManagerSpec.kt b/packages/repack/android/src/newarch/ScriptManagerSpec.kt deleted file mode 100644 index 01c7490e0..000000000 --- a/packages/repack/android/src/newarch/ScriptManagerSpec.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.callstack.repack - -import com.facebook.fbreact.specs.NativeScriptManagerSpec -import com.facebook.react.bridge.ReactApplicationContext - -abstract class ScriptManagerSpec internal constructor(context: ReactApplicationContext) : NativeScriptManagerSpec(context) { -} diff --git a/packages/repack/android/src/oldarch/ScriptManagerSpec.kt b/packages/repack/android/src/oldarch/ScriptManagerSpec.kt deleted file mode 100644 index 71701ac8c..000000000 --- a/packages/repack/android/src/oldarch/ScriptManagerSpec.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.callstack.repack - -import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.bridge.ReactContextBaseJavaModule -import com.facebook.react.bridge.Promise -import com.facebook.react.bridge.ReadableArray -import com.facebook.react.bridge.ReadableMap - -abstract class ScriptManagerSpec internal constructor(context: ReactApplicationContext) : - ReactContextBaseJavaModule(context) { - abstract fun loadScript(scriptId: String, configMap: ReadableMap, promise: Promise) - abstract fun prefetchScript(scriptId: String, configMap: ReadableMap, promise: Promise) - abstract fun invalidateScripts(scriptIds: ReadableArray, promise: Promise) - abstract fun unstable_evaluateScript(scriptSource: String, scriptSourceUrl: String): Boolean -} diff --git a/packages/repack/ios/ScriptConfig.h b/packages/repack/ios/ScriptConfig.h index ffafbe110..2c757679e 100644 --- a/packages/repack/ios/ScriptConfig.h +++ b/packages/repack/ios/ScriptConfig.h @@ -1,7 +1,7 @@ #ifndef ScriptConfig_h #define ScriptConfig_h -#ifdef RCT_NEW_ARCH_ENABLED +#ifdef __cplusplus #import "RNScriptManagerSpec.h" #endif @@ -23,11 +23,9 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) NSString *uniqueId; @property (nonatomic, readonly) NSString *sourceUrl; -#ifdef RCT_NEW_ARCH_ENABLED +#ifdef __cplusplus + (ScriptConfig *)fromConfig:(JS::NativeScriptManager::NormalizedScriptLocator &)config withScriptId:(NSString *)scriptId; -#else -+ (ScriptConfig *)fromConfig:(NSDictionary *)config withScriptId:(NSString *)scriptId; #endif - (ScriptConfig *)initWithScript:(NSString *)scriptId diff --git a/packages/repack/ios/ScriptConfig.mm b/packages/repack/ios/ScriptConfig.mm index 65357ebfc..1c88faa4b 100644 --- a/packages/repack/ios/ScriptConfig.mm +++ b/packages/repack/ios/ScriptConfig.mm @@ -17,7 +17,6 @@ @implementation ScriptConfig @synthesize uniqueId = _uniqueId; @synthesize sourceUrl = _sourceUrl; -#ifdef RCT_NEW_ARCH_ENABLED + (ScriptConfig *)fromConfig:(JS::NativeScriptManager::NormalizedScriptLocator &)config withScriptId:(nonnull NSString *)scriptId { @@ -47,33 +46,6 @@ + (ScriptConfig *)fromConfig:(JS::NativeScriptManager::NormalizedScriptLocator & withUniqueId:config.uniqueId() withSourceUrl:sourceUrl]; } -#else -+ (ScriptConfig *)fromConfig:(NSDictionary *)config withScriptId:(nonnull NSString *)scriptId -{ - NSURLComponents *urlComponents = [NSURLComponents componentsWithString:config[@"url"]]; - if (config[@"query"] != nil) { - urlComponents.percentEncodedQuery = config[@"query"]; - } - NSURL *url = urlComponents.URL; - - urlComponents.query = nil; - NSString *sourceUrl = urlComponents.URL.absoluteString; - - return [[ScriptConfig alloc] initWithScript:scriptId - withURL:url - withMethod:config[@"method"] - withQuery:config[@"query"] - withFetch:[config[@"fetch"] boolValue] - withAbsolute:[config[@"absolute"] boolValue] - withHeaders:config[@"headers"] - withBody:[config[@"body"] dataUsingEncoding:NSUTF8StringEncoding] - withTimeout:config[@"timeout"] - withVerifyScriptSignature:config[@"verifyScriptSignature"] - withPublicKey:config[@"publicKey"] - withUniqueId:config[@"uniqueId"] - withSourceUrl:sourceUrl]; -} -#endif - (id)init { diff --git a/packages/repack/ios/ScriptManager.h b/packages/repack/ios/ScriptManager.h index 7bd197f09..aea786594 100644 --- a/packages/repack/ios/ScriptManager.h +++ b/packages/repack/ios/ScriptManager.h @@ -1,12 +1,8 @@ -#ifdef RCT_NEW_ARCH_ENABLED -#import "RNScriptManagerSpec.h" - -@interface ScriptManager : NSObject -#else #import +// Conformance to the C++ codegen spec is declared in ScriptManager.mm so this +// header stays importable from Swift and Objective-C. @interface ScriptManager : NSObject -#endif /** * Factory used to create the `NSURLSession` for downloading remote scripts. diff --git a/packages/repack/ios/ScriptManager.mm b/packages/repack/ios/ScriptManager.mm index e0923cc18..8fa2168d1 100644 --- a/packages/repack/ios/ScriptManager.mm +++ b/packages/repack/ios/ScriptManager.mm @@ -13,15 +13,14 @@ #import #import -@interface RCTBridge (JSIRuntime) -- (void *)runtime; +#import "RNScriptManagerSpec.h" + +@interface ScriptManager () @end -#ifndef RCT_NEW_ARCH_ENABLED -@interface RCTBridge (RCTTurboModule) -- (std::shared_ptr)jsCallInvoker; +@interface RCTBridge (JSIRuntime) +- (void *)runtime; @end -#endif static NSURLSession * (^_urlSessionFactory)(void) = nil; static NSURLSession *_cachedURLSession = nil; @@ -73,19 +72,11 @@ - (NSURLSession *)urlSession return _cachedURLSession; } -#ifdef RCT_NEW_ARCH_ENABLED RCT_EXPORT_METHOD(loadScript : (nonnull NSString *)scriptId scriptConfig : (JS::NativeScriptManager::NormalizedScriptLocator &)scriptConfig resolve : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)reject) -#else -RCT_EXPORT_METHOD(loadScript - : (nonnull NSString *)scriptId scriptConfig - : (nonnull NSDictionary *)scriptConfig resolve - : (RCTPromiseResolveBlock)resolve reject - : (RCTPromiseRejectBlock)reject) -#endif { ScriptConfig *config; @try { @@ -122,19 +113,11 @@ - (NSURLSession *)urlSession }]; } -#ifdef RCT_NEW_ARCH_ENABLED RCT_EXPORT_METHOD(prefetchScript : (nonnull NSString *)scriptId scriptConfig : (JS::NativeScriptManager::NormalizedScriptLocator &)scriptConfig resolve : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)reject) -#else -RCT_EXPORT_METHOD(prefetchScript - : (nonnull NSString *)scriptId scriptConfig - : (nonnull NSDictionary *)scriptConfig resolve - : (RCTPromiseResolveBlock)resolve reject - : (RCTPromiseRejectBlock)reject) -#endif { ScriptConfig *config; @try { @@ -428,12 +411,10 @@ - (void)runInBackground:(void (^)())callback dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), callback); } -#ifdef RCT_NEW_ARCH_ENABLED - (std::shared_ptr)getTurboModule: (const facebook::react::ObjCTurboModule::InitParams &)params { return std::make_shared(params); } -#endif @end diff --git a/packages/repack/package.json b/packages/repack/package.json index 814269cdd..d0079a0ce 100644 --- a/packages/repack/package.json +++ b/packages/repack/package.json @@ -66,7 +66,7 @@ "peerDependencies": { "@module-federation/enhanced": ">=2.0.0", "@rspack/core": ">=1", - "react-native": ">=0.79", + "react-native": ">=0.82", "webpack": ">=5.90" }, "peerDependenciesMeta": { diff --git a/packages/repack/src/plugins/HermesBytecodePlugin/utils/getHermesCLIPath.ts b/packages/repack/src/plugins/HermesBytecodePlugin/utils/getHermesCLIPath.ts index 61b031414..d03c75521 100644 --- a/packages/repack/src/plugins/HermesBytecodePlugin/utils/getHermesCLIPath.ts +++ b/packages/repack/src/plugins/HermesBytecodePlugin/utils/getHermesCLIPath.ts @@ -46,6 +46,6 @@ export const getHermesCLIPath = (reactNativePath: string): string => { return hermesCompilerPath; } - // Fallback to the previous hermesc path in older react native versions, <0.82. + // React Native < 0.83 ships hermesc inside the react-native package. return path.join(reactNativePath, 'sdks', 'hermesc', osBin, 'hermesc'); }; diff --git a/website/src/latest/docs/features/reanimated.mdx b/website/src/latest/docs/features/reanimated.mdx index 6a5a03e8a..0be10f997 100644 --- a/website/src/latest/docs/features/reanimated.mdx +++ b/website/src/latest/docs/features/reanimated.mdx @@ -24,9 +24,9 @@ To add Reanimated support to your Re.Pack project with Rspack, install the plugi -## Usage with Reanimated 4+ +## Usage -For Reanimated 4 and above, the worklet transformation is handled by the `react-native-worklets/plugin` babel plugin. +The plugin requires Reanimated 4 or newer, where the worklet transformation is handled by the `react-native-worklets/plugin` babel plugin. Install the worklets package: @@ -62,33 +62,3 @@ module.exports = { ``` This will disable adding now redundant `babel-loader` rules, and defer the transformation to Babel through `babel-swc-loader`. - - -## Usage with Reanimated 3 - -First add the `react-native-reanimated` babel plugin to your `babel.config.js`: - -```js title="babel.config.js" -module.exports = { - presets: ["module:@react-native/babel-preset"], - plugins: [ - "react-native-reanimated/plugin", - ], -}; -``` - -Then apply the `ReanimatedPlugin` with the unstable_disableTransform option set to `true`. - -```js title="rspack.config.cjs" -const Repack = require("@callstack/repack"); -const { ReanimatedPlugin } = require("@callstack/repack-plugin-reanimated"); - -module.exports = { - plugins: [ - new Repack.RepackPlugin(), - new ReanimatedPlugin({ - unstable_disableTransform: true, - }), - ], -}; -``` diff --git a/website/src/latest/docs/getting-started/quick-start.mdx b/website/src/latest/docs/getting-started/quick-start.mdx index c5832b5dc..ad6efb54e 100644 --- a/website/src/latest/docs/getting-started/quick-start.mdx +++ b/website/src/latest/docs/getting-started/quick-start.mdx @@ -12,7 +12,7 @@ If you're already familiar with JavaScript, React Native and webpack, then you'l ## Minimum requirements - Node >= 22.12 (we recommend 24 or newer) -- React Native >= 0.79 +- React Native >= 0.82 (New Architecture) - `@module-federation/enhanced` >= 2.0 (only when using Module Federation) :::info Version Support Policy diff --git a/website/src/latest/docs/migration-guides/repack-v5.mdx b/website/src/latest/docs/migration-guides/repack-v5.mdx index b9c07df84..2e82b0f88 100644 --- a/website/src/latest/docs/migration-guides/repack-v5.mdx +++ b/website/src/latest/docs/migration-guides/repack-v5.mdx @@ -1,6 +1,6 @@ # Migrating from Re.Pack 5 -Re.Pack 6 raises the minimum supported versions of Node.js, React Native and Module Federation, and removes APIs that were deprecated in Re.Pack 5. +Re.Pack 6 raises the minimum supported versions of Node.js, React Native, Module Federation and Reanimated, and removes APIs that were deprecated in Re.Pack 5. ## Update dependencies in `package.json` @@ -20,8 +20,13 @@ Update the Re.Pack plugins you use (`@callstack/repack-plugin-*`) to the same ma | Dependency | Re.Pack 5 | Re.Pack 6 | | ----------------------------- | ----------- | --------- | | Node.js | `>=18` | `>=22.12` | -| React Native | `>=0.74` | `>=0.79` | +| React Native | `>=0.74` | `>=0.82` | | `@module-federation/enhanced` | `>=0.6.10` | `>=2.0.0` | +| `react-native-reanimated` | `>=3` | `>=4` | + +## The legacy architecture is no longer supported + +React Native 0.82 removed the legacy architecture, so Re.Pack's native module is now built only as a TurboModule. If your app still sets `newArchEnabled=false`, migrate it to the [New Architecture](https://reactnative.dev/architecture/landing-page) before upgrading. ## Module Federation V1 was removed @@ -79,4 +84,8 @@ module.exports = { ### `reanimatedModuleRules` from `@callstack/repack-plugin-reanimated` -Use `reanimated3ModuleRules` or `reanimated4ModuleRules`, matching the version of `react-native-reanimated` in your project. `reanimatedModuleRules` was an alias of `reanimated3ModuleRules`. +Use `reanimated4ModuleRules` instead. `reanimatedModuleRules` was an alias of `reanimated3ModuleRules`, which was removed together with Reanimated 3 support (see below). + +### Reanimated 3 support in `@callstack/repack-plugin-reanimated` + +Reanimated 3 doesn't support React Native 0.82 or newer, so `ReanimatedPlugin` now requires `react-native-reanimated` 4 together with `react-native-worklets`, and `reanimated3ModuleRules` was removed. Follow the [Reanimated 4 migration guide](https://docs.swmansion.com/react-native-reanimated/docs/guides/migration-from-3.x/), then replace `react-native-reanimated/plugin` with `react-native-worklets/plugin` in your Babel config. From 7b4efe431c2e4da0b9d6db81704e549306ac8974 Mon Sep 17 00:00:00 2001 From: Daniel Williams Date: Fri, 9 Oct 2026 20:14:10 +0100 Subject: [PATCH 8/9] feat(repack)!: enable package exports by default in getResolveOptions Metro has resolved package exports by default since React Native 0.79, and React Native 0.87+ depends on them, so getResolveOptions now defaults enablePackageExports to true. Pass false to resolve through main fields only. Also fix ReanimatedPlugin's warning filter, which no longer matched the setUpTests message from Reanimated 4's Jest utilities after it gained a [Reanimated] prefix. --- .changeset/reanimated-warning-filter.md | 5 +++++ .changeset/v6-package-exports-default.md | 5 +++++ packages/plugin-reanimated/src/plugin.ts | 10 ++++++---- .../utils/__tests__/getResolveOptions.test.ts | 12 ++++++++++++ packages/repack/src/utils/getResolveOptions.ts | 10 +++++----- .../src/latest/api/utils/get-resolve-options.md | 4 ++-- .../latest/docs/features/module-resolution.md | 16 +++++++--------- .../latest/docs/migration-guides/repack-v5.mdx | 13 +++++++++++++ 8 files changed, 55 insertions(+), 20 deletions(-) create mode 100644 .changeset/reanimated-warning-filter.md create mode 100644 .changeset/v6-package-exports-default.md diff --git a/.changeset/reanimated-warning-filter.md b/.changeset/reanimated-warning-filter.md new file mode 100644 index 000000000..09e5906c4 --- /dev/null +++ b/.changeset/reanimated-warning-filter.md @@ -0,0 +1,5 @@ +--- +'@callstack/repack-plugin-reanimated': patch +--- + +Fix `ReanimatedPlugin` not hiding the `setUpTests` / `Critical dependency: require function` warning from Reanimated 4's Jest utilities, whose message is now prefixed with `[Reanimated] `. diff --git a/.changeset/v6-package-exports-default.md b/.changeset/v6-package-exports-default.md new file mode 100644 index 000000000..00e0e68ff --- /dev/null +++ b/.changeset/v6-package-exports-default.md @@ -0,0 +1,5 @@ +--- +'@callstack/repack': major +--- + +`getResolveOptions()` now enables package exports by default (`enablePackageExports: true`), matching Metro's default since React Native 0.79. Pass `enablePackageExports: false` to keep resolving through main fields only. diff --git a/packages/plugin-reanimated/src/plugin.ts b/packages/plugin-reanimated/src/plugin.ts index 1c331535a..cc91ef88c 100644 --- a/packages/plugin-reanimated/src/plugin.ts +++ b/packages/plugin-reanimated/src/plugin.ts @@ -4,12 +4,14 @@ import semver, { type SemVer } from 'semver'; import type { Compiler as WebpackCompiler } from 'webpack'; import { createReanimatedModuleRules } from './rules.js'; +// Reanimated 4 prefixes the message with `[Reanimated] ` const REANIMATED_SETUP_TESTS_WARNING = - /'`setUpTests` is available only in Jest environment\.'/; + /`setUpTests` is available only in Jest environment\./; const WORKLETS_CRITICAL_DEPENDENCY_WARNING = /Critical dependency: require function is used in a way in which dependencies cannot be statically extracted/; -const WORKLETS_INITIALIZERS_MODULE = - /react-native-(?:worklets|reanimated)[\\/].*initializers(?:\.[cm]?[jt]sx?)?/; +// Modules that call `require` dynamically to load Jest-only dependencies +const WORKLETS_DYNAMIC_REQUIRE_MODULE = + /react-native-(?:worklets|reanimated)[\\/].*(?:initializers|jestUtils)/; type WarningLike = { message?: unknown; @@ -101,7 +103,7 @@ export class ReanimatedPlugin { return ( REANIMATED_SETUP_TESTS_WARNING.test(warningText) || (WORKLETS_CRITICAL_DEPENDENCY_WARNING.test(warningText) && - WORKLETS_INITIALIZERS_MODULE.test(warningText)) + WORKLETS_DYNAMIC_REQUIRE_MODULE.test(warningText)) ); }); } diff --git a/packages/repack/src/utils/__tests__/getResolveOptions.test.ts b/packages/repack/src/utils/__tests__/getResolveOptions.test.ts index 9a4a0dfab..3a5e2ef83 100644 --- a/packages/repack/src/utils/__tests__/getResolveOptions.test.ts +++ b/packages/repack/src/utils/__tests__/getResolveOptions.test.ts @@ -42,6 +42,18 @@ describe('getResolveOptions', () => { expect(result.extensions).not.toContain('.android.js'); }); + it('should enable package exports by default', () => { + const result = getResolveOptions('ios'); + expect(result.exportsFields).toEqual(['exports']); + expect(result.conditionNames).toEqual(['react-native']); + }); + + it('should disable package exports when enablePackageExports is false', () => { + const result = getResolveOptions('ios', { enablePackageExports: false }); + expect(result.exportsFields).toEqual([]); + expect(result.conditionNames).toEqual([]); + }); + it('should use actual platform value when provided', () => { const result = getResolveOptions('ios'); expect(result).toBeDefined(); diff --git a/packages/repack/src/utils/getResolveOptions.ts b/packages/repack/src/utils/getResolveOptions.ts index 59ea2683c..559bb8faf 100644 --- a/packages/repack/src/utils/getResolveOptions.ts +++ b/packages/repack/src/utils/getResolveOptions.ts @@ -15,7 +15,7 @@ interface GetResolveOptionsResult { */ export interface ResolveOptions { /** - * Whether to enable Package Exports support. Defaults to `false`. + * Whether to enable Package Exports support. Defaults to `true`, matching Metro. */ enablePackageExports?: boolean; /** @@ -28,8 +28,8 @@ export interface ResolveOptions { * Get Webpack's resolve options to properly resolve JavaScript files: * - resolve platform extensions (e.g. `file.ios.js`) * - resolve native extensions (e.g. `file.native.js`) - * - optionally use package exports (`exports` field in `package.json`) instead of - * main fields (e.g. `main` or `browser` or `react-native`) + * - use package exports (`exports` field in `package.json`) before main fields + * (e.g. `main` or `browser` or `react-native`), unless disabled * * @param platform Target application platform. * @param options Additional options that can modify resolution behaviour. @@ -48,7 +48,7 @@ export interface ResolveOptions { * return { * resolve: { * ...Repack.getResolveOptions(platform, { - * enablePackageExports: false, + * enablePackageExports: true, * preferNativePlatform: true * }), * }, @@ -78,7 +78,7 @@ export function getResolveOptions( ) as ResolveOptions | undefined; const preferNativePlatform = _options?.preferNativePlatform ?? true; - const enablePackageExports = _options?.enablePackageExports ?? false; + const enablePackageExports = _options?.enablePackageExports ?? true; let extensions = ['.js', '.jsx', '.ts', '.tsx', '.json']; diff --git a/website/src/latest/api/utils/get-resolve-options.md b/website/src/latest/api/utils/get-resolve-options.md index a41c03396..b3e14a6f4 100644 --- a/website/src/latest/api/utils/get-resolve-options.md +++ b/website/src/latest/api/utils/get-resolve-options.md @@ -28,12 +28,12 @@ Target application platform (e.g. `ios` or `android`). ### options.enablePackageExports - Type: `boolean` -- Default: `false` +- Default: `true` Whether to enable Package Exports support. When enabled, uses the `exports` field in `package.json` instead of main fields. :::warning -React Native 0.88 requires `enablePackageExports: true` in your Re.Pack resolver configuration. Its `react-native/setup-env` and `react-native/react-private-interface` entry points, as well as `@react-native/asset-utils`, use package exports. +React Native 0.88 requires package exports, so don't set `enablePackageExports: false` there. Its `react-native/setup-env` and `react-native/react-private-interface` entry points, as well as `@react-native/asset-utils`, use package exports. Enabling package exports can change how existing dependencies resolve. For more details, please refer to the [Module Resolution guide](/docs/features/module-resolution). ::: diff --git a/website/src/latest/docs/features/module-resolution.md b/website/src/latest/docs/features/module-resolution.md index bb7a56af7..5be389c29 100644 --- a/website/src/latest/docs/features/module-resolution.md +++ b/website/src/latest/docs/features/module-resolution.md @@ -22,9 +22,7 @@ import * as Repack from "@callstack/repack"; export default (env) => { return { resolve: { - ...Repack.getResolveOptions(env.platform, { - enablePackageExports: true, - }), + ...Repack.getResolveOptions(env.platform), }, }; }; @@ -105,7 +103,7 @@ Main fields are `package.json` properties that point to a package's entry file. ::: -When resolving a package's entry point, Re.Pack checks these fields in `package.json` in order: +When a package has no `exports` field, or [package exports](#package-exports-conditional-exports) are disabled, Re.Pack resolves its entry point by checking these fields in `package.json` in order: 1. `react-native` — React Native-specific entry point 2. `browser` — Browser-compatible entry point @@ -146,15 +144,15 @@ Modern packages use the `exports` field in `package.json` to define entry points :::caution -Package exports support is **disabled by default** (`enablePackageExports: false`) to maintain backwards compatibility with existing React Native projects. React Native 0.87 requires it for `@react-native/asset-utils`, and 0.88 also for `react-native/setup-env` and `react-native/react-private-interface`. Enable it explicitly for React Native 0.87 and newer, or whenever your dependencies require it. The configuration templates used by `@callstack/repack-init` enable it. +Package exports support is **enabled by default** (`enablePackageExports: true`), matching Metro's default since React Native 0.79. React Native 0.87 requires it for `@react-native/asset-utils`, and 0.88 also for `react-native/setup-env` and `react-native/react-private-interface`, so only disable it if your React Native version and dependencies don't need it. ::: -### Enabling package exports +### Disabling package exports ```ts Repack.getResolveOptions({ - enablePackageExports: true, + enablePackageExports: false, }); ``` @@ -277,7 +275,7 @@ export default (env) => { 1. **Check the package's `package.json`** — Look at `main`, `react-native`, `browser`, and `exports` fields 2. **Verify platform extensions** — Ensure platform-specific files use correct naming (`.ios.js`, not `.iOS.js`) -3. **Check `enablePackageExports`** — Some modern packages require this to be `true` +3. **Check `enablePackageExports`** — Some modern packages require this to be `true` (the default) ### Platform-specific files not being picked up @@ -287,7 +285,7 @@ export default (env) => { ### Package exports compatibility issues -When enabling `enablePackageExports`, some packages may resolve differently: +With `enablePackageExports` enabled, some packages may resolve differently than with main fields only: 1. **Compare with Metro** — Test the same import in a Metro-bundled project 2. **Check condition order** — The `react-native` condition should take precedence diff --git a/website/src/latest/docs/migration-guides/repack-v5.mdx b/website/src/latest/docs/migration-guides/repack-v5.mdx index 2e82b0f88..b5efea586 100644 --- a/website/src/latest/docs/migration-guides/repack-v5.mdx +++ b/website/src/latest/docs/migration-guides/repack-v5.mdx @@ -28,6 +28,19 @@ Update the Re.Pack plugins you use (`@callstack/repack-plugin-*`) to the same ma React Native 0.82 removed the legacy architecture, so Re.Pack's native module is now built only as a TurboModule. If your app still sets `newArchEnabled=false`, migrate it to the [New Architecture](https://reactnative.dev/architecture/landing-page) before upgrading. +## Package exports are enabled by default + +`getResolveOptions()` now sets `enablePackageExports` to `true` by default, matching Metro's default since React Native 0.79. Configs that already pass `enablePackageExports: true` don't need changes. If your project relies on main-field resolution, opt out explicitly: + +```diff + resolve: { +- ...Repack.getResolveOptions(), ++ ...Repack.getResolveOptions({ enablePackageExports: false }), + }, +``` + +See [Module Resolution](/docs/features/module-resolution#package-exports-conditional-exports) for how package exports change resolution. + ## Module Federation V1 was removed `ModuleFederationPluginV1` is no longer available, and `Repack.plugins.ModuleFederationPlugin` now points to [`ModuleFederationPluginV2`](/api/plugins/module-federation-v2). Follow [Migrating from V1](/docs/features/module-federation#migrating-from-v1) to move your configs to Module Federation 2.0. From 238d5fe04958d5592fae9789bc9006903474943d Mon Sep 17 00:00:00 2001 From: Daniel Williams Date: Fri, 9 Oct 2026 20:22:30 +0100 Subject: [PATCH 9/9] chore(repack): use the packaging DSL in the Android library Replace the deprecated packagingOptions block with packaging, splitting the native library and resource excludes and using keepDebugSymbols for debug builds. The produced AARs are unchanged. --- packages/repack/android/build.gradle | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/packages/repack/android/build.gradle b/packages/repack/android/build.gradle index 0745a3943..f79b3b16a 100644 --- a/packages/repack/android/build.gradle +++ b/packages/repack/android/build.gradle @@ -87,17 +87,22 @@ android { } } - packagingOptions { - doNotStrip resolveBuildType() == 'debug' ? "**/**/*.so" : '' - excludes = [ - "META-INF", - "META-INF/**", - "**/libjsi.so", - "**/libc++_shared.so", - "**/libfbjni.so", - "**/libreactnative.so", - "**/libhermestooling.so", - ] + packaging { + jniLibs { + if (resolveBuildType() == 'debug') { + keepDebugSymbols += "**/**/*.so" + } + excludes += [ + "**/libjsi.so", + "**/libc++_shared.so", + "**/libfbjni.so", + "**/libreactnative.so", + "**/libhermestooling.so", + ] + } + resources { + excludes += ["META-INF", "META-INF/**"] + } } sourceSets.main {