diff --git a/__tests__/__snapshots__/immutable.spec.js.snap b/__tests__/__snapshots__/immutable.spec.js.snap index e126b50..c64bb2c 100644 --- a/__tests__/__snapshots__/immutable.spec.js.snap +++ b/__tests__/__snapshots__/immutable.spec.js.snap @@ -60,6 +60,23 @@ Immutable.Map { exports[`vitruviusImmutable should handle no reducers having buildInitialState method 1`] = `Immutable.Map {}`; +exports[`vitruviusImmutable should return an initialState that is acceptable to redux toolkit's configureStore 1`] = ` +Immutable.Map { + "stuff": Immutable.Map { + "foo": "bar", + }, + "things": Immutable.Map { + "bar": "baz", + }, + "other": Immutable.Map { + "baz": "foo", + }, + "static": Immutable.Map { + "static": true, + }, +} +`; + exports[`vitruviusImmutable should return an initialState that is acceptable to redux's createStore 1`] = ` Immutable.Map { "stuff": Immutable.Map { diff --git a/__tests__/__snapshots__/index.spec.js.snap b/__tests__/__snapshots__/index.spec.js.snap index 18931e8..9735b45 100644 --- a/__tests__/__snapshots__/index.spec.js.snap +++ b/__tests__/__snapshots__/index.spec.js.snap @@ -60,6 +60,23 @@ exports[`vitruvius should handle all reducers having buildInitialState method 1` exports[`vitruvius should handle no reducers having buildInitialState method 1`] = `{}`; +exports[`vitruvius should return an initialState that is acceptable to redux toolkit's configureStore 1`] = ` +{ + "other": Immutable.Map { + "baz": "foo", + }, + "static": Immutable.Map { + "static": true, + }, + "stuff": Immutable.Map { + "foo": "bar", + }, + "things": Immutable.Map { + "bar": "baz", + }, +} +`; + exports[`vitruvius should return an initialState that is acceptable to redux's createStore 1`] = ` { "other": Immutable.Map { diff --git a/__tests__/fixtures.js b/__tests__/fixtures.js index 32b8c49..dc21ce3 100644 --- a/__tests__/fixtures.js +++ b/__tests__/fixtures.js @@ -15,7 +15,8 @@ /* eslint-disable jest/no-export -- not a test file */ /* eslint-disable default-param-last -- avoiding rewrite */ import { Map } from 'immutable'; -import { createStore } from 'redux'; +import { legacy_createStore as createStore } from 'redux'; +import { configureStore } from '@reduxjs/toolkit'; export const SOME_ACTION = 'SOME_ACTION'; @@ -135,6 +136,18 @@ export function runVitruviusTests(describeSpec, vitruvius) { const actual = store.getState(); expect(actual).toMatchSnapshot(); }); + + it('should return an initialState that is acceptable to redux toolkit\'s configureStore', () => { + const reducer = vitruvius({ + stuff: stuffReducer, + things: thingsReducer, + other: otherReducer, + static: staticReducer, + }); + const store = configureStore({ reducer }, reducer.buildInitialState(locals)); + const actual = store.getState(); + expect(actual).toMatchSnapshot(); + }); }); } /* eslint-enable jest/no-export -- not a test file */ diff --git a/package-lock.json b/package-lock.json index d24f74b..2ce3bf7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@babel/core": "^7.23.9", "@commitlint/cli": "^18.6.0", "@commitlint/config-conventional": "^18.6.0", + "@reduxjs/toolkit": "^2.1.0", "@semantic-release/changelog": "^6.0.3", "@semantic-release/commit-analyzer": "^11.1.0", "@semantic-release/git": "^10.0.1", @@ -30,14 +31,14 @@ "immutable": "^4.3.5", "jest": "^29.7.0", "lockfile-lint": "^4.12.1", - "redux": "^4.2.1", + "redux": "^5.0.1", "redux-immutable": "^4.0.0", "rimraf": "^5.0.5", "semantic-release": "^22.0.12" }, "peerDependencies": { "immutable": "^3||^4.0.0-rc", - "redux": "^3||^4", + "redux": "^5.0.1", "redux-immutable": "^4.0.0" } }, @@ -3821,6 +3822,30 @@ "node": ">=12" } }, + "node_modules/@reduxjs/toolkit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.1.0.tgz", + "integrity": "sha512-nfJ/b4ZhzUevQ1ZPKjlDL6CMYxO4o7ZL7OSsvSOxzT/EN11LsBDgTqP7aedHtBrFSVoK7oTP1SbMWUwGb30NLg==", + "dev": true, + "dependencies": { + "immer": "^10.0.3", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.0.1" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, "node_modules/@semantic-release/changelog": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", @@ -8973,6 +8998,16 @@ "node": ">= 4" } }, + "node_modules/immer": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.3.tgz", + "integrity": "sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/immutable": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", @@ -16166,13 +16201,10 @@ } }, "node_modules/redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.9.2" - } + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "dev": true }, "node_modules/redux-immutable": { "version": "4.0.0", @@ -16183,6 +16215,15 @@ "immutable": "^3.8.1 || ^4.0.0-rc.1" } }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "dev": true, + "peerDependencies": { + "redux": "^5.0.0" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", @@ -16365,6 +16406,12 @@ "node": ">=0.10.5" } }, + "node_modules/reselect": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.0.tgz", + "integrity": "sha512-aw7jcGLDpSgNDyWBQLv2cedml85qd95/iszJjN988zX1t7AVRJi19d9kto5+W7oCfQ94gyo40dVbT6g2k4/kXg==", + "dev": true + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", diff --git a/package.json b/package.json index 532ca4b..2b1e91d 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "@babel/core": "^7.23.9", "@commitlint/cli": "^18.6.0", "@commitlint/config-conventional": "^18.6.0", + "@reduxjs/toolkit": "^2.1.0", "@semantic-release/changelog": "^6.0.3", "@semantic-release/commit-analyzer": "^11.1.0", "@semantic-release/git": "^10.0.1", @@ -60,14 +61,14 @@ "immutable": "^4.3.5", "jest": "^29.7.0", "lockfile-lint": "^4.12.1", - "redux": "^4.2.1", + "redux": "^5.0.1", "redux-immutable": "^4.0.0", "rimraf": "^5.0.5", "semantic-release": "^22.0.12" }, "peerDependencies": { "immutable": "^3||^4.0.0-rc", - "redux": "^3||^4", + "redux": "^3||^4||^5", "redux-immutable": "^4.0.0" }, "release": {