{"_id":"redux-first-router","_rev":"133-3ca2d96a110f13b4091140b483021cfa","name":"redux-first-router","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","dist-tags":{"latest":"2.1.5","next":"0.0.20-next","test":"1.9.20-beta.0","rfr2":"2.0.0-beta.1"},"versions":{"1.0.0":{"name":"redux-first-router","version":"1.0.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","commit":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.3.0","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"88120dfebfd75eb1b48a96eab96d8d6199092272","_id":"redux-first-router@1.0.0","_shasum":"9c2035968ce516ab70fed9476bae516a9657d798","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"shasum":"9c2035968ce516ab70fed9476bae516a9657d798","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.0.0.tgz","integrity":"sha512-t1iPvrh6iTAQRSMoTstqE64KlTxgBbiGEMf0ccmr9UetfhqBR0SMQRESetyLhHE79d86B4iynfNQacyh+gfS6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0jvvCxYiYixzQxMYpKTFrxf6FMXaIZCVKreIvrqVpRQIgU9k5AN1jhlf9N8pdcEvgnWorL8XcDx9Xctx1USCeP9k="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/redux-first-router-1.0.0.tgz_1493704292759_0.4447215208783746"},"directories":{}},"1.1.0":{"name":"redux-first-router","version":"1.1.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","commit":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.3.0","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"5cb3bad0fd5a9b27edc7c2263b0c591dea6c0b6e","_id":"redux-first-router@1.1.0","_shasum":"633bff0127f8396beb092a08386db3dc84a26e97","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"shasum":"633bff0127f8396beb092a08386db3dc84a26e97","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.1.0.tgz","integrity":"sha512-NjbLmCbCOyKsAVE74fdA5h/O2vdu3MNKx21DDrZm4ZUi9J/M7Ipma7Xpg9yM6iLfPClhechzynxeR/XXPz5wWg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvFJcmo1rSWsllCWYoEbh8A0J2uw60p84jPitySvf/DAIhAMGjEwga11LwUPlU6dDYRKj8I2CJfqzZxfNB3lP9WHJT"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/redux-first-router-1.1.0.tgz_1493714924391_0.28046853584237397"},"directories":{}},"1.1.1":{"name":"redux-first-router","version":"1.1.1","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","commit":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.3.0","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"8f848fe871067581dcfa8254d00ca559177c58c6","_id":"redux-first-router@1.1.1","_shasum":"45aa7f6ea2fc816e72433661356815fe2f361f6a","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"shasum":"45aa7f6ea2fc816e72433661356815fe2f361f6a","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.1.1.tgz","integrity":"sha512-TUb+OsWxs9ZVa8dwPSTG0+if/+n6WPcz25DXGAh2f+YUp1h6bWSQo6vjXuAiS9zBVfL9GjSdkJ0Yoy+0q1xvVw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3WxONlqtB1JM1J/3SK1HqHG3+rNqtCj1mnUIafFfJPAIhAM0nt9j6CU9ziiZ1rw8uyFVHkOwRaW3NiSYJ3Nr6RlpM"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/redux-first-router-1.1.1.tgz_1493769729583_0.9878444669302553"},"directories":{}},"1.1.2":{"name":"redux-first-router","version":"1.1.2","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","commit":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.3.0","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"0be6f9cf9e010f46c0680c48145c02367fca3bc7","_id":"redux-first-router@1.1.2","_shasum":"4615c1bc45f2d17c8437e3b389b8c019c54e5db9","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"shasum":"4615c1bc45f2d17c8437e3b389b8c019c54e5db9","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.1.2.tgz","integrity":"sha512-kHyrEsIyl3HfhmO8ND7EtdRUT1/h9OYcJJzcbJeuq3MtSUY3sb7S1QqgF21cidBVQw1+SY5sozLtdnvMdIEt5A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnQxIbkMQfvvG1PL+U1CoExEAQMr4VVrF4lYggbz8HkgIgGs0nwgxK2xwmbxp45nw2JbRGY0gg53e+EZERrEf5+4g="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/redux-first-router-1.1.2.tgz_1493770151026_0.7876367138233036"},"directories":{}},"1.1.3":{"name":"redux-first-router","version":"1.1.3","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","commit":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"01954ace31c50e188c02db277ece1933ec5089c1","_id":"redux-first-router@1.1.3","_shasum":"cfdae65880fb8659794e1c558ccf334a25aa2933","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.10.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"shasum":"cfdae65880fb8659794e1c558ccf334a25aa2933","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.1.3.tgz","integrity":"sha512-zxU3CUjvNISSD6OA371HgCV19JwGGBEOVKoTXOGxQoN4u1Ivp1Z/L0ShRt1TvPCDXSrS1QAe2qyMQyykmaGHog==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBshtPyk/Ob28ksLGbnvKn81j3sHBKm6xuMcIujctaFWAiBnLKy23AJTjtQxk/LVV6DdvvPv5ZhOzbydKmxvIfJPcA=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/redux-first-router-1.1.3.tgz_1493897492557_0.02235115016810596"},"directories":{}},"1.2.0":{"name":"redux-first-router","version":"1.2.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"src/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","commit":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"d0f305a779fee7bc108908d52a0c88e263f067a1","_id":"redux-first-router@1.2.0","_shasum":"9cb197114644dd52ce27de39fab59ef595110cdc","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.10.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"shasum":"9cb197114644dd52ce27de39fab59ef595110cdc","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.2.0.tgz","integrity":"sha512-hCywObLpMmKQAsTQaKcJnfOR7T+ThcVamX1MJu7O5OrJw0b7BFPWm7dJ38lYSk8NSewbrCLLMnlUAAX7s+6GIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdiOvam7TaShLCCVGKUMsm++Tcc7WsCS85Fw8Mk2S99AIgTepEkIcSaZk74hD2jeemulTyAgkMTMGFtWPAEIZC1+0="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/redux-first-router-1.2.0.tgz_1494137632292_0.8405494200997055"},"directories":{}},"1.3.0":{"name":"redux-first-router","version":"1.3.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"src/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","commit":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"56166a80cb562ffc1066f25e7f88a2d6d3ecc32a","_id":"redux-first-router@1.3.0","_shasum":"e1ec61650ff61631902d599de1eb0897360d0e23","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.10.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"shasum":"e1ec61650ff61631902d599de1eb0897360d0e23","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.3.0.tgz","integrity":"sha512-GJbOka67V1bKainpInNFZg2GdaS1F/Nw8oFzLIlxGssyWQbaVLBzNBYvSSlCLDTLm4L+T/qOdifPcSRrh7IObg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA38ZifHSLWwgTbVREARna+2c6F2hBDLrZXxUQz3+ktmAiEAu8qYLfW8AMUqX0sWt3cN/U3cMFB6zDx7tb7VNRBz+c0="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/redux-first-router-1.3.0.tgz_1494147266829_0.09018104476854205"},"directories":{}},"1.3.1":{"name":"redux-first-router","version":"1.3.1","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","commit":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"eb62042e599940460de9ac4b1648ef8e4391cf45","_id":"redux-first-router@1.3.1","_shasum":"63242b640cc7d90d3b6c3d6ebdde7036710c5b03","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.10.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"shasum":"63242b640cc7d90d3b6c3d6ebdde7036710c5b03","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.3.1.tgz","integrity":"sha512-Gpd4u+FCEmKtZ3Pk+TlNEfwr8C7yqP1OwaISSPgvOdRLrF5cYZvaNmn59KeF/u6AkCnpmcHQ0mDHuhpBaTsADw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG5603Yq4Pi+tPGkBb9aUCejm5gfDj7RZy2nKlmnv79GAiEArgIJ1czb1bCktXXPuxWxH5mUawJshJu082/+xyip6A0="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/redux-first-router-1.3.1.tgz_1494175692360_0.3833667258732021"},"directories":{}},"1.3.2":{"name":"redux-first-router","version":"1.3.2","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","commit":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"c1b13671c95191f994d9bb4dba55d06929cd763d","_id":"redux-first-router@1.3.2","_shasum":"a13d0ce7b0dc31538afa75bb5f905118803280a9","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.10.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"shasum":"a13d0ce7b0dc31538afa75bb5f905118803280a9","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.3.2.tgz","integrity":"sha512-HT7S/XMoXMkhiN5GeBcp/S6pL4InlnHp6QemFnXc6r+8SVLqW0/G8Bb6wBhi7RLbNm+D78VALonh+pvHHoa03Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCo5s7rBf/oR3PRej0jQM4c4Y2nfNOo5rFiQzuvvxOvKQIgcrb1qI/YrtyQcOn08P+p0NJZcsCpgBOljdF1J2tehgg="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/redux-first-router-1.3.2.tgz_1494253927920_0.5441795974038541"},"directories":{}},"1.3.3":{"name":"redux-first-router","version":"1.3.3","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"src/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","commit":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"8e816e930527446c6b891b6ee0c80b60fc657dc5","_id":"redux-first-router@1.3.3","_shasum":"60ed600e87e2fcd0b0c9a815c5b72991f0875937","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.10.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"shasum":"60ed600e87e2fcd0b0c9a815c5b72991f0875937","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.3.3.tgz","integrity":"sha512-xQUfTW6tAoNhSXh6qldJaNF94bQe7cITrqocQzjZzjd/wMX6z2zOgsLDE9anzSNFJjv7IKh6whd/EXvxdMaaBQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGl2a/2x0fimXgyXedNazLGZQfK/uUrxI+CJINkODuwSAiBYMLFP2mRaJUEHIu38sRzClqTixvICnLpT0o2lqgisnA=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/redux-first-router-1.3.3.tgz_1494261540309_0.3607506302651018"},"directories":{}},"1.4.0":{"name":"redux-first-router","version":"1.4.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"src/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"edad20c402d058a00c1ee2b7f43b92e32a168916","_id":"redux-first-router@1.4.0","_npmVersion":"5.0.3","_nodeVersion":"8.1.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-8R3KXYDM0qmOjVG13G3zkz+yetFglxdQozxpKy8zW/NjQ01Ai2ttV052frsGi0Olzy/0o1qNT7qeovNI9csJfA==","shasum":"e058143489bbb1779b3e4a78dc1791cbac3a601f","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBZrF/bV7UfG92czP1wxoHmPxVp3BgVvKZQdg6AD7YpzAiEAggto70Jlam8f+nEVjDrI+Ft67ezUiaSljKtgPnBEBuo="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.0.tgz_1497466928239_0.5005130737554282"},"directories":{}},"1.4.1":{"name":"redux-first-router","version":"1.4.1","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"4e5fb49c057390d8f8ba25263b71fc373c7778aa","_id":"redux-first-router@1.4.1","_npmVersion":"5.0.3","_nodeVersion":"8.1.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-0Wd0BJV4Kw9SDZ3mnRLNYgds+zL7BFJ/LQwJKFpRfJbica1I3mRcreRxECDi4H4Nw4D48irBCZjuR24og9iLxA==","shasum":"a930f9c27d1065100bb6e4d15f7eb986e8e870bb","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCM5k/1Cm2nf24erVYtSD9AtPGnMScr0E927bioSUME7AIhAPHFWNYj597miZVxYFz54qPp9s8WLDd68lWrEDonqKoM"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.1.tgz_1497467743502_0.5873178159818053"},"directories":{}},"1.4.2":{"name":"redux-first-router","version":"1.4.2","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"cef294287babc506ea7d7d85c4a264eff4cecbab","_id":"redux-first-router@1.4.2","_npmVersion":"5.0.3","_nodeVersion":"8.1.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-oMKNGFjU1oqQp7JJEOgCMsntLtvyN/z2rdjO0pP8ryj/lvghgDC7lU2B7qlKXMpImD3WQyL5sK6CfuOtjhGs1w==","shasum":"f625bc73b1974cef7bdd61b957ba7e0104d24605","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDCpptCmHdSvh6ErbuKBBxUHgWiAZEJsKTVwTRWCyTmgIgRDqEcDAFvPWIQn1XYyfBbn600y7NttZ/OM5drFcGfik="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.2.tgz_1497469795390_0.5661163793411106"},"directories":{}},"1.4.3":{"name":"redux-first-router","version":"1.4.3","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"29e1c52b5ab6e780a180490dd74a9fe5db81940b","_id":"redux-first-router@1.4.3","_npmVersion":"5.0.3","_nodeVersion":"8.1.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-0G1+y1HJKj7kxTcO8IZn8BTjmDtxzgDnaf1StMKu899Xib8Pqi1E57KY1jERGp/g3PI14K8XN9bBY+XZVEqUfQ==","shasum":"b41be5c341d0f4914cfe25926ad795bcf53a8ef6","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpZ2GIV5TFo02D2T22Xdugl+wtkRteZ/ds8KwrKRTVKwIgALG0GsDGaHIa+i57mbR18xkepJfrKHnkqRbBtUwggRs="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.3.tgz_1497472340055_0.9496671895030886"},"directories":{}},"1.4.4":{"name":"redux-first-router","version":"1.4.4","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"3a07712acd7a4ad1b732c5e640ece9736a83fdbc","_id":"redux-first-router@1.4.4","_npmVersion":"5.0.3","_nodeVersion":"8.1.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-NieUlO3TmwRFIDmHha440N/V/JuNDBMuRpL0QZFc9m5Ayy4rpSdba0vI0sJh3bewqUE+GlgHRvUmzZ6B3mUkYw==","shasum":"36a1cf8b4c14bdebc8edb0405cd868a8a9ce4af3","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpYEA/URMjLWYVkW6ZKJbae2CH6hjbZBBQAdTIeDkawgIhAOCXyJdowi6GHUB+Fqjuqmk+2WWvJsfJVYJOWBIJuv44"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.4.tgz_1497472986880_0.162360800197348"},"directories":{}},"1.4.5":{"name":"redux-first-router","version":"1.4.5","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"0a6e831df12a211638758e03c45a44531c296d7f","_id":"redux-first-router@1.4.5","_npmVersion":"5.0.3","_nodeVersion":"8.1.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-0Vv+qJTnkcR/RO5Y6LRq+StTwE6DhXPNajA0wji9yfmNnhHftYhz1gIyYoR4lOqmoXZNRtH/QSqloGwlcWuIBA==","shasum":"3e32f54d8b359af039ff28ac62b8b27c5db7cadf","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.5.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA77BekhaIrXOBE5NAlirGS1BYpN6dh0uqRLw7vtligSAiEAzp9BsRPNXoIhIzIlAOvAQaWBorznH++iDob4QNbP7As="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.5.tgz_1497473155144_0.8454965087585151"},"directories":{}},"1.4.6":{"name":"redux-first-router","version":"1.4.6","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"a96a1fac38a5591b89a45576e82fd88d4b2681be","_id":"redux-first-router@1.4.6","_npmVersion":"5.0.3","_nodeVersion":"8.1.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-uVEGiiFZBwPXSZmwm6GN4K1t6dZ5vNItORtpgL7KhyAR3d73jkPWCW8T5H3OkclpaS+LMGLkC07/nh4MDIlrZA==","shasum":"eb85a0380cd6f212200008820080c963587f0e7d","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.6.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHeCoGO4BCbl8F9VR4/RewJPRRFJouFMkV5IV48vAry6AiAUp9p+ysIMadrhEKVGEhscNddw+Qe1i5jmi9f/tWKedQ=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.6.tgz_1497475236468_0.6194200140889734"},"directories":{}},"1.4.7":{"name":"redux-first-router","version":"1.4.7","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"3bebe1bab869c65b9713f47ec0c05b1adb54a953","_id":"redux-first-router@1.4.7","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-PH36VchAYPVhgBaSXX/1w2pERkMBXdZTKzQf68qjJ/QCWX35XRJqs0i7Zv/qB387jdhwkEzihSENMR/UkrCTRw==","shasum":"558f1f221c1ce237ef25187aa9d8996716eb6a0a","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.7.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE3aG5SHwh/c5NdlVOGfSDUycA765M1L9y7x5dvyqGgYAiBOzi51CnNxi7/06KrVE+P5z1+IErOY/S5VU7oEAn30YA=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.7.tgz_1497594077395_0.3398769006598741"},"directories":{}},"1.4.8":{"name":"redux-first-router","version":"1.4.8","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"a00574290a4f651e96933da1d857ef3b5c388cef","_id":"redux-first-router@1.4.8","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-MSlx/F8ElcFQwg/+q6CfLmmpx701boTY49CiVmuYer42D/bHqHgatinUJ+dGn8/fiq9q+B5S1hihZc8qoyk/mw==","shasum":"1e5e4b13da637099cf2a8fc446b26b297bc171e9","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.8.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEKiXqn6obgO7AKkMMfSyhm3KccrjEjToUPNps27J/a2AiAq8XJTBFIkxCq4qDYnx+M0urhr+5yjW1fFJsqOlj8Dbg=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.8.tgz_1497594288846_0.8619665254373103"},"directories":{}},"1.4.9":{"name":"redux-first-router","version":"1.4.9","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","semantic-release":"^6.3.2","travis-github-status":"^1.4.0","redux":"^3.6.0","rimraf":"^2.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x","react-redux":"^5.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"ae2116246b557962bc54fe2dee4a959540626823","_id":"redux-first-router@1.4.9","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-Dxfnuu1qBZx6xUsfBQTuojkKSKxsVadKVnjsUcmn0tj/JWj0y7d2Im4AojGn3Vom+CBxpCWNjRkmAmXJstrwkQ==","shasum":"86c23c4eb426e29f3d1593b6c46caa3f19e6e3bb","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.9.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAUfDQluWOQlcEC2uUTdxG0oUfrCe0jjeONplpbPIcoIAiB36WPTz4GklsRLP+ZDrQRwEZK1SBZPN5NtKK0xJ6TS7g=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.9.tgz_1497750968716_0.318950634682551"},"directories":{}},"1.4.10":{"name":"redux-first-router","version":"1.4.10","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.4.2","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"b89142b90a89d14760dc1ae20334b0c929a3994d","_id":"redux-first-router@1.4.10","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-N+DI15n43Ac5YwYu3n1V28Tb/AMTYfdSIAmubtiS4DdfJw17ranD19hwtPw9oWaazbFVlzw/a7apw+OhXrvhtg==","shasum":"938e7d1223a194440de255381e5a454837768963","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.10.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICMusqh2v+Usar6otLDuQ9P42XwIN/nQXlLjtTkHb40qAiBZGE7950cBDRc3GGxWv+3V8WlZgbdbFfWou0anX//tuw=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.10.tgz_1497752874220_0.8655105929356068"},"directories":{}},"1.4.11":{"name":"redux-first-router","version":"1.4.11","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.4.2","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"63e7440d0c9f3e892d1cc988e6cc67d4a266c501","_id":"redux-first-router@1.4.11","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-L6Uvngm3C8a65BebTsN63GkuLujfbT2Y9HpJ4NbOgMkWIHD3lLBhI/N+9eDccpO2tXBebKGX4Xz7peUK7gsYPQ==","shasum":"7778bca4b6f0214cadaaaad3f235f158187694b6","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.11.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDvycr928Hrf9svzPMxQggQcuC5Y+ITyvFdsNsc3YYdSAiBemOCWIhnntZWQMtOod2pLTRC9M0tRl8MywuqvfaAiXg=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.11.tgz_1497760011814_0.04639752279035747"},"directories":{}},"1.4.12":{"name":"redux-first-router","version":"1.4.12","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.4.2","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"49e72dace5d46e8b3c72b53ba9efb8bf318180cc","_id":"redux-first-router@1.4.12","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-6rXPCjoUbNZbwoVH5Xt9oOcBzCgFMdXxHLSr4NgmkysX7k8XSHdHBBTkgLhsqxLlpBpm7YiM8DXv3RUaAxa6Yg==","shasum":"4c24cfa55982b656fa089d032d68843c9d1ccb53","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.12.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRdZYCzsfUK+Wz1mktdM6jVPcGvyhoaNmZdY1KqTVqSgIgbOzuDOWiCTGYiEWJg4/VD1QHF1BRTg9AV2Nls6S2zcM="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.12.tgz_1497760540777_0.5941499387845397"},"directories":{}},"1.4.13":{"name":"redux-first-router","version":"1.4.13","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.4.2","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"b170300e48020399e985a727bbe91e0e4391e4af","_id":"redux-first-router@1.4.13","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-VvN+bOzRtcP+mfui4qiNi/1ZB/d9rm+mwXKyO6v2ic8xwQselWvJS0DJLk7SffMSDAzdUpyD/seSVUvfPYjPiQ==","shasum":"1a9553861f5a70948180041cfb348c28085a3abf","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.13.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIIEHJy5ELkGBFuC57zTCvMg9kS7i3FO84Qk9L/LhM6QIhAOqTJ2Yt+4iXX+uC0ypC1GUrQTUwl8dxDVRFbNda63pf"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.13.tgz_1497761061323_0.35703562828712165"},"directories":{}},"1.4.14":{"name":"redux-first-router","version":"1.4.14","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.3","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"a26a76e07c44a5e266e1ec254066a7e0fe39a20b","_id":"redux-first-router@1.4.14","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-lvbrCmoqO1v3jt9OPaUtkAVZZ8NLPxF4PLPsQlNIjKDqjBgzFJwBebEcitS51RzsdD8aOajEZZCipSxYyh0kYw==","shasum":"e091ac7f475538b19e14a47479279d66d470f7f5","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.14.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEP8l6OtvpsfxaFjjAGmwd6+zPv8cmlsojgxX3Q4CaIsAiEArkPd2yxEcpf4ykdN7P+bxiqEUFx04wMMUSgMXz7aq94="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.14.tgz_1497778926233_0.9851801595650613"},"directories":{}},"1.4.15":{"name":"redux-first-router","version":"1.4.15","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"a01a5844366de872273f76588d2c89acc367391c","_id":"redux-first-router@1.4.15","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-4LljskQvPVz8t2C8LdQYR5vb0CFfMBCBU7Lck3nAwVnenqOQJE0MJ6HfKBHY+3rLD9iLnOxtyusNgl6uNJBucw==","shasum":"de1daa6db965788f71047ba1bce3f393379065fa","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.15.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4Gp+bQYLy2n8xZq+tj/YVbcLyK73BkDzXVU35kaLnTgIhAJz4uyb0FiSjOeBD7MrGBOgX93MlYKk5xkCPPyxF4Zd7"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.15.tgz_1497781318289_0.9378709034062922"},"directories":{}},"1.4.16":{"name":"redux-first-router","version":"1.4.16","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"361ee4b1c839f8777630f4ec4f7260dfd4c9539f","_id":"redux-first-router@1.4.16","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-PI8KijqezycwnOUP0oXSjMcuQ0wuybSWPvgt0jTMCn+GE1dbZ0Ap2fDoHJRswmy5XF+kjsmTaB2XAvao9VVOdQ==","shasum":"f11104acd88fb07c66c7452de965c72a898476f3","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.16.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0MRGVQSAEu3MaQ+w90uP5LNuSAM54IYFpIX+q7v9cRAIgFqsIbUkdxNqkpt0KxenrH8x2E7XULzZtg4/nvF6qdmg="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.16.tgz_1498004383733_0.7355901175178587"},"directories":{}},"1.4.17":{"name":"redux-first-router","version":"1.4.17","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"e67ba6a8c69cc6584ea6d4f126ad7cabf832c51b","_id":"redux-first-router@1.4.17","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-SO5kgCf849VZX1Q5dEAlyH08hP7WPuMxeOSW5DmMaXpW/dB/mrQs++TZA68LvbbahykesKvZjJCdz/v3IG9zLw==","shasum":"1314b89ead11de317a711189fa4eb29b8c6af9d4","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.17.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGYmfgcOFUlSjQz30sghZVrZ84C3VjfG7GGOkqfHKyrcAiEA/y777R7jkbcrKJmTNb4EyDb3GRjtI3s4CYdhVA4pWKY="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.17.tgz_1498379308870_0.7781460834667087"},"directories":{}},"1.4.18":{"name":"redux-first-router","version":"1.4.18","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"a30eb581abf901265e304a48d5cf6035b2b7a3ee","_id":"redux-first-router@1.4.18","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-ARq0e6rRgVebdZ4Rv6E/vAVEWI/WZLRT6QIjKLHm1ZAT6yKOoP2o3BAdSgZH2G52YhEZANQq1mR/JtIX70EHUQ==","shasum":"5b26f219008a6a95665542ebcc2bd65e0591f574","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.18.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIfcRO7t+wxSrUsBVtHYLetvh6i0xjAfoVBzUlJFyNXgIgB3JVLnXmWCPuEZ71kTtwcQkc1XSYPAKr7eXiD/dpNl4="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.18.tgz_1498388191913_0.35649214731529355"},"directories":{}},"1.4.19":{"name":"redux-first-router","version":"1.4.19","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"0cf28ac064a56b7ffb91a4f8bca3da81728b37a3","_id":"redux-first-router@1.4.19","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-qifZZdr3Woar0Z6pHXS/s/K09Fb0HPJJYc/8fcekwiYDWwZdRjp8yWz1b000qfJE7A5RLRkVOoy0md1wyIKpXQ==","shasum":"99a945072f6f5a28634ff4614f6bfbf546870e3d","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.19.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvAmTQL0pjjjpp6nYN8bgh5TFKAW0Kh101Ett/dMb6uQIhAKvHaOoOZKU+YoJuYVinLuoeUq0hgcYfNYHwHJf2+OPR"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.19.tgz_1498460966252_0.9287380373571068"},"directories":{}},"1.4.20":{"name":"redux-first-router","version":"1.4.20","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"919d91390f970b0a5a98492223938293449e011e","_id":"redux-first-router@1.4.20","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-39+uJ/BfxwHARCM3KFace6q0lAZzWn/QgtLxRehhLixrPQHQqGTpjHtnkbYf2DRGVVSfur3T/TMUZsvLpms8Kg==","shasum":"07c1d6818ce720155ee0077b2bbebd16881a7f66","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.4.20.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCw/xIe9Q09IhXv9LwF9BpoYTm9JMTldbq0fForllIFlgIgBTqsAOY1mee6B/z5Ie9Z2ondaZQHZm6dYyoX9dVYG5M="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.4.20.tgz_1498468665126_0.9224733656737953"},"directories":{}},"1.5.0":{"name":"redux-first-router","version":"1.5.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"src/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"0d23436895689ad8939ff681b014f087b03775f4","_id":"redux-first-router@1.5.0","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-UJwItw4ilJpOH0RbRAYq42E90Z4ZAcRyqSXjS9pNic7rh8+diIvMWE8FSA9w3wP+qic/Ybskx+syEE4VvYJAiQ==","shasum":"73ef78eeaf43bb6fe119dcaba9d3389116fcb695","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.5.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGq/iNWlK3fwxglAeXKM2ELbJU/6gvauHdaP1VfYthKpAiEAwiNI1lkMNCVJCzt9MfPB2P9lrgTdU2RFQ83j5A1dyW4="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.5.0.tgz_1498553823584_0.45074863778427243"},"directories":{}},"1.5.1":{"name":"redux-first-router","version":"1.5.1","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"b75d7fd07a8b18be6d84ae3f1c69db29e4c047cd","_id":"redux-first-router@1.5.1","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-054HMg5I2BNlE2xSfIsMjIgj1QTzSQTavkldRnKZaTI5Xk8oqGIx/Xpu3oUr4TaULLY6hXLCMznzLY4H0pI6hQ==","shasum":"4f5f1c4b7b4d71711c84446bbc09ae88ee07d0da","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.5.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaR1+1u4K0S/tqO47NaF6utrIzVWpaLOza5RN8r7w2LQIgWH/4M4b6TaBopIHRVny9mnaXdqMEEqxlKTTXwjx6Zx0="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.5.1.tgz_1498554291778_0.9294747235253453"},"directories":{}},"1.6.0":{"name":"redux-first-router","version":"1.6.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"1fcfbba208161c450e0d9ddcda1b9d07d51741b7","_id":"redux-first-router@1.6.0","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-jXXvreUqirAENujDSUgXCmHiq8w6VXq9pQ7A5BVmDPLWPp7XclAGwvKIxVWL4NFeAi3S8cxoDWC/SYM1IGep5A==","shasum":"e69c75c52e72136ddd9f9ec95361c20a76dec64d","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.6.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9O6B7UgoShOpBerp2XQD58NrbMBziZqyz5PdqoamnOwIhAMnqdZ8qTQXD8McHlpzm1lcFG1eBmFHTbi/mubTGFpRU"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.6.0.tgz_1498633284196_0.7822480842005461"},"directories":{}},"1.6.1":{"name":"redux-first-router","version":"1.6.1","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"a1ab33a0963205a4d6ae8970858b25cb24f1bd76","_id":"redux-first-router@1.6.1","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-elpyEZUS7Be3p+1jKZaIFZcMXvaLMqQ1jUzkphHbTk2iqqDaG5QpRGVMxXl/8CPDSDTRcBgRxjJK08o6eJPnJg==","shasum":"6d2c726419ed8c5a9bd289a67e78b71b101100ef","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.6.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrEKHwXkOP17Ke+3mqSEb8Zu5mpMeEzLJe6GBpIfxgbgIhALgmgGujz/0T/TnuYc1v/7dcxHyEWn2e4etoGyhcPQhK"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.6.1.tgz_1498633417146_0.5297939616721123"},"directories":{}},"1.7.0":{"name":"redux-first-router","version":"1.7.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"4613d1a1fcc9a161b951acbd66c0cec0e6cf3f8d","_id":"redux-first-router@1.7.0","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-nSzWxwRpEz32okA+3cmOky3vwhQz/nBM+cuxaruCKT9oALLdoEkaEcBaPTNQDNEFS0z0w11YOm2+pbrnWMs/wg==","shasum":"1b3d7b1e42cfb67570f5f2cc5593200e568dc08d","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.7.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQuWDcyKWEFIFppQ8+F1XNCIrbBQ1KXddNa5Y+qL+nIwIgYVg7geS3ww3zo8neT0BciH9zxmWTUb8vVNinLr5NHug="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.7.0.tgz_1498635377735_0.3516727003734559"},"directories":{}},"1.7.1":{"name":"redux-first-router","version":"1.7.1","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"0ee12affcbeaad7944588eb33cc7e11f9ef9ea90","_id":"redux-first-router@1.7.1","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-ds04BHwI3xTQLNsgC7i/Ykh8SHxg81hmET80d2nfpZ9X6SqKPAEgzgF07fKckqWCuIAqAVFlHcu1RuqHYADQWQ==","shasum":"26e286298b62e92a029d16817ed518718ba844ec","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.7.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDIR7fgDu7MYyQaK9IbsiXtQzJlu7AhK7CzIuwqr7g5jAiEAgNavh3++AX1vWIbbVR/pPSB3VxWLlUS8K6mGztFqogc="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.7.1.tgz_1498639792402_0.6816893694922328"},"directories":{}},"1.7.2":{"name":"redux-first-router","version":"1.7.2","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.45.0","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"e105b4587aaa702fa3835ff4369e281b2cf6cd50","_id":"redux-first-router@1.7.2","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-PVlgxR9mFnjQe63cBcaM49ZO/3796gRJYtOKM7IAhv0r+CJYIA2j245Ojsjyn2Z11RHpWpNbpkmxDCW3UoDdIQ==","shasum":"dde8995f092c1c7d660e413f5fe6935630e7cd5e","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.7.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEaPhf/Rf5Z34WxFfUXWDmfuztZYDs+2rFwOqCFmLnJgAiAyWNgoWd9w05vOGBagX6cMfkzfUdZEyWprOlaKxdFJ1w=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.7.2.tgz_1498990719779_0.2098793110344559"},"directories":{}},"1.7.3":{"name":"redux-first-router","version":"1.7.3","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"689a9eb31d24e2bb8f3f2f2849335e2b2d5e0677","_id":"redux-first-router@1.7.3","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-oO5kQC3hk99D5gAiBP743+hKopDY38wawtHwCbVzO7gvopHKbSjY5wFX/lMrE3Cuw/YCSbguX4DWgJo08J5T4g==","shasum":"260adcbed49b2b34ad370ef8857ea662ca9ea272","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.7.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBUT2xSUI6lSk7LWpRdfxYUkuCn1Eu9HSL5WTTxhxa/FAiBG7Nd8PCvOOkVBMcltVQnkF8K9V2fLz6LtO6jho45P2Q=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.7.3.tgz_1498991711472_0.5569924723822623"},"directories":{}},"1.7.4":{"name":"redux-first-router","version":"1.7.4","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"2bc356a93799acbd9d4038da5ce87e5ba85b7a94","_id":"redux-first-router@1.7.4","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-ukGo8vlnQFo4eviebYDxtj4bNdwuYrl3Bh81xquxVhj6WpBpg0BJv3GC9tJi4RXG5iu5xAVYYcxyzbTlfdnQVw==","shasum":"79169512b35d9bc46b72f5cbd95b3894f35675a0","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.7.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIYcfba+RYxzHDRdf7J0tDxW3N74mrMZuDlLfVOuYsvQIhAJQm3YbPs/XMoIX9ayF6Pi/bi8opScZjgPjFY22U7r0H"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.7.4.tgz_1499138217987_0.6830259363632649"},"directories":{}},"1.7.5":{"name":"redux-first-router","version":"1.7.5","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"c2060ee0347eb453f684fe423374650f68892cc7","_id":"redux-first-router@1.7.5","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-3wmvoyhAekaF4o4gI9t4IhGm+byoAJVxnd5C5hNv8c/b1N+6Rmmf37bEuXlFwyUzdetWH47qjarsiQ+7EkQRYA==","shasum":"c3830f9f707092971968108e18d616df1fadfd6d","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.7.5.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF+/7OFLTZw6FrNU5WhQYEuoHCZETXS/VNsN7o6/DZlqAiAqkDrJFF7Kzs1Rr9f/jcwB77ugauOcwFiDHV9ZIVOz8Q=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.7.5.tgz_1499746306511_0.7888934626244009"},"directories":{}},"1.7.6":{"name":"redux-first-router","version":"1.7.6","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"26b95be1b18ccbb3f428ea570cae91f87c29f158","_id":"redux-first-router@1.7.6","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-0wvPezIaFOm3JCcrJzC5XZuSkRYq+K6vjHsZvLmwyePn7yWgTgUypwHBBHPIu265SkrCuXbZFNJz9KTZ5GsBQA==","shasum":"d5854601cbedfd63651ad7ce13da10355da18367","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.7.6.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBwM8mkjWntpzrYMJUqu2pxEabC3CX45KOzh7BmqtfHPAiB53b5GhxO7ylr3QZ/qA/rD2fvX2CVu11Fa9SK7/tE7/w=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.7.6.tgz_1499746748199_0.8755459887906909"},"directories":{}},"1.8.0":{"name":"redux-first-router","version":"1.8.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"764542403c80191949077b8e152d8f78011916ae","_id":"redux-first-router@1.8.0","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-B5XMrMnbJ5XexGySYeqJ9G/ZzdEw5Dt+1ObjtOJB82YHd+y/wCF6NADJ3BDu++90jPmNL8t+RYX2KYN2xCAsWg==","shasum":"2a8a4bfb92045b37c1a3c06bd4bfe3fb0e45baa4","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.8.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOXdLM2y6azEo9piIi7RnQm8pUzsp2eFIroHepyLbfVwIhAOFxpj18pyIWWaAKe+6ZBM/zoNrzFrCQTneTxm9gz5TY"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.8.0.tgz_1499756428126_0.1879518839996308"},"directories":{}},"1.8.1":{"name":"redux-first-router","version":"1.8.1","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"f95c4d089214d290e3838d7be34920e7bd12188b","_id":"redux-first-router@1.8.1","_npmVersion":"5.0.3","_nodeVersion":"8.1.4","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-PRPramWmKR2Noee/NgPRhUHRViZ0hRIXy0BlMXf1L3l+qXcJ78BBLJYFhbXX0aCNSgrFvDVNruFYwNpI8GBUoA==","shasum":"e3a04a014d7daa97578de7e32c10500caa4a319f","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.8.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH94rz0MTDmdmMo1I+C2jqq1SOMcgtdYhLUe8Po6hNHkAiEAuHCSeFRsetGxOCBfuTmiIXMXwE+0NceyGnh1mq08MzA="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.8.1.tgz_1499889688394_0.2139904221985489"},"directories":{}},"1.8.2":{"name":"redux-first-router","version":"1.8.2","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"df01779461d31cd2f532b975f36ecfae9ebbb231","_id":"redux-first-router@1.8.2","_npmVersion":"5.0.3","_nodeVersion":"8.1.4","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-e3vutbDopTtaayu0DTIvTHZHpWTf068WyMgEdcEnHuiKeXHTn+RkMvAOsak9h60TRT0jK1MqrTSnNTb3qqKAiw==","shasum":"0c2d470372b11c449cfec018b86492dc1966500e","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.8.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCIBL2G8oOcvQwGhDe0DGIx5GXBY7IkZBGHp/RCWz7Q6AGAh8s9OrO90a910fSwMSQ27oFwG2lTh8aOmT9Ukg+prqa"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.8.2.tgz_1499889727248_0.21125758904963732"},"directories":{}},"1.8.3":{"name":"redux-first-router","version":"1.8.3","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"8f07268ef8760990bfc3d765e1c87bb02560cc6c","_id":"redux-first-router@1.8.3","_npmVersion":"5.0.3","_nodeVersion":"8.1.4","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-ia+Ou3C10M/7m/9uckK0xK1VdG6khRPBt0+6h4BIU2XaduZVrX4D9Ls3VLQdZJ4Ma8PWOuCoPc7MiXWzgmcRGg==","shasum":"d11b567f7130a3235023c09c6a63f23d9dcc7b8b","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.8.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFc4YbzRIcqwOYwuysNqn06qqzg6ynYudaeGlvCqWGUzAiATqWvs/iFMkX3VPPa9BSyd5lIiOLgj2FftV5GG4D8Kew=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.8.3.tgz_1499890055843_0.9156425460241735"},"directories":{}},"1.8.4":{"name":"redux-first-router","version":"1.8.4","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"85d04db72ad29d4542682d489cf883f4891c8bcf","_id":"redux-first-router@1.8.4","_npmVersion":"5.0.3","_nodeVersion":"8.1.4","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-8btmF6ggwOACoMlpCO3J201eeGVITYmPLXnVzt7umyNHmpcsUKVE9Hllh3W04Cv33jRvYd1Ozms/6gk2fG1FWQ==","shasum":"1c2f65573722473dae2973f8ae6112498c56623a","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.8.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFertAfGj8RVc5tejXFGE7JbWT7DBFahxcUMI7URNJ1/AiEA9dzTBbLIafkBAOYhVoGwQF2gkPihFfN+fFy1zh17N3E="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.8.4.tgz_1499890198716_0.39280843338929117"},"directories":{}},"1.8.5":{"name":"redux-first-router","version":"1.8.5","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"52d846f11cef07c846401d53cc77e9b7b5e7cfde","_id":"redux-first-router@1.8.5","_npmVersion":"5.0.3","_nodeVersion":"8.1.4","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-kIqOaZ5gT902gixdCFfw0YSSF8/ARM+ij/0zzIH16jlbcsni9TvP88zEt/hRXX+6zoPTJDBOYhJ665qm+mPwug==","shasum":"e213a2086429ae663797e194866cf3d01ac8115c","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.8.5.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqUbP5L0WrKrmqKseI3UtCILXfshipj6OwTO0zz3wdXgIhAJHf2Ty305Lx0nZJlpQvwgu/GS337g4C1ZjWGnZNpAgO"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.8.5.tgz_1499890317066_0.21859546843916178"},"directories":{}},"0.0.0-development":{"name":"redux-first-router","version":"0.0.0-development","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"764542403c80191949077b8e152d8f78011916ae","_id":"redux-first-router@0.0.0-development","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-+4/klFu2bpUY+FLxaxSREJb2klh0iO1vYvnGTrmWuXg/J1tZE4I4qSb7R0uB0mlZad34rPf6d2OrhsWoNwfHZQ==","shasum":"04a6fca6d705ad8f2ef10fb397c08e9b079d82ae","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.0-development.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFX9/b4sJT80zII8tyriy01exsc/CpTZykUAPc7V7onmAiEA0njdyNkeBB4YHdp6wmUE9sA6v9Gua9NAFpH7ewYyCSA="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.0-development.tgz_1499906910013_0.042619417887181044"},"directories":{}},"0.0.1-next":{"name":"redux-first-router","version":"0.0.1-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"764542403c80191949077b8e152d8f78011916ae","_id":"redux-first-router@0.0.1-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-kCQTiTjy6irvcaGhBPGSo6GNjwT9tHjbtdn5gLdTl0McBpqEQP6OT4l1wIxgzRXbEu0PZZ45addIrXV1VLg7+w==","shasum":"251ff18c0862f47ea2cdc1ede63762fa7d48436e","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.1-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHERy9+haHlG+QT6JIpqU+gTPscAoMDUlp60jV9EW3SfAiEArRATtpWVYoqZe6tK5ho65MNePsahGm3e/IJb+GwWDuk="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.1-next.tgz_1499907199696_0.425444656284526"},"directories":{}},"0.0.2-next":{"name":"redux-first-router","version":"0.0.2-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"764542403c80191949077b8e152d8f78011916ae","_id":"redux-first-router@0.0.2-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-tS/QJogb2LF/RiJPFjIC288lchniQTDbXFaH+9Ov7mja7hNDUIyXNB2ajjbGPTz5+W/RRoitJ7h04wgXseMa6Q==","shasum":"af637c0eb564245aacf056abe495fce929caf222","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.2-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFLPN72KCCysia1zbVeAOUdW7LEc246Z4XTbdoFLFSfgAiBdNBiIWxOJtTicWgxyUS+7LtDWexatZ5KdXBm7O4diBg=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.2-next.tgz_1499907379105_0.6035529156215489"},"directories":{}},"0.0.3-next":{"name":"redux-first-router","version":"0.0.3-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"764542403c80191949077b8e152d8f78011916ae","_id":"redux-first-router@0.0.3-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-P041Z/Ka87kkQ9yxn41ox061gmWtVDeaJZrTqjE9oyALtYtSeBYBdGJBgsKU77u1v/ONeC5Y377CdHhvVxsdIg==","shasum":"37cb367d803d32d7c8cff99449d24253b0c6ef4d","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.3-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFBh6S2m+85ZUaAxhovQeaNg3lwLMRO1H3kbpiV7umjKAiEA9TN4oNoJlnRZRyZZLDGA1H8N2smMTHqtwUjMAB43Ywg="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.3-next.tgz_1500334863804_0.3543962899129838"},"directories":{}},"0.0.4-next":{"name":"redux-first-router","version":"0.0.4-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"764542403c80191949077b8e152d8f78011916ae","_id":"redux-first-router@0.0.4-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-w6rzSv6wUKfJtMHvUtqewY5cwJIPD6aszGOl9LQv7tnvKA2VBEsLHF+stzPvjIsNBmY+mbIHZcI2sLISCbj5cw==","shasum":"d2b2f512e265ba49cdffaaffdb242208f9d5dcd4","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.4-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEV3CUFN7mb/4cJ0bKW9JQ9D75q+bBjfb6A9vrTDkkcSAiEAkFgRGaMDN3SsY3HL+8mrEHdEk8TzjJeImB/CXic0/z8="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.4-next.tgz_1500342986855_0.7328031186480075"},"directories":{}},"0.0.5-next":{"name":"redux-first-router","version":"0.0.5-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"764542403c80191949077b8e152d8f78011916ae","_id":"redux-first-router@0.0.5-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-wAdKADgTyaMgsrBDq/LdwxcIY2tgDUHaFaaKRKYj3Exzoj5lva1+dwQxAdFnNO9Rw5qftxechDLdL1+clcBvIw==","shasum":"ba33e6578a73f966b6bd8430d3282412ed57ebf1","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.5-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDXXGzwOi0MDBDC186yO8x6iBKs3go2SHdElcgDSQYqrAiBQvAI834YXn8UnvJmIhzLbgQvioWxbPT36/NSGc/Sv0w=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.5-next.tgz_1500351229540_0.0053345756605267525"},"directories":{}},"0.0.6-next":{"name":"redux-first-router","version":"0.0.6-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"764542403c80191949077b8e152d8f78011916ae","_id":"redux-first-router@0.0.6-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-Ha3ePXWolsj9GRuc72fATy0euuSTZZ76Z6DADzBDJXraj+vKYDRQEBLIJrzuBdt/xwjLUIghQcGK3iYnp/temA==","shasum":"1640479923706860a01237451cd3391af72b9a71","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.6-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrqBGVwLgDUTD8OqTPWbdnWhI2YEyHILDInks5cZhl2gIhAOpGIReb3p0rEVzBovWTVFatdR5JEYVrk3kS0n0wQU4R"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.6-next.tgz_1500352619541_0.5577576570212841"},"directories":{}},"1.8.6":{"name":"redux-first-router","version":"1.8.6","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"71ec25c45028e14b3298dad5d36ffd8e221328f1","_id":"redux-first-router@1.8.6","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-3MZMYvxvgNzXjjqf7OAz55zBKFitJ2AbtojFyUVNjojaYdnaq2zaHLg4mZqE9tnGJoxwGRg3bgkCA0nFVKXfRA==","shasum":"f98001500c3384cb3345119d65171407bf42be81","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.8.6.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGg19/iOW2M/mVHJHwx7e/3AwN5W535HE6SbmEOr1+/NAiAP1kHXmfZP10rdofHK2xxJTIh0sIbT85G3eHfC0BlPiw=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.8.6.tgz_1500635070858_0.5398245700635016"},"directories":{}},"1.8.7":{"name":"redux-first-router","version":"1.8.7","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"84fb6d1e15b21320645a61467b6f0f469bf45830","_id":"redux-first-router@1.8.7","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-NLyFqNuKrscujEQI5vP4dCkGeEr0enyo34C9HUNoo8R3QKVQ4eTpPEw8E4HFMvnn5Bm/m72bTz+mlBZwwpsW3A==","shasum":"0e8ff7ada16cc995f5250e3a3e0851637f43678b","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.8.7.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDddQF4Pb5E1vw6uQEwxbcwjDd0JGuPRPqK1p7pXzYP2AiEAnbIna9L4JwosObqkZ7/PitwE+Fx75em2KDtqGpBFR2w="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.8.7.tgz_1500664912134_0.32420048606581986"},"directories":{}},"1.8.8":{"name":"redux-first-router","version":"1.8.8","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"1b22106c23aa286f1a8680a46d8eba9658cfe448","_id":"redux-first-router@1.8.8","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-pt8spJ5EA/Xb3d3vuPIZ49qVWelLU2YmRYGqTGj9q+8UwCf2zxBtk7E9/IF398IM+wJNS74Hy4uld0ZEZbsGqw==","shasum":"1acc1409824f5ea8a3cdabe464d45eb224f5bd07","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.8.8.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnynGifwwjjND4mC0NeOhgpsjAd4fJwI0SR7AaU8rFOAIhAOB0S9HwTKp9gFbJvwd/fmGT7XHoc7z2GjF6/IcCYtht"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.8.8.tgz_1500664955295_0.5264241301920265"},"directories":{}},"1.8.9":{"name":"redux-first-router","version":"1.8.9","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"803c3cc2398b9e2fc846e93522e3767709f53a92","_id":"redux-first-router@1.8.9","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-aWxsYsnA1kaDPDHLfqZBzrT2OzteHdQU0VVznFS9yuJsq8St4YUujH0jerVfSBeEFtm4a5ot+ppCAk7ObjxE/g==","shasum":"e5b5c24e504828c3d3d0487268feddd4d45ecc17","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.8.9.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFED//okr2p6B7D5Xz+0ducsO7fXOpKK4t/kUoCqswZsAiEA3QYBQwv/Wr4iwYdvPy1shGQ4PrKHLCW66rck089GB7c="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.8.9.tgz_1500799215297_0.09232300007715821"},"directories":{}},"0.0.7-next":{"name":"redux-first-router","version":"0.0.7-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","react-redux":"^5.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"764542403c80191949077b8e152d8f78011916ae","_id":"redux-first-router@0.0.7-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-3Pq0HpiEvC7AyjWM+u/gOZV41wm4aHVL7e2BJcugDy0/uo4t5VhXraTOZZ+mgc7PS6bfFwEJivdN+olYQe3UmA==","shasum":"a52039f47edc2d7afa15146651bd7f0e17f20e98","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.7-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxLvVHK0d3Jj9GIzao5wxFdTUWi2yqb4H9X0dTSm1h/wIhAJe0Zh1sN/IKCxUC+oZ5N2NxCYdf6h7c/J7pBVUpf8u2"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.7-next.tgz_1501019064101_0.2277739718556404"},"directories":{}},"1.8.10":{"name":"redux-first-router","version":"1.8.10","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"9203645f00dc19956f465894b91a820f625b95c3","_id":"redux-first-router@1.8.10","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-FY/CoJMSg1hm5ERP/w/hou0U2w9qcs1AI4dY9Ve7zqxFybWCLL4W4k6G3WmVf6FF8i9FAM+yQqK1iCMwG3noCw==","shasum":"b8f707b64706f3406eae74e38da949f18ee448c8","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.8.10.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFdGiEaz+VKgPM2PJPLaNnxC7dMlj7EuTVodHyQ4i+XEAiEA0x2t5OQShHqKPnLpBiqCH7sv4T7OD9ottzOXPOK15U8="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.8.10.tgz_1501113564708_0.5104052994865924"},"directories":{}},"1.9.0":{"name":"redux-first-router","version":"1.9.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"60f046ff214710fc412469347d068ec0928f4c7e","_id":"redux-first-router@1.9.0","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-46AsT68JLC8DfRo5/CX7kAVkRxq/UFopJTpy2Jrqd4U40fdc8SVB/aRWa5C+qUJvhedJo9sbj+77Mlt6+Gjl/w==","shasum":"3fffda7847218e514332e398c6f5e90a64b3f68a","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE8DT/xCWO/m6rdMXcz+syTdSgbHS9NSpejqMkVgUQc2AiEA1pcP49sb1AFTydTxPmkBZSyjqcrSS+mcE4OBzPNOoCA="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.0.tgz_1501149489649_0.23930055974051356"},"directories":{}},"1.9.1":{"name":"redux-first-router","version":"1.9.1","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"39e66d41a3d5e2adfbd5e42528d9c31f4f499227","_id":"redux-first-router@1.9.1","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-QXgC/zV2tPQho07ltr9Pl5SoPqosZq0EcUn8Eic4PZ99w+a5vJHjNLy3ThNTF64BAB+LwvaYNsive536Hk/qEg==","shasum":"19534e82d8b0090996c401a8222dad79f0934cb3","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGHjd5vsZrNn3/9aOdFgLkUWekAiPYDKPnItb9hhHNtZAiAdigm9qs59vg/QJZFK4BOJn0poEzIV4pYqeBR9uLxGaA=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.1.tgz_1501163489037_0.8386147830169648"},"directories":{}},"1.9.2":{"name":"redux-first-router","version":"1.9.2","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"4474bb47a664c7bc85163e2cecd40c3f2b2d17dd","_id":"redux-first-router@1.9.2","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-sOCET1TOuKOL/qibEiEIpcTHAbsIcswge/zDz9fQA4Vz3GfFP5bSe0RKI250Yx3faHbN5ajZgszLciCEgKJaog==","shasum":"d1f1e96c6aef1547f8d7b36f41d0f98e307bf56f","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHgwOLjSPvn9KQ1qBjFkLU+6Hh2tzC79UFgslzyWC1wYAiAVGU6NeToiwGSnc57L36EsCJ+/T13IxJAlYhDvzGv81Q=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.2.tgz_1501163575480_0.7012884616851807"},"directories":{}},"1.9.3":{"name":"redux-first-router","version":"1.9.3","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"751d45403ea2694e0f722f94f3b6ffa818aae842","_id":"redux-first-router@1.9.3","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-cNi522uzSIpTiP0osEcksMH4XGqRQ8xpQShw6penKNbvyuN7dkK5steTCzoMDTuBJbxuOjdW495wev7pnTjK7Q==","shasum":"2e71a508ebb5cc43bdb35283a6bd8b71a5806205","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGAdpAzVy3gRHfn3OvytJqGlBmOBQawCROR8x6CVSdtPAiEAiSpsMZqsHnvili3VQvDojoZESguKAVNIoIkXzhwSUZY="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.3.tgz_1501163901842_0.15313076437450945"},"directories":{}},"1.9.4":{"name":"redux-first-router","version":"1.9.4","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"c36d3ed697a51cdcf87c4d4d598ca528f2e4659d","_id":"redux-first-router@1.9.4","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-qrc9+acWDdEMydaWqQXDPvApcjKs0D7/OjmLV7+9ztDNGcF2fVtjLf8MwxNdaSbozDKYeMKNL84fJdnPgTHcnQ==","shasum":"9f1a5dde55eae0a367c7e64589c9d181034d1447","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHgtQRdbGm8OtAO9YVdEbQF9kujiti7q7ILaE5Ymmbl3AiEAqHiA+RWZsdkNicIchhr+CKWksNd+yWmY8EUljvDgLcw="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.4.tgz_1501164435218_0.8579145539551973"},"directories":{}},"1.9.5":{"name":"redux-first-router","version":"1.9.5","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"^4.x","redux":"^3.x"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"8122405d9fb3f83c73600f59d3eb88d6dbd8684f","_id":"redux-first-router@1.9.5","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-mMfSzU4BwzhmITfsB5YgUVs5OnV6mzwtJbGllRxgF2ru9GAsJEghYufxX1z7UYE3PcuOiiru2TwTvDVRJdgKdA==","shasum":"0dde4107ab3307dcc1320c7690fb8cfa6dc67bc6","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.5.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+g7ZRlTpsFZ7LyPJU5ZaqBblMsO5ypKBliCwoklf2ogIgVIJYXsv2J8H8qShqj010LbHPfm5Em0x2mjmN4kaUmBE="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.5.tgz_1501164909139_0.5022303315345198"},"directories":{}},"1.9.6":{"name":"redux-first-router","version":"1.9.6","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"03e2af0a8b7365c9f6ccab64223d6bb82c8abf25","_id":"redux-first-router@1.9.6","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-kDZKWwsWAajS3dkg1t75C/RWVr0Y9XEM5NnoAH8z4lCRQ1xCnrFX1sj1b8QaFUQK1jeJyOofThiKYo588EpFNQ==","shasum":"965100abd2d5c6fcfd543e4ab2ea6b464d946822","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.6.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAYKvj/ixpsds6DbPOaU7UBZcNcACKZpPJdlBNuUkLJeAiAFlzoHCLEiFmLSfYCSnxclTqIl/hYFwXGwM7yu9vrFQw=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.6.tgz_1501165783016_0.5231900427024812"},"directories":{}},"1.9.7":{"name":"redux-first-router","version":"1.9.7","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"d9f83d1fe3b81708760b1c2ce39461ca532bc586","_id":"redux-first-router@1.9.7","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-3U9fbREerxXKOzWMC/lUYxO2+t4wwSUtx4cvxTa9Hn29Tf/DZRJmZKSREp6htVaWEROMaqGve9qJG30wAVcMiw==","shasum":"85de49b0536ecd5745fce5a4a6ace54d7110e278","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.7.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpqpF7zR5MQFydYjrWhYLpWmuaSJVhY1R3lQ/m1MCH3wIhAKPh26Ml+jntvwsRPrqA8K3ov/GVsK/OxHDXEke1IA3W"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.7.tgz_1501219843321_0.5679280066397041"},"directories":{}},"1.9.8":{"name":"redux-first-router","version":"1.9.8","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"7d227dfbea5ae0c6a36c6d301cb6603acce1cbd4","_id":"redux-first-router@1.9.8","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-vrzA/ZbWuwscRmzW1Mo53/U6I/tJOFthFDUGZ7NVT2dVLovA1uNch4i3vWHi6IYMgwRUxU/oTGtiKPy+DnLyaw==","shasum":"db1a72cd6a6b22d8eb8c0edce33d2b19d958661f","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.8.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2uQujSJwzn3IvqS4pLenmXQ3g+o4QtT6218jm8VCHDAIgIQ2eiKPc9HwQC1TwBGBaLssFf7W1N6rf7LARt9yMIGM="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.8.tgz_1501505079689_0.8637564340606332"},"directories":{}},"1.9.9":{"name":"redux-first-router","version":"1.9.9","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"8fb13d98ae3bf5d02bb3391c325ed86539a84be7","_id":"redux-first-router@1.9.9","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-r/4q9hOITW6t4wrBTPRuk9sgwEUq+9pijLGPuAwy24hwSTZZ1FbvFsZnrMzqRWospX92PWenp2KrYdcYU1ccEw==","shasum":"3a3a740a8088debcdec9e09862e456640eaba4b9","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.9.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtQgeuPLZrZM3adMEI0UnTG2hwGcT/L32+lELSgEfmVAIhANMEcS0InARKc1jsSdGVqC9gvDd1UK2bZ1LKnoyg0SvJ"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.9.tgz_1501822661160_0.17374309175647795"},"directories":{}},"1.9.10":{"name":"redux-first-router","version":"1.9.10","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"dea482917ef5ee468bf37461c10215043958077e","_id":"redux-first-router@1.9.10","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-eaBg1Gvh26CiVaBrYmcUL5+noCmPG0z2FjJzK6Dgln8PnuDssXgi7x/I+m4lzWj5nBI5nV8nz8AEBZdFjDbnrg==","shasum":"61267aae0de017596902025a1d58914f44a53461","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.10.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBSaS2EX9t+3ARpm0fJpMP9Hu3xr31XWbpeoIAZ2eaRUAiEAjiREYnlO4GINrvF5HX053Wg8P6GYfyJnQ3I9DhKlrxU="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.10.tgz_1501822906035_0.8195283459499478"},"directories":{}},"1.9.11":{"name":"redux-first-router","version":"1.9.11","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"b9ebe439bfadca0df59f6c660320589c4170a69a","_id":"redux-first-router@1.9.11","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-xVlGfFRT3lribOGMIY98diGlmaFdbPmZCkZy+myw+KZAwlNbBWacFCzRnc7ptOQhiNS9Hv/FBFwlzFk6PXIcnw==","shasum":"f4c45955330864d547de592f84138fec4219ec16","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.11.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCHwPYvHahmT4uOxFMJYWMbjpdBrARgDXZC0f4H2NjfwwCIQDMQCGgKAOh+WxSePYtEGe4vtK1wkAdDnqZ+dLmFeHVew=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.11.tgz_1501979488664_0.3203615990933031"},"directories":{}},"1.9.12":{"name":"redux-first-router","version":"1.9.12","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"b86003321f7b01a2360a5a802125b9ee978a606f","_id":"redux-first-router@1.9.12","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-GLoN40PjZIyOGVFG6aRxOjIHDBAb0wBJRm0G78b7Tb1Y1/NFjLypxNAQdG/RoJYsk1Bkh+UApiqMgtMRkDzrRg==","shasum":"77b45d74a64b3bed54e69e9a83134397f3518473","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.12.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC953/CVy/3FBhB+S5Rh+3FDIMY2cV4C/caLQLSSxYL3QIgWUZoRhlHfNbkr6UclIewCF6Cb9BMgtChrPRtv1GWFSg="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.12.tgz_1502119605858_0.4319321883376688"},"directories":{}},"1.9.13":{"name":"redux-first-router","version":"1.9.13","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"d09da75a5253f66e2e7bb2eadc032fa53444034b","_id":"redux-first-router@1.9.13","_npmVersion":"5.3.0","_nodeVersion":"8.3.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-I62BrmGRGcY6rxkLIgv9x66PgGTSJpomyo7eh64jk7JoITEFRLv6Es0eP8x7ubCmfPnGZrtQuNEVp4V4xcsR5A==","shasum":"f7523193528732669eba3633abba2a4ae0e503d2","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.13.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeyFC1fKbShSYZHGtquZhUXkOAH+w38QyiLR0ew8CbsAIhAOKSxcRYi+TSsTgjDmVcWR/WTnUv4mQv9vxEzJMB++G+"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.13.tgz_1502465921762_0.033321232069283724"},"directories":{}},"1.9.14":{"name":"redux-first-router","version":"1.9.14","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"7c61698e37967df96de2c99bad57986f9446a8e3","_id":"redux-first-router@1.9.14","_npmVersion":"5.3.0","_nodeVersion":"8.3.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-i0qwfLAceMe5zWu2SQojH7pWIXvUv0548GUhk2Y6oK6XMrZWrQfMTHIcLG1RUNnIJ2GQe6H18itsAH7Lir/e3w==","shasum":"7aeaa6e057a4311c2f8681e8114055ecde23d71c","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.14.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNOgVx4n60kzCMp6JkgUZ67ohejKk96cCM34RiScBenAIhAIR7KZVe0nJDkOcl3Npm+u+QeZbJF6Iaun43p50li9G8"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.14.tgz_1502729951107_0.6080744722858071"},"directories":{}},"0.0.8-next":{"name":"redux-first-router","version":"0.0.8-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"d9f83d1fe3b81708760b1c2ce39461ca532bc586","_id":"redux-first-router@0.0.8-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-sVJ+XoxyWcsjI0kHtMekcwpMaDiZ8LdsOZTbFd1EPkkx3T4SlGG2CbHBVyC90RtY9FUyR3cmAJoMr3kL6sei4g==","shasum":"ad46466de6fb43ec54b091e3c5a120e0ca2ca2f6","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.8-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEYDWFkB4LP1OOzo9rrtIJmc7L+pPj25OlMHoDrCzr36AiEA1YXFUm0FBFKTcKt8WHW6yYilqoza35QgZrTucpVsXfg="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.8-next.tgz_1502823342073_0.006586412666365504"},"directories":{}},"1.9.15":{"name":"redux-first-router","version":"1.9.15","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"a0be24c7586c4959767c58345f9c8ce0d4e61acd","_id":"redux-first-router@1.9.15","_npmVersion":"5.3.0","_nodeVersion":"8.3.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-Xr6PVSgVsUic6RMvBBh6RqQEPnmcDnmar+iMkfihuhirOIgjNU+DH3rAufHVAPuCaU/++F/W1coszBQ+FEWUgg==","shasum":"5cb69db77e2fa6d968509bb46fa8949e7a777a2f","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.15.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICrSk/XhdF186ySrTK/jcfTe76lafV/uoQgGeaXobV4UAiBmOi1FkBVu7XUh4xrjPHJ4cM3yr2hMxIsfnZrSM16gNA=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.15.tgz_1502824645699_0.9813807848840952"},"directories":{}},"0.0.9-next":{"name":"redux-first-router","version":"0.0.9-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"6952cce6ce9e008a9ec624481a7c187d8c93a2ac","_id":"redux-first-router@0.0.9-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-3kIVH8q/uIyyvd2BN59YZqQYbRZ9oP3OMkd1vWwWe3HRfjwA0XhLGt+V7F5df6rkZ0UvRLrYIHRwlzugzY1/8g==","shasum":"5b6a4ebb06a9b8b70649fecbc8f728d98bf7e140","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.9-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAy1Ploqp5N99VgKvE8Hy/dQ3N/jvyEFruAI7PeeZa6iAiBwXIgYc/5yjP/ddiss324LEdiKD4TxLwVK5BrtpRfshw=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.9-next.tgz_1502950021843_0.035770879592746496"},"directories":{}},"1.9.16":{"name":"redux-first-router","version":"1.9.16","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"ecf94c9759400d6af37e8b3b678cdb979387efd2","_id":"redux-first-router@1.9.16","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-U4Nm9qcLiqasMw3twP9+OCvZEHKr3ggZDndH9K/msm13dF9xyD+OkOqgI3XHdRCdVD/0mouRMp2bIy3+QCGkXg==","shasum":"670541a587ff08e3fccaca69e0ac8712a65ab325","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.16.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC+QDbgWXc7l12Vd/ibvbmbmjGT1KC4tE2h/zYsUaoFOAiEAlSo/Mdp14l0aMjLM01QT1qdY9Mgo8gyhbBJdszFVpeA="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.16.tgz_1502950785767_0.5370659905020148"},"directories":{}},"1.9.17":{"name":"redux-first-router","version":"1.9.17","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"89fb42a99a623efc477eccea79888caa8f94cf17","_id":"redux-first-router@1.9.17","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-3esRag3RPRLA2x7XP//CPW1c00xKbYhVLBfEmWdHt6u1qCILde7ftJpYik0aI5ujQm64DtjmdVPNoWFoGRTDkQ==","shasum":"9e0f4a6b8aaf1d714d78878f532b67c98e4aa383","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.17.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKNID+uF1hzoSn0OZ1BzPEkO8ZhYaWRjv4amIo9cUS6gIgXh38ZAJqkLoAqipBWKN/HOOfDEGCVA38zYb1FAAnUuw="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.17.tgz_1502950866890_0.3184405844658613"},"directories":{}},"1.9.18":{"name":"redux-first-router","version":"1.9.18","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"41a1d726b9a07846ca456db3d85606bbc10651ba","_id":"redux-first-router@1.9.18","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-nG1QMnLklfg5VxzPfKw2beHrcViW0DwAxd2yM4nmXtZ9PCOfVpfSNNe2d86i9y+qSuGV9TTfy0xLKWCCZzF4bg==","shasum":"13dd4f893df9166a9985b38a7cbc18319a673485","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.18.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA8tzEUt1n0k5zxWWKI5P+udKiwIU+fYTL4goW93a50DAiB+MU36XGjl0rQeWAZCbRLIDagFRAUf0kBLaNbkmLIxzA=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.18.tgz_1502951200530_0.9255905761383474"},"directories":{}},"1.9.19":{"name":"redux-first-router","version":"1.9.19","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"b23d658f1118270c8ef0327daf67c74872f58476","_id":"redux-first-router@1.9.19","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-4DAFllxOQe5b/RJSeIWTVBDmnzQf2EWu6rTP5MkWjK9JkssNVaT+MI76391gao4AQq/q0yfzOsRYshEWKO4Xow==","shasum":"6f670e40837efcefdcc117361b9d20628e33c097","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.19.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCP5ryIvoy/8JMViABTwmWCZaBu1zTRuz2xRUyz7GBV4QIhAKYv6ryNjdJlTAVHmVtJz918dalC5M+d/8OhA9cLIBSt"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-1.9.19.tgz_1503502219024_0.6651219581253827"},"directories":{}},"0.0.1-test":{"name":"redux-first-router","version":"0.0.1-test","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"src/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"41a1d726b9a07846ca456db3d85606bbc10651ba","_id":"redux-first-router@0.0.1-test","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-B2ALoI1ofkaY1evabWTqFmg1L0y8KoLf6AlhcpM93bcJHTGkfaFzaUWA8S9UqwazF+/Y62nHZdnmlO2NRII9DA==","shasum":"cbc10e0aac51fb55d167d0d5a838a60563a8dde8","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.1-test.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYjBX3GY7YoUjMti1PjefACbjvZIt1+2jmuRfYFlv2DwIhAI8oxuUWoUiZBMgvIba7u/q7DeRnSu8ftXKBIGrkfUWf"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.1-test.tgz_1504603079667_0.64408581960015"},"directories":{}},"0.0.2-test":{"name":"redux-first-router","version":"0.0.2-test","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"41a1d726b9a07846ca456db3d85606bbc10651ba","_id":"redux-first-router@0.0.2-test","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-zv8L1PN3xSG3nX6pVu8Txw90H7na2u/PVUIadfi7X53wN3O3rOOaKOX07D4k2ixkzeB5q18BeZ2QeQhXCZeLhQ==","shasum":"5cfc7c2c5319e477101762a07d9fe8438ca92576","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.2-test.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICEFSkEDo5nBS8Q1IsyzZOPnQgGqRCeKRqrx2K+SmSaKAiBj9erCznbVVC/PzMi0g/xaSjKau+kPjnuFzsLFuZhQqg=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.2-test.tgz_1504603142151_0.4955570448655635"},"directories":{}},"0.0.3-test":{"name":"redux-first-router","version":"0.0.3-test","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^19.0.2","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"41a1d726b9a07846ca456db3d85606bbc10651ba","_id":"redux-first-router@0.0.3-test","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-GN11PGSZaWvQoMphpDXN5V/XvIVpDeTR9bbQizXUrQQVygqwQAttwz3gVhl1wKOuw08JNSZ6y0mG5MI2qcfERQ==","shasum":"920797e85f337900848d35f84a7ee2bf1569d327","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.3-test.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICya0S2LvwdfX8X3GqiB3vI10QwwsEIrD4IXEhSajLk7AiA/ls5H3KS4ZMKNsLp8Fh8UlTBkovW5NuO5p8TKCshCPA=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.3-test.tgz_1504657142233_0.5258126116823405"},"directories":{}},"0.0.10-next":{"name":"redux-first-router","version":"0.0.10-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"69c7c8038af5f7b68d1475a646501a3874f09ca3","_id":"redux-first-router@0.0.10-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-Pgm4RvZe1hYLoojTh30Jzg8R58qW+AAPp8ExKOGw5s/G4NEjSqXcqYF3dGqJKXqogj0rtSyidXUU1q0Z2mef/g==","shasum":"998ec3fcfbab1e69c347f9fec4ba8443c43eae24","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.10-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSqmbVFlvYgpbhAmrwsV6ophknNT4HBG4ivKer6R4VYAIgB5A0c2oDrJicqqflrQunvc0+pSwdim09OYWJaMTmOio="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.10-next.tgz_1504691400196_0.1800296758301556"},"directories":{}},"0.0.11-next":{"name":"redux-first-router","version":"0.0.11-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"e12101eab877e1cc8d15cb86aac4ebc48110f2fe","_id":"redux-first-router@0.0.11-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-2zdUA38lMLDwpGi0G+dGSNJBWO8gGVCqW7LZxoMnP+h7VVNIYSzHF/n0Q+vvcPND+h2Y1a/CvPSZwKOSebO50A==","shasum":"0d62d5a6a7dc8776b07ed0259df24b777648e63c","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.11-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC0W4gHMBa+k5eRx+TbBFfa9v1kn9XfQLhjYp1sk0n/3AiBrP/B7uupp+tG7VORWUeIu545xMgrUXcBXxKwEIr/06Q=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.11-next.tgz_1504692430058_0.8075814228504896"},"directories":{}},"0.0.12-next":{"name":"redux-first-router","version":"0.0.12-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"6d8ed89895cf4967f679ae08b3df220781325417","_id":"redux-first-router@0.0.12-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-BlTHdo/G8g8bpPmE1SvwePTEogJFv3zyjMkWDc0vD4T6UDtNjWB39s5eE6N6JcumbWp76JZuJsj5RS5vQQBjWA==","shasum":"fec99716bc83a33c819190bb911961733042eb84","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.12-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDe/HEsIuqIJHpb7SPS/xRdRgjdmoQGj9jlFxsZbc8xTQIgbVc+VGcghxGWTYQWt/8ls/cAH5QAnsNTDGNQks/lJUo="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.12-next.tgz_1504763276663_0.11846140841953456"},"directories":{}},"0.0.13-next":{"name":"redux-first-router","version":"0.0.13-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"src/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"d4f4482315ff29495afdc8d58dc166d8336eeca0","_id":"redux-first-router@0.0.13-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-MeNij8gcMRAlOOWLQqApNgFYYbEaM8y61dT7ASrqyupfeq0Zdnyl2Qv8V1dTGr/Ed3VaCLX7FuDI/bKVdBFqEA==","shasum":"9e101e833db69e7667ca3c4a7a11f7ab216b7f6d","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.13-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvYnhkT8Dbl/6ZdA8RPrLGLv4GDkdqf/TltChZf69GvQIgDBS5KdvUtNmBm7t1iZhi3GGMHC4KUUryXKZKulF/nuo="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.13-next.tgz_1504782338647_0.22601824766024947"},"directories":{}},"0.0.14-next":{"name":"redux-first-router","version":"0.0.14-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"src/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"06f3f842e88c4f63e7af5fa887f2a0c5c6866df5","_id":"redux-first-router@0.0.14-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-xg2i1i3weokdEP0tTM7GlLV6ktUn8yXbkpVxUm5RQflEr/IPz5JjpDMIwEmVe44S328JHhdmENvxnn3Z7EnP5g==","shasum":"82c82b1f7dc815e62e65c4f212cdce61db86eebb","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.14-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8q6eFJ1c0TJuscOdCA7SHiLu7c8fVTKuGdtuYA0egQwIgBS8YocyP6lhiTFSjbp6kf4yLUS4ysZMRQ46geCwmoTc="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.14-next.tgz_1505012282887_0.2678010070230812"},"directories":{}},"0.0.15-next":{"name":"redux-first-router","version":"0.0.15-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"src/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"c11306a07b56e963585efc920a6dfec8b26d6cb8","_id":"redux-first-router@0.0.15-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-vj1dSPA8Z2K6zW/RTJqA2w0+VWHYSUS9yoQlqRDsSBn4TrMnq/WtuHOWZ9+ney4hG/D6zERK4NJiRdi70/wJbA==","shasum":"42fd5f40582a1eeca9fab92e5c38b5a3bd5940a1","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.15-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDArzKjDxO1meFnBH0kQiAAE0qs+C9W+46hli9CjldSWAIgBr6BdBu2ICm4WzViiBYbj/uA81V9OrL+QY0tXAaWqqg="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.15-next.tgz_1505018944940_0.4506939509883523"},"directories":{}},"0.0.16-next":{"name":"redux-first-router","version":"0.0.16-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"c11306a07b56e963585efc920a6dfec8b26d6cb8","_id":"redux-first-router@0.0.16-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-AJ+An70KvmtMuKbQDNc4bogWUgIM+ydGiZXp2B0+8GuW5EokJ7b34lZBc4ufoe+6Sk4wL6awP4Vsr+OlACqrhw==","shasum":"493c344dd92b4c20a318a024d4dfa7d948d87d86","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.16-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE6L30oEO63lp5j6W//nDY+0nG3s1n2psh6lddM0hRvhAiEA+Bm6lOyQAZ1Ta5/ORiCLiIYtqbTuc4AW/fp8Gn19M7g="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.16-next.tgz_1505044553160_0.8926346334628761"},"directories":{}},"0.0.17-next":{"name":"redux-first-router","version":"0.0.17-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"c11306a07b56e963585efc920a6dfec8b26d6cb8","_id":"redux-first-router@0.0.17-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-eHKYag+Y5YKlUgvaczkdJoWRuJ3I+Tsu5Mf4ar0sIN2UuDdbLvAEJ7uaGKdWy6z576ZzEvc5yVj4gZbyboBiMA==","shasum":"be057a968f4f3289a203259684fdcf8da9489314","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.17-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVdC+kUHMIoO9LocroWTeLqJj+JoagFvPelfgfcrl00QIhAJlG2KMHIsukGInD0ynysB/ELK7X/WadUWoT7niU9Q2r"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.17-next.tgz_1505081602374_0.6610210803337395"},"directories":{}},"0.0.18-next":{"name":"redux-first-router","version":"0.0.18-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"c11306a07b56e963585efc920a6dfec8b26d6cb8","_id":"redux-first-router@0.0.18-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-haFSSlaRS4IWNFZRSbNEducrWbmleXstnKS9a+VqpCLgy2ayWD6LiZ2JcAN3CxtWH7wKB0xqz+YCS/ziyGMirg==","shasum":"bc8c39e063da3834b9437334a560decb3e890bc0","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.18-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB2ugsqh5JI88yntowYkn4tD6ayhVKBo/UbWdgYCuTg4AiEAi6N+kGW5RTHN4QgjR4B5MC/9ix17KPclLz46Fk69daA="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.18-next.tgz_1505082427036_0.5048919634427875"},"directories":{}},"0.0.19-next":{"name":"redux-first-router","version":"0.0.19-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"c11306a07b56e963585efc920a6dfec8b26d6cb8","_id":"redux-first-router@0.0.19-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-XBwZDV7awW8VmiWbZwHqy3P6OmEDY9RiOxNbP8bN1Tb+FKerIWU4NmmLtB4J1IBaIbc/wRvN41vnFbxoX9AAZg==","shasum":"d2e1d8cbd51d364b04a81338bfaf705828f5a20b","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.19-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBegupnotX0ytEESq8+EvWzLvC+goLa57Htj7LKNQCjBAiBeEHXZDedamTWbBhib+dQQlePyAUSW23DOogsRwOUWWg=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.19-next.tgz_1505082909040_0.8161459895782173"},"directories":{}},"0.0.20-next":{"name":"redux-first-router","version":"0.0.20-next","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.49.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"a8d5d6ab3186f0b5bf3b1476abcb8c03b8fe4fa6","_id":"redux-first-router@0.0.20-next","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-MWkbOzJUtCfdRdz56XPYYPnfjLSwCFQggeryajF7q1Ey1niom+Q0GAzPZ8EFn2DrYTZI028GYD4HvhEq8l7SjA==","shasum":"1bac19cd478a42297ca290e284622fd043a07b56","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.20-next.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4rZFllidWLBu91zVDE2HfN0zlSH2oCqYg0tFL8/69vgIgIdlVGHS1qj+m/ASGypwTcQWn3r+enTXv0uLfLCvqCps="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.20-next.tgz_1505126251668_0.7586209157016128"},"directories":{}},"0.0.1-rudy":{"name":"redux-first-router","version":"0.0.1-rudy","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.54.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"1252884f8be2b68d317771a43e26e54bd2b5c18e","_id":"redux-first-router@0.0.1-rudy","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-BS1CJWl5akKrUpOjBzl8rYGMBB7JG69rQjLMvt4eX9BydNfXkle3fYveEFaSxUeTwIyAgTHhsMoiIxDwC+soAQ==","shasum":"059e96f35a27c48b9cd421fa029a40d479840e80","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.1-rudy.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQhKP0IpcndR3YmaXxP3SCB4KqaMdl2muBeUwS6BBG6QIhAMIyQz7vdVrSjIE1z8H/6cMBtL+Tsko7+EYwML4dcOZ1"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.1-rudy.tgz_1505571991335_0.20167422178201377"},"directories":{}},"0.0.2-rudy":{"name":"redux-first-router","version":"0.0.2-rudy","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.54.1","flow-copy-source":"^1.1.0","history":"^4.5.1","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"1ccc5a8952e4db16760ec4c7cfe06be46f9cbc02","_id":"redux-first-router@0.0.2-rudy","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-vzNhzg/37flyVvAQo7Q/4/zIitabWMdcNvEFXFz/QQzwxzKnx8XpKq78hZEmWgHEKQbArrr2ZYPgV1WLdSjR+g==","shasum":"d63c236b013a8751eae912db48c96e755916da74","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.2-rudy.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4vmL6to+M9Cv2NKJoWL+eNwvzAhIbrlTx/Ep3ji8bOQIhAOvHOjKCm4fQ2EKypCRQYfQ+inDMMmACdnVrBtf5U7Yk"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.2-rudy.tgz_1505817214927_0.2704946734011173"},"directories":{}},"0.0.3-rudy":{"name":"redux-first-router","version":"0.0.3-rudy","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.54.1","flow-copy-source":"^1.1.0","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"0616ce24e658ba384dfb2551ca69d33add23a4cd","_id":"redux-first-router@0.0.3-rudy","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-vkbI+J2K26rNLenu482kMHoQeJigJ9GDVEvnaRjuL+FCkk4SEL24h5aMGBIaH4D6oXiaz1i5e9zUSPkb/pnrIw==","shasum":"6d478f33264201744435799a4f536442f80f03c0","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.3-rudy.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCq+RkT/f+ZSUHB95Mh69cNodg+yRMQ9EjX3o06wrKMwgIgW8nqfhImlqWVkI6hfaeogyRdFsF7BR5rwzGGn5G8xE4="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.3-rudy.tgz_1506089591359_0.9975389011669904"},"directories":{}},"0.0.4-rudy":{"name":"redux-first-router","version":"0.0.4-rudy","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.54.1","flow-copy-source":"^1.1.0","husky":"^0.13.2","jest":"^21.0.1","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"1a1b1ec9d4e44c056878866aa3793b318575df00","_id":"redux-first-router@0.0.4-rudy","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-hZJcKGa/06A2sN7EjGgOOhWrZ3T6prKFRv6IDCFsQ6WiudACG5Vbzz3VLHVgpeyi0aNVv97JmAJPC3kWY+wsxg==","shasum":"b735563d73e940f4a421e18ab23c1535cef9a457","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.4-rudy.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8P8Ng6OpTqaFWQ5qTxAnSH4DFq3rmipHOwqL4WMhDBAIgOE3H8i5z9XIRzyUEUtmyB6QlCVCXQ0OPp0gW5fso1kw="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router-0.0.4-rudy.tgz_1506096156583_0.8071773964911699"},"directories":{}},"0.0.5-rudy":{"name":"redux-first-router","version":"0.0.5-rudy","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.54.1","flow-copy-source":"^1.1.0","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"readme":"<a href=\"https://gitter.im/Reactlandia/Lobby\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"http://cdn.reactlandia.com/reactlandia-chat.png\">\n</a>\n\n<a href=\"https://codesandbox.io/s/github/faceyspacey/redux-first-router-codesandbox\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-boilerplate\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/boilerplate.png?a=1\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-demo\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/demo.png\">\n</a>\n\n> **UPDATE (8/15):** you can now add additional routes as part of your code splitting strategy. See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/62#issuecomment-322558836) for more info.\n\n> **UPDATE (9/5):** you can now block user navigation via the `confirmLeave` route option (and customize its appearance via the `displayConfirmLeave` option). See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/27#issuecomment-327431413) for more info. Do `yarn upgrade redux-first-router@next` to get it.\n\n> **UPDATE (9/6):** MUCH ANTICIPATED FEATURE: you can now do all sorts of optional params in your paths, match multiple similar paths to the same type, use regexes, and use params that capture multiple segments. See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/83#issuecomment-327703226) for more info. Do `yarn upgrade redux-first-router@next` to get it.\n\n> **UPDATE (9/9):** *4 new thiings:* 1) route paths are now cached for better performance (less cycles wasted on parsing). 2) you can now do **pathless routes!**. I.e. you can use routes just for the purpose of the thunk feature, thereby achieving more uniformity across your async actions--just use RFR! Just dispatch the action type for which you have a thunk in your `routesMap` and it will be called like any other. To learn more about it: [check this example](https://gist.github.com/faceyspacey/2771c05a62a338fa6d3d23d76e6e7c5a). 3) now all thunks and callbacks (`onBeforeChange`, `onAfterChange`, etc) receive a 3rd *\"bag\"* argument which currently has a key for the current `action` and an `extra` key. More keys may be added later. The `extra` key is an option you provide to `connectRoutes` which is the equivalent of Redux-Thunk's *\"extra argument\"*. It just happens to be in our bag. That said, `onBeforeChange` used to receive just an `action` as a 3rd argument. So unfortunately this is a breaking change. Check the aforementioned example to learn more about this too. 4) lastly, now RFR skips actions with an `error` key; this should resolve a few quirks for developers using middleware that explicitly handle errors already. If it ever makes sense for RFR/Rudy to handle errors, we'll provide a robust solution. Half-assing as we've done doesn't make sense for now.\n\n\n# Redux-First Router\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/v/redux-first-router.svg\" alt=\"Version\" />\n  </a>\n\n  <a href=\"https://travis-ci.org/faceyspacey/redux-first-router\">\n    <img src=\"https://travis-ci.org/faceyspacey/redux-first-router.svg?branch=master\" alt=\"Build Status\" />\n  </a>\n\n  <a href=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/coverage\">\n    <img src=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/badges/coverage.svg\" alt=\"Coverage Status\"/>\n  </a>\n\n  <a href=\"https://greenkeeper.io\">\n    <img src=\"https://badges.greenkeeper.io/faceyspacey/redux-first-router.svg\" alt=\"Green Keeper\" />\n  </a>\n\n  <a href=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router\">\n    <img src=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/badges/gpa.svg\" alt=\"GPA\" />\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/dt/redux-first-router.svg\" alt=\"Downloads\" />\n  </a>\n  \n  <a href=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n    <img src=\"https://snyk.io/test/github/faceyspacey/redux-first-router/badge.svg\" alt=\"Known Vulnerabilities\" data-canonical-src=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/l/redux-first-router.svg\" alt=\"License\" />\n  </a>\n</p>\n\n\n![redux-first-router flow chart](https://raw.githubusercontent.com/faceyspacey/redux-first-router/master/docs/redux-first-router-flow-chart.png)\n\n\nThe goal of **Redux-First Router** is to think of your app in *states*, not *routes*, not *components*, while keeping the address bar in sync. Everthing is state, not components. Connect your components and *just dispatch* ***flux standard actions.***\n\n**Articles You Should Read:**\n- **[Pre Release: Redux-First Router — A Step Beyond Redux-Little-Router](https://medium.com/@faceyspacey/pre-release-redux-first-router-a-step-beyond-redux-little-router-cd2716576aea)** \n- **[Redux-First Router lookin Sexy on Code Sandbox](https://medium.com/faceyspacey/redux-first-router-lookin-sexy-on-code-sandbox-d9d9bea15053)** \n- **[Redux-First Router data-fetching: solving the 80% use case for async Middleware](https://medium.com/faceyspacey/redux-first-router-data-fetching-solving-the-80-use-case-for-async-middleware-14529606c262)**\n- **[Server-Render like a Pro /w Redux-First Router in 10 steps](https://medium.com/faceyspacey/server-render-like-a-pro-w-redux-first-router-in-10-steps-b27dd93859de)** 🚀🚀🚀 *(READ THIS!)*\n\nThe thinking behind this package has been: \"if we were to dream up a 'Redux-first' approach to routing from the \nground up, what would it look like?\" The result has been what we hope you feel to be one of those \n\"inversion of control\" scenarios that makes a challenging problem *simple* when coming at it from a different angle.\nWe hope *Redux-First Router* comes off as an obvious solution.\n\nBefore we get started, there is some *prior art*, and you should [check them out](./docs/prior-art.md). **Redux-First Router**\nisn't the first stab at something like this, but--aside from this path being pre-validated--we feel it is the most complete, tested and *spot on* solution.\nWe have reviewed what came before, stripped what was unnecessary, added what was needed, and generally focused on getting the ***developer experience*** right. Ultimately it offers far more than previous solutions. The best\npart is that once you set it up there's virtually nothing left to do. It's truly \"set it and forget it.\" Let's get started.\n\n> And did we mention: **it has first class support for** ***React Navigation!***\n\n## Installation\n\nInstall `redux-first-router` and its peer dependency `history` plus our small `<Link />` package:\n\n```bash\nyarn add history redux-first-router redux-first-router-link\n```\n\n**Full-Featured Universal Demo App (includes SSR + Splitting!):**\n\nhttps://github.com/faceyspacey/redux-first-router-demo\n\n\n## Motivation - What Routing in Redux is Meant To Be\n\nTo automate routing. To be able to use Redux *as is* while keeping the URL in the address bar in sync. \nTo think solely in terms of *\"state\"* and *NOT routes, paths, route matching components*. And of course\nfor server side rendering to require no more than dispatching on the store like normal. *Path params are just\naction payloads, and action types demarcate a certain kind of path*. **That is what routing in Redux is meant to be.** \n\nIn practice, what that means is having the address bar update in response to actions and ***bi-directionally*** \nhaving actions dispatched in response to address bar changes, such as via the browser\nback/forward buttons. The \"bi-directional\" aspect is embodied in the diagram above where the first blue arrows\npoints both ways--i.e. dispatching actions changes the address bar, *and* changes to\nthe address bar dispatches actions.\n\nIn addition, here are some key obstacles **Redux-First Router** seeks to *avoid*:\n\n* having to render from any state that doesn't come from redux\n* cluttering component code with route-related components\n* the added complexity [and bugs] from 2 forms of state: redux state vs. routing state\n* large API surface areas  of packages/frameworks\nlike `react-router` and `next.js`\n* workarounds that such large *(likely \"leaky\")* abstractions inevitably require to achieve a professional app\n* strategies as low level as possible to deal with animations. Animations coinciding with React \ncomponent updates *are* a problem, particularly in the browser (React Native is better). \n\"Jank\" is common. Techniques  like `shouldComponentUpdate` are a must; routing frameworks \nget in the way of optimizing animations.\n\n\n## The Gist\nIt's *set-and-forget-it*, so here's the most work you'll ever do! :+1:\n```javascript\nimport { connectRoutes } from 'redux-first-router'\nimport { combineReducers, createStore, applyMiddleware, compose } from 'redux'\nimport createHistory from 'history/createBrowserHistory'\nimport userIdReducer from './reducers/userIdReducer'\n\nconst history = createHistory()\n\n// THE WORK:\nconst routesMap = { \n  HOME: '/home',      // action <-> url path\n  USER: '/user/:id',  // :id is a dynamic segment\n}\n\nconst { reducer, middleware, enhancer } = connectRoutes(history, routesMap) // yes, 3 redux aspects\n\n// and you already know how the story ends:\nconst rootReducer = combineReducers({ location: reducer, userId: userIdReducer })\nconst middlewares = applyMiddleware(middleware)\n// note the order: enhancer, then middlewares\nconst store = createStore(rootReducer, compose(enhancer, middlewares))\n```\n\n```javascript\nimport { NOT_FOUND } from 'redux-first-router'\n\nexport const userIdReducer = (state = null, action = {}) => {\n  switch(action.type) {\n    case 'HOME':\n    case NOT_FOUND:\n      return null\n    case 'USER':\n      return action.payload.id\n    default: \n      return state\n  }\n}\n```\n\nAnd here's how you'd embed SEO/Redux-friendly links in your app, while making use of the triggered state:\n```javascript\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport { Provider, connect } from 'react-redux'\nimport Link from 'redux-first-router-link'\nimport store from './configureStore'\n\nconst App = ({ userId, onClick }) =>\n  <div>\n    {!userId  \n      ? <div>\n          <h1>HOME</h1>\n\n          // all 3 \"links\" dispatch actions:\n          <Link to=\"/user/123\">User 123</Link> // action updates location state + changes address bar\n          <Link to={{ type: 'USER', payload: { id: 456 } }}>User 456</Link> // so does this\n          <span onClick={onClick}>User 5</span>   // so does this, but without SEO benefits\n        </div>\n\n      : <h1>USER: {userId}</h1> // press the browser BACK button to go HOME :)\n    }\n  </div>\n\nconst mapStateToProps = ({ userId }) => ({ userId })\nconst mapDispatchToProps = (dispatch) => ({\n  onClick: () => dispatch({ type: 'USER', payload: { id: 5 } })\n})\n\nconst AppContainer = connect(mapStateToProps, mapDispatchToProps)(App)\n\nReactDOM.render(\n  <Provider store={store}>\n    <AppContainer />\n  </Provider>,\n  document.getElementById('react-root')\n)\n```\n*note: ALL THREE clickable elements/links above will change the address bar while dispatching the corresponding `USER` action. The only difference\nis the last one won't get the benefits of SEO--i.e. an `<a>` tag with a matching `to` path won't be embedded in the page.* ***What this means is\nyou can take an existing Redux app that dispatches similar actions and get the benefit of syncing your address bar without changing your code!*** *The workflow we recommend is to\nfirst do that and then, once you're comfortable, to use our `<Link />` component to indicate your intentions to Google. Lastly, we recommend\nusing `actions` as your `to` prop since it doesn't marry you to a given URL structure--you can always change it in one place later (the `routesMap` object)!*\n\nBased on the above `routesMap` the following actions will be dispatched when the\ncorresponding URL is visited, and conversely those URLs will appear in the address bar\nwhen actions with the matching `type` and parameters are provided\nas keys in the payload object:\n\n| URL                | <-> | ACTION     |\n| ------------------ |:---:| ----------:|\n| /home              | <-> | { type: 'HOME' } |\n| /user/123          | <-> | { type: 'USER', payload: { id: 123 } } |\n| /user/456          | <-> | { type: 'USER', payload: { id: 456 } } |\n| /user/5            | <-> | { type: 'USER', payload: { id: 5 } } |\n\n*note: if you have more keys in your payload that is fine--so long as you have the minimum required keys to populate the path*\n\nLastly, we haven't mentioned `redux-first-router-link`yet--**Redux-First Router** is purposely built in\na very modular way, which is why the `<Link />` component is in a separate package. It's extremely simple\nand you're free to make your own. Basically it passes the `to` path on to **Redux-First Router** and calls\n`event.preventDefault()` to stop page reloads. It also can take an action object as a prop, which it will transform\ninto a URL for you! Its props API mirrors React Router's. The package is obvious enough once you get the hang of what's going on here--check it\nout when you're ready: [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). And if \nyou're wondering, yes there is a `NavLink` component with props like `activeClass` and `activeStyle` just like in React Router.\n\n## routesMap\n\nThe `routesMap` object allows you to match action types to express style dynamic paths, with a few frills.\nHere's the primary (and very minimal *easy to remember*) set of configuration options available to you:\n\n```javascript\nconst routesMap = {\n  HOME: '/home', // plain path strings or route objects can be used\n  CATEGORY: { path: '/category/:cat', capitalizedWords: true },\n  USER: { \n    path: '/user/:cat/:name',\n    fromPath: path => capitalizeWords(path.replace(/-/g, ' ')),\n    toPath: value => value.toLowerCase().replace(/ /g, '-'),\n  },\n}\n```\n*note: the signature of `fromPath` and `toPath` offers a little more, e.g: `(pathSegment, key) => value`. Visit [routesMap docs](./docs/connectRoutes.md#routesmap) for a bit more info when the time comes.*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /home                   | <-> | { type: 'HOME' } |\n| /category/java-script   | <-> | { type: 'CATEGORY', payload: { cat: 'Java Script' } } |\n| /user/elm/evan-czaplicki   | <-> | { type: 'USER', payload: { cat: 'ELM', name: 'Evan Czaplicki' } } |\n\n\n## routesMap (with thunk)\nWe left out one final configuration key available to you: *a thunk*.\nAfter the dispatch of a matching action, a thunk (if provided) will be called, allowing you to extract path parameters from the location reducer state and make asyncronous requests to get needed data:\n\n```javascript\nconst userThunk = async (dispatch, getState) => {\n  const { slug } = getState().location.payload\n  const data = await fetch(`/api/user/${slug}`)\n  const user = await data.json()\n  const action = { type: 'USER_FOUND', payload: { user } }\n  \n  dispatch(action)\n}\n\nconst routesMap = {\n  USER: { path: '/user/:slug', thunk: userThunk  },\n}\n```\n\n> your `thunk` should return a promise for SSR to be able to `await` for its resolution and for `updateScroll()` to be called if using our [scroll restoration package](https://github.com/faceyspacey/redux-first-router-restore-scroll).\n\n*note: visit the [location reducer docs](./docs/locationReducer) to see the `location` state's shape*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /user/steve-jobs        | <-> | { type: 'USER', payload: { slug: 'steve-jobs' } } |\n| n/a                     | n/a | { type: 'USER_FOUND', payload: { user: { name: 'Steve Jobs', slug: 'steve-jobs' } } } |\n\nThat's all folks! :+1:\n\n\n## More Docs (they are short easy reads) \n* [connectRoutes (there is a third `options` parameter you should check out)](./docs/connectRoutes.md)\n* [action.meta (the `meta` key is how our system communicates & how our action maintains its status as an \"FSA\")](./docs/action.md)\n* [location reducer shape](./docs/reducer.md)\n* [server side rendering](./docs/server-rendering.md)\n* [query strings](./docs/query-strings.md)\n* [scroll restoration](./docs/scroll-restoration.md)\n* [redirects](./docs/server-rendering.md#redirects-example)\n* [client-only API](./docs/client-only-api.md)\n* [React Native](./docs/react-native.md)\n* [React Navigation Support](./docs/react-native.md#first-class-react-navigation-support) 🔮  - *my current primary day-to-day focus*\n* [Prefetching!](./docs/prefetching.md) 🔮 - `<Link prefetch />` ***powered by:*** **[react-universal-component](https://github.com/faceyspacey/react-universal-component)** + **[webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks)**\n## FAQ\n\nWhat about if the URL is not found?\n> If the path is not found, or if actions fail to be converted to paths, our `NOT_FOUND` action type will be dispatched. You can apply it\nas a case in your reducer's switch statements. Here's where you get it: `import { NOT_FOUND } from 'redux-first-router'`. We have strong\nidiomatic way to deal with it in server side rendering--check it out: [server side rendering](./docs/server-rendering.md).\n\nWhat if I don't want to use the *thunk* feature, can I use other ways of requesting the data?\n> Of course. This work along side any middleware of your choosing, and even GraphQL solutions like Apollo. But for the 80% use-case, \"follow-up\" thunks attached to routes gets a lot of bang for your buck via the context associated with the initial route action.\n\nOk, but what if I request my data in `componentDidMount`?\n>This works great for that, but it's a naive strategy without a server-side recursive promise resolution service like Apollo offers. The problem with `componentDidMount` is that you can't generate all\nthe state required to render your app without first rendering your app at least once. That means additional work on your part as well as cycles\non the server (the latter of which is also a caveat for Apollo). It's also makes Redux's highly useful time-traveling tools *unreliable*. If that's where you're at in how you get things\ndone, that's fine--but we recommend leveling up to a \"dispatch to get state\" strategy (rather than a \"get state on render\" approach), as that will provide way more predictability, which is\nespecially useful when it comes to testing. When it comes to server side rendering there is no better option. We recommend looking at our \n[server side rendering doc](./docs/server-rendering.md) to see the\nrecommended approach.\n\nThe middleware dispatches thunks asyncronously with no way for me to *await* them, how can I wait for asyncronously received data on the server?\n> Please visit the [server side rendering doc](./docs/server-rendering.md). In short,\nthunks are not dispatched from the middleware on the server, but `connectRoutes`, returns a `thunk` in addition to `middleware`, `enhancer` and `reducer`,\nwhich you can await on, and it will retreive any data corresponding to the current route! We think our solution is slick and sensible.\n\nThe server has no `window` or `history`, how can I get that on the server?\n> The [history](https://github.com/ReactTraining/history) package provides a `createMemoryHistory()` function just for this scenario.\nIt essentially generates a fake `history` object based on the `request.path` *express* (or similar packages) will give you. It's painless. Check it out!\n\nDoes this work with React Native?\n> Yes, just like server side rendering, you can use the `history` package's `createMemoryHistory()` function. It's perfect for React Native's `Linking` API and push notifications in general. In fact, \nif you built your React Native app already and are just starting to deal with deep-linking and push notifications, **Redux-First Router**\nis perfectly suited to be tacked on in final stages with very few changes. We also have first-class support for [**React Navigation**](./docs/react-native.md#first-class-react-navigation-support), which really is the crown jewel here and where we do most our work these days. It does some amazing things. [Check it out!](./docs/react-native.md#first-class-react-navigation-support)\n\nOk, but there's gotta be a catch--what changes should I expect to make if I start using **Redux-First Router**?\n> Primarily it will force you to consolidate the actions you use in your reducers. Whereas before you might have had\nseveral actions to trigger the same state, you will now centralize on a smaller number of actions that each correspond \nto a specific URL path. Your actions will become more \"page-like\", i.e. geared towards triggering page/URL transitions. \nThat said, you absolutely don't need to have a URL for every action. In our apps, we don't. Just the actions that lead\nto the biggest visual changes in the page that we want search engines to pick up.\n\nAnd what about actually getting links on the page for search engines to see?\n> Use [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). This package has been built in a modular way,\nwhich is why that's not in here. *redux-first-router-link's* `<Link />` and `<NavLink />` components mirror React Router's. You should be using these on web to get `<a>` tags on your page for *Google*. In React Native, just dispatch actions in `onPress` handlers.\n\nWhy no route matching components like *React Router*?\n> Because they are unnecessary when the combination of actions and reducers lead to both a wider variety and better defined set of states, not to mention\nmore singular. By \"singular\" we mean that you don't have to think in terms of *both* redux state *AND* address bar paths. You just think\nin terms of *state* after you setup your routes map. It makes your life simpler. It makes your code cleaner and easier to understand. It gives you the best control\nReact + Redux has to offer when it comes to optimizing rendering for animations. \n\nWhat about all the code splitting features *Next.js* has to offer?\n> They certainly crush it when it comes to code splitting. There's no doubt about it. But check out their Redux example\nwhere it seems to have a different `store` per page. I've asked, and they do merge, but it complicates how you will use Redux. If your app is \nvery page-like, great--but we think the whole purpose of tools like React and Redux is to build *\"apps\"* not *pages*. \nThe hallmark of an app is seamless animated transitions where you forget you're on a specific page. You need full\ncontrol of rendering to do that at the highest level. `shouldComponentUpdate`, pure functions and [reselect](https://github.com/reactjs/reselect)\nbecome your best friends. Everything else gets in the way. And of course **Redux-First Router** stays out of the way.\nStraightup, let us know if you think we nailed it or what we're missing. Feel free to use github issues.\n\nGee, I've never seen a Redux middleware/enhancer tool return so many things to use for configuring the store???\n>Part of what **Redux-First Router** does so well (and one of its considerations from the start) is server side rendering. All these\naspects depend on state unique to each visit/request. The returned `middleware`, `enhancer`, `reducer` and `thunk` functions share\nenclosed state (i.e. within a \"closure\") in a *per instance* fashion. Most of the code is written as pure utility functions\nand we are very proud about that. But what's not is returned to you in a way that will insure state is not shared between\nrequests on the server. In short, we have spared no expense to get this package as tight as possible. Watch the video below to get an \nidea of how the system works and its overall simplicity:\n\n*video coming soon...*\n\n\n## Contributing\n\n\nWe use [commitizen](https://github.com/commitizen/cz-cli), so run `npm run cm` to make commits. A command-line form will appear, requiring you answer a few questions to automatically produce a nicely formatted commit. Releases, semantic version numbers, tags, changelogs and publishing to NPM will automatically be handled based on these commits thanks to [semantic-release](https://github.com/semantic-release/semantic-release). Be good.\n\n\n## Tests\n\nReviewing a package's tests are a great way to get familiar with it. It's direct insight into the capabilities of the given package (if the tests are thorough). What's even better is a screenshot of the tests neatly organized and grouped (you know the whole \"a picture says a thousand words\" thing). \n\nBelow is a screenshot of this module's tests running in [Wallaby](https://wallabyjs.com) *(\"An Integrated Continuous Testing Tool for JavaScript\")* which everyone in the React community should be using. It's fantastic and has taken my entire workflow to the next level. It re-runs your tests on every change along with comprehensive logging, bi-directional linking to your IDE, in-line code coverage indicators, **and even snapshot comparisons + updates for Jest!** I requestsed that feature by the way :). It's basically a substitute for live-coding that inspires you to test along your journey.\n\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-1.png)\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-2.png)\n\n## More from FaceySpacey in Reactlandia\n- [react-universal-component](https://github.com/faceyspacey/react-universal-component). It's made to work perfectly with *Redux First Router*. Together they comprise our *\"frameworkless\"* Redux-based approach to what Next.js does (splitting, SSR, prefetching, and routing).\n- [webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks). And this is the foundation of our `Universal` product line. Make sure to check out!\n\n","readmeFilename":"README.md","gitHead":"bf542628819d3887bb9a7aadf9fda3b9b5d7fcf1","_id":"redux-first-router@0.0.5-rudy","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-k+zyeVJ1+sam/fZjHaGc3NHbzITj1ZPwZ38oewHIqSzQ19YmVqULaZjK+MKz6/aI1WH7YHZhtNz6kwkZc0vwBQ==","shasum":"182faa6ba4c77a3b9272924f865e8246e2802aac","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.5-rudy.tgz","fileCount":55,"unpackedSize":488740,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBsf03O9RmEiOPVmbmYh3+NjgOW80HlN2T9/DE3BebwsAiAFz3fvvZlw7U+kgsMoPHaz98s/6Hpvy6D3dSEbemcKlQ=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_0.0.5-rudy_1519686987458_0.6184398979464416"},"_hasShrinkwrap":false},"0.0.6-rudy":{"name":"redux-first-router","version":"0.0.6-rudy","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.54.1","flow-copy-source":"^1.1.0","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"readme":"<a href=\"https://gitter.im/Reactlandia/Lobby\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"http://cdn.reactlandia.com/reactlandia-chat.png\">\n</a>\n\n<a href=\"https://codesandbox.io/s/github/faceyspacey/redux-first-router-codesandbox\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-boilerplate\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/boilerplate.png?a=1\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-demo\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/demo.png\">\n</a>\n\n> **UPDATE (8/15):** you can now add additional routes as part of your code splitting strategy. See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/62#issuecomment-322558836) for more info.\n\n> **UPDATE (9/5):** you can now block user navigation via the `confirmLeave` route option (and customize its appearance via the `displayConfirmLeave` option). See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/27#issuecomment-327431413) for more info. Do `yarn upgrade redux-first-router@next` to get it.\n\n> **UPDATE (9/6):** MUCH ANTICIPATED FEATURE: you can now do all sorts of optional params in your paths, match multiple similar paths to the same type, use regexes, and use params that capture multiple segments. See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/83#issuecomment-327703226) for more info. Do `yarn upgrade redux-first-router@next` to get it.\n\n> **UPDATE (9/9):** *4 new thiings:* 1) route paths are now cached for better performance (less cycles wasted on parsing). 2) you can now do **pathless routes!**. I.e. you can use routes just for the purpose of the thunk feature, thereby achieving more uniformity across your async actions--just use RFR! Just dispatch the action type for which you have a thunk in your `routesMap` and it will be called like any other. To learn more about it: [check this example](https://gist.github.com/faceyspacey/2771c05a62a338fa6d3d23d76e6e7c5a). 3) now all thunks and callbacks (`onBeforeChange`, `onAfterChange`, etc) receive a 3rd *\"bag\"* argument which currently has a key for the current `action` and an `extra` key. More keys may be added later. The `extra` key is an option you provide to `connectRoutes` which is the equivalent of Redux-Thunk's *\"extra argument\"*. It just happens to be in our bag. That said, `onBeforeChange` used to receive just an `action` as a 3rd argument. So unfortunately this is a breaking change. Check the aforementioned example to learn more about this too. 4) lastly, now RFR skips actions with an `error` key; this should resolve a few quirks for developers using middleware that explicitly handle errors already. If it ever makes sense for RFR/Rudy to handle errors, we'll provide a robust solution. Half-assing as we've done doesn't make sense for now.\n\n\n# Redux-First Router\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/v/redux-first-router.svg\" alt=\"Version\" />\n  </a>\n\n  <a href=\"https://travis-ci.org/faceyspacey/redux-first-router\">\n    <img src=\"https://travis-ci.org/faceyspacey/redux-first-router.svg?branch=master\" alt=\"Build Status\" />\n  </a>\n\n  <a href=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/coverage\">\n    <img src=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/badges/coverage.svg\" alt=\"Coverage Status\"/>\n  </a>\n\n  <a href=\"https://greenkeeper.io\">\n    <img src=\"https://badges.greenkeeper.io/faceyspacey/redux-first-router.svg\" alt=\"Green Keeper\" />\n  </a>\n\n  <a href=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router\">\n    <img src=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/badges/gpa.svg\" alt=\"GPA\" />\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/dt/redux-first-router.svg\" alt=\"Downloads\" />\n  </a>\n  \n  <a href=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n    <img src=\"https://snyk.io/test/github/faceyspacey/redux-first-router/badge.svg\" alt=\"Known Vulnerabilities\" data-canonical-src=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/l/redux-first-router.svg\" alt=\"License\" />\n  </a>\n</p>\n\n\n![redux-first-router flow chart](https://raw.githubusercontent.com/faceyspacey/redux-first-router/master/docs/redux-first-router-flow-chart.png)\n\n\nThe goal of **Redux-First Router** is to think of your app in *states*, not *routes*, not *components*, while keeping the address bar in sync. Everthing is state, not components. Connect your components and *just dispatch* ***flux standard actions.***\n\n**Articles You Should Read:**\n- **[Pre Release: Redux-First Router — A Step Beyond Redux-Little-Router](https://medium.com/@faceyspacey/pre-release-redux-first-router-a-step-beyond-redux-little-router-cd2716576aea)** \n- **[Redux-First Router lookin Sexy on Code Sandbox](https://medium.com/faceyspacey/redux-first-router-lookin-sexy-on-code-sandbox-d9d9bea15053)** \n- **[Redux-First Router data-fetching: solving the 80% use case for async Middleware](https://medium.com/faceyspacey/redux-first-router-data-fetching-solving-the-80-use-case-for-async-middleware-14529606c262)**\n- **[Server-Render like a Pro /w Redux-First Router in 10 steps](https://medium.com/faceyspacey/server-render-like-a-pro-w-redux-first-router-in-10-steps-b27dd93859de)** 🚀🚀🚀 *(READ THIS!)*\n\nThe thinking behind this package has been: \"if we were to dream up a 'Redux-first' approach to routing from the \nground up, what would it look like?\" The result has been what we hope you feel to be one of those \n\"inversion of control\" scenarios that makes a challenging problem *simple* when coming at it from a different angle.\nWe hope *Redux-First Router* comes off as an obvious solution.\n\nBefore we get started, there is some *prior art*, and you should [check them out](./docs/prior-art.md). **Redux-First Router**\nisn't the first stab at something like this, but--aside from this path being pre-validated--we feel it is the most complete, tested and *spot on* solution.\nWe have reviewed what came before, stripped what was unnecessary, added what was needed, and generally focused on getting the ***developer experience*** right. Ultimately it offers far more than previous solutions. The best\npart is that once you set it up there's virtually nothing left to do. It's truly \"set it and forget it.\" Let's get started.\n\n> And did we mention: **it has first class support for** ***React Navigation!***\n\n## Installation\n\nInstall `redux-first-router` and its peer dependency `history` plus our small `<Link />` package:\n\n```bash\nyarn add history redux-first-router redux-first-router-link\n```\n\n**Full-Featured Universal Demo App (includes SSR + Splitting!):**\n\nhttps://github.com/faceyspacey/redux-first-router-demo\n\n\n## Motivation - What Routing in Redux is Meant To Be\n\nTo automate routing. To be able to use Redux *as is* while keeping the URL in the address bar in sync. \nTo think solely in terms of *\"state\"* and *NOT routes, paths, route matching components*. And of course\nfor server side rendering to require no more than dispatching on the store like normal. *Path params are just\naction payloads, and action types demarcate a certain kind of path*. **That is what routing in Redux is meant to be.** \n\nIn practice, what that means is having the address bar update in response to actions and ***bi-directionally*** \nhaving actions dispatched in response to address bar changes, such as via the browser\nback/forward buttons. The \"bi-directional\" aspect is embodied in the diagram above where the first blue arrows\npoints both ways--i.e. dispatching actions changes the address bar, *and* changes to\nthe address bar dispatches actions.\n\nIn addition, here are some key obstacles **Redux-First Router** seeks to *avoid*:\n\n* having to render from any state that doesn't come from redux\n* cluttering component code with route-related components\n* the added complexity [and bugs] from 2 forms of state: redux state vs. routing state\n* large API surface areas  of packages/frameworks\nlike `react-router` and `next.js`\n* workarounds that such large *(likely \"leaky\")* abstractions inevitably require to achieve a professional app\n* strategies as low level as possible to deal with animations. Animations coinciding with React \ncomponent updates *are* a problem, particularly in the browser (React Native is better). \n\"Jank\" is common. Techniques  like `shouldComponentUpdate` are a must; routing frameworks \nget in the way of optimizing animations.\n\n\n## The Gist\nIt's *set-and-forget-it*, so here's the most work you'll ever do! :+1:\n```javascript\nimport { connectRoutes } from 'redux-first-router'\nimport { combineReducers, createStore, applyMiddleware, compose } from 'redux'\nimport createHistory from 'history/createBrowserHistory'\nimport userIdReducer from './reducers/userIdReducer'\n\nconst history = createHistory()\n\n// THE WORK:\nconst routesMap = { \n  HOME: '/home',      // action <-> url path\n  USER: '/user/:id',  // :id is a dynamic segment\n}\n\nconst { reducer, middleware, enhancer } = connectRoutes(history, routesMap) // yes, 3 redux aspects\n\n// and you already know how the story ends:\nconst rootReducer = combineReducers({ location: reducer, userId: userIdReducer })\nconst middlewares = applyMiddleware(middleware)\n// note the order: enhancer, then middlewares\nconst store = createStore(rootReducer, compose(enhancer, middlewares))\n```\n\n```javascript\nimport { NOT_FOUND } from 'redux-first-router'\n\nexport const userIdReducer = (state = null, action = {}) => {\n  switch(action.type) {\n    case 'HOME':\n    case NOT_FOUND:\n      return null\n    case 'USER':\n      return action.payload.id\n    default: \n      return state\n  }\n}\n```\n\nAnd here's how you'd embed SEO/Redux-friendly links in your app, while making use of the triggered state:\n```javascript\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport { Provider, connect } from 'react-redux'\nimport Link from 'redux-first-router-link'\nimport store from './configureStore'\n\nconst App = ({ userId, onClick }) =>\n  <div>\n    {!userId  \n      ? <div>\n          <h1>HOME</h1>\n\n          // all 3 \"links\" dispatch actions:\n          <Link to=\"/user/123\">User 123</Link> // action updates location state + changes address bar\n          <Link to={{ type: 'USER', payload: { id: 456 } }}>User 456</Link> // so does this\n          <span onClick={onClick}>User 5</span>   // so does this, but without SEO benefits\n        </div>\n\n      : <h1>USER: {userId}</h1> // press the browser BACK button to go HOME :)\n    }\n  </div>\n\nconst mapStateToProps = ({ userId }) => ({ userId })\nconst mapDispatchToProps = (dispatch) => ({\n  onClick: () => dispatch({ type: 'USER', payload: { id: 5 } })\n})\n\nconst AppContainer = connect(mapStateToProps, mapDispatchToProps)(App)\n\nReactDOM.render(\n  <Provider store={store}>\n    <AppContainer />\n  </Provider>,\n  document.getElementById('react-root')\n)\n```\n*note: ALL THREE clickable elements/links above will change the address bar while dispatching the corresponding `USER` action. The only difference\nis the last one won't get the benefits of SEO--i.e. an `<a>` tag with a matching `to` path won't be embedded in the page.* ***What this means is\nyou can take an existing Redux app that dispatches similar actions and get the benefit of syncing your address bar without changing your code!*** *The workflow we recommend is to\nfirst do that and then, once you're comfortable, to use our `<Link />` component to indicate your intentions to Google. Lastly, we recommend\nusing `actions` as your `to` prop since it doesn't marry you to a given URL structure--you can always change it in one place later (the `routesMap` object)!*\n\nBased on the above `routesMap` the following actions will be dispatched when the\ncorresponding URL is visited, and conversely those URLs will appear in the address bar\nwhen actions with the matching `type` and parameters are provided\nas keys in the payload object:\n\n| URL                | <-> | ACTION     |\n| ------------------ |:---:| ----------:|\n| /home              | <-> | { type: 'HOME' } |\n| /user/123          | <-> | { type: 'USER', payload: { id: 123 } } |\n| /user/456          | <-> | { type: 'USER', payload: { id: 456 } } |\n| /user/5            | <-> | { type: 'USER', payload: { id: 5 } } |\n\n*note: if you have more keys in your payload that is fine--so long as you have the minimum required keys to populate the path*\n\nLastly, we haven't mentioned `redux-first-router-link`yet--**Redux-First Router** is purposely built in\na very modular way, which is why the `<Link />` component is in a separate package. It's extremely simple\nand you're free to make your own. Basically it passes the `to` path on to **Redux-First Router** and calls\n`event.preventDefault()` to stop page reloads. It also can take an action object as a prop, which it will transform\ninto a URL for you! Its props API mirrors React Router's. The package is obvious enough once you get the hang of what's going on here--check it\nout when you're ready: [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). And if \nyou're wondering, yes there is a `NavLink` component with props like `activeClass` and `activeStyle` just like in React Router.\n\n## routesMap\n\nThe `routesMap` object allows you to match action types to express style dynamic paths, with a few frills.\nHere's the primary (and very minimal *easy to remember*) set of configuration options available to you:\n\n```javascript\nconst routesMap = {\n  HOME: '/home', // plain path strings or route objects can be used\n  CATEGORY: { path: '/category/:cat', capitalizedWords: true },\n  USER: { \n    path: '/user/:cat/:name',\n    fromPath: path => capitalizeWords(path.replace(/-/g, ' ')),\n    toPath: value => value.toLowerCase().replace(/ /g, '-'),\n  },\n}\n```\n*note: the signature of `fromPath` and `toPath` offers a little more, e.g: `(pathSegment, key) => value`. Visit [routesMap docs](./docs/connectRoutes.md#routesmap) for a bit more info when the time comes.*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /home                   | <-> | { type: 'HOME' } |\n| /category/java-script   | <-> | { type: 'CATEGORY', payload: { cat: 'Java Script' } } |\n| /user/elm/evan-czaplicki   | <-> | { type: 'USER', payload: { cat: 'ELM', name: 'Evan Czaplicki' } } |\n\n\n## routesMap (with thunk)\nWe left out one final configuration key available to you: *a thunk*.\nAfter the dispatch of a matching action, a thunk (if provided) will be called, allowing you to extract path parameters from the location reducer state and make asyncronous requests to get needed data:\n\n```javascript\nconst userThunk = async (dispatch, getState) => {\n  const { slug } = getState().location.payload\n  const data = await fetch(`/api/user/${slug}`)\n  const user = await data.json()\n  const action = { type: 'USER_FOUND', payload: { user } }\n  \n  dispatch(action)\n}\n\nconst routesMap = {\n  USER: { path: '/user/:slug', thunk: userThunk  },\n}\n```\n\n> your `thunk` should return a promise for SSR to be able to `await` for its resolution and for `updateScroll()` to be called if using our [scroll restoration package](https://github.com/faceyspacey/redux-first-router-restore-scroll).\n\n*note: visit the [location reducer docs](./docs/locationReducer) to see the `location` state's shape*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /user/steve-jobs        | <-> | { type: 'USER', payload: { slug: 'steve-jobs' } } |\n| n/a                     | n/a | { type: 'USER_FOUND', payload: { user: { name: 'Steve Jobs', slug: 'steve-jobs' } } } |\n\nThat's all folks! :+1:\n\n\n## More Docs (they are short easy reads) \n* [connectRoutes (there is a third `options` parameter you should check out)](./docs/connectRoutes.md)\n* [action.meta (the `meta` key is how our system communicates & how our action maintains its status as an \"FSA\")](./docs/action.md)\n* [location reducer shape](./docs/reducer.md)\n* [server side rendering](./docs/server-rendering.md)\n* [query strings](./docs/query-strings.md)\n* [scroll restoration](./docs/scroll-restoration.md)\n* [redirects](./docs/server-rendering.md#redirects-example)\n* [client-only API](./docs/client-only-api.md)\n* [React Native](./docs/react-native.md)\n* [React Navigation Support](./docs/react-native.md#first-class-react-navigation-support) 🔮  - *my current primary day-to-day focus*\n* [Prefetching!](./docs/prefetching.md) 🔮 - `<Link prefetch />` ***powered by:*** **[react-universal-component](https://github.com/faceyspacey/react-universal-component)** + **[webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks)**\n## FAQ\n\nWhat about if the URL is not found?\n> If the path is not found, or if actions fail to be converted to paths, our `NOT_FOUND` action type will be dispatched. You can apply it\nas a case in your reducer's switch statements. Here's where you get it: `import { NOT_FOUND } from 'redux-first-router'`. We have strong\nidiomatic way to deal with it in server side rendering--check it out: [server side rendering](./docs/server-rendering.md).\n\nWhat if I don't want to use the *thunk* feature, can I use other ways of requesting the data?\n> Of course. This work along side any middleware of your choosing, and even GraphQL solutions like Apollo. But for the 80% use-case, \"follow-up\" thunks attached to routes gets a lot of bang for your buck via the context associated with the initial route action.\n\nOk, but what if I request my data in `componentDidMount`?\n>This works great for that, but it's a naive strategy without a server-side recursive promise resolution service like Apollo offers. The problem with `componentDidMount` is that you can't generate all\nthe state required to render your app without first rendering your app at least once. That means additional work on your part as well as cycles\non the server (the latter of which is also a caveat for Apollo). It's also makes Redux's highly useful time-traveling tools *unreliable*. If that's where you're at in how you get things\ndone, that's fine--but we recommend leveling up to a \"dispatch to get state\" strategy (rather than a \"get state on render\" approach), as that will provide way more predictability, which is\nespecially useful when it comes to testing. When it comes to server side rendering there is no better option. We recommend looking at our \n[server side rendering doc](./docs/server-rendering.md) to see the\nrecommended approach.\n\nThe middleware dispatches thunks asyncronously with no way for me to *await* them, how can I wait for asyncronously received data on the server?\n> Please visit the [server side rendering doc](./docs/server-rendering.md). In short,\nthunks are not dispatched from the middleware on the server, but `connectRoutes`, returns a `thunk` in addition to `middleware`, `enhancer` and `reducer`,\nwhich you can await on, and it will retreive any data corresponding to the current route! We think our solution is slick and sensible.\n\nThe server has no `window` or `history`, how can I get that on the server?\n> The [history](https://github.com/ReactTraining/history) package provides a `createMemoryHistory()` function just for this scenario.\nIt essentially generates a fake `history` object based on the `request.path` *express* (or similar packages) will give you. It's painless. Check it out!\n\nDoes this work with React Native?\n> Yes, just like server side rendering, you can use the `history` package's `createMemoryHistory()` function. It's perfect for React Native's `Linking` API and push notifications in general. In fact, \nif you built your React Native app already and are just starting to deal with deep-linking and push notifications, **Redux-First Router**\nis perfectly suited to be tacked on in final stages with very few changes. We also have first-class support for [**React Navigation**](./docs/react-native.md#first-class-react-navigation-support), which really is the crown jewel here and where we do most our work these days. It does some amazing things. [Check it out!](./docs/react-native.md#first-class-react-navigation-support)\n\nOk, but there's gotta be a catch--what changes should I expect to make if I start using **Redux-First Router**?\n> Primarily it will force you to consolidate the actions you use in your reducers. Whereas before you might have had\nseveral actions to trigger the same state, you will now centralize on a smaller number of actions that each correspond \nto a specific URL path. Your actions will become more \"page-like\", i.e. geared towards triggering page/URL transitions. \nThat said, you absolutely don't need to have a URL for every action. In our apps, we don't. Just the actions that lead\nto the biggest visual changes in the page that we want search engines to pick up.\n\nAnd what about actually getting links on the page for search engines to see?\n> Use [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). This package has been built in a modular way,\nwhich is why that's not in here. *redux-first-router-link's* `<Link />` and `<NavLink />` components mirror React Router's. You should be using these on web to get `<a>` tags on your page for *Google*. In React Native, just dispatch actions in `onPress` handlers.\n\nWhy no route matching components like *React Router*?\n> Because they are unnecessary when the combination of actions and reducers lead to both a wider variety and better defined set of states, not to mention\nmore singular. By \"singular\" we mean that you don't have to think in terms of *both* redux state *AND* address bar paths. You just think\nin terms of *state* after you setup your routes map. It makes your life simpler. It makes your code cleaner and easier to understand. It gives you the best control\nReact + Redux has to offer when it comes to optimizing rendering for animations. \n\nWhat about all the code splitting features *Next.js* has to offer?\n> They certainly crush it when it comes to code splitting. There's no doubt about it. But check out their Redux example\nwhere it seems to have a different `store` per page. I've asked, and they do merge, but it complicates how you will use Redux. If your app is \nvery page-like, great--but we think the whole purpose of tools like React and Redux is to build *\"apps\"* not *pages*. \nThe hallmark of an app is seamless animated transitions where you forget you're on a specific page. You need full\ncontrol of rendering to do that at the highest level. `shouldComponentUpdate`, pure functions and [reselect](https://github.com/reactjs/reselect)\nbecome your best friends. Everything else gets in the way. And of course **Redux-First Router** stays out of the way.\nStraightup, let us know if you think we nailed it or what we're missing. Feel free to use github issues.\n\nGee, I've never seen a Redux middleware/enhancer tool return so many things to use for configuring the store???\n>Part of what **Redux-First Router** does so well (and one of its considerations from the start) is server side rendering. All these\naspects depend on state unique to each visit/request. The returned `middleware`, `enhancer`, `reducer` and `thunk` functions share\nenclosed state (i.e. within a \"closure\") in a *per instance* fashion. Most of the code is written as pure utility functions\nand we are very proud about that. But what's not is returned to you in a way that will insure state is not shared between\nrequests on the server. In short, we have spared no expense to get this package as tight as possible. Watch the video below to get an \nidea of how the system works and its overall simplicity:\n\n*video coming soon...*\n\n\n## Contributing\n\n\nWe use [commitizen](https://github.com/commitizen/cz-cli), so run `npm run cm` to make commits. A command-line form will appear, requiring you answer a few questions to automatically produce a nicely formatted commit. Releases, semantic version numbers, tags, changelogs and publishing to NPM will automatically be handled based on these commits thanks to [semantic-release](https://github.com/semantic-release/semantic-release). Be good.\n\n\n## Tests\n\nReviewing a package's tests are a great way to get familiar with it. It's direct insight into the capabilities of the given package (if the tests are thorough). What's even better is a screenshot of the tests neatly organized and grouped (you know the whole \"a picture says a thousand words\" thing). \n\nBelow is a screenshot of this module's tests running in [Wallaby](https://wallabyjs.com) *(\"An Integrated Continuous Testing Tool for JavaScript\")* which everyone in the React community should be using. It's fantastic and has taken my entire workflow to the next level. It re-runs your tests on every change along with comprehensive logging, bi-directional linking to your IDE, in-line code coverage indicators, **and even snapshot comparisons + updates for Jest!** I requestsed that feature by the way :). It's basically a substitute for live-coding that inspires you to test along your journey.\n\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-1.png)\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-2.png)\n\n## More from FaceySpacey in Reactlandia\n- [react-universal-component](https://github.com/faceyspacey/react-universal-component). It's made to work perfectly with *Redux First Router*. Together they comprise our *\"frameworkless\"* Redux-based approach to what Next.js does (splitting, SSR, prefetching, and routing).\n- [webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks). And this is the foundation of our `Universal` product line. Make sure to check out!\n\n","readmeFilename":"README.md","gitHead":"e94a913e87df670071b185b30ba6ff722249773f","_id":"redux-first-router@0.0.6-rudy","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-S+opbaVwa2YdRJjug8AWfLfdn8Wo/VtJaFN9c8yIDs1AA1Oxhly3/nRevi1N+NfhedWzcwvGFufJfYhKcJ1qyQ==","shasum":"3b40e1286d0b497947f8ff22c5963b10e257389b","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.6-rudy.tgz","fileCount":55,"unpackedSize":489249,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICcUyDr8vneb0Xs+rooShcFLK96SM2HW3I8Vt3euG0qIAiABn4mXNEi+NemSfuoF3HeeuwebY1lFfmy3I+j+v2stUg=="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_0.0.6-rudy_1519774967406_0.23676253687394078"},"_hasShrinkwrap":false},"0.0.7-rudy":{"name":"redux-first-router","version":"0.0.7-rudy","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.54.1","flow-copy-source":"^1.1.0","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"readme":"<a href=\"https://gitter.im/Reactlandia/Lobby\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"http://cdn.reactlandia.com/reactlandia-chat.png\">\n</a>\n\n<a href=\"https://codesandbox.io/s/github/faceyspacey/redux-first-router-codesandbox\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-boilerplate\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/boilerplate.png?a=1\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-demo\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/demo.png\">\n</a>\n\n> **UPDATE (8/15):** you can now add additional routes as part of your code splitting strategy. See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/62#issuecomment-322558836) for more info.\n\n> **UPDATE (9/5):** you can now block user navigation via the `confirmLeave` route option (and customize its appearance via the `displayConfirmLeave` option). See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/27#issuecomment-327431413) for more info. Do `yarn upgrade redux-first-router@next` to get it.\n\n> **UPDATE (9/6):** MUCH ANTICIPATED FEATURE: you can now do all sorts of optional params in your paths, match multiple similar paths to the same type, use regexes, and use params that capture multiple segments. See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/83#issuecomment-327703226) for more info. Do `yarn upgrade redux-first-router@next` to get it.\n\n> **UPDATE (9/9):** *4 new thiings:* 1) route paths are now cached for better performance (less cycles wasted on parsing). 2) you can now do **pathless routes!**. I.e. you can use routes just for the purpose of the thunk feature, thereby achieving more uniformity across your async actions--just use RFR! Just dispatch the action type for which you have a thunk in your `routesMap` and it will be called like any other. To learn more about it: [check this example](https://gist.github.com/faceyspacey/2771c05a62a338fa6d3d23d76e6e7c5a). 3) now all thunks and callbacks (`onBeforeChange`, `onAfterChange`, etc) receive a 3rd *\"bag\"* argument which currently has a key for the current `action` and an `extra` key. More keys may be added later. The `extra` key is an option you provide to `connectRoutes` which is the equivalent of Redux-Thunk's *\"extra argument\"*. It just happens to be in our bag. That said, `onBeforeChange` used to receive just an `action` as a 3rd argument. So unfortunately this is a breaking change. Check the aforementioned example to learn more about this too. 4) lastly, now RFR skips actions with an `error` key; this should resolve a few quirks for developers using middleware that explicitly handle errors already. If it ever makes sense for RFR/Rudy to handle errors, we'll provide a robust solution. Half-assing as we've done doesn't make sense for now.\n\n\n# Redux-First Router\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/v/redux-first-router.svg\" alt=\"Version\" />\n  </a>\n\n  <a href=\"https://travis-ci.org/faceyspacey/redux-first-router\">\n    <img src=\"https://travis-ci.org/faceyspacey/redux-first-router.svg?branch=master\" alt=\"Build Status\" />\n  </a>\n\n  <a href=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/coverage\">\n    <img src=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/badges/coverage.svg\" alt=\"Coverage Status\"/>\n  </a>\n\n  <a href=\"https://greenkeeper.io\">\n    <img src=\"https://badges.greenkeeper.io/faceyspacey/redux-first-router.svg\" alt=\"Green Keeper\" />\n  </a>\n\n  <a href=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router\">\n    <img src=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/badges/gpa.svg\" alt=\"GPA\" />\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/dt/redux-first-router.svg\" alt=\"Downloads\" />\n  </a>\n  \n  <a href=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n    <img src=\"https://snyk.io/test/github/faceyspacey/redux-first-router/badge.svg\" alt=\"Known Vulnerabilities\" data-canonical-src=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/l/redux-first-router.svg\" alt=\"License\" />\n  </a>\n</p>\n\n\n![redux-first-router flow chart](https://raw.githubusercontent.com/faceyspacey/redux-first-router/master/docs/redux-first-router-flow-chart.png)\n\n\nThe goal of **Redux-First Router** is to think of your app in *states*, not *routes*, not *components*, while keeping the address bar in sync. Everthing is state, not components. Connect your components and *just dispatch* ***flux standard actions.***\n\n**Articles You Should Read:**\n- **[Pre Release: Redux-First Router — A Step Beyond Redux-Little-Router](https://medium.com/@faceyspacey/pre-release-redux-first-router-a-step-beyond-redux-little-router-cd2716576aea)** \n- **[Redux-First Router lookin Sexy on Code Sandbox](https://medium.com/faceyspacey/redux-first-router-lookin-sexy-on-code-sandbox-d9d9bea15053)** \n- **[Redux-First Router data-fetching: solving the 80% use case for async Middleware](https://medium.com/faceyspacey/redux-first-router-data-fetching-solving-the-80-use-case-for-async-middleware-14529606c262)**\n- **[Server-Render like a Pro /w Redux-First Router in 10 steps](https://medium.com/faceyspacey/server-render-like-a-pro-w-redux-first-router-in-10-steps-b27dd93859de)** 🚀🚀🚀 *(READ THIS!)*\n\nThe thinking behind this package has been: \"if we were to dream up a 'Redux-first' approach to routing from the \nground up, what would it look like?\" The result has been what we hope you feel to be one of those \n\"inversion of control\" scenarios that makes a challenging problem *simple* when coming at it from a different angle.\nWe hope *Redux-First Router* comes off as an obvious solution.\n\nBefore we get started, there is some *prior art*, and you should [check them out](./docs/prior-art.md). **Redux-First Router**\nisn't the first stab at something like this, but--aside from this path being pre-validated--we feel it is the most complete, tested and *spot on* solution.\nWe have reviewed what came before, stripped what was unnecessary, added what was needed, and generally focused on getting the ***developer experience*** right. Ultimately it offers far more than previous solutions. The best\npart is that once you set it up there's virtually nothing left to do. It's truly \"set it and forget it.\" Let's get started.\n\n> And did we mention: **it has first class support for** ***React Navigation!***\n\n## Installation\n\nInstall `redux-first-router` and its peer dependency `history` plus our small `<Link />` package:\n\n```bash\nyarn add history redux-first-router redux-first-router-link\n```\n\n**Full-Featured Universal Demo App (includes SSR + Splitting!):**\n\nhttps://github.com/faceyspacey/redux-first-router-demo\n\n\n## Motivation - What Routing in Redux is Meant To Be\n\nTo automate routing. To be able to use Redux *as is* while keeping the URL in the address bar in sync. \nTo think solely in terms of *\"state\"* and *NOT routes, paths, route matching components*. And of course\nfor server side rendering to require no more than dispatching on the store like normal. *Path params are just\naction payloads, and action types demarcate a certain kind of path*. **That is what routing in Redux is meant to be.** \n\nIn practice, what that means is having the address bar update in response to actions and ***bi-directionally*** \nhaving actions dispatched in response to address bar changes, such as via the browser\nback/forward buttons. The \"bi-directional\" aspect is embodied in the diagram above where the first blue arrows\npoints both ways--i.e. dispatching actions changes the address bar, *and* changes to\nthe address bar dispatches actions.\n\nIn addition, here are some key obstacles **Redux-First Router** seeks to *avoid*:\n\n* having to render from any state that doesn't come from redux\n* cluttering component code with route-related components\n* the added complexity [and bugs] from 2 forms of state: redux state vs. routing state\n* large API surface areas  of packages/frameworks\nlike `react-router` and `next.js`\n* workarounds that such large *(likely \"leaky\")* abstractions inevitably require to achieve a professional app\n* strategies as low level as possible to deal with animations. Animations coinciding with React \ncomponent updates *are* a problem, particularly in the browser (React Native is better). \n\"Jank\" is common. Techniques  like `shouldComponentUpdate` are a must; routing frameworks \nget in the way of optimizing animations.\n\n\n## The Gist\nIt's *set-and-forget-it*, so here's the most work you'll ever do! :+1:\n```javascript\nimport { connectRoutes } from 'redux-first-router'\nimport { combineReducers, createStore, applyMiddleware, compose } from 'redux'\nimport createHistory from 'history/createBrowserHistory'\nimport userIdReducer from './reducers/userIdReducer'\n\nconst history = createHistory()\n\n// THE WORK:\nconst routesMap = { \n  HOME: '/home',      // action <-> url path\n  USER: '/user/:id',  // :id is a dynamic segment\n}\n\nconst { reducer, middleware, enhancer } = connectRoutes(history, routesMap) // yes, 3 redux aspects\n\n// and you already know how the story ends:\nconst rootReducer = combineReducers({ location: reducer, userId: userIdReducer })\nconst middlewares = applyMiddleware(middleware)\n// note the order: enhancer, then middlewares\nconst store = createStore(rootReducer, compose(enhancer, middlewares))\n```\n\n```javascript\nimport { NOT_FOUND } from 'redux-first-router'\n\nexport const userIdReducer = (state = null, action = {}) => {\n  switch(action.type) {\n    case 'HOME':\n    case NOT_FOUND:\n      return null\n    case 'USER':\n      return action.payload.id\n    default: \n      return state\n  }\n}\n```\n\nAnd here's how you'd embed SEO/Redux-friendly links in your app, while making use of the triggered state:\n```javascript\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport { Provider, connect } from 'react-redux'\nimport Link from 'redux-first-router-link'\nimport store from './configureStore'\n\nconst App = ({ userId, onClick }) =>\n  <div>\n    {!userId  \n      ? <div>\n          <h1>HOME</h1>\n\n          // all 3 \"links\" dispatch actions:\n          <Link to=\"/user/123\">User 123</Link> // action updates location state + changes address bar\n          <Link to={{ type: 'USER', payload: { id: 456 } }}>User 456</Link> // so does this\n          <span onClick={onClick}>User 5</span>   // so does this, but without SEO benefits\n        </div>\n\n      : <h1>USER: {userId}</h1> // press the browser BACK button to go HOME :)\n    }\n  </div>\n\nconst mapStateToProps = ({ userId }) => ({ userId })\nconst mapDispatchToProps = (dispatch) => ({\n  onClick: () => dispatch({ type: 'USER', payload: { id: 5 } })\n})\n\nconst AppContainer = connect(mapStateToProps, mapDispatchToProps)(App)\n\nReactDOM.render(\n  <Provider store={store}>\n    <AppContainer />\n  </Provider>,\n  document.getElementById('react-root')\n)\n```\n*note: ALL THREE clickable elements/links above will change the address bar while dispatching the corresponding `USER` action. The only difference\nis the last one won't get the benefits of SEO--i.e. an `<a>` tag with a matching `to` path won't be embedded in the page.* ***What this means is\nyou can take an existing Redux app that dispatches similar actions and get the benefit of syncing your address bar without changing your code!*** *The workflow we recommend is to\nfirst do that and then, once you're comfortable, to use our `<Link />` component to indicate your intentions to Google. Lastly, we recommend\nusing `actions` as your `to` prop since it doesn't marry you to a given URL structure--you can always change it in one place later (the `routesMap` object)!*\n\nBased on the above `routesMap` the following actions will be dispatched when the\ncorresponding URL is visited, and conversely those URLs will appear in the address bar\nwhen actions with the matching `type` and parameters are provided\nas keys in the payload object:\n\n| URL                | <-> | ACTION     |\n| ------------------ |:---:| ----------:|\n| /home              | <-> | { type: 'HOME' } |\n| /user/123          | <-> | { type: 'USER', payload: { id: 123 } } |\n| /user/456          | <-> | { type: 'USER', payload: { id: 456 } } |\n| /user/5            | <-> | { type: 'USER', payload: { id: 5 } } |\n\n*note: if you have more keys in your payload that is fine--so long as you have the minimum required keys to populate the path*\n\nLastly, we haven't mentioned `redux-first-router-link`yet--**Redux-First Router** is purposely built in\na very modular way, which is why the `<Link />` component is in a separate package. It's extremely simple\nand you're free to make your own. Basically it passes the `to` path on to **Redux-First Router** and calls\n`event.preventDefault()` to stop page reloads. It also can take an action object as a prop, which it will transform\ninto a URL for you! Its props API mirrors React Router's. The package is obvious enough once you get the hang of what's going on here--check it\nout when you're ready: [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). And if \nyou're wondering, yes there is a `NavLink` component with props like `activeClass` and `activeStyle` just like in React Router.\n\n## routesMap\n\nThe `routesMap` object allows you to match action types to express style dynamic paths, with a few frills.\nHere's the primary (and very minimal *easy to remember*) set of configuration options available to you:\n\n```javascript\nconst routesMap = {\n  HOME: '/home', // plain path strings or route objects can be used\n  CATEGORY: { path: '/category/:cat', capitalizedWords: true },\n  USER: { \n    path: '/user/:cat/:name',\n    fromPath: path => capitalizeWords(path.replace(/-/g, ' ')),\n    toPath: value => value.toLowerCase().replace(/ /g, '-'),\n  },\n}\n```\n*note: the signature of `fromPath` and `toPath` offers a little more, e.g: `(pathSegment, key) => value`. Visit [routesMap docs](./docs/connectRoutes.md#routesmap) for a bit more info when the time comes.*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /home                   | <-> | { type: 'HOME' } |\n| /category/java-script   | <-> | { type: 'CATEGORY', payload: { cat: 'Java Script' } } |\n| /user/elm/evan-czaplicki   | <-> | { type: 'USER', payload: { cat: 'ELM', name: 'Evan Czaplicki' } } |\n\n\n## routesMap (with thunk)\nWe left out one final configuration key available to you: *a thunk*.\nAfter the dispatch of a matching action, a thunk (if provided) will be called, allowing you to extract path parameters from the location reducer state and make asyncronous requests to get needed data:\n\n```javascript\nconst userThunk = async (dispatch, getState) => {\n  const { slug } = getState().location.payload\n  const data = await fetch(`/api/user/${slug}`)\n  const user = await data.json()\n  const action = { type: 'USER_FOUND', payload: { user } }\n  \n  dispatch(action)\n}\n\nconst routesMap = {\n  USER: { path: '/user/:slug', thunk: userThunk  },\n}\n```\n\n> your `thunk` should return a promise for SSR to be able to `await` for its resolution and for `updateScroll()` to be called if using our [scroll restoration package](https://github.com/faceyspacey/redux-first-router-restore-scroll).\n\n*note: visit the [location reducer docs](./docs/locationReducer) to see the `location` state's shape*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /user/steve-jobs        | <-> | { type: 'USER', payload: { slug: 'steve-jobs' } } |\n| n/a                     | n/a | { type: 'USER_FOUND', payload: { user: { name: 'Steve Jobs', slug: 'steve-jobs' } } } |\n\nThat's all folks! :+1:\n\n\n## More Docs (they are short easy reads) \n* [connectRoutes (there is a third `options` parameter you should check out)](./docs/connectRoutes.md)\n* [action.meta (the `meta` key is how our system communicates & how our action maintains its status as an \"FSA\")](./docs/action.md)\n* [location reducer shape](./docs/reducer.md)\n* [server side rendering](./docs/server-rendering.md)\n* [query strings](./docs/query-strings.md)\n* [scroll restoration](./docs/scroll-restoration.md)\n* [redirects](./docs/server-rendering.md#redirects-example)\n* [client-only API](./docs/client-only-api.md)\n* [React Native](./docs/react-native.md)\n* [React Navigation Support](./docs/react-native.md#first-class-react-navigation-support) 🔮  - *my current primary day-to-day focus*\n* [Prefetching!](./docs/prefetching.md) 🔮 - `<Link prefetch />` ***powered by:*** **[react-universal-component](https://github.com/faceyspacey/react-universal-component)** + **[webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks)**\n## FAQ\n\nWhat about if the URL is not found?\n> If the path is not found, or if actions fail to be converted to paths, our `NOT_FOUND` action type will be dispatched. You can apply it\nas a case in your reducer's switch statements. Here's where you get it: `import { NOT_FOUND } from 'redux-first-router'`. We have strong\nidiomatic way to deal with it in server side rendering--check it out: [server side rendering](./docs/server-rendering.md).\n\nWhat if I don't want to use the *thunk* feature, can I use other ways of requesting the data?\n> Of course. This work along side any middleware of your choosing, and even GraphQL solutions like Apollo. But for the 80% use-case, \"follow-up\" thunks attached to routes gets a lot of bang for your buck via the context associated with the initial route action.\n\nOk, but what if I request my data in `componentDidMount`?\n>This works great for that, but it's a naive strategy without a server-side recursive promise resolution service like Apollo offers. The problem with `componentDidMount` is that you can't generate all\nthe state required to render your app without first rendering your app at least once. That means additional work on your part as well as cycles\non the server (the latter of which is also a caveat for Apollo). It's also makes Redux's highly useful time-traveling tools *unreliable*. If that's where you're at in how you get things\ndone, that's fine--but we recommend leveling up to a \"dispatch to get state\" strategy (rather than a \"get state on render\" approach), as that will provide way more predictability, which is\nespecially useful when it comes to testing. When it comes to server side rendering there is no better option. We recommend looking at our \n[server side rendering doc](./docs/server-rendering.md) to see the\nrecommended approach.\n\nThe middleware dispatches thunks asyncronously with no way for me to *await* them, how can I wait for asyncronously received data on the server?\n> Please visit the [server side rendering doc](./docs/server-rendering.md). In short,\nthunks are not dispatched from the middleware on the server, but `connectRoutes`, returns a `thunk` in addition to `middleware`, `enhancer` and `reducer`,\nwhich you can await on, and it will retreive any data corresponding to the current route! We think our solution is slick and sensible.\n\nThe server has no `window` or `history`, how can I get that on the server?\n> The [history](https://github.com/ReactTraining/history) package provides a `createMemoryHistory()` function just for this scenario.\nIt essentially generates a fake `history` object based on the `request.path` *express* (or similar packages) will give you. It's painless. Check it out!\n\nDoes this work with React Native?\n> Yes, just like server side rendering, you can use the `history` package's `createMemoryHistory()` function. It's perfect for React Native's `Linking` API and push notifications in general. In fact, \nif you built your React Native app already and are just starting to deal with deep-linking and push notifications, **Redux-First Router**\nis perfectly suited to be tacked on in final stages with very few changes. We also have first-class support for [**React Navigation**](./docs/react-native.md#first-class-react-navigation-support), which really is the crown jewel here and where we do most our work these days. It does some amazing things. [Check it out!](./docs/react-native.md#first-class-react-navigation-support)\n\nOk, but there's gotta be a catch--what changes should I expect to make if I start using **Redux-First Router**?\n> Primarily it will force you to consolidate the actions you use in your reducers. Whereas before you might have had\nseveral actions to trigger the same state, you will now centralize on a smaller number of actions that each correspond \nto a specific URL path. Your actions will become more \"page-like\", i.e. geared towards triggering page/URL transitions. \nThat said, you absolutely don't need to have a URL for every action. In our apps, we don't. Just the actions that lead\nto the biggest visual changes in the page that we want search engines to pick up.\n\nAnd what about actually getting links on the page for search engines to see?\n> Use [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). This package has been built in a modular way,\nwhich is why that's not in here. *redux-first-router-link's* `<Link />` and `<NavLink />` components mirror React Router's. You should be using these on web to get `<a>` tags on your page for *Google*. In React Native, just dispatch actions in `onPress` handlers.\n\nWhy no route matching components like *React Router*?\n> Because they are unnecessary when the combination of actions and reducers lead to both a wider variety and better defined set of states, not to mention\nmore singular. By \"singular\" we mean that you don't have to think in terms of *both* redux state *AND* address bar paths. You just think\nin terms of *state* after you setup your routes map. It makes your life simpler. It makes your code cleaner and easier to understand. It gives you the best control\nReact + Redux has to offer when it comes to optimizing rendering for animations. \n\nWhat about all the code splitting features *Next.js* has to offer?\n> They certainly crush it when it comes to code splitting. There's no doubt about it. But check out their Redux example\nwhere it seems to have a different `store` per page. I've asked, and they do merge, but it complicates how you will use Redux. If your app is \nvery page-like, great--but we think the whole purpose of tools like React and Redux is to build *\"apps\"* not *pages*. \nThe hallmark of an app is seamless animated transitions where you forget you're on a specific page. You need full\ncontrol of rendering to do that at the highest level. `shouldComponentUpdate`, pure functions and [reselect](https://github.com/reactjs/reselect)\nbecome your best friends. Everything else gets in the way. And of course **Redux-First Router** stays out of the way.\nStraightup, let us know if you think we nailed it or what we're missing. Feel free to use github issues.\n\nGee, I've never seen a Redux middleware/enhancer tool return so many things to use for configuring the store???\n>Part of what **Redux-First Router** does so well (and one of its considerations from the start) is server side rendering. All these\naspects depend on state unique to each visit/request. The returned `middleware`, `enhancer`, `reducer` and `thunk` functions share\nenclosed state (i.e. within a \"closure\") in a *per instance* fashion. Most of the code is written as pure utility functions\nand we are very proud about that. But what's not is returned to you in a way that will insure state is not shared between\nrequests on the server. In short, we have spared no expense to get this package as tight as possible. Watch the video below to get an \nidea of how the system works and its overall simplicity:\n\n*video coming soon...*\n\n\n## Contributing\n\n\nWe use [commitizen](https://github.com/commitizen/cz-cli), so run `npm run cm` to make commits. A command-line form will appear, requiring you answer a few questions to automatically produce a nicely formatted commit. Releases, semantic version numbers, tags, changelogs and publishing to NPM will automatically be handled based on these commits thanks to [semantic-release](https://github.com/semantic-release/semantic-release). Be good.\n\n\n## Tests\n\nReviewing a package's tests are a great way to get familiar with it. It's direct insight into the capabilities of the given package (if the tests are thorough). What's even better is a screenshot of the tests neatly organized and grouped (you know the whole \"a picture says a thousand words\" thing). \n\nBelow is a screenshot of this module's tests running in [Wallaby](https://wallabyjs.com) *(\"An Integrated Continuous Testing Tool for JavaScript\")* which everyone in the React community should be using. It's fantastic and has taken my entire workflow to the next level. It re-runs your tests on every change along with comprehensive logging, bi-directional linking to your IDE, in-line code coverage indicators, **and even snapshot comparisons + updates for Jest!** I requestsed that feature by the way :). It's basically a substitute for live-coding that inspires you to test along your journey.\n\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-1.png)\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-2.png)\n\n## More from FaceySpacey in Reactlandia\n- [react-universal-component](https://github.com/faceyspacey/react-universal-component). It's made to work perfectly with *Redux First Router*. Together they comprise our *\"frameworkless\"* Redux-based approach to what Next.js does (splitting, SSR, prefetching, and routing).\n- [webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks). And this is the foundation of our `Universal` product line. Make sure to check out!\n\n","readmeFilename":"README.md","gitHead":"869f2fcccc76bbf45edf341ce75ba2329a2dd22d","_id":"redux-first-router@0.0.7-rudy","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-QYsS7cxf1iCHScdLsHyHHF5IXyaKnPcW4pkuOKIMCVWbiepDSae34QPx7xuwVs/YSRTfXeKEIuqeU/Kdepl1ig==","shasum":"406e5104a6f9cf769cf52d4870da1062ab1825c4","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.7-rudy.tgz","fileCount":55,"unpackedSize":489348,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPhv9LNNhJjO/flyNaUvbvnaYF5+uFa2OhOXQEyjfu2AIgOMIDX2d9bt5F6LH9cbmMuhO5nWko5Jlz1m38CW7B0b0="}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_0.0.7-rudy_1519805874020_0.5804759628975535"},"_hasShrinkwrap":false},"0.0.8-rudy":{"name":"redux-first-router","version":"0.0.8-rudy","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.54.1","flow-copy-source":"^1.1.0","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"readme":"<a href=\"https://gitter.im/Reactlandia/Lobby\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"http://cdn.reactlandia.com/reactlandia-chat.png\">\n</a>\n\n<a href=\"https://codesandbox.io/s/github/faceyspacey/redux-first-router-codesandbox\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-boilerplate\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/boilerplate.png?a=1\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-demo\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/demo.png\">\n</a>\n\n> **UPDATE (8/15):** you can now add additional routes as part of your code splitting strategy. See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/62#issuecomment-322558836) for more info.\n\n> **UPDATE (9/5):** you can now block user navigation via the `confirmLeave` route option (and customize its appearance via the `displayConfirmLeave` option). See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/27#issuecomment-327431413) for more info. Do `yarn upgrade redux-first-router@next` to get it.\n\n> **UPDATE (9/6):** MUCH ANTICIPATED FEATURE: you can now do all sorts of optional params in your paths, match multiple similar paths to the same type, use regexes, and use params that capture multiple segments. See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/83#issuecomment-327703226) for more info. Do `yarn upgrade redux-first-router@next` to get it.\n\n> **UPDATE (9/9):** *4 new thiings:* 1) route paths are now cached for better performance (less cycles wasted on parsing). 2) you can now do **pathless routes!**. I.e. you can use routes just for the purpose of the thunk feature, thereby achieving more uniformity across your async actions--just use RFR! Just dispatch the action type for which you have a thunk in your `routesMap` and it will be called like any other. To learn more about it: [check this example](https://gist.github.com/faceyspacey/2771c05a62a338fa6d3d23d76e6e7c5a). 3) now all thunks and callbacks (`onBeforeChange`, `onAfterChange`, etc) receive a 3rd *\"bag\"* argument which currently has a key for the current `action` and an `extra` key. More keys may be added later. The `extra` key is an option you provide to `connectRoutes` which is the equivalent of Redux-Thunk's *\"extra argument\"*. It just happens to be in our bag. That said, `onBeforeChange` used to receive just an `action` as a 3rd argument. So unfortunately this is a breaking change. Check the aforementioned example to learn more about this too. 4) lastly, now RFR skips actions with an `error` key; this should resolve a few quirks for developers using middleware that explicitly handle errors already. If it ever makes sense for RFR/Rudy to handle errors, we'll provide a robust solution. Half-assing as we've done doesn't make sense for now.\n\n\n# Redux-First Router\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/v/redux-first-router.svg\" alt=\"Version\" />\n  </a>\n\n  <a href=\"https://travis-ci.org/faceyspacey/redux-first-router\">\n    <img src=\"https://travis-ci.org/faceyspacey/redux-first-router.svg?branch=master\" alt=\"Build Status\" />\n  </a>\n\n  <a href=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/coverage\">\n    <img src=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/badges/coverage.svg\" alt=\"Coverage Status\"/>\n  </a>\n\n  <a href=\"https://greenkeeper.io\">\n    <img src=\"https://badges.greenkeeper.io/faceyspacey/redux-first-router.svg\" alt=\"Green Keeper\" />\n  </a>\n\n  <a href=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router\">\n    <img src=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/badges/gpa.svg\" alt=\"GPA\" />\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/dt/redux-first-router.svg\" alt=\"Downloads\" />\n  </a>\n  \n  <a href=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n    <img src=\"https://snyk.io/test/github/faceyspacey/redux-first-router/badge.svg\" alt=\"Known Vulnerabilities\" data-canonical-src=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/l/redux-first-router.svg\" alt=\"License\" />\n  </a>\n</p>\n\n\n![redux-first-router flow chart](https://raw.githubusercontent.com/faceyspacey/redux-first-router/master/docs/redux-first-router-flow-chart.png)\n\n\nThe goal of **Redux-First Router** is to think of your app in *states*, not *routes*, not *components*, while keeping the address bar in sync. Everthing is state, not components. Connect your components and *just dispatch* ***flux standard actions.***\n\n**Articles You Should Read:**\n- **[Pre Release: Redux-First Router — A Step Beyond Redux-Little-Router](https://medium.com/@faceyspacey/pre-release-redux-first-router-a-step-beyond-redux-little-router-cd2716576aea)** \n- **[Redux-First Router lookin Sexy on Code Sandbox](https://medium.com/faceyspacey/redux-first-router-lookin-sexy-on-code-sandbox-d9d9bea15053)** \n- **[Redux-First Router data-fetching: solving the 80% use case for async Middleware](https://medium.com/faceyspacey/redux-first-router-data-fetching-solving-the-80-use-case-for-async-middleware-14529606c262)**\n- **[Server-Render like a Pro /w Redux-First Router in 10 steps](https://medium.com/faceyspacey/server-render-like-a-pro-w-redux-first-router-in-10-steps-b27dd93859de)** 🚀🚀🚀 *(READ THIS!)*\n\nThe thinking behind this package has been: \"if we were to dream up a 'Redux-first' approach to routing from the \nground up, what would it look like?\" The result has been what we hope you feel to be one of those \n\"inversion of control\" scenarios that makes a challenging problem *simple* when coming at it from a different angle.\nWe hope *Redux-First Router* comes off as an obvious solution.\n\nBefore we get started, there is some *prior art*, and you should [check them out](./docs/prior-art.md). **Redux-First Router**\nisn't the first stab at something like this, but--aside from this path being pre-validated--we feel it is the most complete, tested and *spot on* solution.\nWe have reviewed what came before, stripped what was unnecessary, added what was needed, and generally focused on getting the ***developer experience*** right. Ultimately it offers far more than previous solutions. The best\npart is that once you set it up there's virtually nothing left to do. It's truly \"set it and forget it.\" Let's get started.\n\n> And did we mention: **it has first class support for** ***React Navigation!***\n\n## Installation\n\nInstall `redux-first-router` and its peer dependency `history` plus our small `<Link />` package:\n\n```bash\nyarn add history redux-first-router redux-first-router-link\n```\n\n**Full-Featured Universal Demo App (includes SSR + Splitting!):**\n\nhttps://github.com/faceyspacey/redux-first-router-demo\n\n\n## Motivation - What Routing in Redux is Meant To Be\n\nTo automate routing. To be able to use Redux *as is* while keeping the URL in the address bar in sync. \nTo think solely in terms of *\"state\"* and *NOT routes, paths, route matching components*. And of course\nfor server side rendering to require no more than dispatching on the store like normal. *Path params are just\naction payloads, and action types demarcate a certain kind of path*. **That is what routing in Redux is meant to be.** \n\nIn practice, what that means is having the address bar update in response to actions and ***bi-directionally*** \nhaving actions dispatched in response to address bar changes, such as via the browser\nback/forward buttons. The \"bi-directional\" aspect is embodied in the diagram above where the first blue arrows\npoints both ways--i.e. dispatching actions changes the address bar, *and* changes to\nthe address bar dispatches actions.\n\nIn addition, here are some key obstacles **Redux-First Router** seeks to *avoid*:\n\n* having to render from any state that doesn't come from redux\n* cluttering component code with route-related components\n* the added complexity [and bugs] from 2 forms of state: redux state vs. routing state\n* large API surface areas  of packages/frameworks\nlike `react-router` and `next.js`\n* workarounds that such large *(likely \"leaky\")* abstractions inevitably require to achieve a professional app\n* strategies as low level as possible to deal with animations. Animations coinciding with React \ncomponent updates *are* a problem, particularly in the browser (React Native is better). \n\"Jank\" is common. Techniques  like `shouldComponentUpdate` are a must; routing frameworks \nget in the way of optimizing animations.\n\n\n## The Gist\nIt's *set-and-forget-it*, so here's the most work you'll ever do! :+1:\n```javascript\nimport { connectRoutes } from 'redux-first-router'\nimport { combineReducers, createStore, applyMiddleware, compose } from 'redux'\nimport createHistory from 'history/createBrowserHistory'\nimport userIdReducer from './reducers/userIdReducer'\n\nconst history = createHistory()\n\n// THE WORK:\nconst routesMap = { \n  HOME: '/home',      // action <-> url path\n  USER: '/user/:id',  // :id is a dynamic segment\n}\n\nconst { reducer, middleware, enhancer } = connectRoutes(history, routesMap) // yes, 3 redux aspects\n\n// and you already know how the story ends:\nconst rootReducer = combineReducers({ location: reducer, userId: userIdReducer })\nconst middlewares = applyMiddleware(middleware)\n// note the order: enhancer, then middlewares\nconst store = createStore(rootReducer, compose(enhancer, middlewares))\n```\n\n```javascript\nimport { NOT_FOUND } from 'redux-first-router'\n\nexport const userIdReducer = (state = null, action = {}) => {\n  switch(action.type) {\n    case 'HOME':\n    case NOT_FOUND:\n      return null\n    case 'USER':\n      return action.payload.id\n    default: \n      return state\n  }\n}\n```\n\nAnd here's how you'd embed SEO/Redux-friendly links in your app, while making use of the triggered state:\n```javascript\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport { Provider, connect } from 'react-redux'\nimport Link from 'redux-first-router-link'\nimport store from './configureStore'\n\nconst App = ({ userId, onClick }) =>\n  <div>\n    {!userId  \n      ? <div>\n          <h1>HOME</h1>\n\n          // all 3 \"links\" dispatch actions:\n          <Link to=\"/user/123\">User 123</Link> // action updates location state + changes address bar\n          <Link to={{ type: 'USER', payload: { id: 456 } }}>User 456</Link> // so does this\n          <span onClick={onClick}>User 5</span>   // so does this, but without SEO benefits\n        </div>\n\n      : <h1>USER: {userId}</h1> // press the browser BACK button to go HOME :)\n    }\n  </div>\n\nconst mapStateToProps = ({ userId }) => ({ userId })\nconst mapDispatchToProps = (dispatch) => ({\n  onClick: () => dispatch({ type: 'USER', payload: { id: 5 } })\n})\n\nconst AppContainer = connect(mapStateToProps, mapDispatchToProps)(App)\n\nReactDOM.render(\n  <Provider store={store}>\n    <AppContainer />\n  </Provider>,\n  document.getElementById('react-root')\n)\n```\n*note: ALL THREE clickable elements/links above will change the address bar while dispatching the corresponding `USER` action. The only difference\nis the last one won't get the benefits of SEO--i.e. an `<a>` tag with a matching `to` path won't be embedded in the page.* ***What this means is\nyou can take an existing Redux app that dispatches similar actions and get the benefit of syncing your address bar without changing your code!*** *The workflow we recommend is to\nfirst do that and then, once you're comfortable, to use our `<Link />` component to indicate your intentions to Google. Lastly, we recommend\nusing `actions` as your `to` prop since it doesn't marry you to a given URL structure--you can always change it in one place later (the `routesMap` object)!*\n\nBased on the above `routesMap` the following actions will be dispatched when the\ncorresponding URL is visited, and conversely those URLs will appear in the address bar\nwhen actions with the matching `type` and parameters are provided\nas keys in the payload object:\n\n| URL                | <-> | ACTION     |\n| ------------------ |:---:| ----------:|\n| /home              | <-> | { type: 'HOME' } |\n| /user/123          | <-> | { type: 'USER', payload: { id: 123 } } |\n| /user/456          | <-> | { type: 'USER', payload: { id: 456 } } |\n| /user/5            | <-> | { type: 'USER', payload: { id: 5 } } |\n\n*note: if you have more keys in your payload that is fine--so long as you have the minimum required keys to populate the path*\n\nLastly, we haven't mentioned `redux-first-router-link`yet--**Redux-First Router** is purposely built in\na very modular way, which is why the `<Link />` component is in a separate package. It's extremely simple\nand you're free to make your own. Basically it passes the `to` path on to **Redux-First Router** and calls\n`event.preventDefault()` to stop page reloads. It also can take an action object as a prop, which it will transform\ninto a URL for you! Its props API mirrors React Router's. The package is obvious enough once you get the hang of what's going on here--check it\nout when you're ready: [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). And if \nyou're wondering, yes there is a `NavLink` component with props like `activeClass` and `activeStyle` just like in React Router.\n\n## routesMap\n\nThe `routesMap` object allows you to match action types to express style dynamic paths, with a few frills.\nHere's the primary (and very minimal *easy to remember*) set of configuration options available to you:\n\n```javascript\nconst routesMap = {\n  HOME: '/home', // plain path strings or route objects can be used\n  CATEGORY: { path: '/category/:cat', capitalizedWords: true },\n  USER: { \n    path: '/user/:cat/:name',\n    fromPath: path => capitalizeWords(path.replace(/-/g, ' ')),\n    toPath: value => value.toLowerCase().replace(/ /g, '-'),\n  },\n}\n```\n*note: the signature of `fromPath` and `toPath` offers a little more, e.g: `(pathSegment, key) => value`. Visit [routesMap docs](./docs/connectRoutes.md#routesmap) for a bit more info when the time comes.*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /home                   | <-> | { type: 'HOME' } |\n| /category/java-script   | <-> | { type: 'CATEGORY', payload: { cat: 'Java Script' } } |\n| /user/elm/evan-czaplicki   | <-> | { type: 'USER', payload: { cat: 'ELM', name: 'Evan Czaplicki' } } |\n\n\n## routesMap (with thunk)\nWe left out one final configuration key available to you: *a thunk*.\nAfter the dispatch of a matching action, a thunk (if provided) will be called, allowing you to extract path parameters from the location reducer state and make asyncronous requests to get needed data:\n\n```javascript\nconst userThunk = async (dispatch, getState) => {\n  const { slug } = getState().location.payload\n  const data = await fetch(`/api/user/${slug}`)\n  const user = await data.json()\n  const action = { type: 'USER_FOUND', payload: { user } }\n  \n  dispatch(action)\n}\n\nconst routesMap = {\n  USER: { path: '/user/:slug', thunk: userThunk  },\n}\n```\n\n> your `thunk` should return a promise for SSR to be able to `await` for its resolution and for `updateScroll()` to be called if using our [scroll restoration package](https://github.com/faceyspacey/redux-first-router-restore-scroll).\n\n*note: visit the [location reducer docs](./docs/locationReducer) to see the `location` state's shape*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /user/steve-jobs        | <-> | { type: 'USER', payload: { slug: 'steve-jobs' } } |\n| n/a                     | n/a | { type: 'USER_FOUND', payload: { user: { name: 'Steve Jobs', slug: 'steve-jobs' } } } |\n\nThat's all folks! :+1:\n\n\n## More Docs (they are short easy reads) \n* [connectRoutes (there is a third `options` parameter you should check out)](./docs/connectRoutes.md)\n* [action.meta (the `meta` key is how our system communicates & how our action maintains its status as an \"FSA\")](./docs/action.md)\n* [location reducer shape](./docs/reducer.md)\n* [server side rendering](./docs/server-rendering.md)\n* [query strings](./docs/query-strings.md)\n* [scroll restoration](./docs/scroll-restoration.md)\n* [redirects](./docs/server-rendering.md#redirects-example)\n* [client-only API](./docs/client-only-api.md)\n* [React Native](./docs/react-native.md)\n* [React Navigation Support](./docs/react-native.md#first-class-react-navigation-support) 🔮  - *my current primary day-to-day focus*\n* [Prefetching!](./docs/prefetching.md) 🔮 - `<Link prefetch />` ***powered by:*** **[react-universal-component](https://github.com/faceyspacey/react-universal-component)** + **[webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks)**\n## FAQ\n\nWhat about if the URL is not found?\n> If the path is not found, or if actions fail to be converted to paths, our `NOT_FOUND` action type will be dispatched. You can apply it\nas a case in your reducer's switch statements. Here's where you get it: `import { NOT_FOUND } from 'redux-first-router'`. We have strong\nidiomatic way to deal with it in server side rendering--check it out: [server side rendering](./docs/server-rendering.md).\n\nWhat if I don't want to use the *thunk* feature, can I use other ways of requesting the data?\n> Of course. This work along side any middleware of your choosing, and even GraphQL solutions like Apollo. But for the 80% use-case, \"follow-up\" thunks attached to routes gets a lot of bang for your buck via the context associated with the initial route action.\n\nOk, but what if I request my data in `componentDidMount`?\n>This works great for that, but it's a naive strategy without a server-side recursive promise resolution service like Apollo offers. The problem with `componentDidMount` is that you can't generate all\nthe state required to render your app without first rendering your app at least once. That means additional work on your part as well as cycles\non the server (the latter of which is also a caveat for Apollo). It's also makes Redux's highly useful time-traveling tools *unreliable*. If that's where you're at in how you get things\ndone, that's fine--but we recommend leveling up to a \"dispatch to get state\" strategy (rather than a \"get state on render\" approach), as that will provide way more predictability, which is\nespecially useful when it comes to testing. When it comes to server side rendering there is no better option. We recommend looking at our \n[server side rendering doc](./docs/server-rendering.md) to see the\nrecommended approach.\n\nThe middleware dispatches thunks asyncronously with no way for me to *await* them, how can I wait for asyncronously received data on the server?\n> Please visit the [server side rendering doc](./docs/server-rendering.md). In short,\nthunks are not dispatched from the middleware on the server, but `connectRoutes`, returns a `thunk` in addition to `middleware`, `enhancer` and `reducer`,\nwhich you can await on, and it will retreive any data corresponding to the current route! We think our solution is slick and sensible.\n\nThe server has no `window` or `history`, how can I get that on the server?\n> The [history](https://github.com/ReactTraining/history) package provides a `createMemoryHistory()` function just for this scenario.\nIt essentially generates a fake `history` object based on the `request.path` *express* (or similar packages) will give you. It's painless. Check it out!\n\nDoes this work with React Native?\n> Yes, just like server side rendering, you can use the `history` package's `createMemoryHistory()` function. It's perfect for React Native's `Linking` API and push notifications in general. In fact, \nif you built your React Native app already and are just starting to deal with deep-linking and push notifications, **Redux-First Router**\nis perfectly suited to be tacked on in final stages with very few changes. We also have first-class support for [**React Navigation**](./docs/react-native.md#first-class-react-navigation-support), which really is the crown jewel here and where we do most our work these days. It does some amazing things. [Check it out!](./docs/react-native.md#first-class-react-navigation-support)\n\nOk, but there's gotta be a catch--what changes should I expect to make if I start using **Redux-First Router**?\n> Primarily it will force you to consolidate the actions you use in your reducers. Whereas before you might have had\nseveral actions to trigger the same state, you will now centralize on a smaller number of actions that each correspond \nto a specific URL path. Your actions will become more \"page-like\", i.e. geared towards triggering page/URL transitions. \nThat said, you absolutely don't need to have a URL for every action. In our apps, we don't. Just the actions that lead\nto the biggest visual changes in the page that we want search engines to pick up.\n\nAnd what about actually getting links on the page for search engines to see?\n> Use [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). This package has been built in a modular way,\nwhich is why that's not in here. *redux-first-router-link's* `<Link />` and `<NavLink />` components mirror React Router's. You should be using these on web to get `<a>` tags on your page for *Google*. In React Native, just dispatch actions in `onPress` handlers.\n\nWhy no route matching components like *React Router*?\n> Because they are unnecessary when the combination of actions and reducers lead to both a wider variety and better defined set of states, not to mention\nmore singular. By \"singular\" we mean that you don't have to think in terms of *both* redux state *AND* address bar paths. You just think\nin terms of *state* after you setup your routes map. It makes your life simpler. It makes your code cleaner and easier to understand. It gives you the best control\nReact + Redux has to offer when it comes to optimizing rendering for animations. \n\nWhat about all the code splitting features *Next.js* has to offer?\n> They certainly crush it when it comes to code splitting. There's no doubt about it. But check out their Redux example\nwhere it seems to have a different `store` per page. I've asked, and they do merge, but it complicates how you will use Redux. If your app is \nvery page-like, great--but we think the whole purpose of tools like React and Redux is to build *\"apps\"* not *pages*. \nThe hallmark of an app is seamless animated transitions where you forget you're on a specific page. You need full\ncontrol of rendering to do that at the highest level. `shouldComponentUpdate`, pure functions and [reselect](https://github.com/reactjs/reselect)\nbecome your best friends. Everything else gets in the way. And of course **Redux-First Router** stays out of the way.\nStraightup, let us know if you think we nailed it or what we're missing. Feel free to use github issues.\n\nGee, I've never seen a Redux middleware/enhancer tool return so many things to use for configuring the store???\n>Part of what **Redux-First Router** does so well (and one of its considerations from the start) is server side rendering. All these\naspects depend on state unique to each visit/request. The returned `middleware`, `enhancer`, `reducer` and `thunk` functions share\nenclosed state (i.e. within a \"closure\") in a *per instance* fashion. Most of the code is written as pure utility functions\nand we are very proud about that. But what's not is returned to you in a way that will insure state is not shared between\nrequests on the server. In short, we have spared no expense to get this package as tight as possible. Watch the video below to get an \nidea of how the system works and its overall simplicity:\n\n*video coming soon...*\n\n\n## Contributing\n\n\nWe use [commitizen](https://github.com/commitizen/cz-cli), so run `npm run cm` to make commits. A command-line form will appear, requiring you answer a few questions to automatically produce a nicely formatted commit. Releases, semantic version numbers, tags, changelogs and publishing to NPM will automatically be handled based on these commits thanks to [semantic-release](https://github.com/semantic-release/semantic-release). Be good.\n\n\n## Tests\n\nReviewing a package's tests are a great way to get familiar with it. It's direct insight into the capabilities of the given package (if the tests are thorough). What's even better is a screenshot of the tests neatly organized and grouped (you know the whole \"a picture says a thousand words\" thing). \n\nBelow is a screenshot of this module's tests running in [Wallaby](https://wallabyjs.com) *(\"An Integrated Continuous Testing Tool for JavaScript\")* which everyone in the React community should be using. It's fantastic and has taken my entire workflow to the next level. It re-runs your tests on every change along with comprehensive logging, bi-directional linking to your IDE, in-line code coverage indicators, **and even snapshot comparisons + updates for Jest!** I requestsed that feature by the way :). It's basically a substitute for live-coding that inspires you to test along your journey.\n\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-1.png)\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-2.png)\n\n## More from FaceySpacey in Reactlandia\n- [react-universal-component](https://github.com/faceyspacey/react-universal-component). It's made to work perfectly with *Redux First Router*. Together they comprise our *\"frameworkless\"* Redux-based approach to what Next.js does (splitting, SSR, prefetching, and routing).\n- [webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks). And this is the foundation of our `Universal` product line. Make sure to check out!\n\n","readmeFilename":"README.md","gitHead":"d27ff9ef42f323ea3854d95485c5a64bd4b08a58","_id":"redux-first-router@0.0.8-rudy","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-k5jBHsAhzSali+96O/yOPV8t5TaOK1d3cLOwr5+ynaU7ou52g2vhi0tXKvMIJdFeZBYKJ+moq8cVcY63+Vfn5Q==","shasum":"7cfbf4a5bd1beda770d43ff76ff0648d09a06078","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.8-rudy.tgz","fileCount":55,"unpackedSize":489294,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlyKTeBe8VhuQ6uD7EjiMKU9ne6+2OT3kZmv8h2MqQbgIhAPdNKSdc2Q2Ydw9spUYPNzaA/RE1gJnjYV6wn8j5T1Rr"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_0.0.8-rudy_1519807070007_0.26335500945389256"},"_hasShrinkwrap":false},"0.0.9-rudy":{"name":"redux-first-router","version":"0.0.9-rudy","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.54.1","flow-copy-source":"^1.1.0","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","travis-github-status":"^1.5.4","webpack":"2.4.1"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"readme":"<a href=\"https://gitter.im/Reactlandia/Lobby\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"http://cdn.reactlandia.com/reactlandia-chat.png\">\n</a>\n\n<a href=\"https://codesandbox.io/s/github/faceyspacey/redux-first-router-codesandbox\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-boilerplate\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/boilerplate.png?a=1\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-demo\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/demo.png\">\n</a>\n\n> **UPDATE (8/15):** you can now add additional routes as part of your code splitting strategy. See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/62#issuecomment-322558836) for more info.\n\n> **UPDATE (9/5):** you can now block user navigation via the `confirmLeave` route option (and customize its appearance via the `displayConfirmLeave` option). See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/27#issuecomment-327431413) for more info. Do `yarn upgrade redux-first-router@next` to get it.\n\n> **UPDATE (9/6):** MUCH ANTICIPATED FEATURE: you can now do all sorts of optional params in your paths, match multiple similar paths to the same type, use regexes, and use params that capture multiple segments. See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/83#issuecomment-327703226) for more info. Do `yarn upgrade redux-first-router@next` to get it.\n\n> **UPDATE (9/9):** *4 new thiings:* 1) route paths are now cached for better performance (less cycles wasted on parsing). 2) you can now do **pathless routes!**. I.e. you can use routes just for the purpose of the thunk feature, thereby achieving more uniformity across your async actions--just use RFR! Just dispatch the action type for which you have a thunk in your `routesMap` and it will be called like any other. To learn more about it: [check this example](https://gist.github.com/faceyspacey/2771c05a62a338fa6d3d23d76e6e7c5a). 3) now all thunks and callbacks (`onBeforeChange`, `onAfterChange`, etc) receive a 3rd *\"bag\"* argument which currently has a key for the current `action` and an `extra` key. More keys may be added later. The `extra` key is an option you provide to `connectRoutes` which is the equivalent of Redux-Thunk's *\"extra argument\"*. It just happens to be in our bag. That said, `onBeforeChange` used to receive just an `action` as a 3rd argument. So unfortunately this is a breaking change. Check the aforementioned example to learn more about this too. 4) lastly, now RFR skips actions with an `error` key; this should resolve a few quirks for developers using middleware that explicitly handle errors already. If it ever makes sense for RFR/Rudy to handle errors, we'll provide a robust solution. Half-assing as we've done doesn't make sense for now.\n\n\n# Redux-First Router\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/v/redux-first-router.svg\" alt=\"Version\" />\n  </a>\n\n  <a href=\"https://travis-ci.org/faceyspacey/redux-first-router\">\n    <img src=\"https://travis-ci.org/faceyspacey/redux-first-router.svg?branch=master\" alt=\"Build Status\" />\n  </a>\n\n  <a href=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/coverage\">\n    <img src=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/badges/coverage.svg\" alt=\"Coverage Status\"/>\n  </a>\n\n  <a href=\"https://greenkeeper.io\">\n    <img src=\"https://badges.greenkeeper.io/faceyspacey/redux-first-router.svg\" alt=\"Green Keeper\" />\n  </a>\n\n  <a href=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router\">\n    <img src=\"https://lima.codeclimate.com/github/faceyspacey/redux-first-router/badges/gpa.svg\" alt=\"GPA\" />\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/dt/redux-first-router.svg\" alt=\"Downloads\" />\n  </a>\n  \n  <a href=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n    <img src=\"https://snyk.io/test/github/faceyspacey/redux-first-router/badge.svg\" alt=\"Known Vulnerabilities\" data-canonical-src=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/l/redux-first-router.svg\" alt=\"License\" />\n  </a>\n</p>\n\n\n![redux-first-router flow chart](https://raw.githubusercontent.com/faceyspacey/redux-first-router/master/docs/redux-first-router-flow-chart.png)\n\n\nThe goal of **Redux-First Router** is to think of your app in *states*, not *routes*, not *components*, while keeping the address bar in sync. Everthing is state, not components. Connect your components and *just dispatch* ***flux standard actions.***\n\n**Articles You Should Read:**\n- **[Pre Release: Redux-First Router — A Step Beyond Redux-Little-Router](https://medium.com/@faceyspacey/pre-release-redux-first-router-a-step-beyond-redux-little-router-cd2716576aea)** \n- **[Redux-First Router lookin Sexy on Code Sandbox](https://medium.com/faceyspacey/redux-first-router-lookin-sexy-on-code-sandbox-d9d9bea15053)** \n- **[Redux-First Router data-fetching: solving the 80% use case for async Middleware](https://medium.com/faceyspacey/redux-first-router-data-fetching-solving-the-80-use-case-for-async-middleware-14529606c262)**\n- **[Server-Render like a Pro /w Redux-First Router in 10 steps](https://medium.com/faceyspacey/server-render-like-a-pro-w-redux-first-router-in-10-steps-b27dd93859de)** 🚀🚀🚀 *(READ THIS!)*\n\nThe thinking behind this package has been: \"if we were to dream up a 'Redux-first' approach to routing from the \nground up, what would it look like?\" The result has been what we hope you feel to be one of those \n\"inversion of control\" scenarios that makes a challenging problem *simple* when coming at it from a different angle.\nWe hope *Redux-First Router* comes off as an obvious solution.\n\nBefore we get started, there is some *prior art*, and you should [check them out](./docs/prior-art.md). **Redux-First Router**\nisn't the first stab at something like this, but--aside from this path being pre-validated--we feel it is the most complete, tested and *spot on* solution.\nWe have reviewed what came before, stripped what was unnecessary, added what was needed, and generally focused on getting the ***developer experience*** right. Ultimately it offers far more than previous solutions. The best\npart is that once you set it up there's virtually nothing left to do. It's truly \"set it and forget it.\" Let's get started.\n\n> And did we mention: **it has first class support for** ***React Navigation!***\n\n## Installation\n\nInstall `redux-first-router` and its peer dependency `history` plus our small `<Link />` package:\n\n```bash\nyarn add history redux-first-router redux-first-router-link\n```\n\n**Full-Featured Universal Demo App (includes SSR + Splitting!):**\n\nhttps://github.com/faceyspacey/redux-first-router-demo\n\n\n## Motivation - What Routing in Redux is Meant To Be\n\nTo automate routing. To be able to use Redux *as is* while keeping the URL in the address bar in sync. \nTo think solely in terms of *\"state\"* and *NOT routes, paths, route matching components*. And of course\nfor server side rendering to require no more than dispatching on the store like normal. *Path params are just\naction payloads, and action types demarcate a certain kind of path*. **That is what routing in Redux is meant to be.** \n\nIn practice, what that means is having the address bar update in response to actions and ***bi-directionally*** \nhaving actions dispatched in response to address bar changes, such as via the browser\nback/forward buttons. The \"bi-directional\" aspect is embodied in the diagram above where the first blue arrows\npoints both ways--i.e. dispatching actions changes the address bar, *and* changes to\nthe address bar dispatches actions.\n\nIn addition, here are some key obstacles **Redux-First Router** seeks to *avoid*:\n\n* having to render from any state that doesn't come from redux\n* cluttering component code with route-related components\n* the added complexity [and bugs] from 2 forms of state: redux state vs. routing state\n* large API surface areas  of packages/frameworks\nlike `react-router` and `next.js`\n* workarounds that such large *(likely \"leaky\")* abstractions inevitably require to achieve a professional app\n* strategies as low level as possible to deal with animations. Animations coinciding with React \ncomponent updates *are* a problem, particularly in the browser (React Native is better). \n\"Jank\" is common. Techniques  like `shouldComponentUpdate` are a must; routing frameworks \nget in the way of optimizing animations.\n\n\n## The Gist\nIt's *set-and-forget-it*, so here's the most work you'll ever do! :+1:\n```javascript\nimport { connectRoutes } from 'redux-first-router'\nimport { combineReducers, createStore, applyMiddleware, compose } from 'redux'\nimport createHistory from 'history/createBrowserHistory'\nimport userIdReducer from './reducers/userIdReducer'\n\nconst history = createHistory()\n\n// THE WORK:\nconst routesMap = { \n  HOME: '/home',      // action <-> url path\n  USER: '/user/:id',  // :id is a dynamic segment\n}\n\nconst { reducer, middleware, enhancer } = connectRoutes(history, routesMap) // yes, 3 redux aspects\n\n// and you already know how the story ends:\nconst rootReducer = combineReducers({ location: reducer, userId: userIdReducer })\nconst middlewares = applyMiddleware(middleware)\n// note the order: enhancer, then middlewares\nconst store = createStore(rootReducer, compose(enhancer, middlewares))\n```\n\n```javascript\nimport { NOT_FOUND } from 'redux-first-router'\n\nexport const userIdReducer = (state = null, action = {}) => {\n  switch(action.type) {\n    case 'HOME':\n    case NOT_FOUND:\n      return null\n    case 'USER':\n      return action.payload.id\n    default: \n      return state\n  }\n}\n```\n\nAnd here's how you'd embed SEO/Redux-friendly links in your app, while making use of the triggered state:\n```javascript\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport { Provider, connect } from 'react-redux'\nimport Link from 'redux-first-router-link'\nimport store from './configureStore'\n\nconst App = ({ userId, onClick }) =>\n  <div>\n    {!userId  \n      ? <div>\n          <h1>HOME</h1>\n\n          // all 3 \"links\" dispatch actions:\n          <Link to=\"/user/123\">User 123</Link> // action updates location state + changes address bar\n          <Link to={{ type: 'USER', payload: { id: 456 } }}>User 456</Link> // so does this\n          <span onClick={onClick}>User 5</span>   // so does this, but without SEO benefits\n        </div>\n\n      : <h1>USER: {userId}</h1> // press the browser BACK button to go HOME :)\n    }\n  </div>\n\nconst mapStateToProps = ({ userId }) => ({ userId })\nconst mapDispatchToProps = (dispatch) => ({\n  onClick: () => dispatch({ type: 'USER', payload: { id: 5 } })\n})\n\nconst AppContainer = connect(mapStateToProps, mapDispatchToProps)(App)\n\nReactDOM.render(\n  <Provider store={store}>\n    <AppContainer />\n  </Provider>,\n  document.getElementById('react-root')\n)\n```\n*note: ALL THREE clickable elements/links above will change the address bar while dispatching the corresponding `USER` action. The only difference\nis the last one won't get the benefits of SEO--i.e. an `<a>` tag with a matching `to` path won't be embedded in the page.* ***What this means is\nyou can take an existing Redux app that dispatches similar actions and get the benefit of syncing your address bar without changing your code!*** *The workflow we recommend is to\nfirst do that and then, once you're comfortable, to use our `<Link />` component to indicate your intentions to Google. Lastly, we recommend\nusing `actions` as your `to` prop since it doesn't marry you to a given URL structure--you can always change it in one place later (the `routesMap` object)!*\n\nBased on the above `routesMap` the following actions will be dispatched when the\ncorresponding URL is visited, and conversely those URLs will appear in the address bar\nwhen actions with the matching `type` and parameters are provided\nas keys in the payload object:\n\n| URL                | <-> | ACTION     |\n| ------------------ |:---:| ----------:|\n| /home              | <-> | { type: 'HOME' } |\n| /user/123          | <-> | { type: 'USER', payload: { id: 123 } } |\n| /user/456          | <-> | { type: 'USER', payload: { id: 456 } } |\n| /user/5            | <-> | { type: 'USER', payload: { id: 5 } } |\n\n*note: if you have more keys in your payload that is fine--so long as you have the minimum required keys to populate the path*\n\nLastly, we haven't mentioned `redux-first-router-link`yet--**Redux-First Router** is purposely built in\na very modular way, which is why the `<Link />` component is in a separate package. It's extremely simple\nand you're free to make your own. Basically it passes the `to` path on to **Redux-First Router** and calls\n`event.preventDefault()` to stop page reloads. It also can take an action object as a prop, which it will transform\ninto a URL for you! Its props API mirrors React Router's. The package is obvious enough once you get the hang of what's going on here--check it\nout when you're ready: [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). And if \nyou're wondering, yes there is a `NavLink` component with props like `activeClass` and `activeStyle` just like in React Router.\n\n## routesMap\n\nThe `routesMap` object allows you to match action types to express style dynamic paths, with a few frills.\nHere's the primary (and very minimal *easy to remember*) set of configuration options available to you:\n\n```javascript\nconst routesMap = {\n  HOME: '/home', // plain path strings or route objects can be used\n  CATEGORY: { path: '/category/:cat', capitalizedWords: true },\n  USER: { \n    path: '/user/:cat/:name',\n    fromPath: path => capitalizeWords(path.replace(/-/g, ' ')),\n    toPath: value => value.toLowerCase().replace(/ /g, '-'),\n  },\n}\n```\n*note: the signature of `fromPath` and `toPath` offers a little more, e.g: `(pathSegment, key) => value`. Visit [routesMap docs](./docs/connectRoutes.md#routesmap) for a bit more info when the time comes.*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /home                   | <-> | { type: 'HOME' } |\n| /category/java-script   | <-> | { type: 'CATEGORY', payload: { cat: 'Java Script' } } |\n| /user/elm/evan-czaplicki   | <-> | { type: 'USER', payload: { cat: 'ELM', name: 'Evan Czaplicki' } } |\n\n\n## routesMap (with thunk)\nWe left out one final configuration key available to you: *a thunk*.\nAfter the dispatch of a matching action, a thunk (if provided) will be called, allowing you to extract path parameters from the location reducer state and make asyncronous requests to get needed data:\n\n```javascript\nconst userThunk = async (dispatch, getState) => {\n  const { slug } = getState().location.payload\n  const data = await fetch(`/api/user/${slug}`)\n  const user = await data.json()\n  const action = { type: 'USER_FOUND', payload: { user } }\n  \n  dispatch(action)\n}\n\nconst routesMap = {\n  USER: { path: '/user/:slug', thunk: userThunk  },\n}\n```\n\n> your `thunk` should return a promise for SSR to be able to `await` for its resolution and for `updateScroll()` to be called if using our [scroll restoration package](https://github.com/faceyspacey/redux-first-router-restore-scroll).\n\n*note: visit the [location reducer docs](./docs/locationReducer) to see the `location` state's shape*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /user/steve-jobs        | <-> | { type: 'USER', payload: { slug: 'steve-jobs' } } |\n| n/a                     | n/a | { type: 'USER_FOUND', payload: { user: { name: 'Steve Jobs', slug: 'steve-jobs' } } } |\n\nThat's all folks! :+1:\n\n\n## More Docs (they are short easy reads) \n* [connectRoutes (there is a third `options` parameter you should check out)](./docs/connectRoutes.md)\n* [action.meta (the `meta` key is how our system communicates & how our action maintains its status as an \"FSA\")](./docs/action.md)\n* [location reducer shape](./docs/reducer.md)\n* [server side rendering](./docs/server-rendering.md)\n* [query strings](./docs/query-strings.md)\n* [scroll restoration](./docs/scroll-restoration.md)\n* [redirects](./docs/server-rendering.md#redirects-example)\n* [client-only API](./docs/client-only-api.md)\n* [React Native](./docs/react-native.md)\n* [React Navigation Support](./docs/react-native.md#first-class-react-navigation-support) 🔮  - *my current primary day-to-day focus*\n* [Prefetching!](./docs/prefetching.md) 🔮 - `<Link prefetch />` ***powered by:*** **[react-universal-component](https://github.com/faceyspacey/react-universal-component)** + **[webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks)**\n## FAQ\n\nWhat about if the URL is not found?\n> If the path is not found, or if actions fail to be converted to paths, our `NOT_FOUND` action type will be dispatched. You can apply it\nas a case in your reducer's switch statements. Here's where you get it: `import { NOT_FOUND } from 'redux-first-router'`. We have strong\nidiomatic way to deal with it in server side rendering--check it out: [server side rendering](./docs/server-rendering.md).\n\nWhat if I don't want to use the *thunk* feature, can I use other ways of requesting the data?\n> Of course. This work along side any middleware of your choosing, and even GraphQL solutions like Apollo. But for the 80% use-case, \"follow-up\" thunks attached to routes gets a lot of bang for your buck via the context associated with the initial route action.\n\nOk, but what if I request my data in `componentDidMount`?\n>This works great for that, but it's a naive strategy without a server-side recursive promise resolution service like Apollo offers. The problem with `componentDidMount` is that you can't generate all\nthe state required to render your app without first rendering your app at least once. That means additional work on your part as well as cycles\non the server (the latter of which is also a caveat for Apollo). It's also makes Redux's highly useful time-traveling tools *unreliable*. If that's where you're at in how you get things\ndone, that's fine--but we recommend leveling up to a \"dispatch to get state\" strategy (rather than a \"get state on render\" approach), as that will provide way more predictability, which is\nespecially useful when it comes to testing. When it comes to server side rendering there is no better option. We recommend looking at our \n[server side rendering doc](./docs/server-rendering.md) to see the\nrecommended approach.\n\nThe middleware dispatches thunks asyncronously with no way for me to *await* them, how can I wait for asyncronously received data on the server?\n> Please visit the [server side rendering doc](./docs/server-rendering.md). In short,\nthunks are not dispatched from the middleware on the server, but `connectRoutes`, returns a `thunk` in addition to `middleware`, `enhancer` and `reducer`,\nwhich you can await on, and it will retreive any data corresponding to the current route! We think our solution is slick and sensible.\n\nThe server has no `window` or `history`, how can I get that on the server?\n> The [history](https://github.com/ReactTraining/history) package provides a `createMemoryHistory()` function just for this scenario.\nIt essentially generates a fake `history` object based on the `request.path` *express* (or similar packages) will give you. It's painless. Check it out!\n\nDoes this work with React Native?\n> Yes, just like server side rendering, you can use the `history` package's `createMemoryHistory()` function. It's perfect for React Native's `Linking` API and push notifications in general. In fact, \nif you built your React Native app already and are just starting to deal with deep-linking and push notifications, **Redux-First Router**\nis perfectly suited to be tacked on in final stages with very few changes. We also have first-class support for [**React Navigation**](./docs/react-native.md#first-class-react-navigation-support), which really is the crown jewel here and where we do most our work these days. It does some amazing things. [Check it out!](./docs/react-native.md#first-class-react-navigation-support)\n\nOk, but there's gotta be a catch--what changes should I expect to make if I start using **Redux-First Router**?\n> Primarily it will force you to consolidate the actions you use in your reducers. Whereas before you might have had\nseveral actions to trigger the same state, you will now centralize on a smaller number of actions that each correspond \nto a specific URL path. Your actions will become more \"page-like\", i.e. geared towards triggering page/URL transitions. \nThat said, you absolutely don't need to have a URL for every action. In our apps, we don't. Just the actions that lead\nto the biggest visual changes in the page that we want search engines to pick up.\n\nAnd what about actually getting links on the page for search engines to see?\n> Use [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). This package has been built in a modular way,\nwhich is why that's not in here. *redux-first-router-link's* `<Link />` and `<NavLink />` components mirror React Router's. You should be using these on web to get `<a>` tags on your page for *Google*. In React Native, just dispatch actions in `onPress` handlers.\n\nWhy no route matching components like *React Router*?\n> Because they are unnecessary when the combination of actions and reducers lead to both a wider variety and better defined set of states, not to mention\nmore singular. By \"singular\" we mean that you don't have to think in terms of *both* redux state *AND* address bar paths. You just think\nin terms of *state* after you setup your routes map. It makes your life simpler. It makes your code cleaner and easier to understand. It gives you the best control\nReact + Redux has to offer when it comes to optimizing rendering for animations. \n\nWhat about all the code splitting features *Next.js* has to offer?\n> They certainly crush it when it comes to code splitting. There's no doubt about it. But check out their Redux example\nwhere it seems to have a different `store` per page. I've asked, and they do merge, but it complicates how you will use Redux. If your app is \nvery page-like, great--but we think the whole purpose of tools like React and Redux is to build *\"apps\"* not *pages*. \nThe hallmark of an app is seamless animated transitions where you forget you're on a specific page. You need full\ncontrol of rendering to do that at the highest level. `shouldComponentUpdate`, pure functions and [reselect](https://github.com/reactjs/reselect)\nbecome your best friends. Everything else gets in the way. And of course **Redux-First Router** stays out of the way.\nStraightup, let us know if you think we nailed it or what we're missing. Feel free to use github issues.\n\nGee, I've never seen a Redux middleware/enhancer tool return so many things to use for configuring the store???\n>Part of what **Redux-First Router** does so well (and one of its considerations from the start) is server side rendering. All these\naspects depend on state unique to each visit/request. The returned `middleware`, `enhancer`, `reducer` and `thunk` functions share\nenclosed state (i.e. within a \"closure\") in a *per instance* fashion. Most of the code is written as pure utility functions\nand we are very proud about that. But what's not is returned to you in a way that will insure state is not shared between\nrequests on the server. In short, we have spared no expense to get this package as tight as possible. Watch the video below to get an \nidea of how the system works and its overall simplicity:\n\n*video coming soon...*\n\n\n## Contributing\n\n\nWe use [commitizen](https://github.com/commitizen/cz-cli), so run `npm run cm` to make commits. A command-line form will appear, requiring you answer a few questions to automatically produce a nicely formatted commit. Releases, semantic version numbers, tags, changelogs and publishing to NPM will automatically be handled based on these commits thanks to [semantic-release](https://github.com/semantic-release/semantic-release). Be good.\n\n\n## Tests\n\nReviewing a package's tests are a great way to get familiar with it. It's direct insight into the capabilities of the given package (if the tests are thorough). What's even better is a screenshot of the tests neatly organized and grouped (you know the whole \"a picture says a thousand words\" thing). \n\nBelow is a screenshot of this module's tests running in [Wallaby](https://wallabyjs.com) *(\"An Integrated Continuous Testing Tool for JavaScript\")* which everyone in the React community should be using. It's fantastic and has taken my entire workflow to the next level. It re-runs your tests on every change along with comprehensive logging, bi-directional linking to your IDE, in-line code coverage indicators, **and even snapshot comparisons + updates for Jest!** I requestsed that feature by the way :). It's basically a substitute for live-coding that inspires you to test along your journey.\n\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-1.png)\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-2.png)\n\n## More from FaceySpacey in Reactlandia\n- [react-universal-component](https://github.com/faceyspacey/react-universal-component). It's made to work perfectly with *Redux First Router*. Together they comprise our *\"frameworkless\"* Redux-based approach to what Next.js does (splitting, SSR, prefetching, and routing).\n- [webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks). And this is the foundation of our `Universal` product line. Make sure to check out!\n\n","readmeFilename":"README.md","gitHead":"9c3822a2c224752b1aae3e66c6525f6d56aec25f","_id":"redux-first-router@0.0.9-rudy","_npmVersion":"5.0.3","_nodeVersion":"8.1.3","_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"dist":{"integrity":"sha512-ZVzRa3llZpelb1TO/PtaWz+GnXBBkEen54/EyZZSXIxG/WOZL7yby5HD6jW03ArXbl5JjRx6TnEbZwOYBqHbXQ==","shasum":"ecf15321b5c4589a47ca66916787862622084c0c","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-0.0.9-rudy.tgz","fileCount":55,"unpackedSize":489349,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7SF35zRPy6Sb3QAajOuP+ue+zDzZ+iX49ZQRP5UhuSgIhAJuiDSJOnO/CoiBZshpr/hLyT+zsDNG1/z5pQtxlhaS4"}]},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_0.0.9-rudy_1521428721544_0.5113423783629856"},"_hasShrinkwrap":false},"1.9.20-beta.0":{"name":"redux-first-router","version":"1.9.20-beta.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","snyk":"snyk test","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","precommit":"lint-staged --verbose && npm test","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"path-to-regexp":"^1.7.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^3.0.2","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","history":"^4.5.1","husky":"^0.13.2","jest":"^23.6.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^6.2.0","redux":"^4.0.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","snyk":"^1.100.1","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"history":"*","redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"readme":"<a href=\"https://gitter.im/Reactlandia/Lobby\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"http://cdn.reactlandia.com/reactlandia-chat.png\">\n</a>\n\n<a href=\"https://codesandbox.io/s/github/faceyspacey/redux-first-router-codesandbox\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-boilerplate\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/boilerplate.png?a=1\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-demo\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/demo.png\">\n</a>\n\n### Road to Rudy!:\n\n> **UPDATE (8/15):** you can now add additional routes as part of your code splitting strategy. See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/62#issuecomment-322558836) for more info.\n\n> **UPDATE (9/5):** you can now block user navigation via the `confirmLeave` route option (and customize its appearance via the `displayConfirmLeave` option). See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/27#issuecomment-327431413) for more info. Do `yarn upgrade redux-first-router@next` to get it.\n\n> **UPDATE (9/6):** MUCH ANTICIPATED FEATURE: you can now do all sorts of optional params in your paths, match multiple similar paths to the same type, use regexes, and use params that capture multiple segments. See [this issue comment](https://github.com/faceyspacey/redux-first-router/issues/83#issuecomment-327703226) for more info. Do `yarn upgrade redux-first-router@next` to get it.\n\n> **UPDATE (9/9):** *4 new things:* 1) route paths are now cached for better performance (less cycles wasted on parsing). 2) you can now do **pathless routes!**. I.e. you can use routes just for the purpose of the thunk feature, thereby achieving more uniformity across your async actions--just use RFR! Just dispatch the action type for which you have a thunk in your `routesMap` and it will be called like any other. To learn more about it: [check this example](https://gist.github.com/faceyspacey/2771c05a62a338fa6d3d23d76e6e7c5a). 3) now all thunks and callbacks (`onBeforeChange`, `onAfterChange`, etc) receive a 3rd *\"bag\"* argument which currently has a key for the current `action` and an `extra` key. More keys may be added later. The `extra` key is an option you provide to `connectRoutes` which is the equivalent of Redux-Thunk's *\"extra argument\"*. It just happens to be in our bag. That said, `onBeforeChange` used to receive just an `action` as a 3rd argument. So unfortunately this is a breaking change. Check the aforementioned example to learn more about this too. 4) lastly, now RFR skips actions with an `error` key; this should resolve a few quirks for developers using middleware that explicitly handle errors already. If it ever makes sense for RFR/Rudy to handle errors, we'll provide a robust solution. Half-assing as we've done doesn't make sense for now.\n\n> **UPDATE (9/16):** There is now a `basename` option. Also, `history` is no longer passed to `connectRoutes`. The `history` package is handled internally. Yup, a breaking change, but a super quick fix in one place. Check [this comment](https://github.com/faceyspacey/redux-first-router/issues/103#issuecomment-329972201) for more info. Lastly, to upgrade now do this: `yarn upgrade redux-first-router@rudy redux-first-router-link@rudy` :) ...next and master branches are locked in forever basically and will never be touched again :). The `rudy` branch will become **Rudy**.\n\n> **UPDATE (9/18):** There is now a `createHistory` option. Get it from the `rudy` tag on NPM. This was specifically implemented for [people that want to use the hashHistory](https://github.com/faceyspacey/redux-first-router/issues/114#issuecomment-330499555) which I wasn't aware anyone wanted to do, plus it's also useful when testing your own implementation or forks.\n\n> **UPDATE (9/22):** BREAKING CHANGE: now `toPath` and `fromPath` on your routes are passed all path segments, even if they are numbers. No automatic transformations will happen if you provide these transformation functions. Get it **@rudy** on NPM.\n\n# Redux-First Router\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/v/redux-first-router.svg\" alt=\"Version\" />\n  </a>\n\n  <a href=\"https://travis-ci.org/faceyspacey/redux-first-router\">\n    <img src=\"https://travis-ci.org/faceyspacey/redux-first-router.svg?branch=master\" alt=\"Build Status\" />\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/dt/redux-first-router.svg\" alt=\"Downloads\" />\n  </a>\n  \n  <a href=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n    <img src=\"https://snyk.io/test/github/faceyspacey/redux-first-router/badge.svg\" alt=\"Known Vulnerabilities\" data-canonical-src=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/l/redux-first-router.svg\" alt=\"License\" />\n  </a>\n</p>\n\n\n![redux-first-router flow chart](https://raw.githubusercontent.com/faceyspacey/redux-first-router/master/docs/redux-first-router-flow-chart.png)\n\n\nThe goal of **Redux-First Router** is to think of your app in *states*, not *routes*, not *components*, while keeping the address bar in sync. Everything is state, not components. Connect your components and *just dispatch* ***flux standard actions.***\n\n**Articles You Should Read:**\n- **[Pre Release: Redux-First Router — A Step Beyond Redux-Little-Router](https://medium.com/@faceyspacey/pre-release-redux-first-router-a-step-beyond-redux-little-router-cd2716576aea)** \n- **[Redux-First Router lookin Sexy on Code Sandbox](https://medium.com/faceyspacey/redux-first-router-lookin-sexy-on-code-sandbox-d9d9bea15053)** \n- **[Redux-First Router data-fetching: solving the 80% use case for async Middleware](https://medium.com/faceyspacey/redux-first-router-data-fetching-solving-the-80-use-case-for-async-middleware-14529606c262)**\n- **[Server-Render like a Pro /w Redux-First Router in 10 steps](https://medium.com/faceyspacey/server-render-like-a-pro-w-redux-first-router-in-10-steps-b27dd93859de)** 🚀🚀🚀 *(READ THIS!)*\n\nThe thinking behind this package has been: \"if we were to dream up a 'Redux-first' approach to routing from the \nground up, what would it look like?\" The result has been what we hope you feel to be one of those \n\"inversion of control\" scenarios that makes a challenging problem *simple* when coming at it from a different angle.\nWe hope *Redux-First Router* comes off as an obvious solution.\n\nBefore we get started, there is some *prior art*, and you should [check them out](./docs/prior-art.md). **Redux-First Router**\nisn't the first stab at something like this, but--aside from this path being pre-validated--we feel it is the most complete, tested and *spot on* solution.\nWe have reviewed what came before, stripped what was unnecessary, added what was needed, and generally focused on getting the ***developer experience*** right. Ultimately it offers far more than previous solutions. The best\npart is that once you set it up there's virtually nothing left to do. It's truly \"set it and forget it.\" Let's get started.\n\n> And did we mention: **it has first class support for** ***React Navigation!***\n\n## Installation\n\nInstall `redux-first-router` and its peer dependency `history` plus our small `<Link />` package:\n\n```bash\nyarn add history redux-first-router redux-first-router-link\n```\n\n**Full-Featured Universal Demo App (includes SSR + Splitting!):**\n\nhttps://github.com/faceyspacey/redux-first-router-demo\n\n\n## Motivation - What Routing in Redux is Meant To Be\n\nTo automate routing. To be able to use Redux *as is* while keeping the URL in the address bar in sync. \nTo think solely in terms of *\"state\"* and *NOT routes, paths, route matching components*. And of course\nfor server side rendering to require no more than dispatching on the store like normal. *Path params are just\naction payloads, and action types demarcate a certain kind of path*. **That is what routing in Redux is meant to be.** \n\nIn practice, what that means is having the address bar update in response to actions and ***bi-directionally*** \nhaving actions dispatched in response to address bar changes, such as via the browser\nback/forward buttons. The \"bi-directional\" aspect is embodied in the diagram above where the first blue arrows\npoints both ways--i.e. dispatching actions changes the address bar, *and* changes to\nthe address bar dispatches actions.\n\nIn addition, here are some key obstacles **Redux-First Router** seeks to *avoid*:\n\n* having to render from any state that doesn't come from redux\n* cluttering component code with route-related components\n* the added complexity [and bugs] from 2 forms of state: redux state vs. routing state\n* large API surface areas  of packages/frameworks\nlike `react-router` and `next.js`\n* workarounds that such large *(likely \"leaky\")* abstractions inevitably require to achieve a professional app\n* strategies as low level as possible to deal with animations. Animations coinciding with React \ncomponent updates *are* a problem, particularly in the browser (React Native is better). \n\"Jank\" is common. Techniques  like `shouldComponentUpdate` are a must; routing frameworks \nget in the way of optimizing animations.\n\n\n## The Gist\nIt's *set-and-forget-it*, so here's the most work you'll ever do! :+1:\n```javascript\nimport { connectRoutes } from 'redux-first-router'\nimport { combineReducers, createStore, applyMiddleware, compose } from 'redux'\nimport createHistory from 'history/createBrowserHistory'\nimport userIdReducer from './reducers/userIdReducer'\n\nconst history = createHistory()\n\n// THE WORK:\nconst routesMap = { \n  HOME: '/home',      // action <-> url path\n  USER: '/user/:id',  // :id is a dynamic segment\n}\n\nconst { reducer, middleware, enhancer } = connectRoutes(history, routesMap) // yes, 3 redux aspects\n\n// and you already know how the story ends:\nconst rootReducer = combineReducers({ location: reducer, userId: userIdReducer })\nconst middlewares = applyMiddleware(middleware)\n// note the order: enhancer, then middlewares\nconst store = createStore(rootReducer, compose(enhancer, middlewares))\n```\n\n```javascript\nimport { NOT_FOUND } from 'redux-first-router'\n\nexport const userIdReducer = (state = null, action = {}) => {\n  switch(action.type) {\n    case 'HOME':\n    case NOT_FOUND:\n      return null\n    case 'USER':\n      return action.payload.id\n    default: \n      return state\n  }\n}\n```\n\nAnd here's how you'd embed SEO/Redux-friendly links in your app, while making use of the triggered state:\n```javascript\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport { Provider, connect } from 'react-redux'\nimport Link from 'redux-first-router-link'\nimport store from './configureStore'\n\nconst App = ({ userId, onClick }) =>\n  <div>\n    {!userId  \n      ? <div>\n          <h1>HOME</h1>\n\n          // all 3 \"links\" dispatch actions:\n          <Link to=\"/user/123\">User 123</Link> // action updates location state + changes address bar\n          <Link to={{ type: 'USER', payload: { id: 456 } }}>User 456</Link> // so does this\n          <span onClick={onClick}>User 5</span>   // so does this, but without SEO benefits\n        </div>\n\n      : <h1>USER: {userId}</h1> // press the browser BACK button to go HOME :)\n    }\n  </div>\n\nconst mapStateToProps = ({ userId }) => ({ userId })\nconst mapDispatchToProps = (dispatch) => ({\n  onClick: () => dispatch({ type: 'USER', payload: { id: 5 } })\n})\n\nconst AppContainer = connect(mapStateToProps, mapDispatchToProps)(App)\n\nReactDOM.render(\n  <Provider store={store}>\n    <AppContainer />\n  </Provider>,\n  document.getElementById('react-root')\n)\n```\n*note: ALL THREE clickable elements/links above will change the address bar while dispatching the corresponding `USER` action. The only difference\nis the last one won't get the benefits of SEO--i.e. an `<a>` tag with a matching `to` path won't be embedded in the page.* ***What this means is\nyou can take an existing Redux app that dispatches similar actions and get the benefit of syncing your address bar without changing your code!*** *The workflow we recommend is to\nfirst do that and then, once you're comfortable, to use our `<Link />` component to indicate your intentions to Google. Lastly, we recommend\nusing `actions` as your `to` prop since it doesn't marry you to a given URL structure--you can always change it in one place later (the `routesMap` object)!*\n\nBased on the above `routesMap` the following actions will be dispatched when the\ncorresponding URL is visited, and conversely those URLs will appear in the address bar\nwhen actions with the matching `type` and parameters are provided\nas keys in the payload object:\n\n| URL                | <-> | ACTION     |\n| ------------------ |:---:| ----------:|\n| /home              | <-> | { type: 'HOME' } |\n| /user/123          | <-> | { type: 'USER', payload: { id: 123 } } |\n| /user/456          | <-> | { type: 'USER', payload: { id: 456 } } |\n| /user/5            | <-> | { type: 'USER', payload: { id: 5 } } |\n\n*note: if you have more keys in your payload that is fine--so long as you have the minimum required keys to populate the path*\n\nLastly, we haven't mentioned `redux-first-router-link`yet--**Redux-First Router** is purposely built in\na very modular way, which is why the `<Link />` component is in a separate package. It's extremely simple\nand you're free to make your own. Basically it passes the `to` path on to **Redux-First Router** and calls\n`event.preventDefault()` to stop page reloads. It also can take an action object as a prop, which it will transform\ninto a URL for you! Its props API mirrors React Router's. The package is obvious enough once you get the hang of what's going on here--check it\nout when you're ready: [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). And if \nyou're wondering, yes there is a `NavLink` component with props like `activeClass` and `activeStyle` just like in React Router.\n\n## routesMap\n\nThe `routesMap` object allows you to match action types to express style dynamic paths, with a few frills.\nHere's the primary (and very minimal *easy to remember*) set of configuration options available to you:\n\n```javascript\nconst routesMap = {\n  HOME: '/home', // plain path strings or route objects can be used\n  CATEGORY: { path: '/category/:cat', capitalizedWords: true },\n  PAGE: { path: '/page/:num', coerceNumbers: false },\n  USER: { \n    path: '/user/:cat/:name',\n    fromPath: path => capitalizeWords(path.replace(/-/g, ' ')),\n    toPath: value => value.toLowerCase().replace(/ /g, '-'),\n  },\n}\n```\n*note: the signature of `fromPath` and `toPath` offers a little more, e.g: `(pathSegment, key) => value`. Visit [routesMap docs](./docs/connectRoutes.md#routesmap) for a bit more info when the time comes.*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /home                   | <-> | { type: 'HOME' } |\n| /category/java-script   | <-> | { type: 'CATEGORY', payload: { cat: 'Java Script' } } |\n| /user/elm/evan-czaplicki   | <-> | { type: 'USER', payload: { cat: 'ELM', name: 'Evan Czaplicki' } } |\n\n\n## routesMap (with thunk)\nWe left out one final configuration key available to you: *a thunk*.\nAfter the dispatch of a matching action, a thunk (if provided) will be called, allowing you to extract path parameters from the location reducer state and make asyncronous requests to get needed data:\n\n```javascript\nconst userThunk = async (dispatch, getState) => {\n  const { slug } = getState().location.payload\n  const data = await fetch(`/api/user/${slug}`)\n  const user = await data.json()\n  const action = { type: 'USER_FOUND', payload: { user } }\n  \n  dispatch(action)\n}\n\nconst routesMap = {\n  USER: { path: '/user/:slug', thunk: userThunk  },\n}\n```\n\n> your `thunk` should return a promise for SSR to be able to `await` for its resolution and for `updateScroll()` to be called if using our [scroll restoration package](https://github.com/faceyspacey/redux-first-router-restore-scroll).\n\n*note: visit the [location reducer docs](./docs/locationReducer) to see the `location` state's shape*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /user/steve-jobs        | <-> | { type: 'USER', payload: { slug: 'steve-jobs' } } |\n| n/a                     | n/a | { type: 'USER_FOUND', payload: { user: { name: 'Steve Jobs', slug: 'steve-jobs' } } } |\n\nThat's all folks! :+1:\n\n\n## More Docs (they are short easy reads) \n* [connectRoutes (there is a third `options` parameter you should check out)](./docs/connectRoutes.md)\n* [action.meta (the `meta` key is how our system communicates & how our action maintains its status as an \"FSA\")](./docs/action.md)\n* [location reducer shape](./docs/reducer.md)\n* [server side rendering](./docs/server-rendering.md)\n* [query strings](./docs/query-strings.md)\n* [scroll restoration](./docs/scroll-restoration.md)\n* [redirects](./docs/server-rendering.md#redirects-example)\n* [client-only API](./docs/client-only-api.md)\n* [React Native](./docs/react-native.md)\n* [React Navigation Support](./docs/react-native.md#first-class-react-navigation-support) 🔮  - *my current primary day-to-day focus*\n* [Prefetching!](./docs/prefetching.md) 🔮 - `<Link prefetch />` ***powered by:*** **[react-universal-component](https://github.com/faceyspacey/react-universal-component)** + **[webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks)**\n## FAQ\n\nWhat about if the URL is not found?\n> If the path is not found, or if actions fail to be converted to paths, our `NOT_FOUND` action type will be dispatched. You can apply it\nas a case in your reducer's switch statements. Here's where you get it: `import { NOT_FOUND } from 'redux-first-router'`. We have strong\nidiomatic way to deal with it in server side rendering--check it out: [server side rendering](./docs/server-rendering.md).\n\nWhat if I don't want to use the *thunk* feature, can I use other ways of requesting the data?\n> Of course. This work along side any middleware of your choosing, and even GraphQL solutions like Apollo. But for the 80% use-case, \"follow-up\" thunks attached to routes gets a lot of bang for your buck via the context associated with the initial route action.\n\nOk, but what if I request my data in `componentDidMount`?\n>This works great for that, but it's a naive strategy without a server-side recursive promise resolution service like Apollo offers. The problem with `componentDidMount` is that you can't generate all\nthe state required to render your app without first rendering your app at least once. That means additional work on your part as well as cycles\non the server (the latter of which is also a caveat for Apollo). It's also makes Redux's highly useful time-traveling tools *unreliable*. If that's where you're at in how you get things\ndone, that's fine--but we recommend leveling up to a \"dispatch to get state\" strategy (rather than a \"get state on render\" approach), as that will provide way more predictability, which is\nespecially useful when it comes to testing. When it comes to server side rendering there is no better option. We recommend looking at our \n[server side rendering doc](./docs/server-rendering.md) to see the\nrecommended approach.\n\nThe middleware dispatches thunks asyncronously with no way for me to *await* them, how can I wait for asyncronously received data on the server?\n> Please visit the [server side rendering doc](./docs/server-rendering.md). In short,\nthunks are not dispatched from the middleware on the server, but `connectRoutes`, returns a `thunk` in addition to `middleware`, `enhancer` and `reducer`,\nwhich you can await on, and it will retreive any data corresponding to the current route! We think our solution is slick and sensible.\n\nThe server has no `window` or `history`, how can I get that on the server?\n> The [history](https://github.com/ReactTraining/history) package provides a `createMemoryHistory()` function just for this scenario.\nIt essentially generates a fake `history` object based on the `request.path` *express* (or similar packages) will give you. It's painless. Check it out!\n\nDoes this work with React Native?\n> Yes, just like server side rendering, you can use the `history` package's `createMemoryHistory()` function. It's perfect for React Native's `Linking` API and push notifications in general. In fact, \nif you built your React Native app already and are just starting to deal with deep-linking and push notifications, **Redux-First Router**\nis perfectly suited to be tacked on in final stages with very few changes. We also have first-class support for [**React Navigation**](./docs/react-native.md#first-class-react-navigation-support), which really is the crown jewel here and where we do most our work these days. It does some amazing things. [Check it out!](./docs/react-native.md#first-class-react-navigation-support)\n\nOk, but there's gotta be a catch--what changes should I expect to make if I start using **Redux-First Router**?\n> Primarily it will force you to consolidate the actions you use in your reducers. Whereas before you might have had\nseveral actions to trigger the same state, you will now centralize on a smaller number of actions that each correspond \nto a specific URL path. Your actions will become more \"page-like\", i.e. geared towards triggering page/URL transitions. \nThat said, you absolutely don't need to have a URL for every action. In our apps, we don't. Just the actions that lead\nto the biggest visual changes in the page that we want search engines to pick up.\n\nAnd what about actually getting links on the page for search engines to see?\n> Use [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). This package has been built in a modular way,\nwhich is why that's not in here. *redux-first-router-link's* `<Link />` and `<NavLink />` components mirror React Router's. You should be using these on web to get `<a>` tags on your page for *Google*. In React Native, just dispatch actions in `onPress` handlers.\n\nWhy no route matching components like *React Router*?\n> Because they are unnecessary when the combination of actions and reducers lead to both a wider variety and better defined set of states, not to mention\nmore singular. By \"singular\" we mean that you don't have to think in terms of *both* redux state *AND* address bar paths. You just think\nin terms of *state* after you setup your routes map. It makes your life simpler. It makes your code cleaner and easier to understand. It gives you the best control\nReact + Redux has to offer when it comes to optimizing rendering for animations. \n\nWhat about all the code splitting features *Next.js* has to offer?\n> They certainly crush it when it comes to code splitting. There's no doubt about it. But check out their Redux example\nwhere it seems to have a different `store` per page. I've asked, and they do merge, but it complicates how you will use Redux. If your app is \nvery page-like, great--but we think the whole purpose of tools like React and Redux is to build *\"apps\"* not *pages*. \nThe hallmark of an app is seamless animated transitions where you forget you're on a specific page. You need full\ncontrol of rendering to do that at the highest level. `shouldComponentUpdate`, pure functions and [reselect](https://github.com/reactjs/reselect)\nbecome your best friends. Everything else gets in the way. And of course **Redux-First Router** stays out of the way.\nStraightup, let us know if you think we nailed it or what we're missing. Feel free to use github issues.\n\nGee, I've never seen a Redux middleware/enhancer tool return so many things to use for configuring the store???\n>Part of what **Redux-First Router** does so well (and one of its considerations from the start) is server side rendering. All these\naspects depend on state unique to each visit/request. The returned `middleware`, `enhancer`, `reducer` and `thunk` functions share\nenclosed state (i.e. within a \"closure\") in a *per instance* fashion. Most of the code is written as pure utility functions\nand we are very proud about that. But what's not is returned to you in a way that will insure state is not shared between\nrequests on the server. In short, we have spared no expense to get this package as tight as possible. Watch the video below to get an \nidea of how the system works and its overall simplicity:\n\n*video coming soon...*\n\n\n## Contributing\n\n\nWe use [commitizen](https://github.com/commitizen/cz-cli), so run `npm run cm` to make commits. A command-line form will appear, requiring you answer a few questions to automatically produce a nicely formatted commit. Releases, semantic version numbers, tags, changelogs and publishing to NPM will automatically be handled based on these commits thanks to [semantic-release](https://github.com/semantic-release/semantic-release). Be good.\n\n\n## Tests\n\nReviewing a package's tests are a great way to get familiar with it. It's direct insight into the capabilities of the given package (if the tests are thorough). What's even better is a screenshot of the tests neatly organized and grouped (you know the whole \"a picture says a thousand words\" thing). \n\nBelow is a screenshot of this module's tests running in [Wallaby](https://wallabyjs.com) *(\"An Integrated Continuous Testing Tool for JavaScript\")* which everyone in the React community should be using. It's fantastic and has taken my entire workflow to the next level. It re-runs your tests on every change along with comprehensive logging, bi-directional linking to your IDE, in-line code coverage indicators, **and even snapshot comparisons + updates for Jest!** I requestsed that feature by the way :). It's basically a substitute for live-coding that inspires you to test along your journey.\n\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-1.png)\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-2.png)\n\n## More from FaceySpacey in Reactlandia\n- [react-universal-component](https://github.com/faceyspacey/react-universal-component). It's made to work perfectly with *Redux First Router*. Together they comprise our *\"frameworkless\"* Redux-based approach to what Next.js does (splitting, SSR, prefetching, and routing).\n- [webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks). And this is the foundation of our `Universal` product line. Make sure to check out!\n\n","readmeFilename":"README.md","gitHead":"8096b2b64ddbeb1c26f2f67d290d5b0ee66483e6","_id":"redux-first-router@1.9.20-beta.0","_npmVersion":"5.6.0","_nodeVersion":"9.10.0","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-GliX0HAPtKSFQ6FVPaBLm9CnP+gDGK/UrW6lqBuAqYMcktCAd6TGqEBOI3BbnrquiVUTDt03An7tOrmVLcU9uQ==","shasum":"0c02508c08241af21865561375d3f617b23145d6","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-1.9.20-beta.0.tgz","fileCount":54,"unpackedSize":500287,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtmD8CRA9TVsSAnZWagAA3hgP/2Tglq2cQdvg20cDkBRu\nfEqvVujPsLlNuepkLGSXbvyLYfgWfuto/mnX7EPdGr31pp45ulVzU5/MEn86\ns8etMt6oPL8f9VLng2EBe+rZ2YfAbOgVOOsjcw/mWi+V1aDxSvkaM5fDeDIh\n5BbgLrBY+wgR6g/QNBUaFkRDVDKJvTFSsnGfQJbqox7TvAIwBYkHr+Hz8rWh\nWKOAISbeoc9bfiy4BVQ4AXe7oJ2hWzYnvbIbcEtDcgsdqRUGB77wGrhs1dTR\n5Y4PKilKq4WCuKRbwY27YucURIaqvA0uM0pU/4GPWb6kN+XjubZpQOvSCY55\ns113fKZiYHN2KmNH4Zy/ombKGKI4s7DNtfA8V5FkrWzqjOWqQv2Jb3HNgqEa\n+aa8Mi7jVGr/EZa7xxFkBNLa6WaKmy4VmUrKRPMGTDDHApZQloDDCNnTglta\noop6WVtXlnRbcCnTqQV4ROLp+y07RAlPQy7jsoLjpcAXq/Yq+/Pg0Jjhvshl\nqorkUpvwkRi5Yeo47bJRxsJ/JCwPNQHb7Z7+PVSV4U4Vj7ydiQLfclCOv4+T\nK6zs2NAfBJyuNCTICCcv8Q8vUg2DQutLI3D//By7X9V37TgtqKVBIJQEowUt\nnSy0cph7rdyDMU18aaA/tA7MUapHxSMWp0p3nY+UWPNCz7zkKejX1llN3BEi\njJtd\r\n=TGnU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDbsGLWAQhpcpuiMyDmW4AkDbZ2zM9K4i/M0Ercz6UxyAiEA50Fgmbec3XWErEZ43KNFWkF3w+JCjeWZ30INwYMIzy4="}]},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_1.9.20-beta.0_1538679035936_0.4980865807650594"},"_hasShrinkwrap":false},"2.0.1-beta.0":{"name":"redux-first-router","version":"2.0.1-beta.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","snyk":"^1.100.1","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"readme":"<a href=\"https://gitter.im/Reactlandia/Lobby\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"http://cdn.reactlandia.com/reactlandia-chat.png\">\n</a>\n\n<a href=\"https://codesandbox.io/s/github/faceyspacey/redux-first-router-codesandbox\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-boilerplate\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/boilerplate.png?a=1\">\n</a>\n\n<a href=\"https://github.com/faceyspacey/redux-first-router-demo\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/demo.png\">\n</a>\n\n### Road to Rudy!:\nWe will be moving Rudy to a new repo within our `respond` organization. \n\nRFR will be entering a LTS state as Rudy takes focus.\n\n# Redux-First Router\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/v/redux-first-router.svg\" alt=\"Version\" />\n  </a>\n\n  <a href=\"https://travis-ci.org/faceyspacey/redux-first-router\">\n    <img src=\"https://travis-ci.org/faceyspacey/redux-first-router.svg?branch=master\" alt=\"Build Status\" />\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/dt/redux-first-router.svg\" alt=\"Downloads\" />\n  </a>\n  \n  <a href=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n    <img src=\"https://snyk.io/test/github/faceyspacey/redux-first-router/badge.svg\" alt=\"Known Vulnerabilities\" data-canonical-src=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/l/redux-first-router.svg\" alt=\"License\" />\n  </a>\n</p>\n\n\n\n## Version 2.0 Released!\nDurning the Development of Rudy, we had released a few various versions under random names and npm tags. All of that, plus a bunch of outstanding PRs have been merged to create a stable, updated and still mostly compatible API.\n\nReadmes and documentation does need to be re-organized. \n\nIf anyone has some idead on how to improve / wants to help us with documentation - tweet `@ScriptedAlchemy`\n\n\n## Documentation**\nMore in-depth documentation and exmaples can be found here:\n<a href=\"https://github.com/faceyspacey/redux-first-router/tree/rudy/docs\">\n  here\n</a>\n\n![redux-first-router flow chart](https://raw.githubusercontent.com/faceyspacey/redux-first-router/master/docs/redux-first-router-flow-chart.png)\n\nThe goal of **Redux-First Router** is to think of your app in *states*, not *routes*, not *components*, while keeping the address bar in sync. Everything is state, not components. Connect your components and *just dispatch* ***flux standard actions.***\n\n**Articles You Should Read:**\n- **[Pre Release: Redux-First Router — A Step Beyond Redux-Little-Router](https://medium.com/@faceyspacey/pre-release-redux-first-router-a-step-beyond-redux-little-router-cd2716576aea)** \n- **[Redux-First Router lookin Sexy on Code Sandbox](https://medium.com/faceyspacey/redux-first-router-lookin-sexy-on-code-sandbox-d9d9bea15053)** \n- **[Redux-First Router data-fetching: solving the 80% use case for async Middleware](https://medium.com/faceyspacey/redux-first-router-data-fetching-solving-the-80-use-case-for-async-middleware-14529606c262)**\n- **[Server-Render like a Pro /w Redux-First Router in 10 steps](https://medium.com/faceyspacey/server-render-like-a-pro-w-redux-first-router-in-10-steps-b27dd93859de)** 🚀🚀🚀 *(READ THIS!)*\n\nThe thinking behind this package has been: \"if we were to dream up a 'Redux-first' approach to routing from the \nground up, what would it look like?\" The result has been what we hope you feel to be one of those \n\"inversion of control\" scenarios that makes a challenging problem *simple* when coming at it from a different angle.\nWe hope *Redux-First Router* comes off as an obvious solution.\n\nBefore we get started, there is some *prior art*, and you should [check them out](./docs/prior-art.md). **Redux-First Router**\nisn't the first stab at something like this, but--aside from this path being pre-validated--we feel it is the most complete, tested and *spot on* solution.\nWe have reviewed what came before, stripped what was unnecessary, added what was needed, and generally focused on getting the ***developer experience*** right. Ultimately it offers far more than previous solutions. The best\npart is that once you set it up there's virtually nothing left to do. It's truly \"set it and forget it.\" Let's get started.\n\n> And did we mention: **it has first class support for** ***React Navigation!***\n\n## Installation\n\nInstall `redux-first-router` and its peer dependency `history` plus our small `<Link />` package:\n\n```bash\nyarn add history redux-first-router redux-first-router-link\n```\n\n**Full-Featured Universal Demo App (includes SSR + Splitting!):**\n\nhttps://github.com/faceyspacey/redux-first-router-demo\n\n\n## Motivation - What Routing in Redux is Meant To Be\n\nTo automate routing. To be able to use Redux *as is* while keeping the URL in the address bar in sync. \nTo think solely in terms of *\"state\"* and *NOT routes, paths, route matching components*. And of course\nfor server side rendering to require no more than dispatching on the store like normal. *Path params are just\naction payloads, and action types demarcate a certain kind of path*. **That is what routing in Redux is meant to be.** \n\nIn practice, what that means is having the address bar update in response to actions and ***bi-directionally*** \nhaving actions dispatched in response to address bar changes, such as via the browser\nback/forward buttons. The \"bi-directional\" aspect is embodied in the diagram above where the first blue arrows\npoints both ways--i.e. dispatching actions changes the address bar, *and* changes to\nthe address bar dispatches actions.\n\nIn addition, here are some key obstacles **Redux-First Router** seeks to *avoid*:\n\n* having to render from any state that doesn't come from redux\n* cluttering component code with route-related components\n* the added complexity [and bugs] from 2 forms of state: redux state vs. routing state\n* large API surface areas  of packages/frameworks\nlike `react-router` and `next.js`\n* workarounds that such large *(likely \"leaky\")* abstractions inevitably require to achieve a professional app\n* strategies as low level as possible to deal with animations. Animations coinciding with React \ncomponent updates *are* a problem, particularly in the browser (React Native is better). \n\"Jank\" is common. Techniques  like `shouldComponentUpdate` are a must; routing frameworks \nget in the way of optimizing animations.\n\n\n## The Gist\nIt's *set-and-forget-it*, so here's the most work you'll ever do! :+1:\n```javascript\nimport { connectRoutes } from 'redux-first-router'\nimport { combineReducers, createStore, applyMiddleware, compose } from 'redux'\nimport createHistory from 'history/createBrowserHistory'\nimport userIdReducer from './reducers/userIdReducer'\n\nconst history = createHistory()\n\n// THE WORK:\nconst routesMap = { \n  HOME: '/home',      // action <-> url path\n  USER: '/user/:id',  // :id is a dynamic segment\n}\n\nconst { reducer, middleware, enhancer } = connectRoutes(history, routesMap) // yes, 3 redux aspects\n\n// and you already know how the story ends:\nconst rootReducer = combineReducers({ location: reducer, userId: userIdReducer })\nconst middlewares = applyMiddleware(middleware)\n// note the order: enhancer, then middlewares\nconst store = createStore(rootReducer, compose(enhancer, middlewares))\n```\n\n```javascript\nimport { NOT_FOUND } from 'redux-first-router'\n\nexport const userIdReducer = (state = null, action = {}) => {\n  switch(action.type) {\n    case 'HOME':\n    case NOT_FOUND:\n      return null\n    case 'USER':\n      return action.payload.id\n    default: \n      return state\n  }\n}\n```\n\nAnd here's how you'd embed SEO/Redux-friendly links in your app, while making use of the triggered state:\n```javascript\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport { Provider, connect } from 'react-redux'\nimport Link from 'redux-first-router-link'\nimport store from './configureStore'\n\nconst App = ({ userId, onClick }) =>\n  <div>\n    {!userId  \n      ? <div>\n          <h1>HOME</h1>\n\n          // all 3 \"links\" dispatch actions:\n          <Link to=\"/user/123\">User 123</Link> // action updates location state + changes address bar\n          <Link to={{ type: 'USER', payload: { id: 456 } }}>User 456</Link> // so does this\n          <span onClick={onClick}>User 5</span>   // so does this, but without SEO benefits\n        </div>\n\n      : <h1>USER: {userId}</h1> // press the browser BACK button to go HOME :)\n    }\n  </div>\n\nconst mapStateToProps = ({ userId }) => ({ userId })\nconst mapDispatchToProps = (dispatch) => ({\n  onClick: () => dispatch({ type: 'USER', payload: { id: 5 } })\n})\n\nconst AppContainer = connect(mapStateToProps, mapDispatchToProps)(App)\n\nReactDOM.render(\n  <Provider store={store}>\n    <AppContainer />\n  </Provider>,\n  document.getElementById('react-root')\n)\n```\n*note: ALL THREE clickable elements/links above will change the address bar while dispatching the corresponding `USER` action. The only difference\nis the last one won't get the benefits of SEO--i.e. an `<a>` tag with a matching `to` path won't be embedded in the page.* ***What this means is\nyou can take an existing Redux app that dispatches similar actions and get the benefit of syncing your address bar without changing your code!*** *The workflow we recommend is to\nfirst do that and then, once you're comfortable, to use our `<Link />` component to indicate your intentions to Google. Lastly, we recommend\nusing `actions` as your `to` prop since it doesn't marry you to a given URL structure--you can always change it in one place later (the `routesMap` object)!*\n\nBased on the above `routesMap` the following actions will be dispatched when the\ncorresponding URL is visited, and conversely those URLs will appear in the address bar\nwhen actions with the matching `type` and parameters are provided\nas keys in the payload object:\n\n| URL                | <-> | ACTION     |\n| ------------------ |:---:| ----------:|\n| /home              | <-> | { type: 'HOME' } |\n| /user/123          | <-> | { type: 'USER', payload: { id: 123 } } |\n| /user/456          | <-> | { type: 'USER', payload: { id: 456 } } |\n| /user/5            | <-> | { type: 'USER', payload: { id: 5 } } |\n\n*note: if you have more keys in your payload that is fine--so long as you have the minimum required keys to populate the path*\n\nLastly, we haven't mentioned `redux-first-router-link`yet--**Redux-First Router** is purposely built in\na very modular way, which is why the `<Link />` component is in a separate package. It's extremely simple\nand you're free to make your own. Basically it passes the `to` path on to **Redux-First Router** and calls\n`event.preventDefault()` to stop page reloads. It also can take an action object as a prop, which it will transform\ninto a URL for you! Its props API mirrors React Router's. The package is obvious enough once you get the hang of what's going on here--check it\nout when you're ready: [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). And if \nyou're wondering, yes there is a `NavLink` component with props like `activeClass` and `activeStyle` just like in React Router.\n\n## routesMap\n\nThe `routesMap` object allows you to match action types to express style dynamic paths, with a few frills.\nHere's the primary (and very minimal *easy to remember*) set of configuration options available to you:\n\n```javascript\nconst routesMap = {\n  HOME: '/home', // plain path strings or route objects can be used\n  CATEGORY: { path: '/category/:cat', capitalizedWords: true },\n  PAGE: { path: '/page/:num', coerceNumbers: true },\n  USER: { \n    path: '/user/:cat/:name',\n    fromPath: path => capitalizeWords(path.replace(/-/g, ' ')),\n    toPath: value => value.toLowerCase().replace(/ /g, '-'),\n  },\n}\n```\n*note: the signature of `fromPath` and `toPath` offers a little more, e.g: `(pathSegment, key) => value`. Visit [routesMap docs](./docs/connectRoutes.md#routesmap) for a bit more info when the time comes.*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /home                   | <-> | { type: 'HOME' } |\n| /category/java-script   | <-> | { type: 'CATEGORY', payload: { cat: 'Java Script' } } |\n| /user/elm/evan-czaplicki   | <-> | { type: 'USER', payload: { cat: 'ELM', name: 'Evan Czaplicki' } } |\n\n\n## routesMap (with thunk)\nWe left out one final configuration key available to you: *a thunk*.\nAfter the dispatch of a matching action, a thunk (if provided) will be called, allowing you to extract path parameters from the location reducer state and make asyncronous requests to get needed data:\n\n```javascript\nconst userThunk = async (dispatch, getState) => {\n  const { slug } = getState().location.payload\n  const data = await fetch(`/api/user/${slug}`)\n  const user = await data.json()\n  const action = { type: 'USER_FOUND', payload: { user } }\n  \n  dispatch(action)\n}\n\nconst routesMap = {\n  USER: { path: '/user/:slug', thunk: userThunk  },\n}\n```\n\n> your `thunk` should return a promise for SSR to be able to `await` for its resolution and for `updateScroll()` to be called if using our [scroll restoration package](https://github.com/faceyspacey/redux-first-router-restore-scroll).\n\n*note: visit the [location reducer docs](./docs/locationReducer) to see the `location` state's shape*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /user/steve-jobs        | <-> | { type: 'USER', payload: { slug: 'steve-jobs' } } |\n| n/a                     | n/a | { type: 'USER_FOUND', payload: { user: { name: 'Steve Jobs', slug: 'steve-jobs' } } } |\n\nThat's all folks! :+1:\n\n\n## More Docs (they are short easy reads) \n* [connectRoutes (there is a third `options` parameter you should check out)](./docs/connectRoutes.md)\n* [action.meta (the `meta` key is how our system communicates & how our action maintains its status as an \"FSA\")](./docs/action.md)\n* [location reducer shape](./docs/reducer.md)\n* [server side rendering](./docs/server-rendering.md)\n* [query strings](./docs/query-strings.md)\n* [scroll restoration](./docs/scroll-restoration.md)\n* [redirects](./docs/server-rendering.md#redirects-example)\n* [client-only API](./docs/client-only-api.md)\n* [React Native](./docs/react-native.md)\n* [React Navigation Support](./docs/react-native.md#first-class-react-navigation-support) 🔮  - *my current primary day-to-day focus*\n* [Prefetching!](./docs/prefetching.md) 🔮 - `<Link prefetch />` ***powered by:*** **[react-universal-component](https://github.com/faceyspacey/react-universal-component)** + **[webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks)**\n## FAQ\n\nWhat about if the URL is not found?\n> If the path is not found, or if actions fail to be converted to paths, our `NOT_FOUND` action type will be dispatched. You can apply it\nas a case in your reducer's switch statements. Here's where you get it: `import { NOT_FOUND } from 'redux-first-router'`. We have strong\nidiomatic way to deal with it in server side rendering--check it out: [server side rendering](./docs/server-rendering.md).\n\nWhat if I don't want to use the *thunk* feature, can I use other ways of requesting the data?\n> Of course. This work along side any middleware of your choosing, and even GraphQL solutions like Apollo. But for the 80% use-case, \"follow-up\" thunks attached to routes gets a lot of bang for your buck via the context associated with the initial route action.\n\nOk, but what if I request my data in `componentDidMount`?\n>This works great for that, but it's a naive strategy without a server-side recursive promise resolution service like Apollo offers. The problem with `componentDidMount` is that you can't generate all\nthe state required to render your app without first rendering your app at least once. That means additional work on your part as well as cycles\non the server (the latter of which is also a caveat for Apollo). It's also makes Redux's highly useful time-traveling tools *unreliable*. If that's where you're at in how you get things\ndone, that's fine--but we recommend leveling up to a \"dispatch to get state\" strategy (rather than a \"get state on render\" approach), as that will provide way more predictability, which is\nespecially useful when it comes to testing. When it comes to server side rendering there is no better option. We recommend looking at our \n[server side rendering doc](./docs/server-rendering.md) to see the\nrecommended approach.\n\nThe middleware dispatches thunks asyncronously with no way for me to *await* them, how can I wait for asyncronously received data on the server?\n> Please visit the [server side rendering doc](./docs/server-rendering.md). In short,\nthunks are not dispatched from the middleware on the server, but `connectRoutes`, returns a `thunk` in addition to `middleware`, `enhancer` and `reducer`,\nwhich you can await on, and it will retreive any data corresponding to the current route! We think our solution is slick and sensible.\n\nThe server has no `window` or `history`, how can I get that on the server?\n> The [history](https://github.com/ReactTraining/history) package provides a `createMemoryHistory()` function just for this scenario.\nIt essentially generates a fake `history` object based on the `request.path` *express* (or similar packages) will give you. It's painless. Check it out!\n\nDoes this work with React Native?\n> Yes, just like server side rendering, you can use the `history` package's `createMemoryHistory()` function. It's perfect for React Native's `Linking` API and push notifications in general. In fact, \nif you built your React Native app already and are just starting to deal with deep-linking and push notifications, **Redux-First Router**\nis perfectly suited to be tacked on in final stages with very few changes. We also have first-class support for [**React Navigation**](./docs/react-native.md#first-class-react-navigation-support), which really is the crown jewel here and where we do most our work these days. It does some amazing things. [Check it out!](./docs/react-native.md#first-class-react-navigation-support)\n\nOk, but there's gotta be a catch--what changes should I expect to make if I start using **Redux-First Router**?\n> Primarily it will force you to consolidate the actions you use in your reducers. Whereas before you might have had\nseveral actions to trigger the same state, you will now centralize on a smaller number of actions that each correspond \nto a specific URL path. Your actions will become more \"page-like\", i.e. geared towards triggering page/URL transitions. \nThat said, you absolutely don't need to have a URL for every action. In our apps, we don't. Just the actions that lead\nto the biggest visual changes in the page that we want search engines to pick up.\n\nAnd what about actually getting links on the page for search engines to see?\n> Use [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). This package has been built in a modular way,\nwhich is why that's not in here. *redux-first-router-link's* `<Link />` and `<NavLink />` components mirror React Router's. You should be using these on web to get `<a>` tags on your page for *Google*. In React Native, just dispatch actions in `onPress` handlers.\n\nWhy no route matching components like *React Router*?\n> Because they are unnecessary when the combination of actions and reducers lead to both a wider variety and better defined set of states, not to mention\nmore singular. By \"singular\" we mean that you don't have to think in terms of *both* redux state *AND* address bar paths. You just think\nin terms of *state* after you setup your routes map. It makes your life simpler. It makes your code cleaner and easier to understand. It gives you the best control\nReact + Redux has to offer when it comes to optimizing rendering for animations. \n\nWhat about all the code splitting features *Next.js* has to offer?\n> They certainly crush it when it comes to code splitting. There's no doubt about it. But check out their Redux example\nwhere it seems to have a different `store` per page. I've asked, and they do merge, but it complicates how you will use Redux. If your app is \nvery page-like, great--but we think the whole purpose of tools like React and Redux is to build *\"apps\"* not *pages*. \nThe hallmark of an app is seamless animated transitions where you forget you're on a specific page. You need full\ncontrol of rendering to do that at the highest level. `shouldComponentUpdate`, pure functions and [reselect](https://github.com/reactjs/reselect)\nbecome your best friends. Everything else gets in the way. And of course **Redux-First Router** stays out of the way.\nStraightup, let us know if you think we nailed it or what we're missing. Feel free to use github issues.\n\nGee, I've never seen a Redux middleware/enhancer tool return so many things to use for configuring the store???\n>Part of what **Redux-First Router** does so well (and one of its considerations from the start) is server side rendering. All these\naspects depend on state unique to each visit/request. The returned `middleware`, `enhancer`, `reducer` and `thunk` functions share\nenclosed state (i.e. within a \"closure\") in a *per instance* fashion. Most of the code is written as pure utility functions\nand we are very proud about that. But what's not is returned to you in a way that will insure state is not shared between\nrequests on the server. In short, we have spared no expense to get this package as tight as possible. Watch the video below to get an \nidea of how the system works and its overall simplicity:\n\n*video coming soon...*\n\n\n## Contributing\n\n\nWe use [commitizen](https://github.com/commitizen/cz-cli), so run `npm run cm` to make commits. A command-line form will appear, requiring you answer a few questions to automatically produce a nicely formatted commit. Releases, semantic version numbers, tags, changelogs and publishing to NPM will automatically be handled based on these commits thanks to [semantic-release](https://github.com/semantic-release/semantic-release). Be good.\n\n\n## Tests\n\nReviewing a package's tests are a great way to get familiar with it. It's direct insight into the capabilities of the given package (if the tests are thorough). What's even better is a screenshot of the tests neatly organized and grouped (you know the whole \"a picture says a thousand words\" thing). \n\nBelow is a screenshot of this module's tests running in [Wallaby](https://wallabyjs.com) *(\"An Integrated Continuous Testing Tool for JavaScript\")* which everyone in the React community should be using. It's fantastic and has taken my entire workflow to the next level. It re-runs your tests on every change along with comprehensive logging, bi-directional linking to your IDE, in-line code coverage indicators, **and even snapshot comparisons + updates for Jest!** I requestsed that feature by the way :). It's basically a substitute for live-coding that inspires you to test along your journey.\n\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-1.png)\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-2.png)\n\n## More from FaceySpacey in Reactlandia\n- [react-universal-component](https://github.com/faceyspacey/react-universal-component). It's made to work perfectly with *Redux First Router*. Together they comprise our *\"frameworkless\"* Redux-based approach to what Next.js does (splitting, SSR, prefetching, and routing).\n- [webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks). And this is the foundation of our `Universal` product line. Make sure to check out!\n\n","readmeFilename":"README.md","gitHead":"94a67ab38c1a6288604aa2b9543ce663c5a47b26","_id":"redux-first-router@2.0.1-beta.0","_npmVersion":"5.6.0","_nodeVersion":"9.10.0","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-FCaJhBmvmaJXfjKwSkbFfazrEvR4cV7LULR2xib9aN4B3RddCl0fm+OqUtrfuEIiq0b3GNKzCQC4olaa5Woy7A==","shasum":"359b5b7ff03d652182a0873046a786fa5436d809","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.0.1-beta.0.tgz","fileCount":64,"unpackedSize":576939,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbt449CRA9TVsSAnZWagAA35YP/2OBPai0YAWWyWV8OSML\ne8hg8R9WzB1N9/gLkA53pGRS0Izxo3Pkr5VnCCEwHOe8vtOHZ3/JasgIuf0F\nroaJgpZRAUJgmFcFS3lZP3zr0MAqcSDg5s0m2SvOXN3xZGmy87qgzg4EvTfv\n8n7ihPr420pOlYhdlhd+TwpkrZmEzW3GYYWi5kiEAFX/vVDK8F5/LsunpnpU\nYA37PFXO8LEX3bjbEj/H2dSHmLU2RcWbc+zZXbkQ29Fq9cOE0Sffcyholiza\nEyFmIQb1HnouBh7H5qXaq/ocJpK3izLmv2/CS+iTtJtQwRzzwx2/vN0kUYxb\nckWLod3VlmB+PWs82SIrn2p3TmiRXSF3kdbc7JqfJkml1o/WG3uXZoq5HDyp\nNo7ZGlYExpShxJYLdlPQz85OOy9kd+xMc+0QoBV5endpTtDcDibPdyRu3qpn\nsw1GmFiT2E5ibDTyagoVPEmYsv8IHAxu9XHLmbrTFXBK3iEOpchD6M+6RtdB\nr/zpIYJNXDXCF6OvuDKSl3qGiebVjzMf16g00dYmLIGMlVTEMkSXWlWDFZ/b\n0MUaRzgiWUv99cXnS4A/KxtcShewY8inaqfhs8b6GdTpB6SXSmnWsMZ9ZK7l\n8tvGWbI8ZvjX3WM4xqhRRuRpIHX7lWkfAe3ffM4Fz4BB1siVj5jdKpOz6o1+\nmrtx\r\n=HPHE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEIeBKtTDYTmbvWD+ri8p0iXFj/Oh9Wj5n8pqwGcrS5wAiBUUXZt1OFgUKqwM9UMaBRW8Ketyd5iqYbd1d9cGMpSwA=="}]},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.0.1-beta.0_1538756156456_0.049074495590663236"},"_hasShrinkwrap":false},"2.0.0-beta.1":{"name":"redux-first-router","version":"2.0.0-beta.1","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","snyk":"^1.100.1","standard-version":"^4.4.0","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"readme":"<a href=\"https://gitter.im/Reactlandia/Lobby\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"http://cdn.reactlandia.com/reactlandia-chat.png\">\n</a>\n\n<a href=\"https://codesandbox.io/s/github/faceyspacey/redux-first-router-codesandbox\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n<a href=\"https://github.com/ScriptedAlchemy/redux-first-router-demo\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/boilerplate.png?a=1\">\n</a>\n\n<a href=\"https://github.com/ScriptedAlchemy/redux-first-router-demo\" target=\"_blank\">\n  <img alt=\"Edit Redux-First Router Demo\" src=\"https://cdn.reactlandia.com/demo.png\">\n</a>\n\n> **Rudy:** We are moving rudy to a new repo housed inside of our respond-framework organization. RFR will enter LTS as Feature development efforts are redirected to Rudy. link will be added here once i make the repo and move Rudy to it. \n\n\n# Redux-First Router\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/v/redux-first-router.svg\" alt=\"Version\" />\n  </a>\n\n  <a href=\"https://travis-ci.org/faceyspacey/redux-first-router\">\n    <img src=\"https://travis-ci.org/faceyspacey/redux-first-router.svg?branch=master\" alt=\"Build Status\" />\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/dt/redux-first-router.svg\" alt=\"Downloads\" />\n  </a>\n  \n  <a href=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n    <img src=\"https://snyk.io/test/github/faceyspacey/redux-first-router/badge.svg\" alt=\"Known Vulnerabilities\" data-canonical-src=\"https://snyk.io/test/github/faceyspacey/redux-first-router\">\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/l/redux-first-router.svg\" alt=\"License\" />\n  </a>\n</p>\n\n\n\n## Version 2.0 Released!\nDuring the Development of Rudy, we had released a few various versions under random names and npm tags. All of that, plus a bunch of outstanding PRs have been merged to create a stable, updated and still mostly compatible API.\n\nReadmes and documentation does need to be re-organized. \n\nIf anyone has some idead on how to improve / wants to help us with documentation - tweet `@ScriptedAlchemy`\n\n\n\n## Documentation**\nMore in-depth documentation and exmaples can be found here:\n<a href=\"https://github.com/faceyspacey/redux-first-router/tree/rudy/docs\">\n  here\n</a>\n\n![redux-first-router flow chart](https://raw.githubusercontent.com/faceyspacey/redux-first-router/master/docs/redux-first-router-flow-chart.png)\n\nThe goal of **Redux-First Router** is to think of your app in *states*, not *routes*, not *components*, while keeping the address bar in sync. Everything is state, not components. Connect your components and *just dispatch* ***flux standard actions.***\n\n**Articles You Should Read:**\n- **[Pre Release: Redux-First Router — A Step Beyond Redux-Little-Router](https://medium.com/@faceyspacey/pre-release-redux-first-router-a-step-beyond-redux-little-router-cd2716576aea)** \n- **[Redux-First Router lookin Sexy on Code Sandbox](https://medium.com/faceyspacey/redux-first-router-lookin-sexy-on-code-sandbox-d9d9bea15053)** \n- **[Redux-First Router data-fetching: solving the 80% use case for async Middleware](https://medium.com/faceyspacey/redux-first-router-data-fetching-solving-the-80-use-case-for-async-middleware-14529606c262)**\n- **[Server-Render like a Pro /w Redux-First Router in 10 steps](https://medium.com/faceyspacey/server-render-like-a-pro-w-redux-first-router-in-10-steps-b27dd93859de)** 🚀🚀🚀 *(READ THIS!)*\n\nThe thinking behind this package has been: \"if we were to dream up a 'Redux-first' approach to routing from the \nground up, what would it look like?\" The result has been what we hope you feel to be one of those \n\"inversion of control\" scenarios that makes a challenging problem *simple* when coming at it from a different angle.\nWe hope *Redux-First Router* comes off as an obvious solution.\n\nBefore we get started, there is some *prior art*, and you should [check them out](./docs/prior-art.md). **Redux-First Router**\nisn't the first stab at something like this, but--aside from this path being pre-validated--we feel it is the most complete, tested and *spot on* solution.\nWe have reviewed what came before, stripped what was unnecessary, added what was needed, and generally focused on getting the ***developer experience*** right. Ultimately it offers far more than previous solutions. The best\npart is that once you set it up there's virtually nothing left to do. It's truly \"set it and forget it.\" Let's get started.\n\n> And did we mention: **it has first class support for** ***React Navigation!***\n\n## Installation\n\nInstall `redux-first-router` and its peer dependency `history` plus our small `<Link />` package:\n\n```bash\nyarn add history redux-first-router redux-first-router-link\n```\n\n**Full-Featured Universal Demo App (includes SSR + Splitting!):**\n\nhttps://github.com/faceyspacey/redux-first-router-demo\n\n\n## Motivation - What Routing in Redux is Meant To Be\n\nTo automate routing. To be able to use Redux *as is* while keeping the URL in the address bar in sync. \nTo think solely in terms of *\"state\"* and *NOT routes, paths, route matching components*. And of course\nfor server side rendering to require no more than dispatching on the store like normal. *Path params are just\naction payloads, and action types demarcate a certain kind of path*. **That is what routing in Redux is meant to be.** \n\nIn practice, what that means is having the address bar update in response to actions and ***bi-directionally*** \nhaving actions dispatched in response to address bar changes, such as via the browser\nback/forward buttons. The \"bi-directional\" aspect is embodied in the diagram above where the first blue arrows\npoints both ways--i.e. dispatching actions changes the address bar, *and* changes to\nthe address bar dispatches actions.\n\nIn addition, here are some key obstacles **Redux-First Router** seeks to *avoid*:\n\n* having to render from any state that doesn't come from redux\n* cluttering component code with route-related components\n* the added complexity [and bugs] from 2 forms of state: redux state vs. routing state\n* large API surface areas  of packages/frameworks\nlike `react-router` and `next.js`\n* workarounds that such large *(likely \"leaky\")* abstractions inevitably require to achieve a professional app\n* strategies as low level as possible to deal with animations. Animations coinciding with React \ncomponent updates *are* a problem, particularly in the browser (React Native is better). \n\"Jank\" is common. Techniques  like `shouldComponentUpdate` are a must; routing frameworks \nget in the way of optimizing animations.\n\n\n## The Gist\nIt's *set-and-forget-it*, so here's the most work you'll ever do! :+1:\n```javascript\nimport { connectRoutes } from 'redux-first-router'\nimport { combineReducers, createStore, applyMiddleware, compose } from 'redux'\nimport createHistory from 'history/createBrowserHistory'\nimport userIdReducer from './reducers/userIdReducer'\n\nconst history = createHistory()\n\n// THE WORK:\nconst routesMap = { \n  HOME: '/home',      // action <-> url path\n  USER: '/user/:id',  // :id is a dynamic segment\n}\n\nconst { reducer, middleware, enhancer } = connectRoutes(history, routesMap) // yes, 3 redux aspects\n\n// and you already know how the story ends:\nconst rootReducer = combineReducers({ location: reducer, userId: userIdReducer })\nconst middlewares = applyMiddleware(middleware)\n// note the order: enhancer, then middlewares\nconst store = createStore(rootReducer, compose(enhancer, middlewares))\n```\n\n```javascript\nimport { NOT_FOUND } from 'redux-first-router'\n\nexport const userIdReducer = (state = null, action = {}) => {\n  switch(action.type) {\n    case 'HOME':\n    case NOT_FOUND:\n      return null\n    case 'USER':\n      return action.payload.id\n    default: \n      return state\n  }\n}\n```\n\nAnd here's how you'd embed SEO/Redux-friendly links in your app, while making use of the triggered state:\n```javascript\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport { Provider, connect } from 'react-redux'\nimport Link from 'redux-first-router-link'\nimport store from './configureStore'\n\nconst App = ({ userId, onClick }) =>\n  <div>\n    {!userId  \n      ? <div>\n          <h1>HOME</h1>\n\n          // all 3 \"links\" dispatch actions:\n          <Link to=\"/user/123\">User 123</Link> // action updates location state + changes address bar\n          <Link to={{ type: 'USER', payload: { id: 456 } }}>User 456</Link> // so does this\n          <span onClick={onClick}>User 5</span>   // so does this, but without SEO benefits\n        </div>\n\n      : <h1>USER: {userId}</h1> // press the browser BACK button to go HOME :)\n    }\n  </div>\n\nconst mapStateToProps = ({ userId }) => ({ userId })\nconst mapDispatchToProps = (dispatch) => ({\n  onClick: () => dispatch({ type: 'USER', payload: { id: 5 } })\n})\n\nconst AppContainer = connect(mapStateToProps, mapDispatchToProps)(App)\n\nReactDOM.render(\n  <Provider store={store}>\n    <AppContainer />\n  </Provider>,\n  document.getElementById('react-root')\n)\n```\n*note: ALL THREE clickable elements/links above will change the address bar while dispatching the corresponding `USER` action. The only difference\nis the last one won't get the benefits of SEO--i.e. an `<a>` tag with a matching `to` path won't be embedded in the page.* ***What this means is\nyou can take an existing Redux app that dispatches similar actions and get the benefit of syncing your address bar without changing your code!*** *The workflow we recommend is to\nfirst do that and then, once you're comfortable, to use our `<Link />` component to indicate your intentions to Google. Lastly, we recommend\nusing `actions` as your `to` prop since it doesn't marry you to a given URL structure--you can always change it in one place later (the `routesMap` object)!*\n\nBased on the above `routesMap` the following actions will be dispatched when the\ncorresponding URL is visited, and conversely those URLs will appear in the address bar\nwhen actions with the matching `type` and parameters are provided\nas keys in the payload object:\n\n| URL                | <-> | ACTION     |\n| ------------------ |:---:| ----------:|\n| /home              | <-> | { type: 'HOME' } |\n| /user/123          | <-> | { type: 'USER', payload: { id: 123 } } |\n| /user/456          | <-> | { type: 'USER', payload: { id: 456 } } |\n| /user/5            | <-> | { type: 'USER', payload: { id: 5 } } |\n\n*note: if you have more keys in your payload that is fine--so long as you have the minimum required keys to populate the path*\n\nLastly, we haven't mentioned `redux-first-router-link`yet--**Redux-First Router** is purposely built in\na very modular way, which is why the `<Link />` component is in a separate package. It's extremely simple\nand you're free to make your own. Basically it passes the `to` path on to **Redux-First Router** and calls\n`event.preventDefault()` to stop page reloads. It also can take an action object as a prop, which it will transform\ninto a URL for you! Its props API mirrors React Router's. The package is obvious enough once you get the hang of what's going on here--check it\nout when you're ready: [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). And if \nyou're wondering, yes there is a `NavLink` component with props like `activeClass` and `activeStyle` just like in React Router.\n\n## routesMap\n\nThe `routesMap` object allows you to match action types to express style dynamic paths, with a few frills.\nHere's the primary (and very minimal *easy to remember*) set of configuration options available to you:\n\n```javascript\nconst routesMap = {\n  HOME: '/home', // plain path strings or route objects can be used\n  CATEGORY: { path: '/category/:cat', capitalizedWords: true },\n  PAGE: { path: '/page/:num', coerceNumbers: true },\n  USER: { \n    path: '/user/:cat/:name',\n    fromPath: path => capitalizeWords(path.replace(/-/g, ' ')),\n    toPath: value => value.toLowerCase().replace(/ /g, '-'),\n  },\n}\n```\n*note: the signature of `fromPath` and `toPath` offers a little more, e.g: `(pathSegment, key) => value`. Visit [routesMap docs](./docs/connectRoutes.md#routesmap) for a bit more info when the time comes.*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /home                   | <-> | { type: 'HOME' } |\n| /category/java-script   | <-> | { type: 'CATEGORY', payload: { cat: 'Java Script' } } |\n| /user/elm/evan-czaplicki   | <-> | { type: 'USER', payload: { cat: 'ELM', name: 'Evan Czaplicki' } } |\n\n\n## routesMap (with thunk)\nWe left out one final configuration key available to you: *a thunk*.\nAfter the dispatch of a matching action, a thunk (if provided) will be called, allowing you to extract path parameters from the location reducer state and make asyncronous requests to get needed data:\n\n```javascript\nconst userThunk = async (dispatch, getState) => {\n  const { slug } = getState().location.payload\n  const data = await fetch(`/api/user/${slug}`)\n  const user = await data.json()\n  const action = { type: 'USER_FOUND', payload: { user } }\n  \n  dispatch(action)\n}\n\nconst routesMap = {\n  USER: { path: '/user/:slug', thunk: userThunk  },\n}\n```\n\n> your `thunk` should return a promise for SSR to be able to `await` for its resolution and for `updateScroll()` to be called if using our [scroll restoration package](https://github.com/faceyspacey/redux-first-router-restore-scroll).\n\n*note: visit the [location reducer docs](./docs/locationReducer) to see the `location` state's shape*\n\n| URL                     | <-> | ACTION     |\n| ----------------------- |:---:| ----------:|\n| /user/steve-jobs        | <-> | { type: 'USER', payload: { slug: 'steve-jobs' } } |\n| n/a                     | n/a | { type: 'USER_FOUND', payload: { user: { name: 'Steve Jobs', slug: 'steve-jobs' } } } |\n\nThat's all folks! :+1:\n\n\n## More Docs (they are short easy reads) \n* [connectRoutes (there is a third `options` parameter you should check out)](./docs/connectRoutes.md)\n* [action.meta (the `meta` key is how our system communicates & how our action maintains its status as an \"FSA\")](./docs/action.md)\n* [location reducer shape](./docs/reducer.md)\n* [server side rendering](./docs/server-rendering.md)\n* [query strings](./docs/query-strings.md)\n* [scroll restoration](./docs/scroll-restoration.md)\n* [redirects](./docs/server-rendering.md#redirects-example)\n* [client-only API](./docs/client-only-api.md)\n* [React Native](./docs/react-native.md)\n* [React Navigation Support](./docs/react-native.md#first-class-react-navigation-support) 🔮  - *my current primary day-to-day focus*\n* [Prefetching!](./docs/prefetching.md) 🔮 - `<Link prefetch />` ***powered by:*** **[react-universal-component](https://github.com/faceyspacey/react-universal-component)** + **[webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks)**\n## FAQ\n\nWhat about if the URL is not found?\n> If the path is not found, or if actions fail to be converted to paths, our `NOT_FOUND` action type will be dispatched. You can apply it\nas a case in your reducer's switch statements. Here's where you get it: `import { NOT_FOUND } from 'redux-first-router'`. We have strong\nidiomatic way to deal with it in server side rendering--check it out: [server side rendering](./docs/server-rendering.md).\n\nWhat if I don't want to use the *thunk* feature, can I use other ways of requesting the data?\n> Of course. This work along side any middleware of your choosing, and even GraphQL solutions like Apollo. But for the 80% use-case, \"follow-up\" thunks attached to routes gets a lot of bang for your buck via the context associated with the initial route action.\n\nOk, but what if I request my data in `componentDidMount`?\n>This works great for that, but it's a naive strategy without a server-side recursive promise resolution service like Apollo offers. The problem with `componentDidMount` is that you can't generate all\nthe state required to render your app without first rendering your app at least once. That means additional work on your part as well as cycles\non the server (the latter of which is also a caveat for Apollo). It's also makes Redux's highly useful time-traveling tools *unreliable*. If that's where you're at in how you get things\ndone, that's fine--but we recommend leveling up to a \"dispatch to get state\" strategy (rather than a \"get state on render\" approach), as that will provide way more predictability, which is\nespecially useful when it comes to testing. When it comes to server side rendering there is no better option. We recommend looking at our \n[server side rendering doc](./docs/server-rendering.md) to see the\nrecommended approach.\n\nThe middleware dispatches thunks asyncronously with no way for me to *await* them, how can I wait for asyncronously received data on the server?\n> Please visit the [server side rendering doc](./docs/server-rendering.md). In short,\nthunks are not dispatched from the middleware on the server, but `connectRoutes`, returns a `thunk` in addition to `middleware`, `enhancer` and `reducer`,\nwhich you can await on, and it will retreive any data corresponding to the current route! We think our solution is slick and sensible.\n\nThe server has no `window` or `history`, how can I get that on the server?\n> The [history](https://github.com/ReactTraining/history) package provides a `createMemoryHistory()` function just for this scenario.\nIt essentially generates a fake `history` object based on the `request.path` *express* (or similar packages) will give you. It's painless. Check it out!\n\nDoes this work with React Native?\n> Yes, just like server side rendering, you can use the `history` package's `createMemoryHistory()` function. It's perfect for React Native's `Linking` API and push notifications in general. In fact, \nif you built your React Native app already and are just starting to deal with deep-linking and push notifications, **Redux-First Router**\nis perfectly suited to be tacked on in final stages with very few changes. We also have first-class support for [**React Navigation**](./docs/react-native.md#first-class-react-navigation-support), which really is the crown jewel here and where we do most our work these days. It does some amazing things. [Check it out!](./docs/react-native.md#first-class-react-navigation-support)\n\nOk, but there's gotta be a catch--what changes should I expect to make if I start using **Redux-First Router**?\n> Primarily it will force you to consolidate the actions you use in your reducers. Whereas before you might have had\nseveral actions to trigger the same state, you will now centralize on a smaller number of actions that each correspond \nto a specific URL path. Your actions will become more \"page-like\", i.e. geared towards triggering page/URL transitions. \nThat said, you absolutely don't need to have a URL for every action. In our apps, we don't. Just the actions that lead\nto the biggest visual changes in the page that we want search engines to pick up.\n\nAnd what about actually getting links on the page for search engines to see?\n> Use [redux-first-router-link](http://github.com/faceyspacey/redux-first-router-link). This package has been built in a modular way,\nwhich is why that's not in here. *redux-first-router-link's* `<Link />` and `<NavLink />` components mirror React Router's. You should be using these on web to get `<a>` tags on your page for *Google*. In React Native, just dispatch actions in `onPress` handlers.\n\nWhy no route matching components like *React Router*?\n> Because they are unnecessary when the combination of actions and reducers lead to both a wider variety and better defined set of states, not to mention\nmore singular. By \"singular\" we mean that you don't have to think in terms of *both* redux state *AND* address bar paths. You just think\nin terms of *state* after you setup your routes map. It makes your life simpler. It makes your code cleaner and easier to understand. It gives you the best control\nReact + Redux has to offer when it comes to optimizing rendering for animations. \n\nWhat about all the code splitting features *Next.js* has to offer?\n> They certainly crush it when it comes to code splitting. There's no doubt about it. But check out their Redux example\nwhere it seems to have a different `store` per page. I've asked, and they do merge, but it complicates how you will use Redux. If your app is \nvery page-like, great--but we think the whole purpose of tools like React and Redux is to build *\"apps\"* not *pages*. \nThe hallmark of an app is seamless animated transitions where you forget you're on a specific page. You need full\ncontrol of rendering to do that at the highest level. `shouldComponentUpdate`, pure functions and [reselect](https://github.com/reactjs/reselect)\nbecome your best friends. Everything else gets in the way. And of course **Redux-First Router** stays out of the way.\nStraightup, let us know if you think we nailed it or what we're missing. Feel free to use github issues.\n\nGee, I've never seen a Redux middleware/enhancer tool return so many things to use for configuring the store???\n>Part of what **Redux-First Router** does so well (and one of its considerations from the start) is server side rendering. All these\naspects depend on state unique to each visit/request. The returned `middleware`, `enhancer`, `reducer` and `thunk` functions share\nenclosed state (i.e. within a \"closure\") in a *per instance* fashion. Most of the code is written as pure utility functions\nand we are very proud about that. But what's not is returned to you in a way that will insure state is not shared between\nrequests on the server. In short, we have spared no expense to get this package as tight as possible. Watch the video below to get an \nidea of how the system works and its overall simplicity:\n\n*video coming soon...*\n\n\n## Contributing\n\n\nWe use [commitizen](https://github.com/commitizen/cz-cli), so run `npm run cm` to make commits. A command-line form will appear, requiring you answer a few questions to automatically produce a nicely formatted commit. Releases, semantic version numbers, tags, changelogs and publishing to NPM will automatically be handled based on these commits thanks to [semantic-release](https://github.com/semantic-release/semantic-release). Be good.\n\n\n## Tests\n\nReviewing a package's tests are a great way to get familiar with it. It's direct insight into the capabilities of the given package (if the tests are thorough). What's even better is a screenshot of the tests neatly organized and grouped (you know the whole \"a picture says a thousand words\" thing). \n\nBelow is a screenshot of this module's tests running in [Wallaby](https://wallabyjs.com) *(\"An Integrated Continuous Testing Tool for JavaScript\")* which everyone in the React community should be using. It's fantastic and has taken my entire workflow to the next level. It re-runs your tests on every change along with comprehensive logging, bi-directional linking to your IDE, in-line code coverage indicators, **and even snapshot comparisons + updates for Jest!** I requestsed that feature by the way :). It's basically a substitute for live-coding that inspires you to test along your journey.\n\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-1.png)\n\n![redux-first-router wallaby tests screenshot](./tests-screenshot-2.png)\n\n## More from FaceySpacey in Reactlandia\n- [react-universal-component](https://github.com/faceyspacey/react-universal-component). It's made to work perfectly with *Redux First Router*. Together they comprise our *\"frameworkless\"* Redux-based approach to what Next.js does (splitting, SSR, prefetching, and routing).\n- [webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks). And this is the foundation of our `Universal` product line. Make sure to check out!\n\n","readmeFilename":"README.md","gitHead":"3770453c687e70d95dd03bdbe28dba2e9f126cc5","_id":"redux-first-router@2.0.0-beta.1","_npmVersion":"5.6.0","_nodeVersion":"9.10.0","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-keNpd8ZFSwIrJ9TI4z/ergEcad/LJFAxz8y7GKGbXP5Ej25y1IacfZSkJYvMS/gMo4WAYTkz8rEkfL0VDjYang==","shasum":"d1222d947df96fc69c74d6ed2e4c8d9da242c6fc","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.0.0-beta.1.tgz","fileCount":65,"unpackedSize":606743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbt5zNCRA9TVsSAnZWagAAlIcP/AzUJl3YeWYB6UWAGeQ8\nSNzApLppeFtkYE7w0vs74+1d1xT8wmByIo2jBTdmR1og6fokxqnt5gmolXiE\nwJn/XgMpCqNhLqID/5XKbRbXw+ap1kBMZCc4GnhTkhG2b3oOOzLRWIS75cZV\nBaxVfP3e+g1TlzyrL4D9rxyh7RLulfPWFPCUlXCzLwU0s9yUb6AKyzHew7ZC\n/288LXyQg/gtPebbHXqTWAN1SjDXs+jX3nUDjtQwB4kYeg/ye39Yzv4qjzzF\nLHTQZefoE3Id1boewjvQ32S40uu3YFOqpXCvgiZAuCHYXEE0cjHykVIHdgUA\nbUwojMEbVxKllQG/qc2F4bkJWRfOFhgb7Xs+cU7GcAfmDWvSCpXuSIe/8R1d\ns5lmgBHAk2zy/dryRY9DE4XrJlX8GQ5IFgnq5IF9XglWVI+M43SbusRyUVhY\nK5kKuFFVmjpVqc0C1G4+OY+EhGEvp1t8PyaY9vASXsPPdAvohBS5ZmG8Jh9P\nnE0QYnReLMLX3wLFYcVjBMbCVCXGatU1HizsbeFJQ21ppqqodJwC4TIIAqrF\n1jHcJm0u2v2DCEkALIQhM/iLX2qELbo9KcquwhBEOjgHYOjgXgiUTkSfUght\nJCIj/vrW2kZ9/itOXUtz5jbGXyWyS6nUMY4bVu58tG/C6eMw8o7SCan4+0fD\nCNFE\r\n=Zys+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAP4pg3divWdjh2FIXOTG1AXKDiK7ATFjV7DvC8aBm9TAiEAnWgyUHLcoS4vcaSqgjBATMHgL8kHmctKDbf7GwpfJbU="}]},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.0.0-beta.1_1538759884313_0.12553616093896225"},"_hasShrinkwrap":false},"2.0.1":{"name":"redux-first-router","version":"2.0.1","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","snyk":"^1.100.1","standard-version":"^4.4.0","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"3770453c687e70d95dd03bdbe28dba2e9f126cc5","_id":"redux-first-router@2.0.1","_npmVersion":"5.6.0","_nodeVersion":"9.10.0","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-YzkPgXec8yGKp55H8z1L4upv2ZZqft7rjAtRi6jp9clum5R0gKVYnDXS+3Ia2R7JLd46eNx5bd6vbAvxG1DR2Q==","shasum":"5d904803010dc9c8d7c3285165b89b433ddb7f4a","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.0.1.tgz","fileCount":65,"unpackedSize":606736,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbt6DECRA9TVsSAnZWagAAaloP/jr5L4YHBoKjYq5j4v7b\noXTqtr+OTXM2P0mPL7zfrCGr7Z+3V/cHLEJV+QgR262C4MZ2z34C9FsBaFjR\n34DWSIdZfRfdx1yNN+VLWW33Y5cFaXQLKNTE1a8y3wfGDNiRqcfQumK2TCyN\nHvG1uEfvmFAzokVBL4OHXXnVnPWC1hDDyyW9nxw7FibSbRkUkCG97vGQuMqC\nHbQ0syWstiTsi0C2KDgHP+LrTEOSTdWA0ICTmjRGndcGCWdMcdACuEHK9a6/\nAw57pwIPxXM2/mlpbFIX/tGhfmMizI0DyfHaNWHCcwqoZlVl0PWdJdt6srA0\nLbbuJ9vpPqpLadrNQT7ZpVv+maaoYT3TsH0QPzHO3K6OWNyhQD+smfL1lXC6\nBopI3ozp2z1TcohZZPHB1iblIHcbWPgr8bNgAJ2j9gQlNSrrhbgilndqN1fz\n/CH/C8TK4Q7/w96ixav5Nqj/d/NhanhREfopsPBGAlBbPF1N253GlvlTevla\nkbr0H57EQr2p3VkchDqSIocKtw8ArV+gJVUl3GpdoCNkpUYQoBoqNdOLQ8KL\nfHmkO/QXF4EBudKYhvim3ookq9s8BxbZt+GLt+bVpEGRV3NJj7WzuK3GFwRK\nJsW3aito1DisAdaUhLhek9eoorvXr9jniZYidYwDb5JRLiei/9JVDDjqv2cV\ntapK\r\n=Vj3o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCIFpolLnfkq4LU5HzU4bJK4voaxz5TCZGuL12COkOwARTAh90zm3jNitMhoIyfkV3gzz7NYnDpiyHDxirYddhu11Z"}]},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.0.1_1538760899732_0.9312448124756763"},"_hasShrinkwrap":false},"2.0.3":{"name":"redux-first-router","version":"2.0.3","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","engines":{"node":">=8.0.0"},"scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","snyk":"^1.100.1","standard-version":"^4.4.0","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"1f176889200be8e8b1be43e6e1b26b4f1285ba1f","_id":"redux-first-router@2.0.3","_npmVersion":"5.6.0","_nodeVersion":"9.10.0","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-V9N3kZuIgOFw3wjlNvi5xXh9qohnWdjy27uMW0k4CHhOj7fGdFT6U8PxzenUhic24P15r+DwpKDo9+eB9rKaqw==","shasum":"a7feb74250d86a4533245628ea520a34320f0345","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.0.3.tgz","fileCount":65,"unpackedSize":608951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbv+lbCRA9TVsSAnZWagAA8E8P/iKj8CdmcJ/P8MrsHyNh\n7cfghK38CAR6Vh/gnbNs6NHUNcQZsqoGI3+Cse5VXlLcg4SYo8sdEn9ebmCg\nW2IGo3O/99PpkzlBIrVpaUyzUgcyMrk7E23UIIubkXAv/Rgm9zPps4+3cVVM\n1I6PzPaKNHPt4NiroG8Fa4tRZ3EVBKMfiVwj+pbmtI2Ie7+TiQvlO1dcPLm/\nwLfyHtizNaHKOrZ23IwhtUfCpsq9e8Uo97xj1fD3sX+BwsKVpXury68OgNYv\nrl1g0wJ7yRmwOmskbEYPY+0gjrZ6Ujtxt7ogYCEZMoN12i/MSanpieyMk2x1\nV2BOdV1E/hDJc1XdoALWXdqQwgGb6ybi2HXlASC6Yzv3ZUrZTlyPFXTl0GPO\n1UOU2nAkF9PE3zWQF9nYx6srrhTozflNAsdEzP6FpRFeXT/Bl47GoLRc2IkF\n6mAek9zifZPW6Zz8tHtFXqU0R6ueSMk5W3hOS+5t82lqVTj7H3YFK/8/I6FY\nfrxtcKa5GlKVGbHMfULalPAE1AJjrRMWXJEAfvd3itQ2C/VCDEi9MnFmJRpc\nGz1x3GBJ3YFr/dEwcASGlGssR/GpviarkBicQiuTEH+I5MEFLBwIW3YCgcYI\naH93hZYz+shlPmTZem9/4bZRSRw4ixAJ0DW7Noz5PeMH/JmUjQZKbBuYJQn8\nT3i6\r\n=/AQZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCh8iz4m1RcJx8eut5WAbVD81rmrd2RYXkhjo2W3UXnKgIgDM1kzCasqYGtji1QCwvCTNKrwQ7KESgSMRAz45HBJhs="}]},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.0.3_1539303770063_0.5813066169315277"},"_hasShrinkwrap":false},"2.0.5":{"name":"redux-first-router","version":"2.0.5","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","engines":{"node":">=8.0.0"},"scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","standard-version":"standard-version","local-semantic-release":"git checkout master; git pull origin master && npm run standard-version && git push --follow-tags origin master && npm publish","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","snyk":"^1.100.1","standard-version":"^4.4.0","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"3dee05c1a60d4561a7d9944f22a7c2799d473cd6","_id":"redux-first-router@2.0.5","_npmVersion":"5.6.0","_nodeVersion":"9.10.0","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-Imzb+2GbLBzeWe8WSnBG5Sy3kWie/b12U1nSofCGwCP1NgzfAIzLPgHPszsn37u5paSDXadYVwa4XEUCBUJCjg==","shasum":"7ecc3498cd768dfcc7bcf8d81b3a773a65588844","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.0.5.tgz","fileCount":65,"unpackedSize":619606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbwA9SCRA9TVsSAnZWagAAiwwP/3/Gcfq2902bu3CKRqYi\nensr8206nOiEm3hdM/chifC7Zv/sNtPCazrw9E2Vf2Gm1OO4iLvDB0AzK6WI\n2/5M3g1cUeHrniGKHCPjzbVRNOHE00hDHKNMt/JClitRbYDQyLiESbzM5sgu\nNK7uB4HFTQBTLWgUWiNIRxgxQOQHwnPZUOyyCybghWC7tE5zKNJoVELoGgQ7\neXypogYzC69N2Y69hZ+QHufVnhWqJPMTMvT0aHS1pX3YRySnRqh1360EzSde\njmvgHOqShVW124ARyNMta4X8aFer++2q8H8zAZ+5cVT3g/oeNPJmbAkPRWgj\nnnT5aYiaT5VvnYQg3oP4Nr9HF/X6y2ruT0lwYalVcCPoSv3L83rkr7pmbMZX\ncRftQ1m6gOKhKrYVVAO/3In9zzxTFkyGW6XXpEmZ1r8SKMuXH61djgFMnfPB\nCLjnlVjAY9PEautHXpTDzobkMRABZ4nov4J0yW0MeZ5p8GwCnZ8A3fNU8CK8\nyrq3Lc9uTDGUyKA2dv9zoMADpiyCtBLqYJv/Koj5Py3IJFr2eT2bXw3e4Cuv\nFeCG7L7kS3lnuDzuv1s2EWiADSIcTwhxghZYaJC+yQfuvVJp5cC1gkzI6EsD\nScLk0J4q4FXaFGdo3jBfjWgMN4svw3bOVijAPUglRWgrjhgxt/vFlOGBiZvZ\nj0bR\r\n=3Gbc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAH52PclTtSyC1tUf+TXVU8mwGlZyWz7ZPv9ghyb5P40AiAsbl6HI3+MO4HaBHIzjOc00LkJzHLtHB4W6Sz+8jjc9Q=="}]},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.0.5_1539313489960_0.2494622398300297"},"_hasShrinkwrap":false},"2.0.6":{"name":"redux-first-router","version":"2.0.6","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","engines":{"node":">=6.0.0"},"scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release pre && npm publish && semantic-release post","standard-version":"standard-version","local-semantic-release":"git checkout master; git pull origin master && npm run standard-version && git push --follow-tags origin master && npm publish","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^6.3.2","snyk":"^1.100.1","standard-version":"^4.4.0","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"3a1379f380c8dadea03214f8b6afcab04428c573","_id":"redux-first-router@2.0.6","_npmVersion":"5.6.0","_nodeVersion":"9.10.0","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-ad8+dyMrPY5KCMXTw4o+s1abqHP9d99Cri0nMXXO2oF6F0JYaW+ALtzhgoAwDznQPCQe3CdHtx4/YAhXGSRi8Q==","shasum":"e978f068ba74cfea0bf7524f94097a454115bfdc","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.0.6.tgz","fileCount":65,"unpackedSize":618227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbw4bFCRA9TVsSAnZWagAAM60QAKG4Fws6UqQwYBgDZ6yc\nNRx9YQWYaKLof+qpJM0RHo136khAbEBKC+Ux7gvLxSp9noeKoV9JQUxtK7nL\nZJ0OTFJkEA5ZeMegCE8sFCjK9xz+BWkR93FxAW9F9QI++bMDcz4fdwQgwqSw\nySUgkH7XefSLcJuOGut++GGovNPdqpO+pypHSTKBRJ3amKMmTolKfh8CmshC\nJDN6Ydxwoii462CPWklqfLd1fdA3pKhRX648KQsu5MFTXhKCwGa1CKio38rh\nHg++L+mxXrS1FET4oFLDOixpooBSX1GDTbmi7YE9Y7ayTUp03SB4046BwwgU\nMt6CFj1CPXdv1hDbZuH/2M3qm/DK9yB+yBRYHSNcXENIMMfw165ujWSHkgNX\nP8yqyd1Gzq9SE+SERvcgvjDr47bnswQm+5UUAHwLD93Cz1aghw8HkZPkIrx/\nrOkFxEonoO1CHGRkb2IZRy7Qzdw7pHP8SGDlA1/63U0WAMFmYUagNU9w++0I\nbvY2Ji6cPEuUlfNAntkNn/qOJ7KmiNlSG4IPcuwMSDLtbxkPwWCxduCI0Nms\nXpNf4gerl1nPa1Ru/x3mpItKzxrGjo2tBNKUz12igXFWPQFS/29tiFm2LSBt\nHcO32P26SUE1sPK0BucsqNikQIPJJ+wpjUJuf2Iad2vv/JEonYNkEdaUOVek\nl/qy\r\n=C3i7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFFTiv9RxrRW5Rqb/mYSqllIHua2c8HdSY4HjvrRtjuoAiBhuoWYEL+l96+71YC4/taPDUEJyrFNSEdoMPb6ynsZyA=="}]},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.0.6_1539540676240_0.5513195891076799"},"_hasShrinkwrap":false},"2.0.7":{"name":"redux-first-router","version":"2.0.7","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","engines":{"node":">=6.0.0"},"scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release","standard-version":"standard-version","local-semantic-release":"git checkout master; git pull origin master && npm run standard-version && git push --follow-tags origin master && npm publish","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^15.9.17","snyk":"^1.100.1","standard-version":"^4.4.0","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"f9255a7c115971f110b2dd8309d0d48e3fcb203d","_id":"redux-first-router@2.0.7","_npmVersion":"5.6.0","_nodeVersion":"9.10.0","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-sTKlt7O+gMQlrA9uRKI6HOWdS/bCIyYxfONs5L4TIFxsBMeX4hoPrk0QvTgd1Mkslx40cZKpcoRI+CU0V8XWkg==","shasum":"0e565d9f66804d11c5e584e2a5d2dbd9d0de4c9c","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.0.7.tgz","fileCount":65,"unpackedSize":646944,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxld9CRA9TVsSAnZWagAACgMP/iOpSnds99zgg+dLC618\nqHKJ1U5oBx2pd6TN79qW8YvZk5VyB+2J0ehcpfn/QLQbhAys37LxUwwe+oHJ\nvaPySSRtrOMiDuyU2C1H1Yd7SIx9PhVtrcEZcYsACrjNwNHqF/ldQdc0ceMJ\nlqsqJ+vplu/GY6twcd5/MPQArHemM939o4Yf9EeOCVoBOEB34JM3hnc4E4v/\nYEoP3wjaCQeZpfYvvz+7nKQg8DJlIvLKpfxGgMpDgHJUlVVPxgPQyyFv93A2\nZrovoc4JQJnnIFUuCWVFOOYmbQEcY2R9iSfHMFXZLQQE8Z3x+kxgJiYbWs3H\nxhnriAesj6ZOc6uVapfp0QYwOVAfHtU9UFwSxRYYKN991jCbUa2+N2+mLq06\nvpV6Aiqlls81ZuU27Oyy1ripU8D9zk9Zo4C9ooQZjhJWb9tc8Id1sqHVShxB\n4z/DILjacN1u4wX9CBZnn4sXRA8OfR8W0ZJtgELqRClMlMlmQccjm1IfOHIz\nv+1/Qa+7bLpXIOKtDjA8vfj4hrPY1mICsYsXNd0i1XZikKxDXEmTplZ8yFTP\nwR643HdcAY8Y+ulB1nG91MRiBgC9pdjasbNkO6qYsczgwW0pZ9P+9B9W5fS7\nSkRlKErwQaZPmmKjsEZphUMRgDrdDD+2qnVBy5H+I1ZP7LdKu8kGI+hVH+lV\nea4a\r\n=Mnky\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDR6MlAwxr0gNZ/VN46jtC3vzsQ0vQpNVgG+rJbN0FfMAiAEc8RaK8RiYz5IWV0KNdL6F+QMltkIYpkvm952ioaGvg=="}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.0.7_1539725180145_0.0765485072389529"},"_hasShrinkwrap":false},"2.1.0":{"name":"redux-first-router","version":"2.1.0","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","engines":{"node":">=6.0.0"},"scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release","standard-version":"standard-version","local-semantic-release":"git checkout master; git pull origin master && npm run standard-version && git push --follow-tags origin master && npm publish","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^15.9.17","snyk":"^1.100.1","standard-version":"^4.4.0","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"36db3d28d73233dacfb396cfff977bde8cd7231f","_id":"redux-first-router@2.1.0","_npmVersion":"6.2.0","_nodeVersion":"10.9.0","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-WLGCDWutpbyQX7ocgA8Cx5KHFTDUobEAuVT2ug9RA0AwXelEFVLtkfbVp7eWcc25xpWJVvncLzfZpfLXiKno2w==","shasum":"43ddb30d9bf073ffb5aa1806b7a345fdb84c8edd","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.1.0.tgz","fileCount":65,"unpackedSize":649623,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbzNb+CRA9TVsSAnZWagAAFBoP/RAURoOY4XLvrGJ4HVh0\nfo+Rd0ScF+i+vUM4oacX+pRsCEGDKxe3bxBCbIDo3O/kgsiGMtz5OsLweckq\n4EytoeqdvYqHy3aOo8+a3d2JlMM0ugedzSfBpNMwgGduJ1mPGo7pFh8DZw9g\nyDeHyK21PD02GNwTqPN1C4CzCy7PxlK38DMKpmIvNlPuOAusm1ZVGpBI37Kq\nklNRYcFJFBsXDnlKyzezSHyMpooHFQP+HNNW0rdcX1W6B0ipPvYsgLKKjIlL\nE/udjak3m7tSIJkz1E5sxzzFKO9EadWxOlUfzA8rQ2jV599kpz4bjD32WJjn\n1YLBwbLfLqGzNx3q2clM7rkqjb2gqTlB5eOi9bxHUbCa5YGzeWvCPK/zb86p\nzkdpJebfnpkiJzcuyQxOh98Xaz+Kzd8LYEBEBvc90xz1ylMjLl+htcWd2VVe\n/zdxocQGrFltmctv4+1miFb8qPiPtOfOmVDl0GUlAsdQ4f+Etrk3RJHiFTjA\nzJE/zbL5I98XG7ru/2b7gy09D2Ih0aA5+QyI6qxIxMhaBmFsPmY12Pu+2ygF\nH9Yw/WEXqUmHwSx0D7ccyYHZi9gKorU3bZj/0Y8wfjZMuywYBg/7hp9Rz3Ey\nuZ/MrLrdxrxYstryLQV4I4xZ/mFWKeCl37+GHcjPe17q5AFbxefrIvMR065S\nuu4z\r\n=bJ/8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAWL9WBrDNk/JSuDeWjEchuIxeTWlxlnZHEDaeqvsRbdAiEAgx4HmrgxcNPUA6pMxDF72fbBI7MJ0cV2kCVikSy0z6g="}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.1.0_1540151037331_0.9409594983225684"},"_hasShrinkwrap":false},"2.1.1":{"name":"redux-first-router","version":"2.1.1","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","engines":{"node":">=6.0.0"},"scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"semantic-release","standard-version":"standard-version","local-semantic-release":"git checkout master; git pull origin master && npm run standard-version && git push --follow-tags origin master && npm publish","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^15.9.17","snyk":"^1.100.1","standard-version":"^4.4.0","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"079abdf3e300d64c5b3ff34a4334e4cd535922be","_id":"redux-first-router@2.1.1","_npmVersion":"6.4.1","_nodeVersion":"9.10.0","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-B3S5YxKqkWxwWUiE1bEAQrgkm+HjLZC5RiytCtqJNhLPYdZMW4NfF3XM3zkzQsJ9xiYdr8dmb2EAMN1mMACLqA==","shasum":"500acc1f78b545e8d0da7b430c5842a17dbb8619","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.1.1.tgz","fileCount":65,"unpackedSize":645096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb4S2dCRA9TVsSAnZWagAA324P/jXv2DguXtdxE7VFAeVR\nxJG3zCb//O3GJ186CDruS40kC219UXpYjbqCGRyOhPrWzwkrAxGqsNQMHb1y\nEv5YR1EhO/p5jBBYsizPVuI7IC5u6lVCDhPwsq9+lMGdiiA7KeNduew1SkDk\n+BcSpCweKWk6oxbEfWJKPIDODn/hBv27pFBQKW53IEbI6ClsV9dN2i2c4MW0\ngl4Rts52CIGAsPS+VmQtudnLj2QxRQA4RErE6qlunPjyAe4pqG3dLx0QnLJf\nlm6uoyl0SPDPxa73i7bSpgcS8ffXquaIVH5xZ2QOYYHzLglcJv6kNlq6hqPQ\nlxD11b8/O12yL4obqtXGAQ0dPrmzqkDnmZi3nW3Eu+F9szXxIkFNMQxQnyU1\nJGjU+7QjKUoC48oW5M8IW+YDlyjZPXxp2CvhcFwEqwMQGuqQUjrRenGGd012\nTfIMud2n0eVzmrppwC9CeogGTrv1JGiNSCY4ZuA3QQ/PuK+HloU/mx//5YKT\nxSk9W6F4Rnevs9mqfZhO4tQ+YZI70C51fLyqoVwtYz4i9pE5RoKtB7YmNZke\nAUT9LlF2SOWUShTpK+8hhle9knLi05u622IjNwzfr02XwvWeTUo8IQq6PCQ+\nfnWu2UlA4PkxB2n1Np5wkRnhihD9C5P8KAt2ZbL4fo2bSo38FcTFHAHPCT1E\n+v6G\r\n=V3Hs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID8Yq0SglICcSn4ivKVDLeli16bfWpUj44XTmoky0c/yAiA0RglF1DxvacmcLP+4fH17mJ+E0NryVhrStWSeYB3r/A=="}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.1.1_1541483933224_0.10327260185004228"},"_hasShrinkwrap":false},"2.1.2":{"name":"redux-first-router","version":"2.1.2","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","engines":{"node":">=6.0.0"},"scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"npx semantic-release","standard-version":"standard-version","local-semantic-release":"git checkout master; git pull origin master && npm run standard-version && git push --follow-tags origin master && npm publish","prepublishOnly":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^15.9.17","snyk":"^1.100.1","standard-version":"^4.4.0","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"36f29dc515036c23d271ea3443d2da3bade38417","_id":"redux-first-router@2.1.2","_npmVersion":"6.4.1","_nodeVersion":"12.3.1","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-X0v4qtWloSI6GTEuaLImlBWCcLlKPC+p9SJ9VQosgATnY1tbu+Y3BTCUi891x/svnfe8VOtD59C3SVlHlBTx2g==","shasum":"e4e267dc60c50ffbecc69931099d49cfdc1b0ded","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.1.2.tgz","fileCount":54,"unpackedSize":283078,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc8WosCRA9TVsSAnZWagAA2OoQAKCHw7Jbf+BZ2lrdgArx\nmBHKM5UcOmhsogp+SvilRI+bKk3DarsPIW7D+dyMYoHS30KtCk0+aEL1VDSs\nh8nYuQGK8IV976P9Y93OCPypFuFvqJlLYV/cMjyLGvXK9VgUY1fWZ6z027ft\nEDA5nBr5Qi8sU6GhNsrkE9iTCzcVqeHSxH0CijOiup+Qh0ACK5CllZQjVYx3\nMiifhA827VVkyfdsm9uowioeQz/Fq3XQ7dPWxDWhab3K5DtnrReHqDLZ+Pi3\ne42e/wXXdmYyOKR/9Le0OOueH7P9B+MJbuXsfSs+DAbzoSXZqTmkNgMze7d/\nQxIh4XW5DOgfiWgL0WtuNF1EA9uQDeqX8e9a2AJ5DzzcpPwUnxDOIrgBlr9H\nvLqpkADPlKFWRLKZk9J2g4HfgNK7yDHImgQt8sFkADoK3FzWHiucZoBs2XAZ\nGKdMAd4Qlkiof6lBruAtMAbMcdQsu/SvA6pPjkm6QPWgyNMw3iSq9Rt0sLTR\n9zI+6aaelxSP/SkM3CCwfPprFCnXw/rkkxEX0iMbWvQTGEQUF3JnL1saw/fs\nvYQKMGCqxVFhwtc7Shoq3GRIctNhATk094HLMmjxnXmBJgJ2GgcY8dFpn6nT\n9HszKgPem04CrU1s+15hIccWe8Gv84AJIEHkveinxz/QF5dYuvCawNKiSTWM\nhIiy\r\n=Z/vX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCffjrReY06GujRNimxuFBQHq4BmsWn4dFQf3p0uT1angIhALgKF4fRFwLww+Cf/33rmZq6AuTYg/k57x6YryyluVAO"}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.1.2_1559325227698_0.4923991832070538"},"_hasShrinkwrap":false},"2.1.3":{"name":"redux-first-router","version":"2.1.3","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","engines":{"node":">=6.0.0"},"scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"npx semantic-release","standard-version":"standard-version","local-semantic-release":"git checkout master; git pull origin master && npm run standard-version && git push --follow-tags origin master && npm publish","prepublishOnly":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^15.9.17","snyk":"^1.100.1","standard-version":"^4.4.0","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"a8f3bb3995089f1a9355ca596ce20987e10ee572","_id":"redux-first-router@2.1.3","_npmVersion":"6.4.1","_nodeVersion":"12.7.0","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-WCYFRnNaFt6n9SkTa6PamEJpYS7rs7ZbClpuRVkG89ij4cmfOkPY4CfYtrUz14Gn23DGIzkINN/umoMxbsr5+w==","shasum":"6dcdd2926e48e0b9efb9582587b21057ab496ad5","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.1.3.tgz","fileCount":54,"unpackedSize":290099,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdPn5zCRA9TVsSAnZWagAA8kgP/RGACsVGmw+SYgPjzDo4\n16aM+iELM++CT3ZzXxj0S2Sfd21XkPXn4Z2rhzaLQjsF2fB3TLTEQ1JnFDrJ\nQoK8HMiCIAnjH5UjuxklwgLpOwXLjsntk4tf0Wd4GWUmdNf9TvEe6m5QYn/x\n9zVgSbm/wZfX3WMALqV8ji2uIuihSWBZge7RE4KHNhXv4XDKv8ZOYgQaZ4ab\neufGIXmMYcnzcVYPDD3cDDM9fJRao1r5ftg6U7qf5DowQuJE5cefuL/HrTON\nsDBTEIvRFb2LryXAXHwFNApkOLf7ozJga4erMtnubTl12gnvb5+XS2RwyuPI\n5BEjgDzZV4NKqaA27I8vhGJYkeH69qn4ARswpKBBBqLR7opLsaUafX3l/vf5\nPZ4DTqBdGfAIWwjMJqaMJLxS7WRgawqNlhjhbHYHC7qPt1Sq466xMPauYwj7\nn1fwcj1oKzViwk6UEB/wdwGZ1LR6P0e+VjZQH7xMQzIs+JLXRB0Oue+7x8r2\nAZmAUF3miGTtgmotSAQLk0Ld+aGLfBQx+ZgRgXHNf7ruTg+K/ErIJxyddb+y\nklE0I1gKa8cxkVG603tExN+DcZ5DSoa1zRmgQ6kUadKt5JIlm5aKmLQy20Vm\nLMsGFLpln/rzbf52QRFimaQQwKbcmwoyilGedf2QkTcF5RS3GWbEpJkCvwlB\nfxeH\r\n=ptWu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpji6frvQQ/6Cb8CzKJd5lJ6isqEtm4JKaE1ScqMoq7AIhALtWoJSNCRjwDAZ2EfE1ADrDGoMttxtmNn4pJYci0iw8"}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.1.3_1564376690836_0.605402942969558"},"_hasShrinkwrap":false},"2.1.4":{"name":"redux-first-router","version":"2.1.4","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","engines":{"node":">=6.0.0"},"scripts":{"build":"babel src -d dist","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"npx semantic-release","standard-version":"standard-version","local-semantic-release":"git checkout master; git pull origin master && npm run standard-version && git push --follow-tags origin master && npm publish","prepublishOnly":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^15.9.17","snyk":"^1.100.1","standard-version":"^4.4.0","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"2e997fa0486067bcbc92ffa8c17670dbd468d8c5","_id":"redux-first-router@2.1.4","_npmVersion":"6.4.1","_nodeVersion":"12.9.0","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-mIhoytqdpdjsYnn0iYjKpZxpwJ4E3ac2Y16FrZADM5RmQH1jqfJVwxi1JeEWTD8Nxm2ycsm/mD74KWd3pLvgvg==","shasum":"fbb4f0ce188a4eaa11d72f38a1bdc332bca61c0a","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.1.4.tgz","fileCount":54,"unpackedSize":290099,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdY/2pCRA9TVsSAnZWagAA5P4P/1xovAwkLOng1A1dlCzU\njPEml/ITUZ1q67HqFoS1AJm/SFoBw/ZA29ziZzM+hCJQoD5m33yNZ5JwZF2T\nt12WX4/Fd3qsqu8j5VZcBB2kdM1K1m/0jSHPZ1S72GrlfocGFSM5bBuCqXO2\nfnImm6tmJZ2hx+XrL1KMlftwv2eFF/UtGT2VD+7Cwa9u64aTRYyEsGZXXrKq\nGp8lh6pJmBGLFSOOjrOmJNLpL224ubQWJoLVyyzrCS1Zguu7/RYLRJmrInPK\n2Q9UjCyrPAfTQXTfSvVqunq57H4LTFc7WrFacgg8SpiFFaA4flr8++X4qwEK\nHyqcirFcVaoU3BPJlx55/Pt/wwlRXclHLww7ik8EzgA46sISIDwW0HPuYEzv\nSEJRI8S/VaAy7N6BtsGyVFE+IHpnoumcXYmGdygC6MY3tK1fEFw0DU8uGitp\nwd9fTGDtgtycAzogg0Xu2Cjh0dbxZN1mVCSOlS+miRvmY9Xjb7p611CbOknn\nxxu62N8Jmz7Rf04WGXMrFpkqgbSpvbYxboCQHYVeBSqYb2gmPWA9GfO9Zncl\nKeTR3IJkEwLEi/E9o1AH/9BMdTHG5vYYt54MK5a5JxEN6O1vQiOs8/eAw7IR\nerG5GLw0Q6/80ZKuwK3zaCZkdNEqJ0mbzTxlMzw3WEYXrioGiX12pLMUcOpI\n1iqZ\r\n=HeMS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXfYgBKnsZJ4gX+5Zj5KT2eHu9a27LbrqvL4pTAXd2bQIhAInsak7UJLvgVb4VxulrUy+mlS8+FjxM9Dnboi+lEWtL"}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.1.4_1566834088578_0.452440671548638"},"_hasShrinkwrap":false},"2.1.5":{"name":"redux-first-router","version":"2.1.5","description":"think of your app in states not routes (and, yes, while keeping the address bar in sync)","main":"dist/index.js","module":"dist/es","engines":{"node":">=6.0.0"},"scripts":{"build":"babel src -d dist","build:es":"BABEL_ENV=es babel src -d dist/es","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js -o dist/redux-first-router.js","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js -o dist/redux-first-router.min.js","flow-copy":"flow-copy-source src dist","flow-watch":"clear; printf \"\\033[3J\" & npm run flow & fswatch -o ./ | xargs -n1 -I{} sh -c 'clear; printf \"\\033[3J\" && npm run flow'","flow":"npm run flow-copy && flow; test $? -eq 0 -o $? -eq 2","clean":"rimraf dist && mkdir dist && rimraf coverage","test":"jest","lint":"eslint --fix ./","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","cm":"git-cz","semantic-release":"npx semantic-release","standard-version":"standard-version","local-semantic-release":"git checkout master; git pull origin master && npm run standard-version && git push --follow-tags origin master && npm publish","prepublishOnly":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min && npm run build:es"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","dependencies":{"rudy-history":"^1.0.0","rudy-match-path":"^0.3.0"},"devDependencies":{"babel-cli":"^6.23.0","babel-core":"^6.24.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","commitizen":"^2.9.6","cz-conventional-changelog":"^2.0.0","eslint":"^3.19.0","eslint-config-airbnb":"^14.1.0","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0","eslint-plugin-react":"^6.10.3","flow-bin":"^0.82.0","flow-copy-source":"^2.0.2","husky":"^0.13.2","jest":"^21.1.0","lint-staged":"^3.4.0","prettier":"^1.2.2","query-string":"^4.3.4","redux":"^3.6.0","redux-thunk":"^2.2.0","rimraf":"^2.5.4","semantic-release":"^15.9.17","snyk":"^1.100.1","standard-version":"^4.4.0","travis-github-status":"^1.5.4","uglifyjs-webpack-plugin":"^2.0.1","webpack":"4.20.2","webpack-cli":"^3.1.2"},"peerDependencies":{"redux":"*"},"jest":{"verbose":true,"silent":true,"testURL":"http://localhost:3000","setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js","moduleFileExtensions":["js"]},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"gitHead":"be814fba76ee19017f4eb1e02faa53ba5a89745f","_id":"redux-first-router@2.1.5","_npmVersion":"6.4.1","_nodeVersion":"12.11.1","_npmUser":{"name":"zackljackson","email":"zackary.l.jackson@gmail.com"},"dist":{"integrity":"sha512-roA/oYBLiJwdUf9c8pDmd4/xk2Jw8qe4MnSWPSHOuYPqyDmk30Pv9hZouwS6fZrPWL6VGJjrx67SwU6zBN/MKw==","shasum":"3e250478ddef15656fddc4efd268e345b0b3aa98","tarball":"https://registry.npmjs.org/redux-first-router/-/redux-first-router-2.1.5.tgz","fileCount":78,"unpackedSize":335065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdl2ZZCRA9TVsSAnZWagAAefkP/2tmT87SvDJ9fK++zmiM\ndwcRWrunzHfomk0qVWRUlwwrG/8gPcp72lWWpGdBybC7NK0h9agzu0tYE2SE\n1h93tkRLJ0MJa6edxgTm1hof/ol2cO5JzEcT+4MECqeOj/9bz00YsrTpSiTA\nMpTWOYv+gOH6oK7xaKouYKVx0SAVwrqzo0+wWR1gVD2B4PXtkKLnnNowEbe3\nemNhl1OGp4oIwHxrbx+/SjxbY/v3ei/R5nsxuhU47zu4eL77+YXMCZDYWzQn\nqMQvHca7nNTwLVKG+lRz3A21HnYTR7zsg79s+VOt8wkyv1r7nS6I0JTpdNTp\nWmtIe8PU/bbMnt/jrkxZ8OAw9P31Idce2WF8uSXZV1JcDaLV0gSdiZtI20rR\nRLd7cLnisrMWG4UlrRKIwxgcm15RzN49GjnqGXjKdk2grkNrfUTMhnvPMsep\nkBdlHc6KHx+SnGmNydPV5DtOQhb1o2kuWZ7oMWsGC6YRp2CvttoFJOG2b+Ss\npRQhTc43SydwUonjVH9tdDkt1C1MbAynyIOzmncZqiXzjB83z6TFWZuvQ5v2\nJbWjHXBN1j9/KgJ+YjcdDb3QGXNvA2zxeHqPBZNA87a/zENy5Qvw/6ODpA0G\nc19CYmHCrpyCbYNFTGrcnT0ZMY8tv9i0YZRs6oue5P6bciDzDA7JQHPQMnYm\n1Wxh\r\n=IFHS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG7llmtr3oX0RnjwHOyiLyAtdg8nZ8HOlrzAKWXAYgnfAiA/Put3jFiFOgHLJrPdwKEyHqomqKAkZ8sL8/RusRtgUw=="}]},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/redux-first-router_2.1.5_1570203224911_0.42306717051550513"},"_hasShrinkwrap":false}},"readme":"# Redux-First Router\nThink of your app in terms of _states_, not _routes_ or _components_. Connect your components and just dispatch _Flux Standard Actions_!\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/v/redux-first-router.svg\" alt=\"Version\" />\n  </a>\n  \n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/node/v/redux-first-router.svg\" alt=\"Min Node Version: 6\" />\n  </a>\n  \n  \n  <a href=\"https://www.npmjs.com/package/redux-first-router\">\n    <img src=\"https://img.shields.io/npm/dt/redux-first-router.svg\" alt=\"Downloads\" />\n  </a>\n\n  <a href=\"https://travis-ci.org/faceyspacey/redux-first-router\">\n    <img src=\"https://travis-ci.org/faceyspacey/redux-first-router.svg?branch=master\" alt=\"Build Status\" />\n  </a>\n\n## Motivation\nTo be able to use Redux *as is* while keeping the address bar in sync. To define paths as actions, and handle path params and query strings as action payloads.\n\nThe address bar and Redux actions should be *bi-directionally* mapped, including via the browser's back/forward buttons. Dispatch an action and the address bar updates.\nChange the address, and an action is dispatched.\n\nIn addition, here are some obstacles **Redux-First Router** seeks to *avoid*:\n\n* Rendering from state that doesn't come from Redux\n* Dealing with the added complexity from having state outside of Redux\n* Cluttering components with route-related code\n* Large API surface areas of frameworks like `react-router` and `next.js`\n* Routing frameworks getting in the way of optimizing animations (such as when animations coincide with component updates).\n* Having to do route changes differently in order to support server-side rendering.\n\n## Usage\n\n### Install\n`yarn add redux-first-router`\n\n(A minimal `<Link>` component exists in the separate package [`redux-first-router-link`](https://github.com/faceyspacey/redux-first-router-link).)\n\n### Quickstart\n\n```js\n// configureStore.js\nimport { applyMiddleware, combineReducers, compose, createStore } from 'redux'\nimport { connectRoutes } from 'redux-first-router'\n\nimport page from './pageReducer'\n\nconst routesMap = {\n  HOME: '/',\n  USER: '/user/:id'\n}\n\nexport default function configureStore(preloadedState) {\n  const { reducer, middleware, enhancer } = connectRoutes(routesMap)\n\n  const rootReducer = combineReducers({ page, location: reducer })\n  const middlewares = applyMiddleware(middleware)\n  const enhancers = compose(enhancer, middlewares)\n\n  const store = createStore(rootReducer, preloadedState, enhancers)\n\n  return { store }\n}\n```\n\n```js\n// pageReducer.js\nimport { NOT_FOUND } from 'redux-first-router'\n\nconst components = {\n  HOME: 'Home',\n  USER: 'User',\n  [NOT_FOUND]: 'NotFound'\n}\n\nexport default (state = 'HOME', action = {}) => components[action.type] || state\n```\n\n```js\n// App.js\nimport React from 'react'\nimport { connect } from 'react-redux'\n\n// Contains 'Home', 'User' and 'NotFound'\nimport * as components from './components';\n\nconst App = ({ page }) => {\n  const Component = components[page]\n  return <Component />\n}\n\nconst mapStateToProps = ({ page }) => ({ page })\n\nexport default connect(mapStateToProps)(App)\n```\n\n```js\n// components.js\nimport React from 'react'\nimport { connect } from 'react-redux'\n\nconst Home = () => <h3>Home</h3>\n\nconst User = ({ userId }) => <h3>{`User ${userId}`}</h3>\nconst mapStateToProps = ({ location }) => ({\n  userId: location.payload.id\n})\nconst ConnectedUser = connect(mapStateToProps)(User)\n\nconst NotFound = () => <h3>404</h3>\n\nexport { Home, ConnectedUser as User, NotFound }\n```\n\n## Documentation\n\n### Basics\n\n#### Flow Chart\n![Redux First Router Flow Chart](https://raw.githubusercontent.com/faceyspacey/redux-first-router/master/docs/redux-first-router-flow-chart.png?sanitize=true)\n\n#### [connectRoutes](https://github.com/faceyspacey/redux-first-router/blob/master/docs/connectRoutes.md)\nconnectRoutes is the primary \"work\" you will do to get Redux First\nRouter going. It's all about creating and maintaining a pairing of\naction types and dynamic express style route paths. If you use our ```<Link />``` component and pass an action as its href prop, you can change the URLs you use here any time without having to change your application code.\n\n#### [URL parsing](https://github.com/faceyspacey/redux-first-router/blob/master/docs/url-parsing.md)\nBesides the simple option of matching a literal path, all matching capabilities of the path-to-regexp package we use are now supported, except unnamed parameters.\n\n#### [Flux Standard Actions](https://github.com/faceyspacey/redux-first-router/blob/master/docs/action.md)\nOne of the goals of Redux First Router is to NOT alter your actions\nand be 100% flux standard action-compliant. That allows for automatic\nsupport for packages such as redux-actions.\n\n#### [Location Reducer](https://github.com/faceyspacey/redux-first-router/blob/master/docs/reducer.md)\nThe location reducer primarily maintains the state of the current pathname and action dispatched (type + payload). That's its core mission.\n\n#### [Link Component](https://github.com/faceyspacey/redux-first-router-link)\nA minimal link component exists in the separate package redux-first-router-link.\n\n#### [Query Strings](https://github.com/faceyspacey/redux-first-router/blob/master/docs/query-strings.md)\nQueries can be dispatched by assigning a query object containing key/vals to an action, its payload object or its meta object.\n\n#### [React Native](https://github.com/faceyspacey/redux-first-router/blob/master/docs/react-native.md)\nRedux First Router has been thought up from the ground up with React Native (and server environments) in mind. They both make use of the history package's createMemoryHistory. In coordination, we are able to present you with a first-rate developer experience when it comes to URL-handling on native. We hope you come away feeling: \"this is what I've been waiting for.\"\n\n### Advanced\n\n#### [addRoutes](https://github.com/faceyspacey/redux-first-router/blob/master/docs/addRoutes.md)\nSometimes you may want to dynamically add routes to routesMap, for\nexample so that you can codesplit routesMap. You can do this using the\naddRoutes function.\n\n#### [Blocking navigation](https://github.com/faceyspacey/redux-first-router/blob/master/docs/blocking-navigation.md)\nSometimes you may want to block navigation away from the current\nroute, for example to prompt the user to save their changes.\n\n#### [Scroll Restoration](https://github.com/faceyspacey/redux-first-router/blob/master/docs/scroll-restoration.md)\nComplete Scroll restoration and hash #links handling is addressed primarily by one of our companion packages: redux-first-router-restore-scroll (we like to save you the bytes sent to clients if you don't need it).\n\n#### [Server Side Rendering](https://github.com/faceyspacey/redux-first-router/blob/master/docs/server-rendering.md)\nOk, this is the biggest example here, but given what it does, we think it's extremely concise and sensible.\n\n#### [Client-Only API](https://github.com/faceyspacey/redux-first-router/blob/master/docs/client-only-api.md)\nThe following are features you should avoid unless you have a reason\nthat makes sense to use them. These features revolve around the\nhistory package's API. They make the most sense in React Native--for\nthings like back button handling.\n\n#### [Low-level API](https://github.com/faceyspacey/redux-first-router/blob/master/docs/low-level-api.md)\nBelow are some additional methods we export. The target user is\npackage authors. Application developers will rarely need this.\n\n#### [Version 2 Migration Steps](https://github.com/faceyspacey/redux-first-router/blob/master/docs/migration.md)\nIn earlier versions history was a peerDependency, this is no longer\nthe case since version 2 has its own history management tool. This\nmeans that the arguments passed to connectRoutes(documentation) need\nto be changed.\n\n#### [Usage with redux-persist](https://github.com/faceyspacey/redux-first-router/blob/master/docs/redux-persist.md)\nYou might run into a situation where you want to trigger a redirect as soon as possible in case some particular piece of state is or is not set. A possible use case could be persisting checkout state, e.g. checkoutSteps.step1Completed.\n\n#### [Prior Art](https://github.com/faceyspacey/redux-first-router/blob/master/docs/prior-art.md)\nThese packages attempt in similar ways to reconcile the browser\nhistory with redux actions and state.\n\n### Recipes\n\n- [Dispatching thunks & pathless routes](./examples/thunks)\n- [SEO-friendly styled links](./examples/links)\n- [Automatically changing page `<title>`](./examples/change-title)\n- [Use Redux Devtools to debug route changes](./examples/redux-devtools)\n\n### Help add more recipes for these use cases.  PR's welcome!\n\n*Topics for things you can do with redux-first-router but need examples written:*\n\n- *Performing redirects bases on `state` and `payload`.*\n- *Use hash-based routes/history (*see the [migration instructions](./docs/migration.md)*)*\n- *Restoring scroll position*\n- *Handling optional URL fragments and query strings*\n- *Route change pre- & post-processing*\n- *Code-splitting*\n- *Server-side rendering*\n- *Usage together with `react-universal-component`, `babel-plugin-universal-import`, `webpack-flush-chunks`.*\n\n## Where is new feature development occuring?\nFeature development efforts are occuring in the [Respond framework Rudy repository](https://github.com/respond-framework/rudy).\n\n## Contributing\nWe use [commitizen](https://github.com/commitizen/cz-cli), run `npm run cm` to make commits. A command-line form will appear, requiring you answer a few questions to automatically produce a nicely formatted commit. Releases, semantic version numbers, tags, changelogs and publishing will automatically be handled based on these commits thanks to [semantic-release](https:/\n/github.com/semantic-release/semantic-release).\n\n## Community And Related Projects\n\n- [Reactlandia chat lobby](https://gitter.im/Reactlandia/Lobby)\n\n- [react-universal-component](https://github.com/faceyspacey/react-universal-component). Made to work perfectly with Redux-First Router.\n\n- [webpack-flush-chunks](https://github.com/faceyspacey/webpack-flush-chunks). The foundation of our `Universal` product line.\n","maintainers":[{"email":"james@faceyspacey.com","name":"faceyspacey"},{"email":"zackary.l.jackson@gmail.com","name":"zackljackson"}],"time":{"modified":"2022-06-26T10:08:55.012Z","created":"2017-05-02T05:51:33.398Z","1.0.0":"2017-05-02T05:51:33.398Z","1.1.0":"2017-05-02T08:48:45.150Z","1.1.1":"2017-05-03T00:02:11.799Z","1.1.2":"2017-05-03T00:09:13.301Z","1.1.3":"2017-05-04T11:31:34.039Z","1.2.0":"2017-05-07T06:13:53.098Z","1.3.0":"2017-05-07T08:54:28.977Z","1.3.1":"2017-05-07T16:48:14.355Z","1.3.2":"2017-05-08T14:32:08.966Z","1.3.3":"2017-05-08T16:39:01.155Z","1.4.0":"2017-06-14T19:02:09.616Z","1.4.1":"2017-06-14T19:15:44.916Z","1.4.2":"2017-06-14T19:49:57.166Z","1.4.3":"2017-06-14T20:32:21.535Z","1.4.4":"2017-06-14T20:43:08.322Z","1.4.5":"2017-06-14T20:45:56.469Z","1.4.6":"2017-06-14T21:20:37.873Z","1.4.7":"2017-06-16T06:21:18.808Z","1.4.8":"2017-06-16T06:24:50.241Z","1.4.9":"2017-06-18T01:56:10.098Z","1.4.10":"2017-06-18T02:27:56.306Z","1.4.11":"2017-06-18T04:26:53.198Z","1.4.12":"2017-06-18T04:35:42.148Z","1.4.13":"2017-06-18T04:44:22.608Z","1.4.14":"2017-06-18T09:42:07.645Z","1.4.15":"2017-06-18T10:21:59.605Z","1.4.16":"2017-06-21T00:19:45.216Z","1.4.17":"2017-06-25T08:28:30.204Z","1.4.18":"2017-06-25T10:56:33.341Z","1.4.19":"2017-06-26T07:09:27.536Z","1.4.20":"2017-06-26T09:17:46.594Z","1.5.0":"2017-06-27T08:57:05.004Z","1.5.1":"2017-06-27T09:04:53.085Z","1.6.0":"2017-06-28T07:01:25.569Z","1.6.1":"2017-06-28T07:03:38.495Z","1.7.0":"2017-06-28T07:36:20.020Z","1.7.1":"2017-06-28T08:49:53.664Z","1.7.2":"2017-07-02T10:18:41.074Z","1.7.3":"2017-07-02T10:35:12.797Z","1.7.4":"2017-07-04T03:16:59.322Z","1.7.5":"2017-07-11T04:11:48.064Z","1.7.6":"2017-07-11T04:19:09.567Z","1.8.0":"2017-07-11T07:00:29.622Z","1.8.1":"2017-07-12T20:01:29.855Z","1.8.2":"2017-07-12T20:02:08.549Z","1.8.3":"2017-07-12T20:07:37.231Z","1.8.4":"2017-07-12T20:10:00.219Z","1.8.5":"2017-07-12T20:11:58.400Z","0.0.0-development":"2017-07-13T00:48:30.230Z","0.0.1-next":"2017-07-13T00:53:19.920Z","0.0.2-next":"2017-07-13T00:56:19.236Z","0.0.3-next":"2017-07-17T23:41:04.015Z","0.0.4-next":"2017-07-18T01:56:27.034Z","0.0.5-next":"2017-07-18T04:13:49.640Z","0.0.6-next":"2017-07-18T04:36:59.858Z","1.8.6":"2017-07-21T11:04:32.177Z","1.8.7":"2017-07-21T19:21:53.381Z","1.8.8":"2017-07-21T19:22:36.897Z","1.8.9":"2017-07-23T08:40:16.845Z","0.0.7-next":"2017-07-25T21:44:24.294Z","1.8.10":"2017-07-26T23:59:26.050Z","1.9.0":"2017-07-27T09:58:10.998Z","1.9.1":"2017-07-27T13:51:30.374Z","1.9.2":"2017-07-27T13:52:56.946Z","1.9.3":"2017-07-27T13:58:23.162Z","1.9.4":"2017-07-27T14:07:16.629Z","1.9.5":"2017-07-27T14:15:10.647Z","1.9.6":"2017-07-27T14:29:44.678Z","1.9.7":"2017-07-28T05:30:44.914Z","1.9.8":"2017-07-31T12:44:41.013Z","1.9.9":"2017-08-04T04:57:42.604Z","1.9.10":"2017-08-04T05:01:47.705Z","1.9.11":"2017-08-06T00:31:30.057Z","1.9.12":"2017-08-07T15:26:47.261Z","1.9.13":"2017-08-11T15:38:43.690Z","1.9.14":"2017-08-14T16:59:12.524Z","0.0.8-next":"2017-08-15T18:55:42.222Z","1.9.15":"2017-08-15T19:17:27.336Z","0.0.9-next":"2017-08-17T06:07:02.078Z","1.9.16":"2017-08-17T06:19:47.161Z","1.9.17":"2017-08-17T06:21:08.254Z","1.9.18":"2017-08-17T06:26:41.681Z","1.9.19":"2017-08-23T15:30:20.619Z","0.0.1-test":"2017-09-05T09:18:00.302Z","0.0.2-test":"2017-09-05T09:19:02.327Z","0.0.3-test":"2017-09-06T00:19:02.570Z","0.0.10-next":"2017-09-06T09:50:00.317Z","0.0.11-next":"2017-09-06T10:07:10.164Z","0.0.12-next":"2017-09-07T05:47:56.791Z","0.0.13-next":"2017-09-07T11:05:38.785Z","0.0.14-next":"2017-09-10T02:58:03.017Z","0.0.15-next":"2017-09-10T04:49:05.270Z","0.0.16-next":"2017-09-10T11:55:53.296Z","0.0.17-next":"2017-09-10T22:13:22.601Z","0.0.18-next":"2017-09-10T22:27:07.178Z","0.0.19-next":"2017-09-10T22:35:09.193Z","0.0.20-next":"2017-09-11T10:37:31.818Z","0.0.1-rudy":"2017-09-16T14:26:31.444Z","0.0.2-rudy":"2017-09-19T10:33:35.165Z","0.0.3-rudy":"2017-09-22T14:13:11.717Z","0.0.4-rudy":"2017-09-22T16:02:36.703Z","0.0.5-rudy":"2018-02-26T23:16:27.524Z","0.0.6-rudy":"2018-02-27T23:42:47.450Z","0.0.7-rudy":"2018-02-28T08:17:54.207Z","0.0.8-rudy":"2018-02-28T08:37:50.080Z","0.0.9-rudy":"2018-03-19T03:05:21.951Z","1.9.20-beta.0":"2018-10-04T18:50:36.073Z","2.0.0":"2018-10-04T21:57:15.484Z","2.0.1-beta.0":"2018-10-05T16:15:56.659Z","2.0.0-beta.1":"2018-10-05T17:18:04.510Z","2.0.1":"2018-10-05T17:34:59.909Z","2.0.3":"2018-10-12T00:22:50.297Z","2.0.5":"2018-10-12T03:04:50.147Z","2.0.6":"2018-10-14T18:11:16.410Z","2.0.7":"2018-10-16T21:26:20.328Z","2.1.0":"2018-10-21T19:43:57.576Z","2.1.1":"2018-11-06T05:58:53.391Z","2.1.2":"2019-05-31T17:53:47.805Z","2.1.3":"2019-07-29T05:04:51.010Z","2.1.4":"2019-08-26T15:41:28.844Z","2.1.5":"2019-10-04T15:33:45.164Z"},"homepage":"https://github.com/faceyspacey/redux-first-router#readme","repository":{"type":"git","url":"git+https://github.com/faceyspacey/redux-first-router.git"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"license":"MIT","readmeFilename":"README.md","users":{"sethbergman":true,"dbendy":true,"assiduous":true,"derrickbeining":true,"jeremyjonas":true}}