{"_id":"@goco/redux-undo","_rev":"78-fb5ba6abdcdccf5039303edc1a39c072","name":"@goco/redux-undo","dist-tags":{"latest":"0.9.99"},"versions":{"0.9.97":{"name":"@goco/redux-undo","version":"0.9.97","description":"simple undo/redo functionality for redux state containers","main":"lib/index.js","typings":"typings.d.ts","jspm":{"main":"src/index.js","format":"esm"},"babel":{"presets":["env"],"plugins":["add-module-exports","transform-object-rest-spread"],"only":["src/*","test/*","webpack.config.babel.js"]},"scripts":{"prebuild":"npm run clean","build":"npm-run-all --parallel build:*","build:commonjs":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"cross-env BABEL_ENV=es babel src --out-dir es","build:umd":"cross-env BABEL_ENV=commonjs NODE_ENV=development webpack","build:umd:min":"cross-env BABEL_ENV=commonjs NODE_ENV=production webpack","clean":"rimraf lib dist es","lint":"eslint webpack.config.babel.js src test","prepublish":"npm run lint && npm run test && npm run clean && npm run build","test":"cross-env NODE_ENV=test ./node_modules/.bin/mocha --compilers js:babel-core/register","test:bail":"npm run test:watch -- --bail","test:cov":"babel-node ./node_modules/.bin/isparta cover --root src/ ./node_modules/.bin/_mocha","test:coveralls":"cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","test:watch":"npm run test -- --watch","docs:clean":"rimraf _book","docs:prepare":"gitbook install","docs:build":"npm run docs:prepare && gitbook build -g omnidan/redux-undo","docs:watch":"npm run docs:prepare && gitbook serve","docs:publish":"npm run docs:clean && npm run docs:build && cp CNAME _book && cd _book && git init && git commit --allow-empty -m 'update book' && git checkout -b gh-pages && touch .nojekyll && git add . && git commit -am 'update book' && git push git@github.com:omnidan/redux-undo gh-pages --force"},"repository":{"type":"git","url":"git+https://github.com/omnidan/redux-undo.git"},"keywords":["redux","undo","redo","flux","time travel"],"author":{"name":"Daniel Bugl","email":"me@omnidan.net","url":"https://github.com/omnidan"},"license":"MIT","bugs":{"url":"https://github.com/omnidan/redux-undo/issues"},"homepage":"https://github.com/omnidan/redux-undo","devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-loader":"^6.2.4","babel-plugin-add-module-exports":"^0.2.1","babel-plugin-transform-object-rest-spread":"^6.8.0","babel-preset-env":"^1.7.0","chai":"^3.5.0","coveralls":"^2.11.12","cross-env":"^2.0.0","eslint":"^3.1.1","eslint-config-standard":"^5.3.5","eslint-plugin-promise":"^2.0.0","eslint-plugin-standard":"^2.0.0","expect":"^1.20.2","gitbook-cli":"^2.3.0","isparta":"^4.0.0","mocha":"^3.0.2","mocha-lcov-reporter":"^1.2.0","npm-run-all":"^3.1.1","redux":"^3.7.1","rimraf":"^2.5.4","webpack":"^2.6.1"},"gitHead":"cbb67dce77d1c10239243dc0159b2d34cc0fc9b6","_id":"@goco/redux-undo@0.9.97","_npmVersion":"6.5.0","_nodeVersion":"10.5.0","_npmUser":{"name":"maikelrobier","email":"maikelrobier@gmail.com"},"dist":{"integrity":"sha512-wb68tmS3MmTViR/sW+9CTTZ5PaBw+1e7dmY/yPeDhAbdJVLhnUNErLrZ+/VYVFve3ossEKxbs2BCOHT+NLQDTg==","shasum":"39edb83d204c121c0bf86425adca746ad6bc38a0","tarball":"https://registry.npmjs.org/@goco/redux-undo/-/redux-undo-0.9.97.tgz","fileCount":54,"unpackedSize":96978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcJB+FCRA9TVsSAnZWagAAaykP/j46bBCoc2TUeFgM6Z2s\nFz+YcWUl+66KwIKLmHdmQeAr15SInDfb6LUeHw20R8zoTh23PHdkLZEbR6TJ\n7OfqLVlYfd82vbAha1OdkR4guRWMPN1VqSrTmv3poB9bEIWujfWLd+6yzrAb\nORzKkee1lX8m1lurJTI0SFUVA0Ch9H5bGEyDJnt7PooCSMccByTzXZ2/iNfR\nWPn9XHy4JmWNbze65NockAGRYHxFbogXFpGcdVYIX9d7PhDR5ELP5QKAmSNY\nUAG+i1f6F+E1Y8/uhY+GV0j0iozBSGPoO06o1T4OF/IwbefeF1RblGzKnZmL\nQPG9f6F2thEX5n4csWo/uX344bxD7zaQqkoP416e6V9NITc2HmW9oBZ02NI9\nT5gCiw0upBa5IgTKMNt91IjK9fH0fBZwvdKdMH0LVY5UwY+qgKMHFFpuUUCp\nzkcE1kg2XNNTMBFECCcIOZqCMiri4ZRsg8i9qrvnDHQ6afSoffBdkVpduWHX\nEtVmbdl7CHdCpPEHfQ2x2UyBjGF2VrY6dVyRTWYpjYuslGzAVkk+p4mslha7\nj1BjWg5YvcF4oHNVn9K69Xc6whjPl4n+l41fYJtPN8DhCnyZqAj1I54Xr1jS\n9FF4g45hsinhxsh0vCBpYn1x5pEAIKug1/y2GtX0kBcX/AXLcuSGaVe2eqNp\nXZdn\r\n=SvUD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC3QwqiPuwObZdbLgppTaLJkvJrdfK4qb/oc93Rxo1fRAiEAkY2l56vf9Dnq9hSHqN2/PU/PWGPq16Cp9WP7bry+LwY="}]},"maintainers":[{"name":"gocodev","email":"jason+gocodev@goco.io"},{"name":"jongbeau","email":"jason@goco.io"},{"name":"maikelrobier","email":"maikelrobier@gmail.com"},{"name":"christopher-gibson","email":"chris@chrisg.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-undo_0.9.97_1545871236378_0.12489693590656437"},"_hasShrinkwrap":false},"0.9.98":{"name":"@goco/redux-undo","version":"0.9.98","description":"simple undo/redo functionality for redux state containers","main":"lib/index.js","typings":"typings.d.ts","jspm":{"main":"src/index.js","format":"esm"},"babel":{"presets":["env"],"plugins":["add-module-exports","transform-object-rest-spread"],"only":["src/*","test/*","webpack.config.babel.js"]},"scripts":{"prebuild":"npm run clean","build":"npm-run-all --parallel build:*","build:commonjs":"cross-env BABEL_ENV=commonjs babel src --out-dir lib","build:es":"cross-env BABEL_ENV=es babel src --out-dir es","build:umd":"cross-env BABEL_ENV=commonjs NODE_ENV=development webpack","build:umd:min":"cross-env BABEL_ENV=commonjs NODE_ENV=production webpack","clean":"rimraf lib dist es","lint":"eslint webpack.config.babel.js src test","prepublish":"npm run lint && npm run test && npm run clean && npm run build","test":"cross-env NODE_ENV=test ./node_modules/.bin/mocha --compilers js:babel-core/register","test:bail":"npm run test:watch -- --bail","test:cov":"babel-node ./node_modules/.bin/isparta cover --root src/ ./node_modules/.bin/_mocha","test:coveralls":"cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","test:watch":"npm run test -- --watch","docs:clean":"rimraf _book","docs:prepare":"gitbook install","docs:build":"npm run docs:prepare && gitbook build -g omnidan/redux-undo","docs:watch":"npm run docs:prepare && gitbook serve","docs:publish":"npm run docs:clean && npm run docs:build && cp CNAME _book && cd _book && git init && git commit --allow-empty -m 'update book' && git checkout -b gh-pages && touch .nojekyll && git add . && git commit -am 'update book' && git push git@github.com:omnidan/redux-undo gh-pages --force"},"repository":{"type":"git","url":"git+https://github.com/omnidan/redux-undo.git"},"keywords":["redux","undo","redo","flux","time travel"],"author":{"name":"Daniel Bugl","email":"me@omnidan.net","url":"https://github.com/omnidan"},"license":"MIT","bugs":{"url":"https://github.com/omnidan/redux-undo/issues"},"homepage":"https://github.com/omnidan/redux-undo","devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-loader":"^6.2.4","babel-plugin-add-module-exports":"^0.2.1","babel-plugin-transform-object-rest-spread":"^6.8.0","babel-preset-env":"^1.7.0","chai":"^3.5.0","coveralls":"^2.11.12","cross-env":"^2.0.0","eslint":"^3.1.1","eslint-config-standard":"^5.3.5","eslint-plugin-promise":"^2.0.0","eslint-plugin-standard":"^2.0.0","expect":"^1.20.2","gitbook-cli":"^2.3.0","isparta":"^4.0.0","mocha":"^3.0.2","mocha-lcov-reporter":"^1.2.0","npm-run-all":"^3.1.1","redux":"^3.7.1","rimraf":"^2.5.4","webpack":"^2.6.1"},"gitHead":"cbb67dce77d1c10239243dc0159b2d34cc0fc9b6","_id":"@goco/redux-undo@0.9.98","_npmVersion":"6.5.0","_nodeVersion":"10.5.0","_npmUser":{"name":"maikelrobier","email":"maikelrobier@gmail.com"},"dist":{"integrity":"sha512-OtiVWGANc/am9uXC9XIqcdFV5ryqlLw+nmMyjW7xLDfw+eDpxBALZYaMcwU4hD2Jr/uyxUlCWdh/251sLtZKAQ==","shasum":"71e5426277af0544c7728f49b857cd10d84d35ad","tarball":"https://registry.npmjs.org/@goco/redux-undo/-/redux-undo-0.9.98.tgz","fileCount":54,"unpackedSize":96978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcJCBXCRA9TVsSAnZWagAAcicQAJdynREmIwTywxMZ2bRT\nBG0Ji81JHNc6iNg2Wxo6UwtBlV8z5o/re/zeb9nfCkLznLGS+ZCLktj6A/wz\n2o7np3vnvMLf+SKT+l11ZT1+BuXEzHr9HSFCUHCzq70p2h/4oIfAL1fuve2Q\noAiCWUxgtrZd+kuFUcw/zaJTbdppcIXtpG5ivpxI6AX2imz/VzzY3TaZ+rKQ\nMfr+ysIlSCd/kxhsXRY+fBZe5Tm/Iz084YYJKJ9lsn+TIeCi/YBuPLOMH4+Z\n8+Uobvf/jpy654v60lT/aFSKh30tDejBGlxXkv/yycFCnhTkxcXMXV/i6V2P\nSAJEVwqBBq+xLA6hz09CUP0xB8Qb8cle5NCesWZNzRo2G/SMBYPaobykyFR/\nds0dNx3sTrqpGnaG30xoO3fU+ZsIaKD4w/evuRfegbYH8QYbVbOdVYnXjlTC\njjrd4dt2zjjtZSr2Zg99gRkSjDKeMhsZx5ZqCIYzleuTHO10irtzVcAHBNCh\nJwglSaL6yJDiaEsM7zH+nvceExu6GK4bL/diLDV2jX9GrgO5edTRReudBJuK\npwzwqAg3KUAFTRTt0NxsJRsWldtgLopENKNrFP9uxpzGFTP+CFXeK2WWGPHq\nlTg1rftXMMDjwPobHVxaCHzTIhiIFks1dbTRuRx4wND3KXwjOWq/Orqdzwhl\nFdBJ\r\n=jhUC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGrH/Fh3/hbKNz1mKsHA6Ru2qw6Y8DCzdVmfNq9j+BYAIgbBfLi14FNhbQVn//euGoOZB4ZzhZEt++IoKF1IOS+sY="}]},"maintainers":[{"name":"christopher-gibson","email":"chris@chrisg.io"},{"name":"gocodev","email":"jason+gocodev@goco.io"},{"name":"jongbeau","email":"jason@goco.io"},{"name":"maikelrobier","email":"maikelrobier@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-undo_0.9.98_1545871446978_0.30513185459150827"},"_hasShrinkwrap":false},"0.9.99":{"name":"@goco/redux-undo","version":"0.9.99","description":"simple undo/redo functionality for redux state containers","main":"lib/index.js","scripts":{"clean":"rimraf lib","build":"babel src --out-dir lib","lint":"eslint src test","test":"NODE_ENV=test mocha --compilers js:babel-core/register --recursive","test:watch":"NODE_ENV=test mocha --compilers js:babel-core/register --recursive --watch","test:cov":"babel-node ./node_modules/.bin/isparta cover ./node_modules/.bin/_mocha -- --recursive","prepublish":"npm run lint && npm run test && npm run clean && npm run build"},"repository":{"type":"git","url":"git+https://github.com/omnidan/redux-undo.git"},"keywords":["redux","undo","redo","flux","time travel"],"author":{"name":"Daniel Bugl","email":"me@omnidan.net","url":"https://github.com/omnidan"},"license":"MIT","bugs":{"url":"https://github.com/omnidan/redux-undo/issues"},"homepage":"https://github.com/omnidan/redux-undo","devDependencies":{"babel":"^6.3.26","babel-cli":"^6.4.5","babel-core":"^6.4.5","babel-eslint":"^4.1.6","babel-plugin-transform-object-rest-spread":"^6.3.13","babel-preset-es2015":"^6.3.13","chai":"^3.4.1","eslint":"^1.6","eslint-config-standard":"^4.4.0","eslint-plugin-react":"^3.5.1","eslint-plugin-standard":"^1.3.1","expect":"^1.12.0","isparta":"^3.1.0","mocha":"^2.3.3","rimraf":"^2.4.3"},"dependencies":{"redux":"^3.0.2"},"gitHead":"4df57927cea761776817df3a2aa0ee88153a5bcd","_id":"@goco/redux-undo@0.9.99","_npmVersion":"6.5.0","_nodeVersion":"10.5.0","_npmUser":{"name":"maikelrobier","email":"maikelrobier@gmail.com"},"dist":{"integrity":"sha512-fKdaOMUkhYeEPh+/Rzl8yntlXTgUpunEjA91N8RbiBWj3TvFM8qrmCpr5pAnT5Wjmlv25DTGgRBr1cssn+PDVQ==","shasum":"0f04d01cb1e01ab356e7430ea54c4ff0f53378f3","tarball":"https://registry.npmjs.org/@goco/redux-undo/-/redux-undo-0.9.99.tgz","fileCount":14,"unpackedSize":59466,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcJEJSCRA9TVsSAnZWagAApNEP/iYtjpEnojIkTpF23M//\nIqKEJnnvZiyjsdfmzBcxxZ06QbBzDsLYgma7pXX91uULU1DzT+Tf3+0FuCwD\nucl9eTAMtDRGUBWT6BAHOtMz2kcqkV2AaPGLcDA+chX0MO4qEuQ+rPhr6aM3\ndRIHSS6X90KZamYR17hhKoJTW6IkT2onowlNDaWpX854M+Zi2s7noeeSK+LU\nzRsBsFlvjHPKxuREOjCUtOyJCcxTe4B3qjIv0wmThEmD5M071VPfa4V0LU7h\nh6rCd+GmQnSUHbSLss9u6RucKnNmr4287ODQmfP7igAL8KPHZGBZzBYbR55E\ngiTAS7aY1ykyAYkYBAs5hpErQ8HVo3mNmCEOFbF1fPxSb3sY4iWqXaviFPVr\n+4D5ZQYXjDwTV5cRQHOrwYkLqj9Rv4l8gP9PWavFx41UW9QeGVlHOJg5jAK9\n3XUYEuI08cJ21ASoiQ6wD4bKFnFZbwUAGyAktyt1iFAdvKG06QRNoBA3z0LJ\nYlf3RstpP7j1YyDpjALE6lU0IrPdJVFWow4yUBWV20dxuIlDlR5gGE4H2w2p\naIU4Z4eRa9D0YIAY3vP6znhI3DEKn76Nr/nibyQ7wpwlT2tpGR10zp4jnlQw\nxH6h1piObbe/4zG5GZYVliSWghUhvthqvYPwDkPBeHKlIaAMr98MV1Ny6P4h\n43Sg\r\n=0HAu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHbwiwZiB/2szqx34P+GttaGmg+Pp9BZTWJSfZF4s/pyAiEAqA64Ey/6mgmjvOoI45O7xL3d2dCVehOrmq7xht/75jk="}]},"maintainers":[{"name":"christopher-gibson","email":"chris@chrisg.io"},{"name":"gocodev","email":"jason+gocodev@goco.io"},{"name":"jongbeau","email":"jason@goco.io"},{"name":"maikelrobier","email":"maikelrobier@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-undo_0.9.99_1545880145710_0.48828430573986514"},"_hasShrinkwrap":false}},"time":{"created":"2018-12-27T00:40:36.378Z","0.9.97":"2018-12-27T00:40:36.611Z","modified":"2023-06-22T16:18:47.577Z","0.9.98":"2018-12-27T00:44:07.204Z","0.9.99":"2018-12-27T03:09:05.891Z"},"maintainers":[],"description":"simple undo/redo functionality for redux state containers","homepage":"https://github.com/omnidan/redux-undo","keywords":["redux","undo","redo","flux","time travel"],"repository":{"type":"git","url":"git+https://github.com/omnidan/redux-undo.git"},"author":{"name":"Daniel Bugl","email":"me@omnidan.net","url":"https://github.com/omnidan"},"bugs":{"url":"https://github.com/omnidan/redux-undo/issues"},"license":"MIT","readme":"# redux undo/redo\n\n[![NPM version (>=0.4)](https://img.shields.io/npm/v/redux-undo.svg?style=flat-square)](https://www.npmjs.com/package/redux-undo) [![Build Status](https://img.shields.io/travis/omnidan/redux-undo/master.svg?style=flat-square)](https://travis-ci.org/omnidan/redux-undo) [![Dependencies](https://img.shields.io/david/omnidan/redux-undo.svg?style=flat-square)](https://david-dm.org/omnidan/redux-undo) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](http://standardjs.com/) [![https://gratipay.com/omnidan/](https://img.shields.io/gratipay/omnidan.svg?style=flat-square)](https://gratipay.com/omnidan/)\n\n_simple undo/redo functionality for redux state containers_\n\n[![https://i.imgur.com/M2KR4uo.gif](https://i.imgur.com/M2KR4uo.gif)](https://github.com/omnidan/redux-undo-boilerplate)\n\n**Protip:** You can use the [redux-undo-boilerplate](https://github.com/omnidan/redux-undo-boilerplate) to quickly get started with `redux-undo`.\n\n**Note:** Make sure to update your programs to the [latest History API](#history-api).\n\n\n## Installation\n\n```\nnpm install --save redux-undo\n```\n\n\n## API\n\n```js\nimport undoable from 'redux-undo';\nundoable(reducer)\nundoable(reducer, config)\n```\n\n\n## Making your reducers undoable\n\n`redux-undo` is a reducer enhancer, it provides the `undoable` function, which\ntakes an existing reducer and a configuration object and enhances your existing\nreducer with undo functionality.\n\n**Note:** If you were accessing `state.counter` before, you have to access\n`state.counter.present` after wrapping your reducer with `undoable`.\n\nTo install, firstly import `redux-undo`:\n\n```js\n// Redux utility functions\nimport { combineReducers } from 'redux';\n// redux-undo higher-order reducer\nimport undoable from 'redux-undo';\n```\n\nThen, add `undoable` to your reducer(s) like this:\n\n```js\ncombineReducers({\n  counter: undoable(counter)\n})\n```\n\nA [configuration](#configuration) can be passed like this:\n\n```js\ncombineReducers({\n  counter: undoable(counter, {\n    limit: 10 // set a limit for the history\n  })\n})\n```\n\n\n## History API\n\nWrapping your reducer with `undoable` makes the state look like this:\n\n```js\n{\n  past: [...pastStatesHere...],\n  present: {...currentStateHere...},\n  future: [...futureStatesHere...]\n}\n```\n\nNow you can get your current state like this: `state.present`\n\nAnd you can access all past states (e.g. to show a history) like this: `state.past`\n\n\n## Undo/Redo Actions\n\nFirstly, import the undo/redo action creators:\n\n```js\nimport { ActionCreators } from 'redux-undo';\n```\n\nThen, you can use `store.dispatch()` and the undo/redo action creators to\nperform undo/redo operations on your state:\n\n```js\nstore.dispatch(ActionCreators.undo()) // undo the last action\nstore.dispatch(ActionCreators.redo()) // redo the last action\n\nstore.dispatch(ActionCreators.jumpToPast(index)) // jump to requested index in the past[] array\nstore.dispatch(ActionCreators.jumpToFuture(index)) // jump to requested index in the future[] array\n```\n\n\n## Configuration\n\nA configuration object can be passed to `undoable()` like this (values shown\nare default values):\n\n```js\nundoable(reducer, {\n  limit: false, // set to a number to turn on a limit for the history\n\n  filter: () => true, // see `Filtering Actions` section\n\n  undoType: ActionTypes.UNDO, // define a custom action type for this undo action\n  redoType: ActionTypes.REDO, // define a custom action type for this redo action\n\n  jumpToPastType: ActionTypes.JUMP_TO_PAST, // define custom action type for this jumpToPast action\n  jumpToFutureType: ActionTypes.JUMP_TO_FUTURE, // define custom action type for this jumpToFuture action\n\n  initialState: undefined, // initial state (e.g. for loading)\n  initTypes: ['@@redux/INIT', '@@INIT'] // history will be (re)set upon init action type\n  initialHistory: { // initial history (e.g. for loading)\n    past: [],\n    present: config.initialState,\n    future: []\n  },\n\n  debug: false, // set to `true` to turn on debugging\n})\n```\n\n### Filtering Actions\n\nIf you don't want to include every action in the undo/redo history, you can\npass a function to `undoable` like this:\n\n```js\nundoable(reducer, function filterActions(action, currentState, previousState) {\n  return action.type === SOME_ACTION; // only add to history if action is SOME_ACTION\n})\n\n// or you could do...\n\nundoable(reducer, function filterState(action, currentState, previousState) {\n  return currentState !== previousState; // only add to history if state changed\n})\n```\n\nOr you can use the `distinctState`, `includeAction` and `excludeAction` helpers,\nwhich should be imported like this:\n\n```js\nimport undoable, { distinctState, includeAction, excludeAction } from 'redux-undo';\n```\n\nNow you can use the helper, which is pretty simple:\n\n```js\nundoable(reducer, { filter: includeAction(SOME_ACTION) })\nundoable(reducer, { filter: excludeAction(SOME_ACTION) })\n\n// or you could do...\n\nundoable(reducer, { filter: distinctState() })\n```\n\n... they even support Arrays:\n\n```js\nundoable(reducer, { filter: includeAction([SOME_ACTION, SOME_OTHER_ACTION]) })\nundoable(reducer, { filter: excludeAction([SOME_ACTION, SOME_OTHER_ACTION]) })\n```\n\n\n## What is this magic? How does it work?\n\nHave a read of the [Implementing Undo History recipe](https://rackt.github.io/redux/docs/recipes/ImplementingUndoHistory.html) in the Redux documents, which explains in detail how redux-undo works.\n\n\n## License\n\nMIT, see `LICENSE.md` for more information.\n","readmeFilename":"README.md"}