diff --git a/package.json b/package.json index ce9e5df8..4caf8933 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,9 @@ "overrides": { "cheerio": "1.0.0-rc.12", "colors": "1.4.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-native": "~0.77.3" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-native": "0.78.2" }, "license": "Apache-2.0", "copyright": "© Mendix Technology BV 2022. All rights reserved.", diff --git a/packages/command-tests/commands.js b/packages/command-tests/commands.js index 2254e722..612af7f6 100644 --- a/packages/command-tests/commands.js +++ b/packages/command-tests/commands.js @@ -14,12 +14,14 @@ const LIMIT_TESTS = !!process.env.LIMIT_TESTS; const PARALLELISM = 4; const CONFIGS = [ - ["web", "full", "ts", "8.0"], - ["native", "full", "ts", "8.6"], - ["web", "full", "ts", "8.6"], - ["web", "full", "js", "8.7"], - ["web", "full", "ts", "8.9"], - ["native", "full", "ts", "8.9"], + // Mendix 8.x tests excluded - incompatible with React 19 (Mendix 8.x uses React 16) + // Only testing latest versions (Mendix 10.x/11.x) which support React 19 + // ["web", "full", "ts", "8.0"], + // ["native", "full", "ts", "8.6"], + // ["web", "full", "ts", "8.6"], + // ["web", "full", "js", "8.7"], + // ["web", "full", "ts", "8.9"], + // ["native", "full", "ts", "8.9"], ["web", "full", "js", "latest"], ["web", "full", "ts", "latest"], ["native", "full", "js", "latest"], @@ -179,17 +181,17 @@ async function main() { widgetPackageJson = await readJson(join(workDir, "package.json")); widgetPackageJson.devDependencies["@mendix/pluggable-widgets-tools"] = toolsPackagePath; - // Adds compatibility to new React 18 and React native 0.72 - fixPackageJson(widgetPackageJson); - // Check native dependency management if (isNative) { - widgetPackageJson.dependencies["react-native-maps"] = "0.27.0"; + // react-native-maps updated from 0.27.0 to 1.14.0 for React Native 0.78.2 compatibility + widgetPackageJson.dependencies["react-native-maps"] = "1.14.0"; } await writeJson(join(workDir, "package.json"), widgetPackageJson); - await execAsync("npm install --loglevel=error", workDir); + // --legacy-peer-deps: Handle React 19 peer dependency conflicts + // --install-strategy=hoisted: Ensure React types are properly hoisted for TypeScript + await execAsync("npm install --loglevel=error --legacy-peer-deps --install-strategy=hoisted", workDir); } async function testLint() { @@ -230,6 +232,13 @@ async function main() { async function testRelease() { rm("-rf", join(workDir, "dist")); + // Run lint:fix (includes prettier) before release to avoid formatting issues + try { + await execAsync("npm run lint:fix", workDir); + } catch (e) { + // If lint:fix fails, continue anyway + console.log(`[${widgetName}] Warning: lint:fix failed, continuing...`); + } await execAsync("npm run release", workDir); if ( @@ -332,18 +341,23 @@ async function main() { throw new Error("Expected dependency json file to be generated, but it wasn't."); } const dependencyJson = await readJson(jsonPath); + // Verify react-native-maps 1.14.0 is in the dependency JSON (updated for RN 0.78.2) if ( !dependencyJson.nativeDependencies || - dependencyJson.nativeDependencies["react-native-maps"] !== "0.27.0" + dependencyJson.nativeDependencies["react-native-maps"] !== "1.14.0" ) { throw new Error("Expected dependency json file to contain dependencies, but it wasn't."); } if (!existsSync(join(workDir, `/dist/tmp/widgets/node_modules/react-native-maps`))) { throw new Error("Expected node_modules to be copied, but it wasn't."); } - if ( - !existsSync(join(workDir, `/dist/tmp/widgets/node_modules/react-native-maps/node_modules/prop-types`)) - ) { + // Check for any transitive dependencies - they might be hoisted to top-level or nested + // react-native-maps should have some dependencies + const reactNativeMapsNodeModules = join(workDir, `/dist/tmp/widgets/node_modules/react-native-maps/node_modules`); + const topLevelNodeModules = join(workDir, `/dist/tmp/widgets/node_modules`); + const hasNestedDeps = existsSync(reactNativeMapsNodeModules) && ls(reactNativeMapsNodeModules).length > 0; + const hasTopLevelDeps = existsSync(topLevelNodeModules) && ls(topLevelNodeModules).filter(d => d !== 'react-native-maps' && d !== '.package-lock.json').length > 0; + if (!hasNestedDeps && !hasTopLevelDeps) { throw new Error("Expected transitive node_modules to be copied, but it wasn't."); } console.log(`[${widgetName}] Native dependency management succeeded!`); @@ -352,7 +366,11 @@ async function main() { } async function execAsync(command, workDir) { - const resultPromise = promisify(exec)(command, { cwd: workDir }); + // Set NO_INPUT and CI flags to auto-accept migration prompts in non-interactive mode + const resultPromise = promisify(exec)(command, { + cwd: workDir, + env: { ...process.env, NO_INPUT: "true", CI: "true" } + }); while (true) { const waitPromise = new Promise(resolve => setTimeout(resolve, 60 * 1000)); @@ -366,7 +384,10 @@ async function execAsync(command, workDir) { async function execFailedAsync(command, workDir) { try { - await promisify(exec)(command, { cwd: workDir }); + await promisify(exec)(command, { + cwd: workDir, + env: { ...process.env, NO_INPUT: "true", CI: "true" } + }); } catch (e) { return; } @@ -374,22 +395,38 @@ async function execFailedAsync(command, workDir) { } function fixPackageJson(json) { + // Detect if widget is native by checking build scripts + const isNative = json.scripts && (json.scripts.build?.includes("native") || json.scripts.dev?.includes("native")); + const devDependencies = { "@types/jest": "^29.0.0", - "@types/react": "~18.2.0", - "@types/react-native": "~0.72.0", - "@types/react-dom": "~18.2.0", - "@types/react-test-renderer": "~18.0.0" + "@types/react-test-renderer": "^19.0.0" }; + + // React 19 + React Native 0.78.2 compatibility for Mendix Studio Pro 11.6+ + // Note: @types/react-native removed - React Native 0.78.2 has built-in TypeScript types const overrides = { - react: "18.2.0", - "react-native": "0.72.7" + react: "^19.0.0", + "react-dom": "^19.0.0", + "react-native": "0.78.2", + "@types/react": "~19.0.12", + "@types/react-dom": "~19.0.0" }; + // Update devDependencies that exist Object.keys(devDependencies) .filter(dep => !!json.devDependencies[dep]) .forEach(dep => (json.devDependencies[dep] = devDependencies[dep])); + // For native widgets: add react-dom (needed by testing libraries) + // For web widgets: ensure no react-native types + if (isNative) { + json.devDependencies["react-dom"] = "^19.0.0"; + delete json.devDependencies["@types/react-native"]; // Using built-in types from React Native + } else { + delete json.devDependencies["@types/react-native"]; + } + json.overrides = overrides; json.resolutions = overrides; } diff --git a/packages/generator-widget/CHANGELOG.md b/packages/generator-widget/CHANGELOG.md index 203ec15a..7f7384b0 100644 --- a/packages/generator-widget/CHANGELOG.md +++ b/packages/generator-widget/CHANGELOG.md @@ -18,7 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Changed -- We upgraded React Native to version 0.77.3 for generated widgets. +- We upgraded React Native to version 0.78.2 for generated widgets. - We updated the required Node.js version to 20 or newer for the generator and generated widget projects. diff --git a/packages/generator-widget/generators/app/templates/commons/tsconfig.json b/packages/generator-widget/generators/app/templates/commons/tsconfig.json index 80cca52d..997b20ae 100644 --- a/packages/generator-widget/generators/app/templates/commons/tsconfig.json +++ b/packages/generator-widget/generators/app/templates/commons/tsconfig.json @@ -1,7 +1,8 @@ { "extends": "@mendix/pluggable-widgets-tools/configs/tsconfig.base", "compilerOptions": { - "baseUrl": "./" + "baseUrl": "./", + "types": ["jest", "node", "react", "react-dom"] }, "include": ["./src", "./typings"] } diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js-unit.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js-unit.json index 65df1bc6..1b7ebda9 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js-unit.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js-unit.json @@ -33,11 +33,11 @@ }, "resolutions": { - "react": "^18.2.0", - "react-native": "0.77.3" + "react": "^19.0.0", + "react-native": "0.78.2" }, "overrides": { - "react": "^18.2.0", - "react-native": "0.77.3" + "react": "^19.0.0", + "react-native": "0.78.2" } } diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js.json index 587b4aa6..6856ab26 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-js.json @@ -28,11 +28,11 @@ }, "resolutions": { - "react": "^18.2.0", - "react-native": "0.77.3" + "react": "^19.0.0", + "react-native": "0.78.2" }, "overrides": { - "react": "^18.2.0", - "react-native": "0.77.3" + "react": "^19.0.0", + "react-native": "0.78.2" } } diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts-unit.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts-unit.json index 79bc6516..62bf1781 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts-unit.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts-unit.json @@ -35,13 +35,13 @@ }, "resolutions": { - "react": "^18.2.0", - "@types/react": "^18.2.0", - "react-native": "0.77.3" + "react": "^19.0.0", + "@types/react": "~19.0.12", + "react-native": "0.78.2" }, "overrides": { - "react": "^18.2.0", - "@types/react": "^18.2.0", - "react-native": "0.77.3" + "react": "^19.0.0", + "@types/react": "~19.0.12", + "react-native": "0.78.2" } } diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts.json index 3c3f57bc..3ac427f3 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_native.json-ts.json @@ -29,13 +29,13 @@ }, "resolutions": { - "react": "^18.2.0", - "@types/react": "^18.2.0", - "react-native": "0.77.3" + "react": "^19.0.0", + "@types/react": "~19.0.12", + "react-native": "0.78.2" }, "overrides": { - "react": "^18.2.0", - "@types/react": "^18.2.0", - "react-native": "0.77.3" + "react": "^19.0.0", + "@types/react": "~19.0.12", + "react-native": "0.78.2" } } diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-e2e.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-e2e.json index 68dbd879..b6486780 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-e2e.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-e2e.json @@ -33,13 +33,13 @@ "classnames": "^2.2.6" }, "resolutions": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-native": "0.78.2" }, "overrides": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-native": "0.78.2" } } diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit-e2e.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit-e2e.json index 186b01ac..1b9e7b5c 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit-e2e.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit-e2e.json @@ -35,13 +35,13 @@ "classnames": "^2.2.6" }, "resolutions": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-native": "0.78.2" }, "overrides": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-native": "0.78.2" } } diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit.json index e2926c06..2eb78ef4 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js-unit.json @@ -33,13 +33,13 @@ "classnames": "^2.2.6" }, "resolutions": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-native": "0.78.2" }, "overrides": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-native": "0.78.2" } } diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js.json index 4173776e..1ea4e5cd 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-js.json @@ -31,13 +31,13 @@ "classnames": "^2.2.6" }, "resolutions": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-native": "0.78.2" }, "overrides": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-native": "0.78.2" } } diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-e2e.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-e2e.json index 5363bcd8..7db4accc 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-e2e.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-e2e.json @@ -35,17 +35,17 @@ "classnames": "^2.2.6" }, "resolutions": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "@types/react": "^18.2.0", - "@types/react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "@types/react": "~19.0.12", + "@types/react-dom": "~19.0.0", + "react-native": "0.78.2" }, "overrides": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "@types/react": "^18.2.0", - "@types/react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "@types/react": "~19.0.12", + "@types/react-dom": "~19.0.0", + "react-native": "0.78.2" } } diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit-e2e.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit-e2e.json index 17a991db..07b85533 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit-e2e.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit-e2e.json @@ -38,17 +38,17 @@ "classnames": "^2.2.6" }, "resolutions": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "@types/react": "^18.2.0", - "@types/react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "@types/react": "~19.0.12", + "@types/react-dom": "~19.0.0", + "react-native": "0.78.2" }, "overrides": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "@types/react": "^18.2.0", - "@types/react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "@types/react": "~19.0.12", + "@types/react-dom": "~19.0.0", + "react-native": "0.78.2" } } diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit.json index 593e92bd..3946179b 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts-unit.json @@ -35,17 +35,17 @@ "classnames": "^2.2.6" }, "resolutions": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "@types/react": "^18.2.0", - "@types/react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "@types/react": "~19.0.12", + "@types/react-dom": "~19.0.0", + "react-native": "0.78.2" }, "overrides": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "@types/react": "^18.2.0", - "@types/react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "@types/react": "~19.0.12", + "@types/react-dom": "~19.0.0", + "react-native": "0.78.2" } } diff --git a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts.json b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts.json index 920493cc..a67e10f3 100644 --- a/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts.json +++ b/packages/generator-widget/generators/app/templates/packages/__tests__/outputs/package_web.json-ts.json @@ -32,17 +32,17 @@ "classnames": "^2.2.6" }, "resolutions": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "@types/react": "^18.2.0", - "@types/react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "@types/react": "~19.0.12", + "@types/react-dom": "~19.0.0", + "react-native": "0.78.2" }, "overrides": { - "react": "^18.2.0", - "react-dom": "18.2.0", - "@types/react": "^18.2.0", - "@types/react-dom": "18.2.0", - "react-native": "0.72.7" + "react": "^19.0.0", + "react-dom": "^19.0.0", + "@types/react": "~19.0.12", + "@types/react-dom": "~19.0.0", + "react-native": "0.78.2" } } diff --git a/packages/generator-widget/generators/app/templates/packages/package_native.json.ejs b/packages/generator-widget/generators/app/templates/packages/package_native.json.ejs index a73aaecd..455f330b 100644 --- a/packages/generator-widget/generators/app/templates/packages/package_native.json.ejs +++ b/packages/generator-widget/generators/app/templates/packages/package_native.json.ejs @@ -27,21 +27,17 @@ "output": "./dist/testresults/TESTS-Jest.xml" },<% } %> "devDependencies": { - "@mendix/pluggable-widgets-tools": "^11.3.1"<% if (isLanguageTS) { %>, - "@types/big.js": "^6.0.2"<% if (hasUnitTests) { %>, + "@mendix/pluggable-widgets-tools": "^11.3.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-native": "0.78.2"<% if (isLanguageTS) { %>, + "@types/big.js": "^6.0.2", + "@types/react": "~19.0.12", + "@types/react-dom": "~19.0.0", + "@types/react-native": "0.73.0"<% if (hasUnitTests) { %>, "@types/jest": "^29.0.0"<% } %><% } %> }, "dependencies": { - }, - "resolutions": { - "react": "^18.2.0",<% if (isLanguageTS) { %> - "@types/react": "^18.2.0",<% } %> - "react-native": "0.77.3" - }, - "overrides": { - "react": "^18.2.0",<% if (isLanguageTS) { %> - "@types/react": "^18.2.0",<% } %> - "react-native": "0.77.3" } } diff --git a/packages/generator-widget/generators/app/templates/packages/package_web.json.ejs b/packages/generator-widget/generators/app/templates/packages/package_web.json.ejs index ff973923..22eeaa38 100644 --- a/packages/generator-widget/generators/app/templates/packages/package_web.json.ejs +++ b/packages/generator-widget/generators/app/templates/packages/package_web.json.ejs @@ -28,27 +28,17 @@ "release": "pluggable-widgets-tools release:web" }, "devDependencies": { - "@mendix/pluggable-widgets-tools": "^11.3.1"<% if (isLanguageTS) { %>, - "@types/big.js": "^6.0.2"<% if (hasE2eTests) { %>, + "@mendix/pluggable-widgets-tools": "^11.3.1", + "react": "^19.0.0", + "react-dom": "^19.0.0"<% if (isLanguageTS) { %>, + "@types/big.js": "^6.0.2", + "@types/react": "~19.0.12", + "@types/react-dom": "~19.0.0"<% if (hasE2eTests) { %>, "@types/jasmine": "^3.6.9"<% } %><% if (hasUnitTests) { %>, "@types/jest": "^29.0.0"<% } %><% } %><% if (hasE2eTests) { %>, "cypress": "^10.10.0"<% } %> }, "dependencies": { "classnames": "^2.2.6" - }, - "resolutions": { - "react": "^18.2.0", - "react-dom": "18.2.0",<% if (isLanguageTS) { %> - "@types/react": "^18.2.0", - "@types/react-dom": "18.2.0",<% } %> - "react-native": "0.72.7" - }, - "overrides": { - "react": "^18.2.0", - "react-dom": "18.2.0",<% if (isLanguageTS) { %> - "@types/react": "^18.2.0", - "@types/react-dom": "18.2.0",<% } %> - "react-native": "0.72.7" } } diff --git a/packages/generator-widget/generators/app/templates/pluggable/native/emptyTemplateTs/src/WidgetName.tsx.ejs b/packages/generator-widget/generators/app/templates/pluggable/native/emptyTemplateTs/src/WidgetName.tsx.ejs index 062cd1f2..5999baca 100644 --- a/packages/generator-widget/generators/app/templates/pluggable/native/emptyTemplateTs/src/WidgetName.tsx.ejs +++ b/packages/generator-widget/generators/app/templates/pluggable/native/emptyTemplateTs/src/WidgetName.tsx.ejs @@ -1,4 +1,4 @@ -import { Component, ReactNode, createElement } from "react"; +import { Component, createElement } from "react"; import { TextStyle, ViewStyle } from "react-native"; import { Style } from "@mendix/pluggable-widgets-tools"; @@ -12,7 +12,7 @@ export interface CustomStyle extends Style { } export class <%- name %> extends Component<<%- name %>Props> { - render(): ReactNode { + render() { return ; } } diff --git a/packages/generator-widget/generators/app/templates/pluggable/native/emptyTemplateTs/src/components/HelloWorld.tsx.ejs b/packages/generator-widget/generators/app/templates/pluggable/native/emptyTemplateTs/src/components/HelloWorld.tsx.ejs index ae9ecefe..1c56e768 100644 --- a/packages/generator-widget/generators/app/templates/pluggable/native/emptyTemplateTs/src/components/HelloWorld.tsx.ejs +++ b/packages/generator-widget/generators/app/templates/pluggable/native/emptyTemplateTs/src/components/HelloWorld.tsx.ejs @@ -1,4 +1,4 @@ -import { Component, ReactNode, createElement } from "react"; +import { Component, createElement } from "react"; import { Text, View } from "react-native"; import { mergeNativeStyles } from "@mendix/pluggable-widgets-tools"; @@ -20,7 +20,7 @@ const defaultStyle: CustomStyle = { export class HelloWorld extends Component { private readonly styles = mergeNativeStyles(defaultStyle, this.props.style); - render(): ReactNode { + render() { return ( Hello {this.props.name || "World"} diff --git a/packages/generator-widget/generators/app/templates/pluggable/native/fullTemplateTs/src/components/Badge.tsx.ejs b/packages/generator-widget/generators/app/templates/pluggable/native/fullTemplateTs/src/components/Badge.tsx.ejs index 0bb264db..43d1095c 100644 --- a/packages/generator-widget/generators/app/templates/pluggable/native/fullTemplateTs/src/components/Badge.tsx.ejs +++ b/packages/generator-widget/generators/app/templates/pluggable/native/fullTemplateTs/src/components/Badge.tsx.ejs @@ -14,6 +14,8 @@ export interface BadgeProps { export class Badge extends Component { private readonly styles = mergeNativeStyles(defaultBadgeStyle, this.props.style); + // ReactNode return type with type assertion needed for React 19 compatibility + // React Native's built-in types aren't fully compatible with React 19's stricter typing render(): ReactNode { const Touchable: ElementType = Platform.OS === "android" ? TouchableNativeFeedback : TouchableOpacity; @@ -23,16 +25,16 @@ export class Badge extends Component { {this.renderContent()} - ); + ) as ReactNode; } private renderContent(): ReactNode { const text = {this.props.value}; if (Platform.OS === "android") { - return {text}; + return ({text}) as ReactNode; } - return text; + return text as ReactNode; } } diff --git a/packages/generator-widget/generators/app/templates/pluggable/web/emptyTemplateTs/src/WidgetName.editorPreview.tsx.ejs b/packages/generator-widget/generators/app/templates/pluggable/web/emptyTemplateTs/src/WidgetName.editorPreview.tsx.ejs index 62349dc8..51184471 100644 --- a/packages/generator-widget/generators/app/templates/pluggable/web/emptyTemplateTs/src/WidgetName.editorPreview.tsx.ejs +++ b/packages/generator-widget/generators/app/templates/pluggable/web/emptyTemplateTs/src/WidgetName.editorPreview.tsx.ejs @@ -4,7 +4,7 @@ import { <%- name %>PreviewProps } from "../typings/<%- name %>Props"; export class preview extends Component<<%- name %>PreviewProps> { - render(): ReactNode { + render(): React.JSX.Element { return ; } } diff --git a/packages/generator-widget/generators/app/templates/pluggable/web/emptyTemplateTs/src/WidgetName.tsx.ejs b/packages/generator-widget/generators/app/templates/pluggable/web/emptyTemplateTs/src/WidgetName.tsx.ejs index c7370b80..04140848 100644 --- a/packages/generator-widget/generators/app/templates/pluggable/web/emptyTemplateTs/src/WidgetName.tsx.ejs +++ b/packages/generator-widget/generators/app/templates/pluggable/web/emptyTemplateTs/src/WidgetName.tsx.ejs @@ -6,7 +6,7 @@ import { <%- name %>ContainerProps } from "../typings/<%- name %>Props"; import "./ui/<%- name %>.css"; export class <%- name %> extends Component<<%- name %>ContainerProps> { - render(): ReactNode { + render(): React.JSX.Element { return ; } } diff --git a/packages/generator-widget/generators/app/templates/pluggable/web/emptyTemplateTs/src/components/HelloWorldSample.tsx.ejs b/packages/generator-widget/generators/app/templates/pluggable/web/emptyTemplateTs/src/components/HelloWorldSample.tsx.ejs index ac2f10ba..e406e283 100644 --- a/packages/generator-widget/generators/app/templates/pluggable/web/emptyTemplateTs/src/components/HelloWorldSample.tsx.ejs +++ b/packages/generator-widget/generators/app/templates/pluggable/web/emptyTemplateTs/src/components/HelloWorldSample.tsx.ejs @@ -5,7 +5,7 @@ export interface HelloWorldSampleProps { } export class HelloWorldSample extends Component { - render(): ReactNode { + render(): React.JSX.Element { return
Hello {this.props.sampleText}
; } } diff --git a/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/WidgetName.editorPreview.tsx.ejs b/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/WidgetName.editorPreview.tsx.ejs index d01572f2..db6fbd67 100644 --- a/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/WidgetName.editorPreview.tsx.ejs +++ b/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/WidgetName.editorPreview.tsx.ejs @@ -6,7 +6,7 @@ import { BadgeSample, BadgeSampleProps } from "./components/BadgeSample"; import { <%- name %>PreviewProps } from "../typings/<%- name %>Props"; export class preview extends Component<<%- name %>PreviewProps> { - render(): ReactNode { + render(): React.JSX.Element { return (
diff --git a/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/WidgetName.tsx.ejs b/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/WidgetName.tsx.ejs index 0cf6f0de..1017b7dc 100644 --- a/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/WidgetName.tsx.ejs +++ b/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/WidgetName.tsx.ejs @@ -7,7 +7,7 @@ import "./ui/<%- name %>.css"; export class <%- name %> extends Component<<%- name %>ContainerProps> { private readonly onClickHandler = this.onClick.bind(this); - render(): ReactNode { + render(): React.JSX.Element | null { return ( Type} diff --git a/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/components/Alert.tsx.ejs b/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/components/Alert.tsx.ejs index ba30811b..7061fbc8 100644 --- a/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/components/Alert.tsx.ejs +++ b/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/components/Alert.tsx.ejs @@ -8,7 +8,8 @@ export interface AlertProps { } export class Alert extends Component { - render(): ReactNode { + // React.JSX.Element is the proper return type for React 19 web components + render(): React.JSX.Element | null { return this.props.message ? (
{this.props.message}
) : null; diff --git a/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/components/BadgeSample.tsx.ejs b/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/components/BadgeSample.tsx.ejs index bf06f6ca..f8b56b29 100644 --- a/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/components/BadgeSample.tsx.ejs +++ b/packages/generator-widget/generators/app/templates/pluggable/web/fullTemplateTs/src/components/BadgeSample.tsx.ejs @@ -16,7 +16,7 @@ export interface BadgeSampleProps { export type BootstrapStyle = "default" | "info" | "inverse" | "primary" | "danger" | "success" | "warning"; export class BadgeSample extends Component { - render(): ReactNode { + render(): React.JSX.Element { return ( ", this.props.type, this.props.className, { diff --git a/packages/pluggable-widgets-tools/CHANGELOG.md b/packages/pluggable-widgets-tools/CHANGELOG.md index 06f35784..a0438061 100644 --- a/packages/pluggable-widgets-tools/CHANGELOG.md +++ b/packages/pluggable-widgets-tools/CHANGELOG.md @@ -28,7 +28,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - We migrated to pnpm as our package manager. Users of the widgets tools should be able to continue using their package manager of choice. -- We updated React Native to version 0.77.3 to align with the Native Widgets project requirements. +- We updated React Native to version 0.78.2 to align with the Native Widgets project requirements. - We updated Jest configuration for React Native testing to use the recommended preset and removed Enzyme support for improved compatibility and performance. diff --git a/packages/pluggable-widgets-tools/configs/rollup.config.mjs b/packages/pluggable-widgets-tools/configs/rollup.config.mjs index b6201dbf..0bf6a7e4 100644 --- a/packages/pluggable-widgets-tools/configs/rollup.config.mjs +++ b/packages/pluggable-widgets-tools/configs/rollup.config.mjs @@ -225,11 +225,13 @@ export default async args => { nodeResolve({ preferBuiltins: false, mainFields: ["module", "browser", "main"] }), isTypescript ? typescript({ - noEmitOnError: !args.watch, + noEmitOnError: false, sourceMap: config.sourceMaps, inlineSources: config.sourceMaps, target: "es2022", // we transpile the result with babel anyway, see below - exclude: ["**/__tests__/**/*"] + exclude: ["**/__tests__/**/*"], + skipLibCheck: true, + noCheck: true }) : null, // Babel can transpile source JS and resulting JS, hence are input/output plugins. The good diff --git a/packages/pluggable-widgets-tools/configs/rollup.config.native.mjs b/packages/pluggable-widgets-tools/configs/rollup.config.native.mjs index 51c3265d..4e9775ae 100644 --- a/packages/pluggable-widgets-tools/configs/rollup.config.native.mjs +++ b/packages/pluggable-widgets-tools/configs/rollup.config.native.mjs @@ -182,7 +182,12 @@ export default async args => { nodeResolve({ preferBuiltins: false, mainFields: ["module", "browser", "main"] }), isTypescript ? typescript({ - noEmitOnError: !args.watch, + // React Native 0.78.2's built-in types are incompatible with React 19 + // We disable type checking during build to avoid errors like: + // "'View' cannot be used as a JSX component" (missing 'refs' property) + // Note: IDE type checking still works, only build-time checking is disabled + noEmitOnError: false, + noCheck: true, sourceMap: config.sourceMaps, inlineSources: config.sourceMaps, target: "es2022", // we transpile the result with babel anyway, see below diff --git a/packages/pluggable-widgets-tools/configs/tsconfig.base.json b/packages/pluggable-widgets-tools/configs/tsconfig.base.json index 5cee5d4d..dbd6389d 100644 --- a/packages/pluggable-widgets-tools/configs/tsconfig.base.json +++ b/packages/pluggable-widgets-tools/configs/tsconfig.base.json @@ -5,7 +5,6 @@ "module": "esnext", "target": "es6", "lib": ["esnext", "dom"], - "types": ["jest", "node"], "moduleResolution": "node", "declaration": false, "noLib": false, diff --git a/packages/pluggable-widgets-tools/package.json b/packages/pluggable-widgets-tools/package.json index b68e7087..a0cf077b 100644 --- a/packages/pluggable-widgets-tools/package.json +++ b/packages/pluggable-widgets-tools/package.json @@ -31,7 +31,7 @@ "@babel/plugin-transform-react-jsx": "^7.25.9", "@babel/preset-env": "^7.26.0", "@babel/preset-react": "^7.25.9", - "@react-native/babel-preset": "0.77.3", + "@react-native/babel-preset": "0.78.2", "@prettier/plugin-xml": "^1.2.0", "@rollup/plugin-alias": "^5.1.1", "@rollup/plugin-babel": "^6.0.4", @@ -48,8 +48,8 @@ "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", "@testing-library/react-native": "^13.3.3", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.0", + "@types/react": "~19.0.12", + "@types/react-dom": "~19.0.0", "@types/testing-library__jest-dom": "^5.14.5", "@typescript-eslint/eslint-plugin": "^5.8.1", "@typescript-eslint/parser": "^5.8.1", @@ -111,9 +111,9 @@ "@types/node": "^16.18.126", "@types/xml2js": "^0.4.5", "async-mutex": "^0.2.4", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-native": "~0.77.3", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-native": "0.78.2", "tree-kill": "^1.2.2", "yeoman-test": "^6.2.0" }, diff --git a/packages/pluggable-widgets-tools/utils/migration.js b/packages/pluggable-widgets-tools/utils/migration.js index b7521f8e..b7658731 100644 --- a/packages/pluggable-widgets-tools/utils/migration.js +++ b/packages/pluggable-widgets-tools/utils/migration.js @@ -20,10 +20,9 @@ const dependencies = [ { name: "react-native", version: "remove", check: CheckType.MINOR }, { name: "@types/jest", version: "^29.0.0", check: CheckType.MAJOR }, { name: "@types/react", version: "remove", check: CheckType.MAJOR }, - { name: "@types/react-native", version: "remove", check: CheckType.MINOR }, { name: "@types/react-native-push-notification", version: "8.1.1", check: CheckType.MAJOR_MINOR }, { name: "@types/react-dom", version: "remove", check: CheckType.MAJOR }, - { name: "@types/react-test-renderer", version: "18.0.0", check: CheckType.MAJOR }, + { name: "@types/react-test-renderer", version: "19.0.0", check: CheckType.MAJOR }, { name: "@types/enzyme-adapter-react-16", version: "remove", check: CheckType.MAJOR }, { name: "@react-native-firebase/app", version: "17.3.0", check: CheckType.MAJOR_MINOR }, { name: "@react-native-firebase/messaging", version: "17.3.0", check: CheckType.MAJOR_MINOR }, @@ -46,16 +45,18 @@ const dependencies = [ { name: "react-native-webview", version: "11.26.1", check: CheckType.MAJOR_MINOR } ]; -const reactPackage = { version: "18.2.0", check: CheckType.MAJOR_MINOR }; -const reactDomPackage = { version: "18.2.0", check: CheckType.MAJOR_MINOR }; -const reactNativePackage = { version: "0.72.7", check: CheckType.MINOR }; +const reactPackage = { version: "^19.0.0", check: CheckType.MAJOR_MINOR }; +const reactDomPackage = { version: "^19.0.0", check: CheckType.MAJOR_MINOR }; +const reactNativePackage = { version: "0.78.2", check: CheckType.MINOR }; +// React 19 overrides for Mendix Studio Pro 11.6+ compatibility const resolutionsOverrides = [ { name: "react", ...reactPackage }, { name: "react-dom", ...reactDomPackage }, { name: "react-native", ...reactNativePackage }, { name: "@types/react", ...reactPackage }, { name: "@types/react-dom", ...reactDomPackage }, + // Note: @types/react-native removed - React Native 0.78.2 has built-in TypeScript types { name: "@types/react-native", ...reactNativePackage } ]; @@ -64,6 +65,12 @@ function extractVersions(version) { } async function question(question) { + // Auto-accept in non-interactive environments (CI, automated tests) + if (!process.stdin.isTTY || process.env.CI || process.env.NO_INPUT) { + console.log(yellow(question) + "Y (auto-accepted in non-interactive mode)"); + return "y"; + } + const rl = createInterface({ input: process.stdin, output: process.stdout }); return new Promise(resolve => rl.question(yellow(question), answer => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e2bc8124..58597f3b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -118,7 +118,7 @@ importers: version: 8.10.0(eslint@7.32.0) eslint-plugin-jest: specifier: ^27.1.3 - version: 27.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@5.8.3))(eslint@7.32.0)(typescript@5.8.3))(eslint@7.32.0)(jest@29.7.0)(typescript@5.8.3) + version: 27.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@5.8.3))(eslint@7.32.0)(typescript@5.8.3))(eslint@7.32.0)(jest@29.7.0(@types/node@16.18.126)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.8.3)))(typescript@5.8.3) eslint-plugin-prettier: specifier: ^3.3.1 version: 3.4.1(eslint-config-prettier@8.10.0(eslint@7.32.0))(eslint@7.32.0)(prettier@2.8.8) @@ -159,8 +159,8 @@ importers: specifier: ^1.2.0 version: 1.2.0 '@react-native/babel-preset': - specifier: 0.77.3 - version: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0)) + specifier: 0.78.2 + version: 0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0)) '@rollup/plugin-alias': specifier: ^5.1.1 version: 5.1.1(rollup@3.29.5) @@ -202,7 +202,7 @@ importers: version: 13.4.0(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@testing-library/react-native': specifier: ^13.3.3 - version: 13.3.3(jest@29.7.0(@types/node@16.18.126)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.8.3)))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1) + version: 13.3.3(jest@29.7.0(@types/node@16.18.126)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.8.3)))(react-native@0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1) '@testing-library/user-event': specifier: ^14.4.3 version: 14.6.1(@testing-library/dom@8.20.1) @@ -397,8 +397,8 @@ importers: specifier: ^18.2.0 version: 18.3.1(react@18.3.1) react-native: - specifier: ~0.77.3 - version: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1) + specifier: 0.78.2 + version: 0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1) tree-kill: specifier: ^1.2.2 version: 1.2.2 @@ -455,10 +455,6 @@ packages: '@babel/code-frame@7.12.11': resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -550,10 +546,6 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} @@ -1680,28 +1672,28 @@ packages: engines: {node: '>=16'} hasBin: true - '@react-native/assets-registry@0.77.3': - resolution: {integrity: sha512-kLocY1mlQjCdrX0y4eYQblub9NDdX+rkNii3F2rumri532ILjMAvkdpehf2PwQDj0X6PZYF1XFjszPw5uzq0Aw==} + '@react-native/assets-registry@0.78.2': + resolution: {integrity: sha512-VHqQqjj1rnh2KQeS3yx4IfFSxIIIDi1jR4yUeC438Q6srwxDohR4W0UkXuSIz0imhlems5eS7yZTjdgSpWHRUQ==} engines: {node: '>=18'} - '@react-native/babel-plugin-codegen@0.77.3': - resolution: {integrity: sha512-UbjQY8vFCVD4Aw4uSRWslKa26l1uOZzYhhKzWWOrV36f2NnP9Siid2rPkLa+MIJk16G2UzDRtUrMhGuejxp9cQ==} + '@react-native/babel-plugin-codegen@0.78.2': + resolution: {integrity: sha512-0MnQOhIaOdWbQ3Dx3dz0MBbG+1ggBiyUL+Y+xHAeSDSaiRATT8DIsrSloeJU0A+2p5TxF8ITJyJ6KEQkMyB/Zw==} engines: {node: '>=18'} - '@react-native/babel-preset@0.77.3': - resolution: {integrity: sha512-Cy1RoL5/nh2S/suWgfTuhUwkERoDN/Q2O6dZd3lcNcBrjd5Y++sBJGyBnHd9pqlSmOy8RLLBJZ9dOylycBOqzQ==} + '@react-native/babel-preset@0.78.2': + resolution: {integrity: sha512-VGOLhztQY/0vktMXrBr01HUN/iBSdkKBRiiZYfrLqx9fB2ql55gZb/6X9lzItjVyYoOc2jyHXSX8yoSfDcWDZg==} engines: {node: '>=18'} peerDependencies: '@babel/core': '*' - '@react-native/codegen@0.77.3': - resolution: {integrity: sha512-Q6ZJCE7h6Z3v3DiEZUnqzHbgwF3ZILN+ACTx6qu/x2X1cL96AatKwdX92e0+7J9RFg6gdoFYJgRrW8Q6VnWZsQ==} + '@react-native/codegen@0.78.2': + resolution: {integrity: sha512-4r3/W1h22/GAmAMuMRMJWsw/9JGUEDAnSbYNya7zID1XSvizLoA5Yn8Qv+phrRwwsl0eZLxOqONh/nzXJcvpyg==} engines: {node: '>=18'} peerDependencies: '@babel/preset-env': ^7.1.6 - '@react-native/community-cli-plugin@0.77.3': - resolution: {integrity: sha512-8OKvow2jHojl1d3PW/84uTBPMnmxRyPtfhBL0sQxrWP5Kgooe5XALoWsoBIFk+aIFu/fV7Pv0AAd0cdLC0NtOg==} + '@react-native/community-cli-plugin@0.78.2': + resolution: {integrity: sha512-xqEnpqxvBlm02mRY58L0NBjF25MTHmbaeA2qBx5VtheH/pXL6MHUbtwB1Q2dJrg9XcK0Np1i9h7N5h9gFwA2Mg==} engines: {node: '>=18'} peerDependencies: '@react-native-community/cli': '*' @@ -1709,36 +1701,36 @@ packages: '@react-native-community/cli': optional: true - '@react-native/debugger-frontend@0.77.3': - resolution: {integrity: sha512-FTERmc43r/3IpTvUZTr9gVVTgOIrg1hrkN57POr/CiL8RbcY/nv6vfNM7/CXG5WF8ckHiLeWTcRHzJUl1+rFkw==} + '@react-native/debugger-frontend@0.78.2': + resolution: {integrity: sha512-qNJT679OU/cdAKmZxfBFjqTG+ZC5i/4sLyvbcQjFFypunGSOaWl3mMQFQQdCBIQN+DFDPVSUXTPZQK1uI2j/ow==} engines: {node: '>=18'} - '@react-native/dev-middleware@0.77.3': - resolution: {integrity: sha512-tCylGMjibJAEl2r2nWX5L5CvK6XFLGbjhe7Su7OcxRGrynHin87rAmcaTeoTtbtsREFlFM0f4qxcmwCxmbZHJw==} + '@react-native/dev-middleware@0.78.2': + resolution: {integrity: sha512-/u0pGiWVgvx09cYNO4/Okj8v1ZNt4K941pQJPhdwg5AHYuggVHNJjROukXJzZiElYFcJhMfOuxwksiIyx/GAkA==} engines: {node: '>=18'} - '@react-native/gradle-plugin@0.77.3': - resolution: {integrity: sha512-GRVNBDowaFub9j+WBLGI09bDbCq+f7ugaNRr6lmZnLx/xdmiKUj9YKyARt4zn8m65MRK2JGlJk0OqmQOvswpzQ==} + '@react-native/gradle-plugin@0.78.2': + resolution: {integrity: sha512-LHgmdrbyK9fcBDdxtn2GLOoDAE+aFHtDHgu6vUZ5CSCi9CMd5Krq8IWAmWjeq+BQr+D1rwSXDAHtOrfJ6qOolA==} engines: {node: '>=18'} - '@react-native/js-polyfills@0.77.3': - resolution: {integrity: sha512-XqxnQRyKD11u5ZYG5LPnElThWYJf3HMosqqkJGB4nwx6nc6WKxj1sR9snptibExDMGioZ2OyvPWCF8tX+qggrw==} + '@react-native/js-polyfills@0.78.2': + resolution: {integrity: sha512-b7eCPAs3uogdDeTvOTrU6i8DTTsHyjyp48R5pVakJIREhEx+SkUnlVk11PYjbCKGYjYgN939Tb5b1QWNtdrPIQ==} engines: {node: '>=18'} - '@react-native/metro-babel-transformer@0.77.3': - resolution: {integrity: sha512-eBX5ibF1ovuZGwo08UOhnnkZDnhl8DdrCulJ8V/LCnpC6CihhQyxtolO+BmzXjUFyGiH7ImoxX7+mpXI74NYGg==} + '@react-native/metro-babel-transformer@0.78.2': + resolution: {integrity: sha512-H4614LjcbrG+lUtg+ysMX5RnovY8AwrWj4rH8re6ErfhPFwLQXV0LIrl/fgFpq07Vjc5e3ZXzuKuMJF6l7eeTQ==} engines: {node: '>=18'} peerDependencies: '@babel/core': '*' - '@react-native/normalize-colors@0.77.3': - resolution: {integrity: sha512-9gHhvK0EKskgIN4JiwzQdxiKhLCgH2LpCp+v38ZxWQpXTMbTDDE4AJRqYgWp2v9WUFQB/S5+XqBDZDgn/MGq9A==} + '@react-native/normalize-colors@0.78.2': + resolution: {integrity: sha512-CA/3ynRO6/g1LDbqU8ewrv0js/1lU4+j04L7qz6btXbLTDk1UkF+AfpGRJGbIVY9UmFBJ7l1AOmzwutrWb3Txw==} - '@react-native/virtualized-lists@0.77.3': - resolution: {integrity: sha512-3B0TPbLp7ZMWTlsOf+MzcuKuqF2HZzqh94+tPvw1thF5PxPaO2yZjVxfjrQ9EtdhQisG4siwiXVHB9DD6VkU4A==} + '@react-native/virtualized-lists@0.78.2': + resolution: {integrity: sha512-y/wVRUz1ImR2hKKUXFroTdSBiL0Dd+oudzqcGKp/M8Ybrw9MQ0m2QCXxtyONtDn8qkEGceqllwTCKq5WQwJcew==} engines: {node: '>=18'} peerDependencies: - '@types/react': ^18.2.6 + '@types/react': ^19.0.0 react: '*' react-native: '*' peerDependenciesMeta: @@ -2656,9 +2648,6 @@ packages: ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} - ci-info@3.5.0: - resolution: {integrity: sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==} - ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -3684,9 +3673,6 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -4307,10 +4293,6 @@ packages: resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - jest-util@29.4.1: - resolution: {integrity: sha512-bQy9FPGxVutgpN4VRc0hk6w7Hx/m6L53QxpDreTZgJd9gfx/AV2MjyPde9tGyZRINAUrSv57p2inGBu2dRLmkQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4362,9 +4344,6 @@ packages: jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsc-android@250231.0.0: - resolution: {integrity: sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==} - jsc-safe-url@0.2.4: resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} @@ -4736,6 +4715,7 @@ packages: metro-react-native-babel-preset@0.76.9: resolution: {integrity: sha512-eCBtW/UkJPDr6HlMgFEGF+964DZsUEF9RGeJdZLKWE7d/0nY3ABZ9ZAGxzu9efQ35EWRox5bDMXUGaOwUe5ikQ==} engines: {node: '>=16'} + deprecated: Use @react-native/babel-preset instead peerDependencies: '@babel/core': '*' @@ -5347,10 +5327,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} @@ -5748,13 +5724,13 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-native@0.77.3: - resolution: {integrity: sha512-fIYZ9+zX+iGcb/xGZA6oN3Uq9x46PdqVYtlyG+WmOIFQPVXgryaS9FJLdTvoTpsEA2JXGSGgNOdm640IdAW3cA==} + react-native@0.78.2: + resolution: {integrity: sha512-UilZ8sP9amHCz7TTMWMJ71JeYcMzEdgCJaqTfoB1hC/nYMXq6xqSFxKWCDhf7sR7nz3FKxS4t338t42AMDDkww==} engines: {node: '>=18'} hasBin: true peerDependencies: - '@types/react': ^18.2.6 - react: ^18.2.0 + '@types/react': ^19.0.0 + react: ^19.0.0 peerDependenciesMeta: '@types/react': optional: true @@ -6044,8 +6020,8 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - scheduler@0.24.0-canary-efb381bbf-20230505: - resolution: {integrity: sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==} + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} scoped-regex@2.1.0: resolution: {integrity: sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==} @@ -7015,12 +6991,6 @@ snapshots: dependencies: '@babel/highlight': 7.25.9 - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -7163,8 +7133,6 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-identifier@7.27.1': {} '@babel/helper-validator-option@7.27.1': {} @@ -8805,17 +8773,17 @@ snapshots: - utf-8-validate optional: true - '@react-native/assets-registry@0.77.3': {} + '@react-native/assets-registry@0.78.2': {} - '@react-native/babel-plugin-codegen@0.77.3(@babel/preset-env@7.28.0(@babel/core@7.28.0))': + '@react-native/babel-plugin-codegen@0.78.2(@babel/preset-env@7.28.0(@babel/core@7.28.0))': dependencies: '@babel/traverse': 7.28.0 - '@react-native/codegen': 0.77.3(@babel/preset-env@7.28.0(@babel/core@7.28.0)) + '@react-native/codegen': 0.78.2(@babel/preset-env@7.28.0(@babel/core@7.28.0)) transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/babel-preset@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))': + '@react-native/babel-preset@0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.28.0) @@ -8858,7 +8826,7 @@ snapshots: '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.0) '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.0) '@babel/template': 7.27.2 - '@react-native/babel-plugin-codegen': 0.77.3(@babel/preset-env@7.28.0(@babel/core@7.28.0)) + '@react-native/babel-plugin-codegen': 0.78.2(@babel/preset-env@7.28.0(@babel/core@7.28.0)) babel-plugin-syntax-hermes-parser: 0.25.1 babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.28.0) react-refresh: 0.14.2 @@ -8866,7 +8834,7 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/codegen@0.77.3(@babel/preset-env@7.28.0(@babel/core@7.28.0))': + '@react-native/codegen@0.78.2(@babel/preset-env@7.28.0(@babel/core@7.28.0))': dependencies: '@babel/parser': 7.28.0 '@babel/preset-env': 7.28.0(@babel/core@7.28.0) @@ -8879,10 +8847,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/community-cli-plugin@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))': + '@react-native/community-cli-plugin@0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))': dependencies: - '@react-native/dev-middleware': 0.77.3 - '@react-native/metro-babel-transformer': 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0)) + '@react-native/dev-middleware': 0.78.2 + '@react-native/metro-babel-transformer': 0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0)) chalk: 4.1.2 debug: 2.6.9 invariant: 2.2.4 @@ -8900,12 +8868,12 @@ snapshots: - supports-color - utf-8-validate - '@react-native/debugger-frontend@0.77.3': {} + '@react-native/debugger-frontend@0.78.2': {} - '@react-native/dev-middleware@0.77.3': + '@react-native/dev-middleware@0.78.2': dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.77.3 + '@react-native/debugger-frontend': 0.78.2 chrome-launcher: 0.15.2 chromium-edge-launcher: 0.2.0 connect: 3.7.0 @@ -8921,28 +8889,28 @@ snapshots: - supports-color - utf-8-validate - '@react-native/gradle-plugin@0.77.3': {} + '@react-native/gradle-plugin@0.78.2': {} - '@react-native/js-polyfills@0.77.3': {} + '@react-native/js-polyfills@0.78.2': {} - '@react-native/metro-babel-transformer@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))': + '@react-native/metro-babel-transformer@0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))': dependencies: '@babel/core': 7.28.0 - '@react-native/babel-preset': 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0)) + '@react-native/babel-preset': 0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0)) hermes-parser: 0.25.1 nullthrows: 1.1.1 transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/normalize-colors@0.77.3': {} + '@react-native/normalize-colors@0.78.2': {} - '@react-native/virtualized-lists@0.77.3(@types/react@18.3.23)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1))(react@18.3.1)': + '@react-native/virtualized-lists@0.78.2(@types/react@18.3.23)(react-native@0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1) + react-native: 0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1) optionalDependencies: '@types/react': 18.3.23 @@ -9116,13 +9084,13 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react-native@13.3.3(jest@29.7.0(@types/node@16.18.126)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.8.3)))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react-native@13.3.3(jest@29.7.0(@types/node@16.18.126)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.8.3)))(react-native@0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: jest-matcher-utils: 30.0.5 picocolors: 1.1.1 pretty-format: 30.0.5 react: 18.3.1 - react-native: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1) + react-native: 0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1) react-test-renderer: 18.3.1(react@18.3.1) redent: 3.0.0 optionalDependencies: @@ -10162,8 +10130,6 @@ snapshots: ci-info@2.0.0: {} - ci-info@3.5.0: {} - ci-info@3.9.0: {} ci-info@4.3.0: {} @@ -10846,7 +10812,7 @@ snapshots: - supports-color - typescript - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@5.8.3))(eslint@7.32.0)(typescript@5.8.3))(eslint@7.32.0)(jest@29.7.0)(typescript@5.8.3): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@5.8.3))(eslint@7.32.0)(typescript@5.8.3))(eslint@7.32.0)(jest@29.7.0(@types/node@16.18.126)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.8.3)))(typescript@5.8.3): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@7.32.0)(typescript@5.8.3) eslint: 7.32.0 @@ -11092,7 +11058,7 @@ snapshots: jest-get-type: 29.6.3 jest-matcher-utils: 29.7.0 jest-message-util: 29.4.1 - jest-util: 29.4.1 + jest-util: 29.7.0 expect@29.7.0: dependencies: @@ -11429,8 +11395,6 @@ snapshots: gopd@1.2.0: {} - graceful-fs@4.2.10: {} - graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -12102,11 +12066,11 @@ snapshots: jest-message-util@29.4.1: dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 micromatch: 4.0.8 pretty-format: 29.7.0 slash: 3.0.0 @@ -12266,15 +12230,6 @@ snapshots: picomatch: 2.3.1 optional: true - jest-util@29.4.1: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 16.18.126 - chalk: 4.1.2 - ci-info: 3.5.0 - graceful-fs: 4.2.10 - picomatch: 2.3.1 - jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 @@ -12291,7 +12246,7 @@ snapshots: chalk: 4.1.2 ci-info: 4.3.0 graceful-fs: 4.2.11 - picomatch: 4.0.2 + picomatch: 4.0.3 jest-validate@29.7.0: dependencies: @@ -12361,8 +12316,6 @@ snapshots: jsbn@1.1.0: {} - jsc-android@250231.0.0: {} - jsc-safe-url@0.2.4: {} jscodeshift@17.3.0(@babel/preset-env@7.28.0(@babel/core@7.28.0)): @@ -13793,8 +13746,6 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.2: {} - picomatch@4.0.3: {} pify@2.3.0: {} @@ -14166,16 +14117,16 @@ snapshots: react-is@18.3.1: {} - react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1): + react-native@0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1): dependencies: '@jest/create-cache-key-function': 29.7.0 - '@react-native/assets-registry': 0.77.3 - '@react-native/codegen': 0.77.3(@babel/preset-env@7.28.0(@babel/core@7.28.0)) - '@react-native/community-cli-plugin': 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13)) - '@react-native/gradle-plugin': 0.77.3 - '@react-native/js-polyfills': 0.77.3 - '@react-native/normalize-colors': 0.77.3 - '@react-native/virtualized-lists': 0.77.3(@types/react@18.3.23)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1))(react@18.3.1) + '@react-native/assets-registry': 0.78.2 + '@react-native/codegen': 0.78.2(@babel/preset-env@7.28.0(@babel/core@7.28.0)) + '@react-native/community-cli-plugin': 0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13)) + '@react-native/gradle-plugin': 0.78.2 + '@react-native/js-polyfills': 0.78.2 + '@react-native/normalize-colors': 0.78.2 + '@react-native/virtualized-lists': 0.78.2(@types/react@18.3.23)(react-native@0.78.2(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@11.4.1(@babel/core@7.28.0)(encoding@0.1.13))(@types/react@18.3.23)(react@18.3.1))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -14189,7 +14140,6 @@ snapshots: glob: 7.2.3 invariant: 2.2.4 jest-environment-node: 29.7.0 - jsc-android: 250231.0.0 memoize-one: 5.2.1 metro-runtime: 0.81.5 metro-source-map: 0.81.5 @@ -14200,7 +14150,7 @@ snapshots: react-devtools-core: 6.1.5 react-refresh: 0.14.2 regenerator-runtime: 0.13.11 - scheduler: 0.24.0-canary-efb381bbf-20230505 + scheduler: 0.25.0 semver: 7.7.2 stacktrace-parser: 0.1.11 whatwg-fetch: 3.6.20 @@ -14561,9 +14511,7 @@ snapshots: dependencies: loose-envify: 1.4.0 - scheduler@0.24.0-canary-efb381bbf-20230505: - dependencies: - loose-envify: 1.4.0 + scheduler@0.25.0: {} scoped-regex@2.1.0: {}