{"_id":"backbone-redux","_rev":"18-10d1e4f87ccfb557b89118425db56c44","name":"backbone-redux","dist-tags":{"latest":"0.3.2","unstable":"0.3.2-rc.1"},"versions":{"0.0.1":{"name":"backbone-redux","version":"0.0.1","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"license":"MIT","_id":"backbone-redux@0.0.1","maintainers":[{"name":"somebody32","email":"somebody32@gmail.com"}],"homepage":"https://github.com/teambox/backbone-redux","bugs":{"url":"https://github.com/teambox/backbone-redux/issues"},"dist":{"shasum":"f2ee9664813ff2c33b6d5f24284b6d72dfb767f2","tarball":"https://registry.npmjs.org/backbone-redux/-/backbone-redux-0.0.1.tgz","integrity":"sha512-G8CImOUti0cCH5dJ4Kh16lrlT4uzBbjYE8C7d2dpCycH091EyP5RIHGgU0sAcmCcnqdKhC1Q4pQHdDuuuKMH+Q==","signatures":[{"sig":"MEQCIAUBrOZ5gsnCCeFRv2Y2xhLI4NNykL/0e7qCnMyJbFaUAiBP8Tzi03yz2MaPxfuca0hLR5yW86R6N4W1rV7UrhubNQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"f2ee9664813ff2c33b6d5f24284b6d72dfb767f2","gitHead":"fdf74b42fcce4ee61fef1fefa98d0af84794a72e","scripts":{"lint":"eslint src test examples","test":"NODE_ENV=test mocha","build":"babel src --out-dir lib","clean":"rimraf lib dist","test:cov":"babel-node ./node_modules/.bin/isparta cover ./node_modules/.bin/_mocha","build:umd":"webpack src/index.js dist/backbone-redux.js && NODE_ENV=production webpack src/index.js dist/backbone-redux.min.js","prepublish":"npm run lint && npm run test && npm run clean && npm run build && npm run build:umd","test:watch":"NODE_ENV=test mocha --watch"},"_npmUser":{"name":"somebody32","email":"somebody32@gmail.com"},"repository":{"url":"git+https://github.com/teambox/backbone-redux.git","type":"git"},"_npmVersion":"2.13.5","description":"Easy way to keep your backbone collections and redux store in sync","directories":{},"_nodeVersion":"0.12.6","dependencies":{"redux":"^2.0.0","lodash":"^3.10.1"},"devDependencies":{"babel":"^5.5.8","mocha":"^2.2.5","eslint":"^1.3","expect":"^1.6.0","rimraf":"^2.3.4","isparta":"^3.0.3","webpack":"^1.9.6","babel-core":"^5.6.18","babel-eslint":"^4.1.1","babel-loader":"^5.1.4","webpack-dev-server":"^1.8.2","eslint-plugin-react":"^3.3.1","eslint-config-airbnb":"0.0.8"}},"0.0.2":{"name":"backbone-redux","version":"0.0.2","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"license":"MIT","_id":"backbone-redux@0.0.2","maintainers":[{"name":"somebody32","email":"somebody32@gmail.com"}],"homepage":"https://github.com/teambox/backbone-redux","bugs":{"url":"https://github.com/teambox/backbone-redux/issues"},"dist":{"shasum":"6febf51fd8dc2a73b1a62541b2ec992aeaac79b3","tarball":"https://registry.npmjs.org/backbone-redux/-/backbone-redux-0.0.2.tgz","integrity":"sha512-94PZuoLKMzWL2qEUuC78gv80U7cmgZ4jTHPIsRa+VN+pvz7aVNb/BRgsLeBAQkXy00D4nRt7EdBTGWFX4a23jw==","signatures":[{"sig":"MEYCIQCRuGCJ6F54A+XNKVJXuwgWpb0Yb9p6HokcW9r5l6Zo5QIhAPnI+2KA+jJKFguB/iNNbgkvchMPXCntRcxmuDOBOJnO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"6febf51fd8dc2a73b1a62541b2ec992aeaac79b3","gitHead":"c29eae5516ab451d7f2765fb8dc724b83f61c27a","scripts":{"lint":"eslint src test examples","test":"NODE_ENV=test mocha","build":"babel src --out-dir lib","clean":"rimraf lib dist","test:cov":"babel-node ./node_modules/.bin/isparta cover ./node_modules/.bin/_mocha","build:umd":"webpack src/index.js dist/backbone-redux.js && NODE_ENV=production webpack src/index.js dist/backbone-redux.min.js","prepublish":"npm run lint && npm run test && npm run clean && npm run build && npm run build:umd","test:watch":"NODE_ENV=test mocha --watch"},"_npmUser":{"name":"somebody32","email":"somebody32@gmail.com"},"repository":{"url":"git+https://github.com/teambox/backbone-redux.git","type":"git"},"_npmVersion":"2.13.5","description":"Easy way to keep your backbone collections and redux store in sync","directories":{},"_nodeVersion":"0.12.6","dependencies":{"redux":"^2.0.0","lodash.compact":"^3.0.0","lodash.flatten":"^3.0.2","lodash.groupby":"^3.1.1"},"devDependencies":{"babel":"^5.5.8","mocha":"^2.2.5","eslint":"^1.3","expect":"^1.6.0","rimraf":"^2.3.4","isparta":"^3.0.3","webpack":"^1.9.6","babel-core":"^5.6.18","babel-eslint":"^4.1.1","babel-loader":"^5.1.4","webpack-dev-server":"^1.8.2","eslint-plugin-react":"^3.3.1","eslint-config-airbnb":"0.0.8"}},"0.1.0-rc1":{"name":"backbone-redux","version":"0.1.0-rc1","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"license":"MIT","_id":"backbone-redux@0.1.0-rc1","maintainers":[{"name":"somebody32","email":"somebody32@gmail.com"}],"homepage":"https://github.com/redbooth/backbone-redux","bugs":{"url":"https://github.com/redbooth/backbone-redux/issues"},"dist":{"shasum":"b1c9266fb1880bb5b1e66cac0c839d1fef6221c4","tarball":"https://registry.npmjs.org/backbone-redux/-/backbone-redux-0.1.0-rc1.tgz","integrity":"sha512-bpIY6d6oEYwc8CPzKW3MwsmO+8/dxTQ2IA2AngjzLfJevGQSOcL5ynuUO6RNBPCy5AeMpB7r8EjDgLr7rnfA5Q==","signatures":[{"sig":"MEUCIBRNEDtKN28xbXG5Ov1cZD0Q6mRvwRpZeJcOH3tH/enJAiEA9Nu/g23oIcZngwKSCdORBMhXGIeXXNZgvS/mqtIfsLw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"b1c9266fb1880bb5b1e66cac0c839d1fef6221c4","gitHead":"c677bbb35d2f43ae26e015522bf82fd16ee6d6d2","scripts":{"lint":"eslint src test examples","test":"NODE_ENV=test babel-tape-runner test/**/*.js | tap-dot","build":"babel src --out-dir lib","clean":"rimraf lib dist","build:umd":"webpack src/index.js dist/backbone-redux.js && NODE_ENV=production webpack src/index.js dist/backbone-redux.min.js","prepublish":"npm run lint && npm run test && npm run clean && npm run build && npm run build:umd","test:watch":"NODE_ENV=test mocha --watch"},"_npmUser":{"name":"somebody32","email":"somebody32@gmail.com"},"repository":{"url":"git+https://github.com/redbooth/backbone-redux.git","type":"git"},"_npmVersion":"2.13.5","description":"Easy way to keep your backbone collections and redux store in sync","directories":{},"_nodeVersion":"0.12.6","dependencies":{"redux":"^3.0.0","lodash.compact":"^3.0.0","lodash.flatten":"^3.0.2","lodash.groupby":"^3.1.1"},"devDependencies":{"tape":"^4.2.0","babel":"^5.5.8","eslint":"^1.3","rimraf":"^2.3.4","tap-dot":"^1.0.0","webpack":"^1.9.6","babel-core":"^5.6.18","babel-eslint":"^4.1.1","babel-loader":"^5.1.4","babel-tape-runner":"^1.2.0","webpack-dev-server":"^1.8.2","eslint-plugin-react":"^3.3.1","eslint-config-airbnb":"^0.0.8"}},"0.1.0-rc2":{"name":"backbone-redux","version":"0.1.0-rc2","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"license":"MIT","_id":"backbone-redux@0.1.0-rc2","maintainers":[{"name":"somebody32","email":"somebody32@gmail.com"}],"homepage":"https://github.com/redbooth/backbone-redux","bugs":{"url":"https://github.com/redbooth/backbone-redux/issues"},"dist":{"shasum":"1a3dfa7a98e4d21fb0e2a6e6c9c8a89fb55cefe8","tarball":"https://registry.npmjs.org/backbone-redux/-/backbone-redux-0.1.0-rc2.tgz","integrity":"sha512-ePVtAYZv8uVIAbNKSD7P4sBGD/e/GX5MCCydAV6ogf5w8xsF85TaJSUaiv9lmmzO9ZuPm6DM0SB0dh6pzISlhA==","signatures":[{"sig":"MEUCIQDfTZXAnHsFuqY9OyvZ0+JxeC722+t4micIb8/NRA224QIgXFFwI05KjT7B+nr0/W+FhVF7t5T/pBYi74Mm4JfmpNg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"1a3dfa7a98e4d21fb0e2a6e6c9c8a89fb55cefe8","gitHead":"37c26597ac5106807ebed3366daad897905c39ba","scripts":{"lint":"eslint src test examples","test":"NODE_ENV=test babel-tape-runner test/**/*.js | tap-dot","build":"babel src --out-dir lib","clean":"rimraf lib dist","build:umd":"webpack src/index.js dist/backbone-redux.js && NODE_ENV=production webpack src/index.js dist/backbone-redux.min.js","prepublish":"npm run lint && npm run test && npm run clean && npm run build && npm run build:umd","test:watch":"NODE_ENV=test mocha --watch"},"_npmUser":{"name":"somebody32","email":"somebody32@gmail.com"},"repository":{"url":"git+https://github.com/redbooth/backbone-redux.git","type":"git"},"_npmVersion":"2.13.5","description":"Easy way to keep your backbone collections and redux store in sync","directories":{},"_nodeVersion":"0.12.6","dependencies":{"redux":"^3.0.0","lodash.compact":"^3.0.0","lodash.flatten":"^3.0.2","lodash.groupby":"^3.1.1"},"devDependencies":{"tape":"^4.2.0","babel":"^5.5.8","eslint":"^1.3","rimraf":"^2.3.4","tap-dot":"^1.0.0","webpack":"^1.9.6","backbone":"^1.2.3","babel-core":"^5.6.18","babel-eslint":"^4.1.1","babel-loader":"^5.1.4","babel-tape-runner":"^1.2.0","webpack-dev-server":"^1.8.2","eslint-plugin-react":"^3.3.1","eslint-config-airbnb":"^0.0.8"}},"0.1.0":{"name":"backbone-redux","version":"0.1.0","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"license":"MIT","_id":"backbone-redux@0.1.0","maintainers":[{"name":"somebody32","email":"somebody32@gmail.com"}],"homepage":"https://github.com/redbooth/backbone-redux","bugs":{"url":"https://github.com/redbooth/backbone-redux/issues"},"dist":{"shasum":"c8fb900af2b3cf7a8bcb1dc3cf4790c67c57b51c","tarball":"https://registry.npmjs.org/backbone-redux/-/backbone-redux-0.1.0.tgz","integrity":"sha512-VsF2sZEkWMUdbw1xLupv083bpyMfRGG41iZLPaL0g2Rn7G8CvKqqZ4vX8BkSe0QbLfnPQmRuJoEfjo3Xvog2tw==","signatures":[{"sig":"MEYCIQDnjWmJBuJ3GqVuSZ8haKDtRWVS/En5CzJ55ki3LLsBJAIhANACl9TalOsamt30OwCxv1hENUol5eAGrtdWhFePKpPQ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"c8fb900af2b3cf7a8bcb1dc3cf4790c67c57b51c","gitHead":"7218fdae30e8dfd08f12b44b3244ac0ee2688b75","scripts":{"ci":"npm run lint && npm run test","lint":"eslint src test examples","test":"NODE_ENV=test babel-tape-runner test/**/*.js | tap-dot","build":"babel src --out-dir lib","clean":"rimraf lib dist","build:umd":"webpack src/index.js dist/backbone-redux.js && NODE_ENV=production webpack src/index.js dist/backbone-redux.min.js","prepublish":"npm run ci && npm run clean && npm run build && npm run build:umd"},"_npmUser":{"name":"somebody32","email":"somebody32@gmail.com"},"repository":{"url":"git+https://github.com/redbooth/backbone-redux.git","type":"git"},"_npmVersion":"2.13.5","description":"Easy way to keep your backbone collections and redux store in sync","directories":{},"_nodeVersion":"0.12.6","dependencies":{"redux":"^3.0.0","lodash.compact":"^3.0.0","lodash.flatten":"^3.0.2","lodash.groupby":"^3.1.1"},"devDependencies":{"tape":"^4.2.0","babel":"^5.5.8","eslint":"^1.3","rimraf":"^2.3.4","tap-dot":"^1.0.0","webpack":"^1.9.6","backbone":"^1.2.3","babel-core":"^5.6.18","babel-eslint":"^4.1.1","babel-loader":"^5.1.4","babel-tape-runner":"^1.2.0","webpack-dev-server":"^1.8.2","eslint-plugin-react":"^3.3.1","eslint-config-airbnb":"^0.1.0"}},"0.2.0-rc1":{"name":"backbone-redux","version":"0.2.0-rc1","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"license":"MIT","_id":"backbone-redux@0.2.0-rc1","maintainers":[{"name":"somebody32","email":"somebody32@gmail.com"}],"homepage":"https://github.com/redbooth/backbone-redux","bugs":{"url":"https://github.com/redbooth/backbone-redux/issues"},"dist":{"shasum":"a2096ce7aaf89d97931e60e449f4df168520d4a3","tarball":"https://registry.npmjs.org/backbone-redux/-/backbone-redux-0.2.0-rc1.tgz","integrity":"sha512-xVa27ccGdgMCZ3b1NVsrYvHfCC2bSiDJahAVTvyQAI7ds5oo+aPdYs50PZTkvInp0FRr0kvz9ep4qTfB54khaw==","signatures":[{"sig":"MEYCIQDghma76WxUrLsxXqaXsAArWdf2K46i1IaKPymazwdPiwIhAI3rcjQpIqqN39GN2wwNozX9/9YbOMiEZYNh29QHqjeC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"a2096ce7aaf89d97931e60e449f4df168520d4a3","gitHead":"d3022e289a89ed27c63b1aa0e6210bd9145b39d5","scripts":{"ci":"npm run lint && npm run test","lint":"eslint src test examples","test":"NODE_ENV=test babel-tape-runner test/**/*.js | tap-dot","build":"babel src --out-dir lib","clean":"rimraf lib dist","build:umd":"webpack src/index.js dist/backbone-redux.js && NODE_ENV=production webpack src/index.js dist/backbone-redux.min.js","prepublish":"npm run ci && npm run clean && npm run build && npm run build:umd"},"_npmUser":{"name":"somebody32","email":"somebody32@gmail.com"},"repository":{"url":"git+https://github.com/redbooth/backbone-redux.git","type":"git"},"_npmVersion":"2.14.9","description":"Easy way to keep your backbone collections and redux store in sync","directories":{},"_nodeVersion":"0.12.8","dependencies":{"redux":"^3.0.0","lodash.compact":"^3.0.0","lodash.flatten":"^3.0.2","lodash.groupby":"^3.1.1"},"devDependencies":{"tape":"^4.2.0","babel":"^5.5.8","eslint":"^1.3","rimraf":"^2.3.4","tap-dot":"^1.0.0","webpack":"^1.9.6","backbone":"^1.2.3","babel-core":"^5.6.18","babel-eslint":"^4.1.1","babel-loader":"^5.1.4","babel-tape-runner":"^1.2.0","webpack-dev-server":"^1.8.2","eslint-plugin-react":"^3.3.1","eslint-config-airbnb":"^0.1.0"}},"0.2.0":{"name":"backbone-redux","version":"0.2.0","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"license":"MIT","_id":"backbone-redux@0.2.0","maintainers":[{"name":"somebody32","email":"somebody32@gmail.com"}],"homepage":"https://github.com/redbooth/backbone-redux","bugs":{"url":"https://github.com/redbooth/backbone-redux/issues"},"dist":{"shasum":"61a8fc3cb3b8955762b41bdb8be870f7bff61ef8","tarball":"https://registry.npmjs.org/backbone-redux/-/backbone-redux-0.2.0.tgz","integrity":"sha512-8/htdNc6A2elbo0uDX8Ibbi5b5sV351QodgbB+1B19L8Qfe6JvGJhNkT5kqRBmHtny0776j+oFaENRiaE7Y2Ew==","signatures":[{"sig":"MEUCIQDMENqOKMkvmBuKYXKQKULeGbBcpLRlWWLo9nOAbYPIlAIgJialhT09zDja+3zyDbqcB2MdFFGBmungBIg5chreIQY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"61a8fc3cb3b8955762b41bdb8be870f7bff61ef8","gitHead":"dec6675a43b17ba2871158d4b0b0319821d5fa86","scripts":{"ci":"npm run lint && npm run test","lint":"eslint src test examples","test":"NODE_ENV=test babel-tape-runner test/**/*.js | tap-dot","build":"babel src --out-dir lib","clean":"rimraf lib dist","build:umd":"webpack src/index.js dist/backbone-redux.js && NODE_ENV=production webpack src/index.js dist/backbone-redux.min.js","prepublish":"npm run ci && npm run clean && npm run build && npm run build:umd"},"_npmUser":{"name":"somebody32","email":"somebody32@gmail.com"},"repository":{"url":"git+https://github.com/redbooth/backbone-redux.git","type":"git"},"_npmVersion":"2.14.9","description":"Easy way to keep your backbone collections and redux store in sync","directories":{},"_nodeVersion":"0.12.8","dependencies":{"redux":"^3.0.0","lodash.compact":"^3.0.0","lodash.flatten":"^3.0.2","lodash.groupby":"^3.1.1"},"devDependencies":{"tape":"^4.2.0","babel":"^5.5.8","eslint":"^1.3","rimraf":"^2.3.4","tap-dot":"^1.0.0","webpack":"^1.9.6","backbone":"^1.2.3","babel-core":"^5.6.18","babel-eslint":"^4.1.1","babel-loader":"^5.1.4","babel-tape-runner":"^1.2.0","webpack-dev-server":"^1.8.2","eslint-plugin-react":"^3.3.1","eslint-config-airbnb":"^0.1.0"}},"0.3.0-rc.1":{"name":"backbone-redux","version":"0.3.0-rc.1","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"license":"MIT","_id":"backbone-redux@0.3.0-rc.1","maintainers":[{"name":"morantron","email":"jorge@morante.eu"},{"name":"somebody32","email":"somebody32@gmail.com"}],"homepage":"https://github.com/redbooth/backbone-redux","bugs":{"url":"https://github.com/redbooth/backbone-redux/issues"},"dist":{"shasum":"742d571155171486327c35df876a00f3e399099f","tarball":"https://registry.npmjs.org/backbone-redux/-/backbone-redux-0.3.0-rc.1.tgz","integrity":"sha512-FANOsmSnODLDAvSNwaITl77r42WddIIcUCyNcgU8DIgXcJJ2JiXm+Dz1dX3CbL9DFhw2aYaRDOKplHgUj+GibQ==","signatures":[{"sig":"MEYCIQC1C9IFiz6LPIqFe5jpcwiq77QfP/FN+3HiOXkWodcsXwIhAPmeIEhnVjXqpqxepAhOJ+BbsaQban/xLe/iDiMJ5V/z","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"742d571155171486327c35df876a00f3e399099f","gitHead":"0584ec96b5013fb923b64afcab46dfe2d14d85b0","scripts":{"ci":"npm run lint && npm run test","lint":"eslint src test examples","test":"NODE_ENV=test babel-tape-runner test/**/*.js | tap-dot","build":"babel src --out-dir lib","clean":"rimraf lib dist","build:umd":"webpack src/index.js dist/backbone-redux.js && NODE_ENV=production webpack src/index.js dist/backbone-redux.min.js","prepublish":"npm run ci && npm run clean && npm run build && npm run build:umd"},"_npmUser":{"name":"morantron","email":"jorge@morante.eu"},"repository":{"url":"git+https://github.com/redbooth/backbone-redux.git","type":"git"},"_npmVersion":"4.1.2","description":"Easy way to keep your backbone collections and redux store in sync","directories":{},"_nodeVersion":"7.5.0","dependencies":{"redux":"^3.0.0","lodash.defer":"^4.1.0","lodash.compact":"^3.0.0","lodash.flatten":"^3.0.2","lodash.groupby":"^3.1.1"},"devDependencies":{"tape":"^4.2.0","async":"^2.1.4","babel":"^5.5.8","eslint":"^1.3","rimraf":"^2.3.4","tap-dot":"^1.0.0","webpack":"^1.9.6","backbone":"^1.2.3","babel-core":"^5.6.18","babel-eslint":"^4.1.1","babel-loader":"^5.1.4","babel-tape-runner":"^1.2.0","webpack-dev-server":"^1.8.2","eslint-plugin-react":"^3.3.1","eslint-config-airbnb":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/backbone-redux-0.3.0-rc.1.tgz_1487094076399_0.0164824933744967","host":"packages-18-east.internal.npmjs.com"}},"0.3.0":{"name":"backbone-redux","version":"0.3.0","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"license":"MIT","_id":"backbone-redux@0.3.0","maintainers":[{"name":"morantron","email":"jorge@morante.eu"},{"name":"somebody32","email":"somebody32@gmail.com"}],"homepage":"https://github.com/redbooth/backbone-redux","bugs":{"url":"https://github.com/redbooth/backbone-redux/issues"},"dist":{"shasum":"8dc2c934f381dd76a4bf58b9f99b9bece14a8bca","tarball":"https://registry.npmjs.org/backbone-redux/-/backbone-redux-0.3.0.tgz","fileCount":10,"integrity":"sha512-wpMIf0ojJrye943i1B597ZZEwU3TTQ7u+DDf2Q/ugd1m9qsZlGZ4Gfxe/eqIuO9D5H4gu2oMGwzRjaitk2JsQQ==","signatures":[{"sig":"MEUCIQCtjWKdLXUW4QQ+6zZuIgz6LXt4LM7SorOEzv091HZsXwIgT2apa6eTX02+G1MhYdkj3LLnSGJwh8VJnxKuKTWlBLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19203},"main":"lib/index.js","gitHead":"f2b886fd2db45b413d4e80ff457f9db7e8215bde","scripts":{"ci":"npm run lint && npm run test","lint":"eslint src test examples","test":"NODE_ENV=test babel-tape-runner test/**/*.js | tap-dot","build":"babel src --out-dir lib","clean":"rimraf lib dist","build:umd":"webpack src/index.js dist/backbone-redux.js && NODE_ENV=production webpack src/index.js dist/backbone-redux.min.js","prepublish":"npm run ci && npm run clean && npm run build && npm run build:umd"},"_npmUser":{"name":"morantron","email":"jorge@morante.eu"},"repository":{"url":"git+https://github.com/redbooth/backbone-redux.git","type":"git"},"_npmVersion":"11.5.1","description":"Easy way to keep your backbone collections and redux store in sync","directories":{},"_nodeVersion":"24.5.0","dependencies":{"redux":"^3.0.0","lodash.defer":"^4.1.0","lodash.compact":"^3.0.0","lodash.flatten":"^3.0.2","lodash.groupby":"^3.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.2.0","async":"^2.1.4","babel":"^5.5.8","eslint":"^1.3","rimraf":"^2.3.4","tap-dot":"^1.0.0","webpack":"^1.9.6","backbone":"^1.2.3","babel-core":"^5.6.18","babel-eslint":"^4.1.1","babel-loader":"^5.1.4","babel-tape-runner":"^1.2.0","webpack-dev-server":"^1.8.2","eslint-plugin-react":"^3.3.1","eslint-config-airbnb":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/backbone-redux_0.3.0_1780934698371_0.5003598431478131","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"backbone-redux","version":"0.3.1","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"license":"MIT","_id":"backbone-redux@0.3.1","maintainers":[{"name":"morantron","email":"jorge@morante.eu"},{"name":"somebody32","email":"somebody32@gmail.com"}],"homepage":"https://github.com/redbooth/backbone-redux","bugs":{"url":"https://github.com/redbooth/backbone-redux/issues"},"dist":{"shasum":"f0f361565f03000b363a9aab276e7e535a224264","tarball":"https://registry.npmjs.org/backbone-redux/-/backbone-redux-0.3.1.tgz","fileCount":19,"integrity":"sha512-zcm+7W5mA2B1Olr0QrG15QX8jWaThLlf/Y7+2TMB7bS6YhcktW8sHbCnzr984b4yzDuRmnzhZIZXfFzBjXtbIQ==","signatures":[{"sig":"MEYCIQDNH7Dw38uuOL1ZL09YviZ6DdTwEP6WU0/OnqYhhAHxswIhANhKJVW9Ra0aUhS9zxqGbdrS3OzIJ7pt/D1vmS2fXcXd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185230},"main":"lib/index.js","gitHead":"9af5223cd54c603878320055eee1749e5dbf58c2","scripts":{"ci":"npm run lint && npm run test","lint":"eslint src test examples","test":"NODE_ENV=test babel-tape-runner test/**/*.js | tap-dot","build":"babel src --out-dir lib","clean":"rimraf lib dist","build:umd":"webpack src/index.js dist/backbone-redux.js && NODE_ENV=production webpack src/index.js dist/backbone-redux.min.js","prepublish":"npm run ci && npm run clean && npm run build && npm run build:umd"},"_npmUser":{"name":"morantron","email":"jorge@morante.eu"},"repository":{"url":"git+https://github.com/redbooth/backbone-redux.git","type":"git"},"_npmVersion":"11.5.1","description":"Easy way to keep your backbone collections and redux store in sync","directories":{},"_nodeVersion":"24.5.0","dependencies":{"redux":"^3.0.0","lodash.defer":"^4.1.0","lodash.compact":"^3.0.0","lodash.flatten":"^3.0.2","lodash.groupby":"^3.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.2.0","async":"^2.1.4","babel":"^5.5.8","eslint":"^1.3","rimraf":"^2.3.4","tap-dot":"^1.0.0","webpack":"^1.9.6","backbone":"^1.2.3","babel-core":"^5.6.18","babel-eslint":"^4.1.1","babel-loader":"^5.1.4","babel-tape-runner":"^1.2.0","webpack-dev-server":"^1.8.2","eslint-plugin-react":"^3.3.1","eslint-config-airbnb":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/backbone-redux_0.3.1_1780935043999_0.9471538697911661","host":"s3://npm-registry-packages-npm-production"}},"0.3.2-rc.1":{"name":"backbone-redux","version":"0.3.2-rc.1","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"license":"MIT","_id":"backbone-redux@0.3.2-rc.1","maintainers":[{"name":"morantron","email":"jorge@morante.eu"},{"name":"somebody32","email":"somebody32@gmail.com"}],"homepage":"https://github.com/redbooth/backbone-redux","bugs":{"url":"https://github.com/redbooth/backbone-redux/issues"},"dist":{"shasum":"cb5d441245a1298a0e43702d434448021852d4b3","tarball":"https://registry.npmjs.org/backbone-redux/-/backbone-redux-0.3.2-rc.1.tgz","fileCount":19,"integrity":"sha512-0LOeeiAQJH0kOowWmrVfkHvR01EFd9+6gyev48Ki+AePWhxydpuaKDwbVieBxt5PByw1qIKiEbB6A6+2nSyd6w==","signatures":[{"sig":"MEUCIBkVHBKqQYfZYZKQT3h9fL63mt/lLIpqaidasKsga5LaAiEA3DV2U34Ir7qG1lEx+7Vve6TFxRDLbGqTbURB5heM3P0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDkFAW+xW3svAiuB7tAVrm5Yrdemq7Wh3TwS8H9LJvB0QIhAKZHVs5pWTp5fVA//4Xu8LJCIpOzrmequIa3wLZrxEwg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185598},"main":"lib/index.js","gitHead":"faaa8dea07719049666b7a71a26886c49d32d4b6","scripts":{"ci":"npm run lint && npm run test","lint":"eslint src test examples","test":"NODE_ENV=test babel-tape-runner test/**/*.js | tap-dot","build":"babel src --out-dir lib","clean":"rimraf lib dist","build:umd":"webpack src/index.js dist/backbone-redux.js && NODE_ENV=production webpack src/index.js dist/backbone-redux.min.js","prepublish":"npm run ci && npm run clean && npm run build && npm run build:umd"},"_npmUser":{"name":"morantron","email":"jorge@morante.eu"},"repository":{"url":"git+https://github.com/redbooth/backbone-redux.git","type":"git"},"_npmVersion":"11.5.1","description":"Easy way to keep your backbone collections and redux store in sync","directories":{},"_nodeVersion":"24.5.0","dependencies":{"redux":"^3.0.0","lodash.defer":"^4.1.0","lodash.compact":"^3.0.0","lodash.flatten":"^3.0.2","lodash.groupby":"^3.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tape":"^4.2.0","async":"^2.1.4","babel":"^5.5.8","eslint":"^1.3","rimraf":"^2.3.4","tap-dot":"^1.0.0","webpack":"^1.9.6","backbone":"^1.2.3","babel-core":"^5.6.18","babel-eslint":"^4.1.1","babel-loader":"^5.1.4","babel-tape-runner":"^1.2.0","webpack-dev-server":"^1.8.2","eslint-plugin-react":"^3.3.1","eslint-config-airbnb":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/backbone-redux_0.3.2-rc.1_1790174930999_0.7152245198114822","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"_id":"backbone-redux@0.3.2","bugs":{"url":"https://github.com/redbooth/backbone-redux/issues"},"dist":{"shasum":"b11381a6718c2f26230079dd11a98bf4537aca8e","tarball":"https://registry.npmjs.org/backbone-redux/-/backbone-redux-0.3.2.tgz","fileCount":19,"integrity":"sha512-7Fe8u833oHEkIPGtxTyeU4qvUDQ2RH+Z8dd9BTQoYO4R/GIIXfY87mzS8zv1QulPgoiNGXSRgHOHCC53/WbjYQ==","signatures":[{"sig":"MEYCIQCaSPfUu4l8i7OPPkL+AHqHKehoRY7uf1SY7xqsPzlBAAIhANOI+dNppaYJ+MIHtMuc9AFW6yFSfrhedMu+qIuf5uSU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICH3fLOlN1IPb82PR4MpfLUhhPQLvcU6BhZ8hSTylFa6AiBDH3eBTK3eKGzD19RiZz0XGfgKlBh94mgDoRgDdZnTCA=="}],"unpackedSize":185593},"main":"lib/index.js","name":"backbone-redux","author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"gitHead":"9ed9b716b0c280f56e3052a7cfeb1139220b823a","license":"MIT","scripts":{"ci":"npm run lint && npm run test","lint":"eslint src test examples","test":"NODE_ENV=test babel-tape-runner test/**/*.js | tap-dot","build":"babel src --out-dir lib","clean":"rimraf lib dist","build:umd":"webpack src/index.js dist/backbone-redux.js && NODE_ENV=production webpack src/index.js dist/backbone-redux.min.js","prepublish":"npm run ci && npm run clean && npm run build && npm run build:umd"},"version":"0.3.2","_npmUser":{"name":"morantron","email":"jorge@morante.eu"},"homepage":"https://github.com/redbooth/backbone-redux","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"repository":{"url":"git+https://github.com/redbooth/backbone-redux.git","type":"git"},"_npmVersion":"11.5.1","description":"Easy way to keep your backbone collections and redux store in sync","directories":{},"maintainers":[{"name":"morantron","email":"jorge@morante.eu"},{"name":"somebody32","email":"somebody32@gmail.com"}],"_nodeVersion":"24.5.0","dependencies":{"redux":"^3.0.0","lodash.defer":"^4.1.0","lodash.compact":"^3.0.0","lodash.flatten":"^3.0.2","lodash.groupby":"^3.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tape":"^4.2.0","async":"^2.1.4","babel":"^5.5.8","eslint":"^1.3","rimraf":"^2.3.4","tap-dot":"^1.0.0","webpack":"^1.9.6","backbone":"^1.2.3","babel-core":"^5.6.18","babel-eslint":"^4.1.1","babel-loader":"^5.1.4","babel-tape-runner":"^1.2.0","webpack-dev-server":"^1.8.2","eslint-plugin-react":"^3.3.1","eslint-config-airbnb":"^0.1.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/backbone-redux_0.3.2_1790178528901_0.5506135584454728"}}},"time":{"created":"2015-09-03T20:07:43.878Z","modified":"2026-09-23T15:48:49.166Z","0.0.1":"2015-09-03T20:07:43.878Z","0.0.2":"2015-09-04T07:09:39.628Z","0.1.0-rc1":"2015-09-21T11:40:02.006Z","0.1.0-rc2":"2015-09-22T08:29:27.475Z","0.1.0":"2015-10-08T16:23:09.276Z","0.2.0-rc1":"2015-12-09T13:21:09.706Z","0.2.0":"2016-01-07T11:59:03.746Z","0.3.0-rc.1":"2017-02-14T17:41:17.141Z","0.3.0":"2026-06-08T16:04:58.506Z","0.3.1":"2026-06-08T16:10:44.130Z","0.3.2-rc.1":"2026-09-23T14:48:51.084Z","0.3.2":"2026-09-23T15:48:48.990Z"},"bugs":{"url":"https://github.com/redbooth/backbone-redux/issues"},"author":{"url":"http://github.com/somebody32","name":"Ilya Zayats","email":"somebody32@gmail.com"},"license":"MIT","homepage":"https://github.com/redbooth/backbone-redux","keywords":["backbone","collections","redux","state","functional","immutable","hot","replay"],"repository":{"url":"git+https://github.com/redbooth/backbone-redux.git","type":"git"},"description":"Easy way to keep your backbone collections and redux store in sync","maintainers":[{"name":"morantron","email":"jorge@morante.eu"},{"name":"somebody32","email":"somebody32@gmail.com"}],"readme":"backbone-redux\n===============\n\nThe easy way to keep your backbone collections and redux store in sync.\n\n[![npm](https://img.shields.io/npm/v/backbone-redux.svg?style=flat-square)](https://www.npmjs.com/package/backbone-redux)\n[![npm](https://img.shields.io/npm/dm/backbone-redux.svg?style=flat-square)](https://www.npmjs.com/package/backbone-redux)\n[![Travis](https://img.shields.io/travis/redbooth/backbone-redux.svg?style=flat-square)](https://travis-ci.org/redbooth/backbone-redux)\n\n```\nnpm install backbone-redux --save\n```\n\nCreates reducers and listeners for your backbone collections and fires action\ncreators on every collection change.\n\n**Documentation is a work-in-progress**. Feedback is welcome and encouraged.\n\n* [Why?](#why)\n* [How to use](#how-to-use)\n  * [Auto way](#auto-way)\n  * [Manual artesanal way](#manual-artesanal-way)\n* [Documentation](#documentation)\n  * [Configuration options](#configuration)\n    * [collectionMap](#collection-map)\n    * [indexesMap](#indexes-map)\n    * [serializer](#serializer)\n  * [API reference](#api-reference)\n    * [syncCollections](#sync-collections)\n    * [buildReducers](#build-reducers)\n    * [buildEars](#build-ears)\n    * [actionFabric](#action-fabric)\n    * [reducerFabric](#reducer-fabric)\n* [Examples](#examples)\n\n\n### Why?\n\n* You can start migrating your apps from backbone to react+redux in no time.\n* No need to worry about migrated/legacy parts of your app being out of sync,\n  because both are using the single source of truth.\n* No boilerplate.\n* You can hide all new concepts like `reducers`, `stores`, `action creators`,\n  `actions` and `purity` from other developers in your team to avoid brain\n  overloading.\n* You have REST-adapter to your server out-of-the-box. Most React projects end\n  up implementing an ad hoc, bug-ridden implementation of Backbone.Collection\n  not only once, but for each store.\n* You have separation between server-data and UI-data. The later is flat, so\n  working with it is a pleasure in React.\n\n### How to use?\n#### Auto way\n\n\n```javascript\nimport { createStore, compose } from 'redux';\nimport { devTools } from 'redux-devtools';\nimport { syncCollections } from 'backbone-redux';\n\n//  Create your redux-store, include all middlewares you want.\nconst finalCreateStore = compose(devTools())(createStore);\nconst store = finalCreateStore(() => {}); // Store with an empty object as a reducer\n\n// Now just call auto-syncer from backbone-redux\n// Assuming you have Todos Backbone collection globally available\nsyncCollections({todos: Todos}, store);\n```\n\nWhat will happen?\n\n* `syncCollections` will create a reducer under the hood especially for your\n  collection.\n* `action creator` will be constructed with 4 possible actions: `add`, `merge`,\n  `remove`, and `reset`.\n* Special `ear` object will be set up to listen to all collection events and\n  trigger right actions depending on the event type.\n* Reducer will be registered in the store under `todos` key.\n* All previous reducers in your store will be replaced.\n\nYou are done. Now any change to `Todos` collection  will be reflected in the\nredux store.\n\nModels will be serialized before saving into the redux-tree: a result of\ncalling `toJSON` on the model + field called `__optimistic_id` which is equal\nto model's `cid`;\n\nResulting tree will look like this:\n\n```javascript\n{\n  todos: {\n    entities: [{id: 1, ...}, {id: 2, ...}],\n    by_id: {\n      1: {id: 1, ...},\n      2: {id: 2, ...}\n    }\n  }\n}\n```\n\n`entities` array is just an array of serialized models. `by_id` — default index\nwhich is created for you. It simplifies object retrieval, i.e.:\n`store.getState().todos.by_id[2]`\n\nSo, what is happening when you change `Todos`?\n\n```\nsomething (your legacy/new UI or anything really) changes Todos\n  -> Todos collection emits an event\n    -> ear catches it\n      -> ActionCreator emits an action\n        -> Reducer creates a new state based on this action\n          -> New State is stored and listeners are notified\n            -> React doing its magic\n```\n\n#### Manual Artesanal Way\n\nSometimes defaults that are provided by `syncCollections` are not enough.\n\nReasons could vary:\n* your collection could not be globally available\n* you need some custom rules when adding/removing/resetting collection\n* your collection have any dependency that should be processed too\n* etc\n\nIn all these cases you can't use `syncCollections`, but you can create your own\nears to mimic `syncCollections` behavior.\n\nAny `ear` should look something like this:\n\n```javascript\nimport { bindActionCreators } from 'redux';\n\nexport default function(collection, rawActions, dispatch) {\n  // binding action creators to the dispatch function\n  const actions = bindActionCreators(rawActions, dispatch);\n\n  actions.add(collection.models); // initial sync\n\n  // adding listeners\n  collection.on('add', actions.add);\n  collection.on('change', actions.merge);\n  collection.on('remove', actions.remove);\n  collection.on('reset', ({models}) => actions.reset(models));\n}\n```\n\nAs you can see, `ear` requires 3 attributes. `collection` and `dispatch`(this\nis just `store.dispatch`) you normally should already have, but how we can\ngenerate `rawActions`? You can use `actionFabric` that `backbone-redux`\nprovides:\n\n```javascript\nimport {actionFabric} from 'backbone-redux';\n\n// create some constants that will be used as action types\nconst constants = {\n  ADD: 'ADD_MY_MODEL',\n  REMOVE: 'REMOVE_MY_MODEL',\n  MERGE: 'MERGE_MY_MODEL',\n  RESET: 'RESET_MY_MODEL'\n};\n\n// you need some serializer to prepare models to be stored in the store.\n// This is the default one that is used in backbone-redux,\n// but you can create totally your own, just don't forget about __optimistic_id\nconst defaultSerializer = model => ({...model.toJSON(), __optimistic_id: model.cid});\n\nexport default actionFabric(constants, defaultSerializer);\n```\n\nDon't forget that `actionFabric` is just an object with a couple of methods,\nyou can extend it as you want.\n\nTime to generate a reducer:\n\n```javascript\nimport {reducerFabric} from 'backbone-redux';\n\n// the same constants, this is important\nconst constants = {\n  ADD: 'ADD_MY_MODEL',\n  REMOVE: 'REMOVE_MY_MODEL',\n  MERGE: 'MERGE_MY_MODEL',\n  RESET: 'RESET_MY_MODEL'\n};\n\n// any indexes that you want to be created for you\nconst index_map = {\n  fields: {\n    by_id: 'id'\n  },\n  relations: {\n    by_channel_id: 'channel_id'\n  }\n};\n\nexport default reducerFabric(constants, index_map);\n```\n\n\nAnd now we are ready to combine everything together:\n\n```javascript\nimport { syncCollections } from 'backbone-redux';\nimport store from './redux-store';\nimport customReducer from './reducer';\nimport customEar from './ear';\nimport customActions from './actions';\n\nexport default function() {\n  // start with syncing normal collections\n  const collectionsMap = {\n    collection_that_does_not_need_customization: someCollection\n  };\n\n  // we need to pass our prepared reducers into the store\n  // if you don't use syncCollections at all, you just need\n  // to create store normally with these reducers via\n  // combineReducers from redux\n  const extraReducers = {\n    custom_collection: customReducer\n  };\n\n  syncCollections(collectionsMap, store, extraReducers);\n\n  // now let's call the ear\n  customEar(customCollection, customActions, store.dispatch);\n}\n```\n\nDone, you have your custom ear placed and working.\n\n## Documentation\n\n### Configuration options\n\n#### collectionMap <a id=\"collection-map\"></a>\n\nA collection map is a plain object passed to `backbone-redux` functions to set\nup reducers for you.\n\nIf you don't need a custom serializer you can use:\n\n```javascript\n// keys are reducer names, and values are backbone collections\nconst collectionMap = {\n  reducer_name: collection\n}\n```\n\nIf you want, you can add change configuration by specifying `serializer` and `indexes_map` keys.\n\n```javascript\n// keys are reducer names, and values are objects defining collection and serializer\nconst collectionMap = {\n  reducer_name: {\n    collection: collection,\n    serializer: serializer,\n    indexes_map: indexes_map\n  }\n}\n```\n\n#### indexesMap <a id=\"indexes-map\"></a>\n\nWith `indexesMap` you can specify the way your entities are indexed in the tree.\n\n`fields` lets you access a *single* entity by a field (for example `id`, `email`, etc).\n\n`relation` groups entities by a field value (for example `parent_id`).\n\nExample:\n\nI have a `people` collection of models with 4 fields: `name`,\n`id`, `token`, and `org_id`. And I want to have indexes for all fields except\n`name`.\n\n```javascript\nconst jane = new Backbone.Model({id: 1, name: 'Jane', org_id: 1, token: '001'});\nconst mark = new Backbone.Model({id: 2, name: 'Mark', org_id: 2, token: '002'});\nconst sophy = new Backbone.Model({id: 3, name: 'Sophy', org_id: 1, token: '003'});\nconst people = new Backbone.Collection([jane, mark, sophy]);\n\nconst indexesMap = {\n  fields: {\n    by_id: 'id',\n    by_token: 'token'\n  },\n  relations: {\n    by_org_id: 'org_id'\n  }\n};\n\nsyncCollections({\n  people: {\n    collection: people,\n    indexes_map: indexesMap\n  }\n}, store);\n\n/**\n  store.getState().people =>\n\n  {\n    entities: [\n      {id: 1, name: 'Jane', org_id: 1, token: '001', __optimistic_id: 'c01'},\n      {id: 2, name: 'Mark', org_id: 2, token: '002', __optimistic_id: 'c02'},\n      {id: 3, name: 'Sophy', org_id: 1, token: '003', __optimistic_id: 'c03'}\n    ],\n    by_id: {\n      1: {id: 1, name: 'Jane', org_id: 1, token: '001', __optimistic_id: 'c01'},\n      2: {id: 2, name: 'Mark', org_id: 2, token: '002', __optimistic_id: 'c02'},\n      3: {id: 3, name: 'Sophy', org_id: 1, token: '003', __optimistic_id: 'c03'}\n    },\n    by_token: {\n      '001': {id: 1, name: 'Jane', org_id: 1, token: '001', __optimistic_id: 'c01'},\n      '002': {id: 2, name: 'Mark', org_id: 2, token: '002', __optimistic_id: 'c02'},\n      '003': {id: 3, name: 'Sophy', org_id: 1, token: '003', __optimistic_id: 'c03'}\n    },\n    by_org_id: {\n      1: [\n        {id: 1, name: 'Jane', org_id: 1, token: '001', __optimistic_id: 'c01'},\n        {id: 3, name: 'Sophy', org_id: 1, token: '003', __optimistic_id: 'c03'}\n      ],\n      2: [\n        {id: 2, name: 'Mark', org_id: 2, token: '002', __optimistic_id: 'c02'}\n      ]\n    }\n  }\n  */\n```\n\nAnd to remove indexes at all, just pass an empty object as `indexes_map` for `syncCollections`.\n\n#### serializer <a id=\"serializer\"></a>\n\nBy default models are stored in the tree by calling `model.toJSON` and adding\nan extra `__optimistic_id` which is the `model.cid`. You can serialize extra stuff by defining your own serializer function\n\n\n##### Arguments\n\n`model` *(Backbone.Model)*: Model to be serialized.\n\n##### Returns\n\n`serialized_model` *(Object)*: Plain object serialization of the model.\n\n\n### API Reference\n\n#### syncCollections(collectionMap, store, [extraReducers]) <a id=\"sync-collections\"></a>\n\nBuilds reducers and setups listeners in collections that dispatch actions to\nthe store. **syncCollections** will replace existing reducers in your store, but\nyou can still provide more reducers using the optional **extraReducers**\nargument.\n\n##### Arguments\n`collectionMap` *(CollectionMap)*: See [collectionMap](#collection-map).\n\n`store` *(Store)*: A Redux store.\n\n[`extraReducers`] *(Object)*: Optionally specify additional reducers in an\nobject whose values are reducer functions.  These reducers will be merged and combined\ntogether with the ones defined in the collectionMap.\n\n---\n\n#### buildReducers(collectionsMap) <a id=\"build-reducers\"></a>\n\nCreates reducers based on a\n[collectionMap](#collection-map),\nbasically calling [reducerFabric](#reducer-fabric) on each defined reducer.\n\n##### Arguments\n`collectionMap` *(CollectionMap)*: See [collectionMap](#collection-map).\n\n##### Returns\n`reducers` *(Object)*: An object whose keys are the collection names defined in\nthe input collectionMap, and values are generated reducer functions.\n\n---\n\n#### buildEars(collectionsMap, store) <a id=\"build-ears\"></a>\n\nCreates the basic action creators using [actionFabric](#action-fabric), and binds them to the\nappropriate Backbone.Collection events.\n\nWhen a collection event happens, the equivalent action will be dispatched.\n\n##### Arguments\n\n`collectionMap` *(CollectionMap)*: See [collectionMap](#collection-map).\n\n`store` *(Store)*: A Redux store.\n\n##### Arguments\n`collectionMap` *(CollectionMap)*: See [collectionMap](#collection-map).\n\n---\n\n#### actionFabric(actionTypesMap, serializer) <a id=\"action-fabric\"></a>\n\nReturns an object of action creators functions. This functions can be hooked to\nBackbone collections events `add`, `remove`, `change`, and `reset`.\n\nThe actions returned by this functions contain an `entities` field with the\nserialized models.\n\n##### Arguments\n\n`actionTypesMap` *(Object)*: Object to map from Backbone collection event to\naction constant type. Keys must be `ADD`, `REMOVE`, `MERGE` ( for the change\nevents ) and `RESET`.\n\n`serializer` *(Function)*: Model serializer function.\n\n##### Returns\n\n`actionCreators` *(Object)*: Returns an object whose keys are `add`, `remove`,\n`merge` and `reset`, and values are action creator functions.\n\n---\n\n#### reducerFabric(actionTypesMap, [indexesMap]) <a id=\"reducer-fabric\"></a>\n\n`actionTypesMap` *(Object)*: Object to map from Backbone collection event to\naction constant type. Keys must be `ADD`, `REMOVE`, `MERGE` ( for the change\nevents ) and `RESET`.\n\n[`indexesMap`] *(Object)*: Optionally define indices passing an [indexesMap](#indexes-map).\n\n---\n\n\n### Examples\n\n* [TodoMVC](https://github.com/redbooth/backbone-redux/tree/master/examples/todomvc)\n\n### Licence\nMIT\n","readmeFilename":"README.md","users":{"jlertle":true,"shakakira":true}}