diff --git a/.github/workflows/package-js-tests.yml b/.github/workflows/package-js-tests.yml index 90e3884276..ec5406123b 100644 --- a/.github/workflows/package-js-tests.yml +++ b/.github/workflows/package-js-tests.yml @@ -81,11 +81,11 @@ jobs: ) strategy: matrix: - include: + node-version: # Always run: Latest Node version (fast feedback on PRs) - - node-version: '22' + - '22' # Master and full-ci label: Minimum supported Node version (full coverage) - - node-version: '20' + - '20' exclude: # Skip minimum dependency matrix on regular PRs (run only on master or with full-ci label) - node-version: ${{ github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && needs.detect-changes.outputs.has_full_ci_label != 'true' && '20' || '' }} @@ -122,9 +122,11 @@ jobs: run: script/convert - name: Install Node modules with pnpm for renderer package run: | - pnpm install ${{ matrix.node-version == '22' && '--frozen-lockfile' || '' }} + pnpm install ${{ matrix.node-version == '22' && '--frozen-lockfile' || '--no-frozen-lockfile' }} pnpm add -g yalc - name: Build Renderer package run: pnpm build - - name: Run JS unit tests for Renderer package - run: pnpm test + - name: Run JS unit tests for react-on-rails package + run: pnpm --filter react-on-rails test + - name: Run JS unit tests for react-on-rails-pro package + run: pnpm --filter react-on-rails-pro test diff --git a/jest.config.base.js b/jest.config.base.js index b944bce28c..be94ae57f3 100644 --- a/jest.config.base.js +++ b/jest.config.base.js @@ -1,19 +1,36 @@ import { createJsWithTsPreset } from 'ts-jest'; +const tsconfig = { + // Relative imports in our TS code include `.ts` extensions. + // When compiling the package, TS rewrites them to `.js`, + // but ts-jest runs on the original code where the `.js` files don't exist, + // so this setting needs to be disabled here. + rewriteRelativeImportExtensions: false, + // Override hybrid module kind (Node16/NodeNext) to avoid ts-jest warning + // about requiring isolatedModules: true + module: 'ESNext', +}; + +const tsJestPreset = createJsWithTsPreset({ + tsconfig, +}); + // Global Jest configuration for the monorepo // Contains common settings that all packages inherit export default { // === TypeScript Configuration === - // ts-jest preset with custom TypeScript settings - ...createJsWithTsPreset({ - tsconfig: { - // Relative imports in our TS code include `.ts` extensions. - // When compiling the package, TS rewrites them to `.js`, - // but ts-jest runs on the original code where the `.js` files don't exist, - // so this setting needs to be disabled here. - rewriteRelativeImportExtensions: false, - }, - }), + // ts-jest preset with custom TypeScript settings, extended to handle .cts/.mts files + ...tsJestPreset, + transform: { + ...tsJestPreset.transform, + // Extend transform to include CommonJS TypeScript (.cts) and ES Module TypeScript (.mts) files + '^.+\\.[cm]?ts$': [ + 'ts-jest', + { + tsconfig, + }, + ], + }, // === Test Environment Configuration === testEnvironment: 'jsdom', @@ -23,5 +40,6 @@ export default { testMatch: ['**/?(*.)+(spec|test).[jt]s?(x)'], // === Common Module File Extensions === - moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json'], + // Include cts/mts for CommonJS/ES module TypeScript files + moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'cts', 'mts', 'json'], }; diff --git a/package.json b/package.json index 73392aae77..f3a54ec927 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,6 @@ "publint": "^0.3.4", "react": "18.0.0", "react-dom": "18.0.0", - "react-on-rails-rsc": "19.0.2", "redux": "^4.2.1", "size-limit": "^12.0.0", "stylelint": "^16.14.0", diff --git a/packages/react-on-rails-pro/package.json b/packages/react-on-rails-pro/package.json index 364af9f89d..e4c1e6300d 100644 --- a/packages/react-on-rails-pro/package.json +++ b/packages/react-on-rails-pro/package.json @@ -77,6 +77,9 @@ "homepage": "https://github.com/shakacode/react_on_rails#readme", "devDependencies": { "@types/mock-fs": "^4.13.4", - "mock-fs": "^5.5.0" + "mock-fs": "^5.5.0", + "react": "19.0.0", + "react-dom": "19.0.0", + "react-on-rails-rsc": "19.0.2" } } diff --git a/packages/react-on-rails/package.json b/packages/react-on-rails/package.json index 5d496e66b5..aaafa07d78 100644 --- a/packages/react-on-rails/package.json +++ b/packages/react-on-rails/package.json @@ -59,13 +59,7 @@ }, "peerDependencies": { "react": ">= 16", - "react-dom": ">= 16", - "react-on-rails-rsc": "19.0.2" - }, - "peerDependenciesMeta": { - "react-on-rails-rsc": { - "optional": true - } + "react-dom": ">= 16" }, "files": [ "lib/**/*.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e538e40116..cce2fc9dbf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,7 +98,7 @@ importers: version: 2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-jest: specifier: ^28.11.0 - version: 28.14.0(@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(jest@29.7.0(@types/node@20.19.25))(typescript@5.9.3) + version: 28.14.0(@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(jest@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0))(typescript@5.9.3) eslint-plugin-jsx-a11y: specifier: ^6.10.2 version: 6.10.2(eslint@9.39.1(jiti@2.6.1)) @@ -119,7 +119,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.25) + version: 29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 @@ -153,9 +153,6 @@ importers: react-dom: specifier: 18.0.0 version: 18.0.0(react@18.0.0) - react-on-rails-rsc: - specifier: 19.0.2 - version: 19.0.2(react-dom@18.0.0(react@18.0.0))(react@18.0.0)(webpack@5.103.0(@swc/core@1.15.3)) redux: specifier: ^4.2.1 version: 4.2.1 @@ -173,7 +170,7 @@ importers: version: 0.2.6(@swc/core@1.15.3)(webpack@5.103.0(@swc/core@1.15.3)) ts-jest: specifier: ^29.2.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.25))(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0))(typescript@5.9.3) typescript: specifier: ^5.8.3 version: 5.9.3 @@ -189,24 +186,12 @@ importers: react-dom: specifier: '>= 16' version: 19.2.0(react@19.2.0) - react-on-rails-rsc: - specifier: 19.0.2 - version: 19.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(webpack@5.103.0(@swc/core@1.15.3)) packages/react-on-rails-pro: dependencies: - react: - specifier: '>= 16' - version: 19.2.0 - react-dom: - specifier: '>= 16' - version: 19.2.0(react@19.2.0) react-on-rails: specifier: workspace:* version: link:../react-on-rails - react-on-rails-rsc: - specifier: 19.0.2 - version: 19.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(webpack@5.103.0(@swc/core@1.15.3)) devDependencies: '@types/mock-fs': specifier: ^4.13.4 @@ -214,6 +199,15 @@ importers: mock-fs: specifier: ^5.5.0 version: 5.5.0 + react: + specifier: 19.0.0 + version: 19.0.0 + react-dom: + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) + react-on-rails-rsc: + specifier: 19.0.2 + version: 19.0.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(webpack@5.103.0(@swc/core@1.15.3)) packages/react-on-rails-pro-node-renderer: dependencies: @@ -1653,6 +1647,12 @@ packages: '@types/node@20.19.25': resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==} + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} @@ -2137,6 +2137,10 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + babel-plugin-polyfill-corejs2@0.4.14: resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} peerDependencies: @@ -2402,6 +2406,10 @@ packages: core-js-compat@3.47.0: resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + cosmiconfig@9.0.0: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} @@ -4411,6 +4419,11 @@ packages: peerDependencies: react: ^18.0.0 + react-dom@19.0.0: + resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} + peerDependencies: + react: ^19.0.0 + react-dom@19.2.0: resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} peerDependencies: @@ -4436,6 +4449,10 @@ packages: resolution: {integrity: sha512-x+VL6wbT4JRVPm7EGxXhZ8w8LTROaxPXOqhlGyVSrv0sB1jkyFGgXxJ8LVoPRLvPR6/CIZGFmfzqUa2NYeMr2A==} engines: {node: '>=0.10.0'} + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + engines: {node: '>=0.10.0'} + react@19.2.0: resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} engines: {node: '>=0.10.0'} @@ -4584,6 +4601,9 @@ packages: scheduler@0.21.0: resolution: {integrity: sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==} + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -5107,6 +5127,9 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -5350,6 +5373,10 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + yargs-parser@15.0.3: resolution: {integrity: sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==} @@ -6402,7 +6429,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -6416,7 +6443,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.25) + jest-config: 29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -6927,11 +6954,11 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.19.25 + '@types/node': 24.10.1 '@types/connect@3.4.38': dependencies: - '@types/node': 20.19.25 + '@types/node': 24.10.1 '@types/eslint-scope@3.7.7': dependencies: @@ -6947,7 +6974,7 @@ snapshots: '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 20.19.25 + '@types/node': 24.10.1 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -7017,6 +7044,13 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@24.10.1': + dependencies: + undici-types: 7.16.0 + + '@types/parse-json@4.0.2': + optional: true + '@types/prop-types@15.7.15': {} '@types/qs@6.14.0': {} @@ -7035,16 +7069,16 @@ snapshots: '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.19.25 + '@types/node': 24.10.1 '@types/send@1.2.1': dependencies: - '@types/node': 20.19.25 + '@types/node': 24.10.1 '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 20.19.25 + '@types/node': 24.10.1 '@types/send': 0.17.6 '@types/stack-utils@2.0.3': {} @@ -7543,6 +7577,13 @@ snapshots: '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.28.4 + cosmiconfig: 7.1.0 + resolve: 1.22.11 + optional: true + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5): dependencies: '@babel/compat-data': 7.28.5 @@ -7817,6 +7858,15 @@ snapshots: dependencies: browserslist: 4.28.0 + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + optional: true + cosmiconfig@9.0.0(typescript@5.9.3): dependencies: env-paths: 2.2.1 @@ -7826,13 +7876,13 @@ snapshots: optionalDependencies: typescript: 5.9.3 - create-jest@29.7.0(@types/node@20.19.25): + create-jest@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0): 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.25) + jest-config: 29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -7949,7 +7999,9 @@ snapshots: decimal.js@10.6.0: {} - dedent@1.7.0: {} + dedent@1.7.0(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 deep-is@0.1.4: {} @@ -8296,13 +8348,13 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(jest@29.7.0(@types/node@20.19.25))(typescript@5.9.3): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(jest@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0))(typescript@5.9.3): dependencies: '@typescript-eslint/utils': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.1(jiti@2.6.1) optionalDependencies: '@typescript-eslint/eslint-plugin': 8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - jest: 29.7.0(@types/node@20.19.25) + jest: 29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0) transitivePeerDependencies: - supports-color - typescript @@ -9147,7 +9199,7 @@ snapshots: jest-util: 29.7.0 p-limit: 3.1.0 - jest-circus@29.7.0: + jest-circus@29.7.0(babel-plugin-macros@3.1.0): dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -9156,7 +9208,7 @@ snapshots: '@types/node': 20.19.25 chalk: 4.1.2 co: 4.6.0 - dedent: 1.7.0 + dedent: 1.7.0(babel-plugin-macros@3.1.0) is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -9173,16 +9225,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.19.25): + jest-cli@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0): dependencies: - '@jest/core': 29.7.0 + '@jest/core': 29.7.0(babel-plugin-macros@3.1.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.25) + create-jest: 29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.25) + jest-config: 29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -9192,7 +9244,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.19.25): + jest-config@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0): dependencies: '@babel/core': 7.28.5 '@jest/test-sequencer': 29.7.0 @@ -9203,7 +9255,7 @@ snapshots: deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.7.0 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) jest-environment-node: 29.7.0 jest-get-type: 29.6.3 jest-regex-util: 29.6.3 @@ -9461,7 +9513,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.19.25 + '@types/node': 24.10.1 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -9472,12 +9524,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.19.25): + jest@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0): dependencies: - '@jest/core': 29.7.0 + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.25) + jest-cli: 29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -10321,6 +10373,11 @@ snapshots: react: 18.0.0 scheduler: 0.21.0 + react-dom@19.0.0(react@19.0.0): + dependencies: + react: 19.0.0 + scheduler: 0.25.0 + react-dom@19.2.0(react@19.2.0): dependencies: react: 19.2.0 @@ -10332,21 +10389,12 @@ snapshots: react-is@18.3.1: {} - react-on-rails-rsc@19.0.2(react-dom@18.0.0(react@18.0.0))(react@18.0.0)(webpack@5.103.0(@swc/core@1.15.3)): + react-on-rails-rsc@19.0.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(webpack@5.103.0(@swc/core@1.15.3)): dependencies: acorn-loose: 8.5.2 neo-async: 2.6.2 - react: 18.0.0 - react-dom: 18.0.0(react@18.0.0) - webpack: 5.103.0(@swc/core@1.15.3) - webpack-sources: 3.3.3 - - react-on-rails-rsc@19.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(webpack@5.103.0(@swc/core@1.15.3)): - dependencies: - acorn-loose: 8.5.2 - neo-async: 2.6.2 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) webpack: 5.103.0(@swc/core@1.15.3) webpack-sources: 3.3.3 @@ -10354,6 +10402,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + react@19.0.0: {} + react@19.2.0: {} readline-sync@1.4.10: {} @@ -10507,6 +10557,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + scheduler@0.25.0: {} + scheduler@0.27.0: {} schema-utils@4.3.3: @@ -11018,12 +11070,12 @@ snapshots: dependencies: typescript: 5.9.3 - ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.25))(typescript@5.9.3): + ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.8 - jest: 29.7.0(@types/node@20.19.25) + jest: 29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -11123,6 +11175,8 @@ snapshots: undici-types@6.21.0: {} + undici-types@7.16.0: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-emoji-modifier-base@1.0.0: {} @@ -11388,6 +11442,9 @@ snapshots: yallist@3.1.1: {} + yaml@1.10.2: + optional: true + yargs-parser@15.0.3: dependencies: camelcase: 5.3.1 diff --git a/react_on_rails_pro/spec/dummy/package.json b/react_on_rails_pro/spec/dummy/package.json index bfe782fc95..b2d59ea663 100644 --- a/react_on_rails_pro/spec/dummy/package.json +++ b/react_on_rails_pro/spec/dummy/package.json @@ -17,7 +17,6 @@ "@loadable/server": "^5.16.2", "@loadable/webpack-plugin": "^5.15.2", "@sentry/node": "^7.120.0", - "react-on-rails-pro-node-renderer": "link:.yalc/react-on-rails-pro-node-renderer", "@shakacode/use-ssr-computation.macro": "^1.2.4", "@shakacode/use-ssr-computation.runtime": "^2.0.0", "@webpack-cli/serve": "^1.6.0", @@ -52,6 +51,7 @@ "react-error-boundary": "^4.1.2", "react-helmet": "^6.0.0-beta.2", "react-on-rails-pro": "link:.yalc/react-on-rails-pro", + "react-on-rails-pro-node-renderer": "link:.yalc/react-on-rails-pro-node-renderer", "react-on-rails-rsc": "^19.0.2", "react-proptypes": "^1.0.0", "react-redux": "^9.2.0", @@ -71,7 +71,6 @@ "url-loader": "^4.1.1", "webpack": "5", "webpack-assets-manifest": "5", - "webpack-cli": "4", "webpack-manifest-plugin": "^2.0.4", "webpack-merge": "5" }, @@ -89,6 +88,7 @@ "pino-pretty": "^13.0.0", "preload-webpack-plugin": "^3.0.0-alpha.1", "typescript": "^5.2.2", + "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.7.3" }, "browser": { diff --git a/script/convert b/script/convert index 2a4b501e1e..0ea3ea0b07 100755 --- a/script/convert +++ b/script/convert @@ -45,6 +45,8 @@ gsub_file_content("../package.json", /,(\s*})/, "\\1") # Switch to minimum supported React version (React 18 since we removed PropTypes) gsub_file_content("../package.json", /"react": "[^"]*",/, '"react": "18.0.0",') gsub_file_content("../package.json", /"react-dom": "[^"]*",/, '"react-dom": "18.0.0",') +gsub_file_content("../packages/react-on-rails-pro/package.json", /"react": "[^"]*",/, '"react": "18.0.0",') +gsub_file_content("../packages/react-on-rails-pro/package.json", /"react-dom": "[^"]*",/, '"react-dom": "18.0.0",') gsub_file_content("../react_on_rails/spec/dummy/package.json", /"react": "[^"]*",/, '"react": "18.0.0",') gsub_file_content("../react_on_rails/spec/dummy/package.json", /"react-dom": "[^"]*",/, '"react-dom": "18.0.0",') gsub_file_content(