From b57fd8c5111d7cd5deee28ea27f3463614a3c922 Mon Sep 17 00:00:00 2001 From: Mark Erikson Date: Sun, 12 Mar 2023 13:55:28 -0400 Subject: [PATCH 1/3] Use Git revision in packed version, and show version in CI steps --- .github/workflows/tests.yml | 13 +++++++++++++ packages/toolkit/scripts/writeGitVersion.js | 10 ++++++++++ 2 files changed, 23 insertions(+) create mode 100644 packages/toolkit/scripts/writeGitVersion.js diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 43a37ca6df..60235f53fb 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -45,6 +45,13 @@ jobs: - name: Install deps run: yarn install + # Read existing version, reuse that, add a Git short hash + - name: Set build version to Git commit + run: node scripts/writeGitVersion.js $(git rev-parse --short HEAD) + + - name: Check updated version + run: jq .version package.json + - name: Pack run: yarn pack @@ -123,6 +130,9 @@ jobs: - name: Install build artifact run: yarn add ./package.tgz + - name: Show installed RTK versions + run: yarn info @reduxjs/toolkit + - run: sed -i -e /@remap-prod-remove-line/d ./tsconfig.base.json ./jest.config.js ./src/tests/*.* ./src/query/tests/*.* - name: Test types @@ -170,6 +180,9 @@ jobs: - name: Install RTK build artifact run: yarn add ./package.tgz + - name: Show installed RTK versions + run: yarn info @reduxjs/toolkit + - name: Build example run: yarn build diff --git a/packages/toolkit/scripts/writeGitVersion.js b/packages/toolkit/scripts/writeGitVersion.js new file mode 100644 index 0000000000..9c0f05b1fc --- /dev/null +++ b/packages/toolkit/scripts/writeGitVersion.js @@ -0,0 +1,10 @@ +const path = require('path') +const fs = require('fs') + +const gitRev = process.argv[2] + +const packagePath = path.join(__dirname, '../package.json') +const pkg = require(packagePath) + +pkg.version = `${pkg.version}-${gitRev}` +fs.writeFileSync(packagePath, JSON.stringify(pkg, null, 2)) From f25cf7b0e6bf6c6fe2c1b472d6a59b184ff8eb24 Mon Sep 17 00:00:00 2001 From: Mark Erikson Date: Sun, 12 Mar 2023 17:30:46 -0400 Subject: [PATCH 2/3] Add Node CI examples --- .github/workflows/tests.yml | 2 +- examples/publish-ci/node-esm/.gitignore | 35 +++ examples/publish-ci/node-esm/package.json | 19 ++ examples/publish-ci/node-esm/test-cjs.cjs | 45 +++ examples/publish-ci/node-esm/test-esm.mjs | 48 ++++ examples/publish-ci/node-esm/yarn.lock | 263 ++++++++++++++++++ examples/publish-ci/node-standard/.gitignore | 35 +++ .../publish-ci/node-standard/package.json | 18 ++ examples/publish-ci/node-standard/test-cjs.js | 45 +++ .../publish-ci/node-standard/test-esm.mjs | 48 ++++ examples/publish-ci/node-standard/yarn.lock | 263 ++++++++++++++++++ 11 files changed, 820 insertions(+), 1 deletion(-) create mode 100644 examples/publish-ci/node-esm/.gitignore create mode 100644 examples/publish-ci/node-esm/package.json create mode 100644 examples/publish-ci/node-esm/test-cjs.cjs create mode 100644 examples/publish-ci/node-esm/test-esm.mjs create mode 100644 examples/publish-ci/node-esm/yarn.lock create mode 100644 examples/publish-ci/node-standard/.gitignore create mode 100644 examples/publish-ci/node-standard/package.json create mode 100644 examples/publish-ci/node-standard/test-cjs.js create mode 100644 examples/publish-ci/node-standard/test-esm.mjs create mode 100644 examples/publish-ci/node-standard/yarn.lock diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 60235f53fb..58992d7424 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -149,7 +149,7 @@ jobs: fail-fast: false matrix: node: ['16.x'] - example: ['cra4', 'cra5', 'next', 'vite'] + example: ['cra4', 'cra5', 'next', 'vite', 'node-standard', 'node-esm'] defaults: run: working-directory: ./examples/publish-ci/${{ matrix.example }} diff --git a/examples/publish-ci/node-esm/.gitignore b/examples/publish-ci/node-esm/.gitignore new file mode 100644 index 0000000000..3ff1c7836c --- /dev/null +++ b/examples/publish-ci/node-esm/.gitignore @@ -0,0 +1,35 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +typesversions +.cache +.yarnrc +.yarn/* +!.yarn/patches +!.yarn/releases +!.yarn/plugins +!.yarn/sdks +!.yarn/versions +.pnp.* +*.tgz diff --git a/examples/publish-ci/node-esm/package.json b/examples/publish-ci/node-esm/package.json new file mode 100644 index 0000000000..6730af9dde --- /dev/null +++ b/examples/publish-ci/node-esm/package.json @@ -0,0 +1,19 @@ +{ + "name": "dual-module-test", + "version": "1.0.0", + "license": "MIT", + "type": "module", + "scripts": { + "build": "echo Done", + "test": "node test-cjs.cjs" + }, + "dependencies": { + "@reduxjs/toolkit": "^1.9.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-redux": "^8.0.5" + }, + "devDependencies": { + "resolve-esm": "^1.4.0" + } +} diff --git a/examples/publish-ci/node-esm/test-cjs.cjs b/examples/publish-ci/node-esm/test-cjs.cjs new file mode 100644 index 0000000000..3a72248463 --- /dev/null +++ b/examples/publish-ci/node-esm/test-cjs.cjs @@ -0,0 +1,45 @@ +const assert = require('node:assert') +const path = require('path') + +const { createSlice } = require('@reduxjs/toolkit') +const { createApi: createApiPlain } = require('@reduxjs/toolkit/query') +const { createApi: createApiReact } = require('@reduxjs/toolkit/query/react') + +console.log('Testing Node with CJS imports...') + +function checkFunctionName(fn, name, category) { + console.log(`Checking ${category} '${name}' === '${fn.name}'`) + assert( + fn.name === name, + `${category} \`${name}\` did not import correctly (name: '${fn.name}')` + ) +} + +const entries = [ + [createSlice, 'createSlice', 'Core'], + [createApiPlain, 'baseCreateApi', 'RTKQ core'], + [createApiReact, 'baseCreateApi', 'RTKQ React'], +] + +for (let [fn, name, category] of entries) { + try { + checkFunctionName(fn, name, category) + } catch (error) { + console.error(error) + } +} + +const moduleNames = [ + ['@reduxjs/toolkit', 'dist/index.js'], + ['@reduxjs/toolkit/query', 'dist/query/index.js'], + ['@reduxjs/toolkit/query/react', 'dist/query/react/index.js'], +] + +for (let [moduleName, expectedFilename] of moduleNames) { + const modulePath = require.resolve(moduleName) + const posixPath = modulePath.split(path.sep).join(path.posix.sep) + console.log(`Module: ${moduleName}, path: ${posixPath}`) + assert(posixPath.endsWith(expectedFilename)) +} + +console.log('CJS test succeeded') diff --git a/examples/publish-ci/node-esm/test-esm.mjs b/examples/publish-ci/node-esm/test-esm.mjs new file mode 100644 index 0000000000..ed560d467a --- /dev/null +++ b/examples/publish-ci/node-esm/test-esm.mjs @@ -0,0 +1,48 @@ +// TODO This entire file doesn't work yet with RTK 1.9.3 master + +import assert from 'node:assert' +import path from 'path' +import { importMetaResolve } from 'resolve-esm' + +import { createSlice } from '@reduxjs/toolkit' +import { createApi as createApiPlain } from '@reduxjs/toolkit/query' +import { createApi as createApiReact } from '@reduxjs/toolkit/query/react' + +console.log('Testing Node with ESM imports...') + +function checkFunctionName(fn, name, category) { + console.log(`Checking ${category} '${name}' === '${fn.name}'`) + assert( + fn.name === name, + `${category} \`${name}\` did not import correctly (name: '${fn.name}')` + ) +} + +const entries = [ + [createSlice, 'createSlice', 'Core'], + [createApiPlain, 'baseCreateApi', 'RTKQ core'], + [createApiReact, 'baseCreateApi', 'RTKQ React'], +] + +for (let [fn, name, category] of entries) { + try { + checkFunctionName(fn, name, category) + } catch (error) { + console.error(error) + } +} + +const moduleNames = [ + ['@reduxjs/toolkit', 'dist/index.js'], + ['@reduxjs/toolkit/query', 'dist/query/index.js'], + ['@reduxjs/toolkit/query/react', 'dist/query/react/index.js'], +] + +;(async () => { + for (let [moduleName, expectedFilename] of moduleNames) { + const modulePath = await importMetaResolve(moduleName) + const posixPath = modulePath.split(path.sep).join(path.posix.sep) + console.log(`Module: ${moduleName}, path: ${posixPath}`) + assert(posixPath.endsWith(expectedFilename)) + } +})() diff --git a/examples/publish-ci/node-esm/yarn.lock b/examples/publish-ci/node-esm/yarn.lock new file mode 100644 index 0000000000..0ab2c5bd0c --- /dev/null +++ b/examples/publish-ci/node-esm/yarn.lock @@ -0,0 +1,263 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.9.2": + version: 7.21.0 + resolution: "@babel/runtime@npm:7.21.0" + dependencies: + regenerator-runtime: ^0.13.11 + checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab + languageName: node + linkType: hard + +"@reduxjs/toolkit@npm:^1.9.3": + version: 1.9.3 + resolution: "@reduxjs/toolkit@npm:1.9.3" + dependencies: + immer: ^9.0.16 + redux: ^4.2.0 + redux-thunk: ^2.4.2 + reselect: ^4.1.7 + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 + react-redux: ^7.2.1 || ^8.0.2 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + checksum: d965fc6197fd420e4b8eb714015aa908d4ea214e6e10889cf4521e64ac4f8e0a7de29ee4e8da63b291acc40ac330dd31682334090d54838add73c746dc590650 + languageName: node + linkType: hard + +"@types/hoist-non-react-statics@npm:^3.3.1": + version: 3.3.1 + resolution: "@types/hoist-non-react-statics@npm:3.3.1" + dependencies: + "@types/react": "*" + hoist-non-react-statics: ^3.3.0 + checksum: 2c0778570d9a01d05afabc781b32163f28409bb98f7245c38d5eaf082416fdb73034003f5825eb5e21313044e8d2d9e1f3fe2831e345d3d1b1d20bcd12270719 + languageName: node + linkType: hard + +"@types/prop-types@npm:*": + version: 15.7.5 + resolution: "@types/prop-types@npm:15.7.5" + checksum: 5b43b8b15415e1f298243165f1d44390403bb2bd42e662bca3b5b5633fdd39c938e91b7fce3a9483699db0f7a715d08cef220c121f723a634972fdf596aec980 + languageName: node + linkType: hard + +"@types/react@npm:*": + version: 18.0.28 + resolution: "@types/react@npm:18.0.28" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: e752df961105e5127652460504785897ca6e77259e0da8f233f694f9e8f451cde7fa0709d4456ade0ff600c8ce909cfe29f9b08b9c247fa9b734e126ec53edd7 + languageName: node + linkType: hard + +"@types/scheduler@npm:*": + version: 0.16.2 + resolution: "@types/scheduler@npm:0.16.2" + checksum: b6b4dcfeae6deba2e06a70941860fb1435730576d3689225a421280b7742318d1548b3d22c1f66ab68e414f346a9542f29240bc955b6332c5b11e561077583bc + languageName: node + linkType: hard + +"@types/use-sync-external-store@npm:^0.0.3": + version: 0.0.3 + resolution: "@types/use-sync-external-store@npm:0.0.3" + checksum: 161ddb8eec5dbe7279ac971531217e9af6b99f7783213566d2b502e2e2378ea19cf5e5ea4595039d730aa79d3d35c6567d48599f69773a02ffcff1776ec2a44e + languageName: node + linkType: hard + +"callsites@npm:~4.0.0": + version: 4.0.0 + resolution: "callsites@npm:4.0.0" + checksum: ad3c3a57328a539c0d671cf1ca500abf09461b762807fc545a132026bdf87705fee9c299e1adb38b133c29201a3b04fbf4f2b90d8fa1d9e00ef507e803737cf2 + languageName: node + linkType: hard + +"csstype@npm:^3.0.2": + version: 3.1.1 + resolution: "csstype@npm:3.1.1" + checksum: 1f7b4f5fdd955b7444b18ebdddf3f5c699159f13e9cf8ac9027ae4a60ae226aef9bbb14a6e12ca7dba3358b007cee6354b116e720262867c398de6c955ea451d + languageName: node + linkType: hard + +"dual-module-test@workspace:.": + version: 0.0.0-use.local + resolution: "dual-module-test@workspace:." + dependencies: + "@reduxjs/toolkit": ^1.9.3 + react: ^18.2.0 + react-dom: ^18.2.0 + react-redux: ^8.0.5 + resolve-esm: ^1.4.0 + languageName: unknown + linkType: soft + +"hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: ^16.7.0 + checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 + languageName: node + linkType: hard + +"immer@npm:^9.0.16": + version: 9.0.19 + resolution: "immer@npm:9.0.19" + checksum: f02ee53989989c287cd548a3d817fccf0bfe56db919755ee94a72ea3ae78a00363fba93ee6c010fe54a664380c29c53d44ed4091c6a86cae60957ad2cfabc010 + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"loose-envify@npm:^1.1.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"react-dom@npm:^18.2.0": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + scheduler: ^0.23.0 + peerDependencies: + react: ^18.2.0 + checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc + languageName: node + linkType: hard + +"react-is@npm:^16.7.0": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f + languageName: node + linkType: hard + +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + +"react-redux@npm:^8.0.5": + version: 8.0.5 + resolution: "react-redux@npm:8.0.5" + dependencies: + "@babel/runtime": ^7.12.1 + "@types/hoist-non-react-statics": ^3.3.1 + "@types/use-sync-external-store": ^0.0.3 + hoist-non-react-statics: ^3.3.2 + react-is: ^18.0.0 + use-sync-external-store: ^1.0.0 + peerDependencies: + "@types/react": ^16.8 || ^17.0 || ^18.0 + "@types/react-dom": ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + react-native: ">=0.59" + redux: ^4 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + react-dom: + optional: true + react-native: + optional: true + redux: + optional: true + checksum: a108f4f7ead6ac005e656d46051474a2bbdb31ede481bbbb3d8d779c1a35e1940b8655577cc5021313411864d305f67fc719aa48d6e5ed8288cf9cbe8b7042e4 + languageName: node + linkType: hard + +"react@npm:^18.2.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b + languageName: node + linkType: hard + +"redux-thunk@npm:^2.4.2": + version: 2.4.2 + resolution: "redux-thunk@npm:2.4.2" + peerDependencies: + redux: ^4 + checksum: c7f757f6c383b8ec26152c113e20087818d18ed3edf438aaad43539e9a6b77b427ade755c9595c4a163b6ad3063adf3497e5fe6a36c68884eb1f1cfb6f049a5c + languageName: node + linkType: hard + +"redux@npm:^4.2.0": + version: 4.2.1 + resolution: "redux@npm:4.2.1" + dependencies: + "@babel/runtime": ^7.9.2 + checksum: f63b9060c3a1d930ae775252bb6e579b42415aee7a23c4114e21a0b4ba7ec12f0ec76936c00f546893f06e139819f0e2855e0d55ebfce34ca9c026241a6950dd + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.11": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 + languageName: node + linkType: hard + +"reselect@npm:^4.1.7": + version: 4.1.7 + resolution: "reselect@npm:4.1.7" + checksum: 738d8e2b8f0dca154ad29de6a209c9fbca2d70ae6788fd85df87f2c74b95a65bbf2d16d43a9e2faff39de34d17a29d706ba08a6b2ee5660c09589edbd19af7e1 + languageName: node + linkType: hard + +"resolve-esm@npm:^1.4.0": + version: 1.4.0 + resolution: "resolve-esm@npm:1.4.0" + dependencies: + callsites: ~4.0.0 + checksum: f0e1fad4c49abe41012ec9f59958d9d8d356b12c92a784765b6d69f8dccd07a609656f83a86278c76b579a953b02b893d3c3ea7c2ad2be607b15d7f0c942b8f8 + languageName: node + linkType: hard + +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" + dependencies: + loose-envify: ^1.1.0 + checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a + languageName: node + linkType: hard + +"use-sync-external-store@npm:^1.0.0": + version: 1.2.0 + resolution: "use-sync-external-store@npm:1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 5c639e0f8da3521d605f59ce5be9e094ca772bd44a4ce7322b055a6f58eeed8dda3c94cabd90c7a41fb6fa852210092008afe48f7038792fd47501f33299116a + languageName: node + linkType: hard diff --git a/examples/publish-ci/node-standard/.gitignore b/examples/publish-ci/node-standard/.gitignore new file mode 100644 index 0000000000..3ff1c7836c --- /dev/null +++ b/examples/publish-ci/node-standard/.gitignore @@ -0,0 +1,35 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +typesversions +.cache +.yarnrc +.yarn/* +!.yarn/patches +!.yarn/releases +!.yarn/plugins +!.yarn/sdks +!.yarn/versions +.pnp.* +*.tgz diff --git a/examples/publish-ci/node-standard/package.json b/examples/publish-ci/node-standard/package.json new file mode 100644 index 0000000000..9c1bcd7d98 --- /dev/null +++ b/examples/publish-ci/node-standard/package.json @@ -0,0 +1,18 @@ +{ + "name": "dual-module-test", + "version": "1.0.0", + "license": "MIT", + "scripts": { + "build": "echo Done", + "test": "node test-cjs.js" + }, + "dependencies": { + "@reduxjs/toolkit": "^1.9.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-redux": "^8.0.5" + }, + "devDependencies": { + "resolve-esm": "^1.4.0" + } +} diff --git a/examples/publish-ci/node-standard/test-cjs.js b/examples/publish-ci/node-standard/test-cjs.js new file mode 100644 index 0000000000..3a72248463 --- /dev/null +++ b/examples/publish-ci/node-standard/test-cjs.js @@ -0,0 +1,45 @@ +const assert = require('node:assert') +const path = require('path') + +const { createSlice } = require('@reduxjs/toolkit') +const { createApi: createApiPlain } = require('@reduxjs/toolkit/query') +const { createApi: createApiReact } = require('@reduxjs/toolkit/query/react') + +console.log('Testing Node with CJS imports...') + +function checkFunctionName(fn, name, category) { + console.log(`Checking ${category} '${name}' === '${fn.name}'`) + assert( + fn.name === name, + `${category} \`${name}\` did not import correctly (name: '${fn.name}')` + ) +} + +const entries = [ + [createSlice, 'createSlice', 'Core'], + [createApiPlain, 'baseCreateApi', 'RTKQ core'], + [createApiReact, 'baseCreateApi', 'RTKQ React'], +] + +for (let [fn, name, category] of entries) { + try { + checkFunctionName(fn, name, category) + } catch (error) { + console.error(error) + } +} + +const moduleNames = [ + ['@reduxjs/toolkit', 'dist/index.js'], + ['@reduxjs/toolkit/query', 'dist/query/index.js'], + ['@reduxjs/toolkit/query/react', 'dist/query/react/index.js'], +] + +for (let [moduleName, expectedFilename] of moduleNames) { + const modulePath = require.resolve(moduleName) + const posixPath = modulePath.split(path.sep).join(path.posix.sep) + console.log(`Module: ${moduleName}, path: ${posixPath}`) + assert(posixPath.endsWith(expectedFilename)) +} + +console.log('CJS test succeeded') diff --git a/examples/publish-ci/node-standard/test-esm.mjs b/examples/publish-ci/node-standard/test-esm.mjs new file mode 100644 index 0000000000..ed560d467a --- /dev/null +++ b/examples/publish-ci/node-standard/test-esm.mjs @@ -0,0 +1,48 @@ +// TODO This entire file doesn't work yet with RTK 1.9.3 master + +import assert from 'node:assert' +import path from 'path' +import { importMetaResolve } from 'resolve-esm' + +import { createSlice } from '@reduxjs/toolkit' +import { createApi as createApiPlain } from '@reduxjs/toolkit/query' +import { createApi as createApiReact } from '@reduxjs/toolkit/query/react' + +console.log('Testing Node with ESM imports...') + +function checkFunctionName(fn, name, category) { + console.log(`Checking ${category} '${name}' === '${fn.name}'`) + assert( + fn.name === name, + `${category} \`${name}\` did not import correctly (name: '${fn.name}')` + ) +} + +const entries = [ + [createSlice, 'createSlice', 'Core'], + [createApiPlain, 'baseCreateApi', 'RTKQ core'], + [createApiReact, 'baseCreateApi', 'RTKQ React'], +] + +for (let [fn, name, category] of entries) { + try { + checkFunctionName(fn, name, category) + } catch (error) { + console.error(error) + } +} + +const moduleNames = [ + ['@reduxjs/toolkit', 'dist/index.js'], + ['@reduxjs/toolkit/query', 'dist/query/index.js'], + ['@reduxjs/toolkit/query/react', 'dist/query/react/index.js'], +] + +;(async () => { + for (let [moduleName, expectedFilename] of moduleNames) { + const modulePath = await importMetaResolve(moduleName) + const posixPath = modulePath.split(path.sep).join(path.posix.sep) + console.log(`Module: ${moduleName}, path: ${posixPath}`) + assert(posixPath.endsWith(expectedFilename)) + } +})() diff --git a/examples/publish-ci/node-standard/yarn.lock b/examples/publish-ci/node-standard/yarn.lock new file mode 100644 index 0000000000..0ab2c5bd0c --- /dev/null +++ b/examples/publish-ci/node-standard/yarn.lock @@ -0,0 +1,263 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.9.2": + version: 7.21.0 + resolution: "@babel/runtime@npm:7.21.0" + dependencies: + regenerator-runtime: ^0.13.11 + checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab + languageName: node + linkType: hard + +"@reduxjs/toolkit@npm:^1.9.3": + version: 1.9.3 + resolution: "@reduxjs/toolkit@npm:1.9.3" + dependencies: + immer: ^9.0.16 + redux: ^4.2.0 + redux-thunk: ^2.4.2 + reselect: ^4.1.7 + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 + react-redux: ^7.2.1 || ^8.0.2 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + checksum: d965fc6197fd420e4b8eb714015aa908d4ea214e6e10889cf4521e64ac4f8e0a7de29ee4e8da63b291acc40ac330dd31682334090d54838add73c746dc590650 + languageName: node + linkType: hard + +"@types/hoist-non-react-statics@npm:^3.3.1": + version: 3.3.1 + resolution: "@types/hoist-non-react-statics@npm:3.3.1" + dependencies: + "@types/react": "*" + hoist-non-react-statics: ^3.3.0 + checksum: 2c0778570d9a01d05afabc781b32163f28409bb98f7245c38d5eaf082416fdb73034003f5825eb5e21313044e8d2d9e1f3fe2831e345d3d1b1d20bcd12270719 + languageName: node + linkType: hard + +"@types/prop-types@npm:*": + version: 15.7.5 + resolution: "@types/prop-types@npm:15.7.5" + checksum: 5b43b8b15415e1f298243165f1d44390403bb2bd42e662bca3b5b5633fdd39c938e91b7fce3a9483699db0f7a715d08cef220c121f723a634972fdf596aec980 + languageName: node + linkType: hard + +"@types/react@npm:*": + version: 18.0.28 + resolution: "@types/react@npm:18.0.28" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: e752df961105e5127652460504785897ca6e77259e0da8f233f694f9e8f451cde7fa0709d4456ade0ff600c8ce909cfe29f9b08b9c247fa9b734e126ec53edd7 + languageName: node + linkType: hard + +"@types/scheduler@npm:*": + version: 0.16.2 + resolution: "@types/scheduler@npm:0.16.2" + checksum: b6b4dcfeae6deba2e06a70941860fb1435730576d3689225a421280b7742318d1548b3d22c1f66ab68e414f346a9542f29240bc955b6332c5b11e561077583bc + languageName: node + linkType: hard + +"@types/use-sync-external-store@npm:^0.0.3": + version: 0.0.3 + resolution: "@types/use-sync-external-store@npm:0.0.3" + checksum: 161ddb8eec5dbe7279ac971531217e9af6b99f7783213566d2b502e2e2378ea19cf5e5ea4595039d730aa79d3d35c6567d48599f69773a02ffcff1776ec2a44e + languageName: node + linkType: hard + +"callsites@npm:~4.0.0": + version: 4.0.0 + resolution: "callsites@npm:4.0.0" + checksum: ad3c3a57328a539c0d671cf1ca500abf09461b762807fc545a132026bdf87705fee9c299e1adb38b133c29201a3b04fbf4f2b90d8fa1d9e00ef507e803737cf2 + languageName: node + linkType: hard + +"csstype@npm:^3.0.2": + version: 3.1.1 + resolution: "csstype@npm:3.1.1" + checksum: 1f7b4f5fdd955b7444b18ebdddf3f5c699159f13e9cf8ac9027ae4a60ae226aef9bbb14a6e12ca7dba3358b007cee6354b116e720262867c398de6c955ea451d + languageName: node + linkType: hard + +"dual-module-test@workspace:.": + version: 0.0.0-use.local + resolution: "dual-module-test@workspace:." + dependencies: + "@reduxjs/toolkit": ^1.9.3 + react: ^18.2.0 + react-dom: ^18.2.0 + react-redux: ^8.0.5 + resolve-esm: ^1.4.0 + languageName: unknown + linkType: soft + +"hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: ^16.7.0 + checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 + languageName: node + linkType: hard + +"immer@npm:^9.0.16": + version: 9.0.19 + resolution: "immer@npm:9.0.19" + checksum: f02ee53989989c287cd548a3d817fccf0bfe56db919755ee94a72ea3ae78a00363fba93ee6c010fe54a664380c29c53d44ed4091c6a86cae60957ad2cfabc010 + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"loose-envify@npm:^1.1.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"react-dom@npm:^18.2.0": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + scheduler: ^0.23.0 + peerDependencies: + react: ^18.2.0 + checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc + languageName: node + linkType: hard + +"react-is@npm:^16.7.0": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f + languageName: node + linkType: hard + +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + +"react-redux@npm:^8.0.5": + version: 8.0.5 + resolution: "react-redux@npm:8.0.5" + dependencies: + "@babel/runtime": ^7.12.1 + "@types/hoist-non-react-statics": ^3.3.1 + "@types/use-sync-external-store": ^0.0.3 + hoist-non-react-statics: ^3.3.2 + react-is: ^18.0.0 + use-sync-external-store: ^1.0.0 + peerDependencies: + "@types/react": ^16.8 || ^17.0 || ^18.0 + "@types/react-dom": ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + react-native: ">=0.59" + redux: ^4 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + react-dom: + optional: true + react-native: + optional: true + redux: + optional: true + checksum: a108f4f7ead6ac005e656d46051474a2bbdb31ede481bbbb3d8d779c1a35e1940b8655577cc5021313411864d305f67fc719aa48d6e5ed8288cf9cbe8b7042e4 + languageName: node + linkType: hard + +"react@npm:^18.2.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b + languageName: node + linkType: hard + +"redux-thunk@npm:^2.4.2": + version: 2.4.2 + resolution: "redux-thunk@npm:2.4.2" + peerDependencies: + redux: ^4 + checksum: c7f757f6c383b8ec26152c113e20087818d18ed3edf438aaad43539e9a6b77b427ade755c9595c4a163b6ad3063adf3497e5fe6a36c68884eb1f1cfb6f049a5c + languageName: node + linkType: hard + +"redux@npm:^4.2.0": + version: 4.2.1 + resolution: "redux@npm:4.2.1" + dependencies: + "@babel/runtime": ^7.9.2 + checksum: f63b9060c3a1d930ae775252bb6e579b42415aee7a23c4114e21a0b4ba7ec12f0ec76936c00f546893f06e139819f0e2855e0d55ebfce34ca9c026241a6950dd + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.11": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 + languageName: node + linkType: hard + +"reselect@npm:^4.1.7": + version: 4.1.7 + resolution: "reselect@npm:4.1.7" + checksum: 738d8e2b8f0dca154ad29de6a209c9fbca2d70ae6788fd85df87f2c74b95a65bbf2d16d43a9e2faff39de34d17a29d706ba08a6b2ee5660c09589edbd19af7e1 + languageName: node + linkType: hard + +"resolve-esm@npm:^1.4.0": + version: 1.4.0 + resolution: "resolve-esm@npm:1.4.0" + dependencies: + callsites: ~4.0.0 + checksum: f0e1fad4c49abe41012ec9f59958d9d8d356b12c92a784765b6d69f8dccd07a609656f83a86278c76b579a953b02b893d3c3ea7c2ad2be607b15d7f0c942b8f8 + languageName: node + linkType: hard + +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" + dependencies: + loose-envify: ^1.1.0 + checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a + languageName: node + linkType: hard + +"use-sync-external-store@npm:^1.0.0": + version: 1.2.0 + resolution: "use-sync-external-store@npm:1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 5c639e0f8da3521d605f59ce5be9e094ca772bd44a4ce7322b055a6f58eeed8dda3c94cabd90c7a41fb6fa852210092008afe48f7038792fd47501f33299116a + languageName: node + linkType: hard From dd4ef35dfe18a9d029e2bea7b139840073f0a00d Mon Sep 17 00:00:00 2001 From: Mark Erikson Date: Sun, 12 Mar 2023 20:20:00 -0400 Subject: [PATCH 3/3] Try fixing the takeLeading test --- .../src/listenerMiddleware/tests/effectScenarios.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/toolkit/src/listenerMiddleware/tests/effectScenarios.test.ts b/packages/toolkit/src/listenerMiddleware/tests/effectScenarios.test.ts index 87ed4b1eef..72d84f511a 100644 --- a/packages/toolkit/src/listenerMiddleware/tests/effectScenarios.test.ts +++ b/packages/toolkit/src/listenerMiddleware/tests/effectScenarios.test.ts @@ -194,7 +194,7 @@ describe('Saga-style Effects Scenarios', () => { listenerApi.unsubscribe() // Pretend we're doing expensive work - await listenerApi.delay(15) + await listenerApi.delay(25) workPerformed++ @@ -221,7 +221,7 @@ describe('Saga-style Effects Scenarios', () => { expect(listenerCalls).toBe(1) expect(workPerformed).toBe(0) - await delay(20) + await delay(50) // Work finished, should have resubscribed expect(workPerformed).toBe(1) @@ -232,7 +232,7 @@ describe('Saga-style Effects Scenarios', () => { expect(listenerCalls).toBe(2) expect(workPerformed).toBe(1) - await delay(20) + await delay(50) expect(workPerformed).toBe(2) })