diff --git a/packages/redux-devtools-instrument/.eslintrc.js b/packages/redux-devtools-instrument/.eslintrc.cjs similarity index 100% rename from packages/redux-devtools-instrument/.eslintrc.js rename to packages/redux-devtools-instrument/.eslintrc.cjs diff --git a/packages/redux-devtools-instrument/babel.config.esm.json b/packages/redux-devtools-instrument/babel.config.esm.json deleted file mode 100644 index 7acf81560f..0000000000 --- a/packages/redux-devtools-instrument/babel.config.esm.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "presets": [ - ["@babel/preset-env", { "targets": "defaults", "modules": false }], - "@babel/preset-typescript" - ] -} diff --git a/packages/redux-devtools-instrument/babel.config.json b/packages/redux-devtools-instrument/babel.config.json deleted file mode 100644 index f45b63d4e2..0000000000 --- a/packages/redux-devtools-instrument/babel.config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "presets": [ - ["@babel/preset-env", { "targets": "defaults" }], - "@babel/preset-typescript" - ] -} diff --git a/packages/redux-devtools-instrument/jest.config.cjs b/packages/redux-devtools-instrument/jest.config.cjs new file mode 100644 index 0000000000..3fb8088b59 --- /dev/null +++ b/packages/redux-devtools-instrument/jest.config.cjs @@ -0,0 +1,9 @@ +module.exports = { + extensionsToTreatAsEsm: ['.ts'], + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + transform: { + '^.+\\.ts$': ['ts-jest', { tsconfig: 'tsconfig.test.json', useESM: true }], + }, +}; diff --git a/packages/redux-devtools-instrument/jest.config.js b/packages/redux-devtools-instrument/jest.config.js deleted file mode 100644 index f68efd05cf..0000000000 --- a/packages/redux-devtools-instrument/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - preset: 'ts-jest', - transform: { - '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.test.json' }], - }, -}; diff --git a/packages/redux-devtools-instrument/package.json b/packages/redux-devtools-instrument/package.json index 1095dcc8ec..de317aa0f3 100644 --- a/packages/redux-devtools-instrument/package.json +++ b/packages/redux-devtools-instrument/package.json @@ -20,39 +20,30 @@ "lib", "src" ], - "main": "lib/cjs/instrument.js", - "module": "lib/esm/instrument.js", - "types": "lib/types/instrument.d.ts", + "main": "lib/instrument.js", + "types": "lib/instrument.d.ts", + "type": "module", "sideEffects": false, "repository": { "type": "git", "url": "https://github.com/reduxjs/redux-devtools.git" }, "scripts": { - "build": "pnpm run build:cjs && pnpm run build:esm && pnpm run build:types", - "build:cjs": "babel src --extensions \".ts\" --out-dir lib/cjs", - "build:esm": "babel src --config-file ./babel.config.esm.json --extensions \".ts\" --out-dir lib/esm", - "build:types": "tsc --emitDeclarationOnly", + "build": "tsc", "clean": "rimraf lib", - "test": "jest", + "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js", "lint": "eslint . --ext .ts", "type-check": "tsc --noEmit", "prepack": "pnpm run clean && pnpm run build", - "prepublish": "pnpm run type-check && pnpm run lint && pnpm run test" + "prepublish": "pnpm run lint && pnpm run test" }, "dependencies": { - "@babel/runtime": "^7.24.1", - "lodash": "^4.17.21" + "lodash-es": "^4.17.21" }, "devDependencies": { - "@babel/cli": "^7.24.1", - "@babel/core": "^7.24.3", - "@babel/eslint-parser": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", - "@babel/preset-env": "^7.24.3", - "@babel/preset-typescript": "^7.24.1", + "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", - "@types/lodash": "^4.17.0", + "@types/lodash-es": "^4.17.12", "@types/node": "^20.11.30", "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.4.0", diff --git a/packages/redux-devtools-instrument/src/instrument.ts b/packages/redux-devtools-instrument/src/instrument.ts index 3f1ff7e4e7..724ada2671 100644 --- a/packages/redux-devtools-instrument/src/instrument.ts +++ b/packages/redux-devtools-instrument/src/instrument.ts @@ -1,6 +1,4 @@ -import difference from 'lodash/difference'; -import union from 'lodash/union'; -import isPlainObject from 'lodash/isPlainObject'; +import { difference, isPlainObject, union } from 'lodash-es'; import { Action, Observer, @@ -10,7 +8,7 @@ import { StoreEnhancer, StoreEnhancerStoreCreator, } from 'redux'; -import getSymbolObservable from './getSymbolObservable'; +import getSymbolObservable from './getSymbolObservable.js'; export const ActionTypes = { PERFORM_ACTION: 'PERFORM_ACTION', diff --git a/packages/redux-devtools-instrument/test/instrument.spec.ts b/packages/redux-devtools-instrument/test/instrument.spec.ts index 117bdce978..011ecd7864 100644 --- a/packages/redux-devtools-instrument/test/instrument.spec.ts +++ b/packages/redux-devtools-instrument/test/instrument.spec.ts @@ -1,13 +1,15 @@ +import { jest } from '@jest/globals'; import { createStore, compose, Reducer, Store, Action } from 'redux'; +import { from, Observable } from 'rxjs'; +import { mapValues } from 'lodash-es'; import { ActionCreators, EnhancedStore, instrument, LiftedStore, LiftedState, -} from '../src/instrument'; -import { from, Observable } from 'rxjs'; -import _ from 'lodash'; + LiftedAction, +} from '../src/instrument.js'; type CounterAction = { type: 'INCREMENT' } | { type: 'DECREMENT' }; function counter(state = 0, action: CounterAction) { @@ -713,7 +715,16 @@ describe('instrument', () => { it('should use dynamic maxAge', () => { let max = 3; - const getMaxAge = jest.fn().mockImplementation(() => max); + const getMaxAge = jest + .fn< + ( + currentLiftedAction: LiftedAction, + previousLiftedState: + | LiftedState + | undefined, + ) => number + >() + .mockImplementation(() => max); store = createStore( counter, instrument(undefined, { maxAge: getMaxAge }), @@ -729,10 +740,10 @@ describe('instrument', () => { expect(getMaxAge.mock.calls[0][0].type).toContain('INIT'); expect(getMaxAge.mock.calls[0][1]).toBeUndefined(); expect(getMaxAge.mock.calls[1][0].type).toBe('PERFORM_ACTION'); - expect(getMaxAge.mock.calls[1][1].nextActionId).toBe(1); - expect(getMaxAge.mock.calls[1][1].stagedActionIds).toEqual([0]); - expect(getMaxAge.mock.calls[2][1].nextActionId).toBe(2); - expect(getMaxAge.mock.calls[2][1].stagedActionIds).toEqual([0, 1]); + expect(getMaxAge.mock.calls[1][1]!.nextActionId).toBe(1); + expect(getMaxAge.mock.calls[1][1]!.stagedActionIds).toEqual([0]); + expect(getMaxAge.mock.calls[2][1]!.nextActionId).toBe(2); + expect(getMaxAge.mock.calls[2][1]!.stagedActionIds).toEqual([0, 1]); expect(store.getState()).toBe(2); expect(Object.keys(liftedStoreState.actionsById)).toHaveLength(3); @@ -1155,7 +1166,7 @@ describe('instrument', () => { function filterStackAndTimestamps>( state: LiftedState, ) { - state.actionsById = _.mapValues(state.actionsById, (action) => { + state.actionsById = mapValues(state.actionsById, (action) => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore delete action.timestamp; diff --git a/packages/redux-devtools-instrument/tsconfig.json b/packages/redux-devtools-instrument/tsconfig.json index c457639520..fbc0e2b300 100644 --- a/packages/redux-devtools-instrument/tsconfig.json +++ b/packages/redux-devtools-instrument/tsconfig.json @@ -1,7 +1,7 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.esm.base.json", "compilerOptions": { - "outDir": "lib/types", + "outDir": "lib", "types": ["node"] }, "include": ["src"] diff --git a/packages/redux-devtools-instrument/tsconfig.test.json b/packages/redux-devtools-instrument/tsconfig.test.json index c9d9fe14e3..7f82dbee04 100644 --- a/packages/redux-devtools-instrument/tsconfig.test.json +++ b/packages/redux-devtools-instrument/tsconfig.test.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.esm.base.json", "compilerOptions": { "types": ["jest", "node"] }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 80a714bb96..1f307eea82 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2050,37 +2050,19 @@ importers: packages/redux-devtools-instrument: dependencies: - '@babel/runtime': - specifier: ^7.24.1 - version: 7.24.1 - lodash: + lodash-es: specifier: ^4.17.21 version: 4.17.21 devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.3) - '@babel/core': - specifier: ^7.24.3 - version: 7.24.3 - '@babel/eslint-parser': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.3)(eslint@8.57.0) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.3) - '@babel/preset-env': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.3) - '@babel/preset-typescript': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.3) + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 - '@types/lodash': - specifier: ^4.17.0 - version: 4.17.0 + '@types/lodash-es': + specifier: ^4.17.12 + version: 4.17.12 '@types/node': specifier: ^20.11.30 version: 20.11.30 diff --git a/tsconfig.esm.base.json b/tsconfig.esm.base.json index e08b3956b3..c0df6c117d 100644 --- a/tsconfig.esm.base.json +++ b/tsconfig.esm.base.json @@ -2,6 +2,7 @@ "compilerOptions": { "target": "es2020", "module": "node16", + "moduleResolution": "node16", "declaration": true, "strict": true, "allowSyntheticDefaultImports": true,