From e8536fadf9afc0b24e35e07e25cd8da041d03cec Mon Sep 17 00:00:00 2001 From: Wojciech Maj Date: Fri, 26 Jan 2024 13:28:32 +0100 Subject: [PATCH] Test against multiple versions of React Closes #2568 Requires #2567 --- .github/workflows/main.yml | 9 +-- .github/workflows/release.yml | 9 +-- package.json | 4 ++ packages/examples/package.json | 4 +- packages/renderer/package.json | 2 +- packages/renderer/vitest.browser.config.js | 19 +++++- packages/renderer/vitest.config.js | 19 ++++++ yarn.lock | 78 +++++++++++++++++++++- 8 files changed, 129 insertions(+), 15 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6c8d9f451..978c57421 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,7 +12,7 @@ concurrency: env: FORCE_COLOR: 2 HUSKY: 0 - NODE: 20 + NODE_VERSION: 20 jobs: size: @@ -36,7 +36,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v4 with: - node-version: ${{ env.NODE }} + node-version: ${{ env.NODE_VERSION }} - name: Enable Corepack run: corepack enable @@ -48,11 +48,12 @@ jobs: run: yarn --cwd packages/renderer run size test: - name: Run tests (Node.js ${{ matrix.node_version }}) + name: Run tests (Node.js ${{ matrix.node_version }}; React ${{ matrix.react_version }}) runs-on: ubuntu-latest strategy: matrix: node_version: [18, 20] + react_version: [16, 17, 18] steps: - name: Checkout @@ -80,4 +81,4 @@ jobs: run: yarn --immutable - name: Run tests - run: yarn test + run: REACT_VERSION=${{ matrix.react_version }} yarn test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5228d581c..37632b323 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,15 +12,16 @@ concurrency: env: FORCE_COLOR: 2 HUSKY: 0 - NODE: 20 + NODE_VERSION: 20 jobs: test: - name: Run tests (Node.js ${{ matrix.node_version }}) + name: Run tests (Node.js ${{ matrix.node_version }}; React ${{ matrix.react_version }}) runs-on: ubuntu-latest strategy: matrix: node_version: [18, 20] + react_version: [16, 17, 18] steps: - name: Checkout @@ -48,7 +49,7 @@ jobs: run: yarn --immutable - name: Run tests - run: yarn test + run: REACT_VERSION=${{ matrix.react_version }} yarn test release: # Prevents this action from running on forks @@ -76,7 +77,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v4 with: - node-version: ${{ env.NODE }} + node-version: ${{ env.NODE_VERSION }} - name: Enable Corepack run: corepack enable diff --git a/package.json b/package.json index 8b0f1ed10..d1a9746ca 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,11 @@ "pdfjs-dist": "3.2.146", "prettier": "^1.16.4", "react": "^18.2.0", + "react-16": "npm:react@^16.8.0", + "react-17": "npm:react@^17.0.0", "react-dom": "^18.2.0", + "react-dom-16": "npm:react-dom@^16.8.0", + "react-dom-17": "npm:react-dom@^17.0.0", "rimraf": "^2.6.3", "rollup": "^2.60.1", "rollup-plugin-copy": "^3.5.0", diff --git a/packages/examples/package.json b/packages/examples/package.json index e9a152306..e70110d30 100644 --- a/packages/examples/package.json +++ b/packages/examples/package.json @@ -17,7 +17,7 @@ "vite": "^5.0.11" }, "peerDependencies": { - "react": "^16.8.6 || ^17.0.0", - "react-dom": "^16.8.6 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } } diff --git a/packages/renderer/package.json b/packages/renderer/package.json index a0aab1ee8..10f6a51ef 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -46,7 +46,7 @@ "scheduler": "^0.17.0" }, "peerDependencies": { - "react": "^16.8.6 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "lint-staged": { "*.js": [ diff --git a/packages/renderer/vitest.browser.config.js b/packages/renderer/vitest.browser.config.js index d73ed023a..0e0d6a7dd 100644 --- a/packages/renderer/vitest.browser.config.js +++ b/packages/renderer/vitest.browser.config.js @@ -4,11 +4,28 @@ import { defineConfig } from 'vitest/config'; import react from '@vitejs/plugin-react'; export default defineConfig({ + plugins: [react()], resolve: { + alias: + process.env.REACT_VERSION && process.env.REACT_VERSION !== '18' + ? [ + { + find: 'react/jsx-dev-runtime', + replacement: `react-${process.env.REACT_VERSION}/jsx-dev-runtime`, + }, + { + find: 'react', + replacement: `react-${process.env.REACT_VERSION}`, + }, + { + find: 'react-dom', + replacement: `react-dom-${process.env.REACT_VERSION}`, + }, + ] + : undefined, conditions: ['browser'], mainFields: ['browser'], }, - plugins: [react()], test: { environment: './tests/environment/jsdom.js', setupFiles: ['vitest.setup.js'], diff --git a/packages/renderer/vitest.config.js b/packages/renderer/vitest.config.js index 6532cd148..a84ecea33 100644 --- a/packages/renderer/vitest.config.js +++ b/packages/renderer/vitest.config.js @@ -5,6 +5,25 @@ import react from '@vitejs/plugin-react'; export default defineConfig({ plugins: [react()], + resolve: { + alias: + process.env.REACT_VERSION && process.env.REACT_VERSION !== '18' + ? [ + { + find: 'react/jsx-dev-runtime', + replacement: `react-${process.env.REACT_VERSION}/jsx-dev-runtime`, + }, + { + find: 'react', + replacement: `react-${process.env.REACT_VERSION}`, + }, + { + find: 'react-dom', + replacement: `react-dom-${process.env.REACT_VERSION}`, + }, + ] + : undefined, + }, test: { // Necessary to avoid "Module did not self-register" error with canvas.node pool: 'forks', diff --git a/yarn.lock b/yarn.lock index 7772b61ff..31dfb4f73 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2138,8 +2138,8 @@ __metadata: "@vitejs/plugin-react": "npm:^4.2.1" vite: "npm:^5.0.11" peerDependencies: - react: ^16.8.6 || ^17.0.0 - react-dom: ^16.8.6 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 languageName: unknown linkType: soft @@ -2264,7 +2264,7 @@ __metadata: size-limit: "npm:^11.0.1" util: "npm:^0.12.4" peerDependencies: - react: ^16.8.6 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 languageName: unknown linkType: soft @@ -2309,7 +2309,11 @@ __metadata: pdfjs-dist: "npm:3.2.146" prettier: "npm:^1.16.4" react: "npm:^18.2.0" + react-16: "npm:react@^16.8.0" + react-17: "npm:react@^17.0.0" react-dom: "npm:^18.2.0" + react-dom-16: "npm:react-dom@^16.8.0" + react-dom-17: "npm:react-dom@^17.0.0" rimraf: "npm:^2.6.3" rollup: "npm:^2.60.1" rollup-plugin-copy: "npm:^3.5.0" @@ -8355,6 +8359,54 @@ __metadata: languageName: node linkType: hard +"react-16@npm:react@^16.8.0": + version: 16.14.0 + resolution: "react@npm:16.14.0" + dependencies: + loose-envify: "npm:^1.1.0" + object-assign: "npm:^4.1.1" + prop-types: "npm:^15.6.2" + checksum: df8faae43e01387013900e8f8fb3c4ce9935b7edbcbaa77e12999c913eb958000a0a8750bf9a0886dae0ad768dd4a4ee983752d5bade8d840adbe0ce890a2438 + languageName: node + linkType: hard + +"react-17@npm:react@^17.0.0": + version: 17.0.2 + resolution: "react@npm:17.0.2" + dependencies: + loose-envify: "npm:^1.1.0" + object-assign: "npm:^4.1.1" + checksum: 07ae8959acf1596f0550685102fd6097d461a54a4fd46a50f88a0cd7daaa97fdd6415de1dcb4bfe0da6aa43221a6746ce380410fa848acc60f8ac41f6649c148 + languageName: node + linkType: hard + +"react-dom-16@npm:react-dom@^16.8.0": + version: 16.14.0 + resolution: "react-dom@npm:16.14.0" + dependencies: + loose-envify: "npm:^1.1.0" + object-assign: "npm:^4.1.1" + prop-types: "npm:^15.6.2" + scheduler: "npm:^0.19.1" + peerDependencies: + react: ^16.14.0 + checksum: ca146e780631672a2d57c8d77775d38f394a6cd67db30c6af7964d0b3574ef7edccb1de8d592e990b98f4f5f8d1c8460b0691f04e7a45799962a51dcbaaa1371 + languageName: node + linkType: hard + +"react-dom-17@npm:react-dom@^17.0.0": + version: 17.0.2 + resolution: "react-dom@npm:17.0.2" + dependencies: + loose-envify: "npm:^1.1.0" + object-assign: "npm:^4.1.1" + scheduler: "npm:^0.20.2" + peerDependencies: + react: 17.0.2 + checksum: 51abbcb72450fe527ebf978c3bc989ba266630faaa53f47a2fae5392369729e8de62b2e4683598cbe651ea7873cd34ec7d5127e2f50bf4bfe6bd0c3ad9bddcb0 + languageName: node + linkType: hard + "react-dom@npm:^18.2.0": version: 18.2.0 resolution: "react-dom@npm:18.2.0" @@ -8953,6 +9005,26 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:^0.19.1": + version: 0.19.1 + resolution: "scheduler@npm:0.19.1" + dependencies: + loose-envify: "npm:^1.1.0" + object-assign: "npm:^4.1.1" + checksum: 9658932a73148a93d791c064b331d9690ddfecc4de25bcd6c9b89f5f1166e3d23d9c31c1595d66565e5ffbb34d47035cb14841aba6444bc266bfcd215cefe9c0 + languageName: node + linkType: hard + +"scheduler@npm:^0.20.2": + version: 0.20.2 + resolution: "scheduler@npm:0.20.2" + dependencies: + loose-envify: "npm:^1.1.0" + object-assign: "npm:^4.1.1" + checksum: b0982e4b0f34f4ffa4f2f486161c0fd9ce9b88680b045dccbf250eb1aa4fd27413570645455187a83535e2370f5c667a251045547765408492bd883cbe95fcdb + languageName: node + linkType: hard + "scheduler@npm:^0.23.0": version: 0.23.0 resolution: "scheduler@npm:0.23.0"