{"_id":"respond-framework","_rev":"373-bd34cb3d13a4ef5a4e1e0278ccd70d4e","name":"respond-framework","dist-tags":{"latest":"0.0.211"},"versions":{"0.0.1":{"name":"respond-framework","version":"0.0.1","keywords":["react","redux","respond","respond-framework","rudy","remixx","redux-first-router","react-universal-component","graphql","npm","javascript","node"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.1","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"6edcdef8cddac3507bf3b14ce82bd18bc3e3cdb4","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.1.tgz","fileCount":2,"integrity":"sha512-w+q6XB4aM9It82vVoVbuA3tTV7SsigaQ/f49k18/5dBCjOfh7Z2Ejd6xF1/wWmBjsBDUuG5t2RiGfOIV8EEl9g==","signatures":[{"sig":"MEUCIEzNtybYh+GjLfocGKFQlXc7Gk4TzCJhaq2rmpBfJ2QkAiEA99CL5XK6BzI/XIPdmE4UByo06Lxoqxbsb8DARdgvS70=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJclEpTCRA9TVsSAnZWagAAl4YQAIQfRuFxOLSMfLAjTsRC\n4/v5geHQXhxlA6wD6YRnE2YbAg1bVkI/uprldD4nCkw64dEdF7uFkdtslQmG\nFlEfWe415NV1Uw1HaSMGAr0m1AqWjJWq9KLMfwt6Op92k7JmUxFkrnqNyBIF\ni3JomJTkQSy4yNCi/5ktILUmUwgixsv5/nGIk6PVAPiWagDvFPbV2BqonC86\nEZPPkrpQuXVDkEMfApEccJJ1fRGeCRl1erzO50AqSll05qRj2hZY6CeIZdV/\n8NzWMgKkaCDhfL+L+LzIkgno3LIIccbN0GZ+lYhJd90N8edEBHhpTh+L2FO9\nyYiSU0kFd1BIFso3VXsMKO28wK3118BkBr449UbKNgfa+pl1PuyD/kBrWgFb\nvFPIH8sLpGN8Ir4RSCE+lt1tFKRyISk6feXrTDEAfZ8rgcirtU8+ca9fpx0s\ntLZVulT5x9OTyzrj7Oxr88KthiFxPK/tWKbN/jt3eMzV0K4wqTiCBvJJuJSu\n3/9wH9IoSd6ynqZMiKTzBY5zJwDrt1zEyeUnt3WKmLUVmaxG8YMhnbEyytL7\n/ZZRax294CDA6AmIYg4Mw404UbKPLIA+gnwFH7CTdt4aGvAu3noNGioNa7F7\nmCT+BUR/KOs7rT6WMFBOPnWrxcm1eG8gMiEcUxJ8lbvFFWcXuI06xrKoxhrN\n5HFY\r\n=W8FR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"072c80660c55f2e6e9c40ad781f87ebb07653d79","scripts":{"test":"jest"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"6.9.0","description":"Don't just React, Respond -- Finally scale your React codebase w/ ease","directories":{},"_nodeVersion":"8.1.3","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.1_1553222227141_0.021123119190912698","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"respond-framework","version":"0.0.2","author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.2","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/redux-first-router#readme","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"dist":{"shasum":"87ebd54c4102d69eebaff85fbc3cdb022903c33e","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.2.tgz","fileCount":185,"integrity":"sha512-FzTF1pZRjaRUx4HO8cdPmpNUABo7TuUesnQqImXAIrPqGHU7PnFarTSh6ExCSE7/G3WmBUyFPXdZIKUz7M0pKg==","signatures":[{"sig":"MEQCIDONs1dmJjbWyNB0v9aUNHq2taruq6h+13mPi+SLmludAiB72l2mdiU/o1BzRWGmyiM7ym1FTHsppevQ2tL/5kVNeA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":643195,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduIxRCRA9TVsSAnZWagAAwQoP/2I0vh4pKjnvlkOrIrQ1\n/ge/QVcSFa3QHxErPavDbVw3XLHCG9xqo1NkaAn8BhdjM+Jb83QjKKLbn6X5\nBYy8pKvoQp6PnhIKVAFnQP3LOUd2GCSv0K661Hljc/4QyXnPrs7BLJDk6xku\nZ1WhxV2WvBxXdfbHiBxJMhoEX0WdT/zivLHcDXBLb1CihIKgLrvX+YzKs6ix\nHoRNSLQE4rG4MEiVwNy+UP2UZIO+IyI6070Iz0R69uu003jbaBCcj1RZaPr/\nY2o3nNl9O2ckMnONesag/Y6nlv0g3dKZhReicYhM3dqeORbnzc0SZYF5T/v5\njXO0XWGSHP1oMmqGCFw3WUE8DR0gWfhM41KiAMHQg5HBmqu293NSq6iJp5Ox\nC4XhoiCbzqN3oPB3F/IO8tmYFQxqjhZMpULZvoXcjJROjXmKMwZ27DX9BSIN\nZ50FT6wgBrT0w8lmukwX93RDmtMk7+gh3W3CSdj8TbCufXQZULBxMWS/4Bpk\naKSGR7qaIalyEZaYRSUomgKvvZdVCOwh3p+DzawVaPd3AS/8OYHNTW8j3+gc\nrRyxARaQMMWNSlfelQnU+iFGppH7rkkvyadVEtCXuEpNn/nlNZTAIMIELB39\nfMOCEzvMtXV9mNF0jElIwxKoSzX6eIf3v6dxAlFEo6qevqrRllezyg3KejaB\nQJ4v\r\n=GQZJ\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"silent":true,"testURL":"http://localhost:3000","verbose":false,"testMatch":["**/__tests__/integration/**/*.js?(x)"],"setupFiles":["jest-localstorage-mock"],"moduleFileExtensions":["js"],"setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js"},"main":"dist/index.js","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"gitHead":"5b368d916d3a49b477b77ad5e987958fd95b3717","scripts":{"cm":"git-cz","flow":"flow; test $? -eq 0 -o $? -eq 2","lint":"eslint --fix ./","test":"jest","build":"babel src -d dist","clean":"rimraf dist && rimraf coverage && rimraf examples/boilerplate/buildClient && rimraf examples/boilerplate/buildServer && rimraf examples/demo/buildClient && rimraf examples/demo/buildServer","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.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'","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","semantic-release":"semantic-release pre && npm publish && semantic-release post"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/redux-first-router.git","type":"git"},"_npmVersion":"6.9.0","description":"Don't just React, Respond!","directories":{},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"_nodeVersion":"8.1.3","dependencies":{"qs":"^6.5.1","prop-types":"^15.6.0","path-to-regexp":"^2.1.0","resolve-pathname":"^2.2.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.1.2","react":"^16.1.1","redux":"^3.6.0","eslint":"^4.9.0","rimraf":"^2.5.4","webpack":"2.4.1","flow-bin":"^0.55.0","prettier":"^1.7.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","commitizen":"^2.9.6","lint-staged":"^3.4.0","react-redux":"^5.0.6","redux-thunk":"^2.2.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","flow-copy-source":"^1.1.0","semantic-release":"^6.3.2","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.1.1","babel-preset-stage-0":"^6.24.1","eslint-config-airbnb":"^16.1.0","eslint-plugin-import":"^2.2.0","travis-github-status":"^1.5.4","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-jsx-a11y":"^6.0.2","jest-localstorage-mock":"^2.2.0","cz-conventional-changelog":"^2.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0"},"peerDependencies":{"react":"*","redux":"*","react-redux":"*"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.2_1572375632863_0.4059380636357237","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"respond-framework","version":"0.0.3","author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.3","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/redux-first-router#readme","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"dist":{"shasum":"1a67cae671b4e0527ba4f5ab1fa95016e23164c7","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.3.tgz","fileCount":185,"integrity":"sha512-Jx4m89rLCFit127gqeiKO9SnYNyMoq/RYjSvmt5IM18nM+pTgNhTNUT/OyzEN7jD56yRSwYZlLzER8sNVGugtw==","signatures":[{"sig":"MEQCIF2PQiVDLrQs2vxq727j1VwvRN+uvNKpSXxLGXY1K/qfAiBmAn/EctXQ4sHPxSLyKwgghyZKqTGa/3UdXfMV4k9snw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":643401,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0xccCRA9TVsSAnZWagAAnNoP/Rzje/LV/ZmYhFEDELJ1\nD7nt7bOt5FNHV2IAH13J+OUkkpvb3nB+sbv5ldrZN0yAbpeoOR25v3UhYRBj\nWNzyTsOL0ZrjkskCGn9YOafW5xdJXlJfp0E/4FU4SP3iSpK2OOEZn8iQWZRi\nzJXXBQuBtYmq5a3pi2cKMUoB4AFYMF7nTxvSOSmQv6GaDS5340sQFk9fdAZG\ntzbQ64ydTyX7BitQPVRJPcRsg17WEhROoxMIdVzCRewgKpR4vUE3OOc5BY7q\nHMDA1vL/Nm4iYs6kj4YcHlsEa60KObWL5md6tzQfNTxG+30H0LfztfRKRHgv\n3X0lJKSExwUbh0U3GPv2yJWzAEg28PZ+m65G99kOKFyOdumzHBS0zR/IZFQ7\nB7/160RHO9PUFfyBG9nLl0XWZdmom3kkXA+aTi/iZuxSjovPUVMDpmuAaCB8\nMlDRcPT97oArJ6zUEavwFckt3pmjjZWcRUyv4Z+9CYqCX3WC5bvknMNApiwO\nwg58/u2NHPd6fh4ulWiqkOrf0WxsOZAUAgqsNZHA7462keNZ6IYPksRweeI/\n0gaRs8m3Ud1AXnmZjDx/O8pr1KzRcmBxDbOPPbVv3ZEbNV3mDDIkVuFaNGvo\nbnNtaZhr+iNhZSuRMJrrDxz13LJpgQhiVXZoIhqetdtxXQSNRHwXlgqmqCJx\nbRYl\r\n=F4S4\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"silent":true,"testURL":"http://localhost:3000","verbose":false,"testMatch":["**/__tests__/integration/**/*.js?(x)"],"setupFiles":["jest-localstorage-mock"],"moduleFileExtensions":["js"],"setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js"},"main":"dist/index.js","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"gitHead":"8fb31a9ecfa3bbf289201370a0e5fdb06228ab11","scripts":{"cm":"git-cz","flow":"flow; test $? -eq 0 -o $? -eq 2","lint":"eslint --fix ./","test":"jest","build":"babel src -d dist","clean":"rimraf dist && rimraf coverage && rimraf examples/boilerplate/buildClient && rimraf examples/boilerplate/buildServer && rimraf examples/demo/buildClient && rimraf examples/demo/buildServer","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.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'","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","semantic-release":"semantic-release pre && npm publish && semantic-release post"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/redux-first-router.git","type":"git"},"_npmVersion":"6.9.0","description":"Don't just React, Respond!","directories":{},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"_nodeVersion":"8.1.3","dependencies":{"qs":"^6.5.1","prop-types":"^15.6.0","path-to-regexp":"^2.1.0","resolve-pathname":"^2.2.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.1.2","react":"^16.1.1","redux":"^3.6.0","eslint":"^4.9.0","rimraf":"^2.5.4","webpack":"2.4.1","flow-bin":"^0.55.0","prettier":"^1.7.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","commitizen":"^2.9.6","lint-staged":"^3.4.0","react-redux":"^5.0.6","redux-thunk":"^2.2.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","flow-copy-source":"^1.1.0","semantic-release":"^6.3.2","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.1.1","babel-preset-stage-0":"^6.24.1","eslint-config-airbnb":"^16.1.0","eslint-plugin-import":"^2.2.0","travis-github-status":"^1.5.4","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-jsx-a11y":"^6.0.2","jest-localstorage-mock":"^2.2.0","cz-conventional-changelog":"^2.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0"},"peerDependencies":{"react":"*","redux":"*","react-redux":"*"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.3_1574115099890_0.42175263610035385","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"respond-framework","version":"0.0.4","author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.4","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/redux-first-router#readme","bugs":{"url":"https://github.com/faceyspacey/redux-first-router/issues"},"dist":{"shasum":"c557e5a9357063dad2aab0d90e4652a6d7ba36e0","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.4.tgz","fileCount":185,"integrity":"sha512-2eQZwdK0yKbQo0JEGemgw7Du9e5S+eDra+iYZuM9MksyfLWUSbkTJivNGcyyChX6kbjfdvsORo8faAGgLxZdpg==","signatures":[{"sig":"MEQCIEe3nI+UgA37Owp4P6SBEcDZ+E6WVS425DpXsuUoECM6AiBvbw697g2QmOYgTDgC3ssoPzxZ74VTdAbUMdqD8Kbfpg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":644132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd19MhCRA9TVsSAnZWagAAth4P/3HgYMC8FPemRHZKx16A\nj9+T+l7oPVXCQ5k8y43OUeqi25kct8kHzDY+BhaGwBx1LlRMQSGAz+3MTKVb\n/CYgwtL/A15R8V8EEOyvfkFvF1eMU7HvEQZ/MeIY3XFEmRLs1NksbVLfFtHX\nGMKeOZ+q509w73/9mFpxzPxJPTZywQx8gwoJ1jBvAgRyxxt0ymhvHEg/brey\nPbezb0OlLPbEKftfjI9og/ySlLQovFXHJGlLWuWyaKYCPt1WUKR+mtHvObd7\nMp2A77aEJrTDskaxmqTFwkSXJY0BgnVSOYlVn5vJnvF6s43fZNbAvk5CgMdi\nKEuDAa/I/C46sGFp7NST/lFha2P4Qdr8h7WMScMW8lxeoSHgbtIXqpL4DDE0\nyBnhTEc+zx/PzVZ4lIbVJ506pbco1NBIzSW0+9JGZSweeb3PcOHy4v7CbihA\nNn8p+TXWlKGZS/fNQ0icRZMiIW0yersPLeynJPH7HkCl0BqYXbLLeupPWOBS\nrTbAX6HAE/gJOq61Wc2A3cGADbYA400q5TjxqOwDiaiYe3BcJ8OQrq/EOCS1\n8amnv5D8C3sdtEk7e8qXrzE2gZqz2CQOdHlefnipFSbNBBZ1XlGnL8RGPcdz\n7PFtO+vzdkn+FR15Q4VG/9wl4Tg1LF7JFEecmV5M76698tYCB+7O9QURHV5M\neBap\r\n=k1wt\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"silent":true,"testURL":"http://localhost:3000","verbose":false,"testMatch":["**/__tests__/integration/**/*.js?(x)"],"setupFiles":["jest-localstorage-mock"],"moduleFileExtensions":["js"],"setupTestFrameworkScriptFile":"./__test-helpers__/setupJest.js"},"main":"dist/index.js","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"gitHead":"8fb31a9ecfa3bbf289201370a0e5fdb06228ab11","scripts":{"cm":"git-cz","flow":"flow; test $? -eq 0 -o $? -eq 2","lint":"eslint --fix ./","test":"jest","build":"babel src -d dist","clean":"rimraf dist && rimraf coverage && rimraf examples/boilerplate/buildClient && rimraf examples/boilerplate/buildServer && rimraf examples/demo/buildClient && rimraf examples/demo/buildServer","format":"prettier --single-quote --parser=flow --semi=false --write '{src,__tests__,__test-helpers__}/**/*.js' && npm run lint","build:umd":"BABEL_ENV=commonjs NODE_ENV=development webpack src/index.js dist/redux-first-router.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'","prepublish":"npm run clean && npm run build && npm run flow-copy && npm run build:umd && npm run build:umd:min","build:umd:min":"BABEL_ENV=commonjs NODE_ENV=production webpack src/index.js dist/redux-first-router.min.js","semantic-release":"semantic-release pre && npm publish && semantic-release post"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/redux-first-router.git","type":"git"},"_npmVersion":"6.9.0","description":"Don't just React, Respond!","directories":{},"lint-staged":{"*.js":["prettier --single-quote --parser=flow --semi=false --write","eslint --fix","git add"]},"_nodeVersion":"8.1.3","dependencies":{"qs":"^6.5.1","prop-types":"^15.6.0","path-to-regexp":"^2.1.0","resolve-pathname":"^2.2.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^22.1.2","react":"^16.1.1","redux":"^3.6.0","eslint":"^4.9.0","rimraf":"^2.5.4","webpack":"2.4.1","flow-bin":"^0.55.0","prettier":"^1.7.0","babel-cli":"^6.23.0","babel-core":"^6.24.0","commitizen":"^2.9.6","lint-staged":"^3.4.0","react-redux":"^5.0.6","redux-thunk":"^2.2.0","babel-eslint":"^7.2.3","babel-loader":"^7.0.0","flow-copy-source":"^1.1.0","semantic-release":"^6.3.2","babel-preset-flow":"^6.23.0","babel-preset-react":"^6.24.1","babel-preset-es2015":"^6.24.1","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.1.1","babel-preset-stage-0":"^6.24.1","eslint-config-airbnb":"^16.1.0","eslint-plugin-import":"^2.2.0","travis-github-status":"^1.5.4","eslint-plugin-flowtype":"^2.32.1","eslint-plugin-jsx-a11y":"^6.0.2","jest-localstorage-mock":"^2.2.0","cz-conventional-changelog":"^2.0.0","babel-plugin-transform-flow-strip-types":"^6.22.0"},"peerDependencies":{"react":"*","redux":"*","react-redux":"*"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.4_1574425377124_0.66817803153624","host":"s3://npm-registry-packages"}},"0.0.184":{"name":"respond-framework","version":"0.0.184","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.184","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"e4c772f81d2f502401f6767f9c7336b882de6215","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.184.tgz","fileCount":215,"integrity":"sha512-9XVTEql0ygwku3S4X74DIryHOLhaewWckccDJ69AEMIbSedqCV5U6nicK3i1TF9M8rZ7y8Ye8omdH7VWZPKplQ==","signatures":[{"sig":"MEYCIQCd/zayRwjh24xZdwI+rO94H1UQG09r9hihIqUgIeGTgQIhAJvFSGqQeYM9mKTYCHcqssu59RIeRUAE2DHkW6OMS78Z","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":382144},"main":"./index.js","type":"commonjs","gitHead":"a8211b8bfb64b12f10ef89313e20f28706de67a0","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","start":"node server.js","deploy":"git add --all && npm version --force patch && npm run build && cd dist && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"^6.12.1","socket.io":"^4.7.5","jsonwebtoken":"^8.5.1","launch-editor":"^2.6.1","path-to-regexp":"^6.2.2","socket.io-client":"^4.7.5","universal-cookie":"^4.0.4","recursive-readdir-sync":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"@babel/cli":"^7.24.5","@babel/core":"^7.24.5","@babel/preset-env":"^7.24.5","@babel/preset-react":"^7.24.1","@babel/plugin-transform-modules-commonjs":"^7.24.1","@babel/plugin-proposal-export-default-from":"^7.24.1","babel-plugin-transform-export-default-name":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.184_1717844882744_0.6115062255861343","host":"s3://npm-registry-packages"}},"0.0.185":{"name":"respond-framework","version":"0.0.185","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.185","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"bb621359e5deddc9efd041969cb6b861f0e1e5b9","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.185.tgz","fileCount":215,"integrity":"sha512-OdArsY2vUIT4BVF5kAtIQUTD3bJbTJ8reUTgLzsjmTqv69MWt/2nO9wRYmkk1wR/vXmT53jkQ+Gu8me+AdHGTw==","signatures":[{"sig":"MEQCIE/F78kbJMzrTzHlnRFfDTK+gmd3ksfs6QJK7DU/YRMtAiBfVxf1l739m/d0+UcOiIE9h9nz7U3QCxWxX5CCwuBKNg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":382239},"main":"./index.js","type":"commonjs","gitHead":"768cc6636e5edb78c9e3341198dbaec334311783","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","start":"node server.js","deploy":"git add --all && npm version --force patch && npm run build && cd dist && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"^6.12.1","socket.io":"^4.7.5","jsonwebtoken":"^8.5.1","launch-editor":"^2.6.1","path-to-regexp":"^6.2.2","socket.io-client":"^4.7.5","universal-cookie":"^4.0.4","recursive-readdir-sync":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"@babel/cli":"^7.24.5","@babel/core":"^7.24.5","@babel/preset-env":"^7.24.5","@babel/preset-react":"^7.24.1","@babel/plugin-transform-modules-commonjs":"^7.24.1","@babel/plugin-proposal-export-default-from":"^7.24.1","babel-plugin-transform-export-default-name":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.185_1718097985260_0.602834497683699","host":"s3://npm-registry-packages"}},"0.0.186":{"name":"respond-framework","version":"0.0.186","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.186","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"23e367af914064330b31224e5fb8ce4803b07578","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.186.tgz","fileCount":215,"integrity":"sha512-XpqIqzHNir8SWWt9S1oUQt/I4Y/3kCWDeYp+mdQ0lsuNFZVU+adtjspW+7cJmqyf5NqeORkZSWBECW9I7PU2OA==","signatures":[{"sig":"MEYCIQDgKAYgKZ/AZ9Jr8ZTWgUOfjHzOXjQfiaz5FlzJFwiFwQIhAO3ykPX2nii6sLUbzrQcd9VsMbeOE/eqmad3Q7x3BIqR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":382372},"main":"./index.js","type":"commonjs","gitHead":"5071ae10d2a9afb3c880fc789bd4be5ba0fb68f7","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","start":"node server.js","deploy":"git add --all && npm version --force patch && npm run build && cd dist && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"^6.12.1","socket.io":"^4.7.5","jsonwebtoken":"^8.5.1","launch-editor":"^2.6.1","path-to-regexp":"^6.2.2","socket.io-client":"^4.7.5","universal-cookie":"^4.0.4","recursive-readdir-sync":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"@babel/cli":"^7.24.5","@babel/core":"^7.24.5","@babel/preset-env":"^7.24.5","@babel/preset-react":"^7.24.1","@babel/plugin-transform-modules-commonjs":"^7.24.1","@babel/plugin-proposal-export-default-from":"^7.24.1","babel-plugin-transform-export-default-name":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.186_1718100580695_0.15205976428460977","host":"s3://npm-registry-packages"}},"0.0.187":{"name":"respond-framework","version":"0.0.187","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.187","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"d9f3eccef227414e16b38dee0057fb11affa15d8","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.187.tgz","fileCount":215,"integrity":"sha512-p+OQ0rr1yLHfOCjbgtDWyCwoGsInzEWhXvnu7I72bNkfzCRJ02fI2yLOa0GwJ3uBWRnOIcXHR8ecijbPbhc1mw==","signatures":[{"sig":"MEQCIBYuEgVjrC1UgzsDCFcxX9P/7cf6WyXp6rXF8Vfhj8MPAiBk3ta2iWRoz7a26WZIshE6T8tr6R3e/aTPQAP0ozIRzQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":382392},"main":"./index.js","type":"commonjs","gitHead":"5b44a49f55e5143a9e72f1cddc73c96f0e179515","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","start":"node server.js","deploy":"git add --all && npm version --force patch && npm run build && cd dist && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"^6.12.1","socket.io":"^4.7.5","jsonwebtoken":"^8.5.1","launch-editor":"^2.6.1","path-to-regexp":"^6.2.2","socket.io-client":"^4.7.5","universal-cookie":"^4.0.4","recursive-readdir-sync":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"@babel/cli":"^7.24.5","@babel/core":"^7.24.5","@babel/preset-env":"^7.24.5","@babel/preset-react":"^7.24.1","@babel/plugin-transform-modules-commonjs":"^7.24.1","@babel/plugin-proposal-export-default-from":"^7.24.1","babel-plugin-transform-export-default-name":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.187_1718104218932_0.439453361433233","host":"s3://npm-registry-packages"}},"0.0.188":{"name":"respond-framework","version":"0.0.188","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.188","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"e6de7d608113278043de05ffeaf1b38bb5f9050a","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.188.tgz","fileCount":215,"integrity":"sha512-MjxTFT5jeaocbbZhMiluoBrV9TA2HaFJS2EuXJnYN5t1mzrGATzxPdEink/3dcQldQR0TAb1bBjSIcq9Ba/Lhg==","signatures":[{"sig":"MEYCIQCgYssXbU9kZ16c1rsk/VVI3LqUSrx3K5J1qrnVNhCncwIhAMGK37R4zA77DVmWaTZO7pCpoVQBe+qTY0dAB2pqsi32","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":382434},"main":"./index.js","type":"commonjs","gitHead":"3fb06b2a655b61019b62ed94e02856fa30ea755f","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","start":"node server.js","deploy":"git add --all && npm version --force patch && npm run build && cd dist && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"^6.12.1","socket.io":"^4.7.5","jsonwebtoken":"^8.5.1","launch-editor":"^2.6.1","path-to-regexp":"^6.2.2","socket.io-client":"^4.7.5","universal-cookie":"^4.0.4","recursive-readdir-sync":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"@babel/cli":"^7.24.5","@babel/core":"^7.24.5","@babel/preset-env":"^7.24.5","@babel/preset-react":"^7.24.1","@babel/plugin-transform-modules-commonjs":"^7.24.1","@babel/plugin-proposal-export-default-from":"^7.24.1","babel-plugin-transform-export-default-name":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.188_1718107121207_0.5142715773826585","host":"s3://npm-registry-packages"}},"0.0.189":{"name":"respond-framework","version":"0.0.189","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.189","homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"4dff7b8cd3299cacc5c6451ae40c8e98f700bff2","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.189.tgz","fileCount":230,"integrity":"sha512-22zM4CUbAnwhtxDypkOCM97eVAsaVu9Ez4GvdwvB9AvwzhRwwh+5jsOoSSpyfznf0z+G+Ba+E+JnYoUg6pQrWA==","signatures":[{"sig":"MEUCIC4AvwaIKM4/BnKmxb5XK09/dek7ixQ6e+6R3YY1tBk9AiEApKlOahEumewwID9Peq2ptJKNk+KaSJ/8iLB9sNdTwfk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":398378},"main":"./index.js","type":"commonjs","gitHead":"93110a58feb97dbc0b196a6943f63d3c3247f7e0","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","start":"node server.js","deploy":"git add --all && npm version --force patch && npm run build && cd dist && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"^6.12.1","socket.io":"^4.7.5","jsonwebtoken":"^8.5.1","launch-editor":"^2.6.1","path-to-regexp":"^6.2.2","socket.io-client":"^4.7.5","universal-cookie":"^4.0.4","recursive-readdir-sync":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"@babel/cli":"^7.24.5","@babel/core":"^7.24.5","@babel/preset-env":"^7.24.5","@babel/preset-react":"^7.24.1","@babel/plugin-transform-modules-commonjs":"^7.24.1","@babel/plugin-proposal-export-default-from":"^7.24.1","babel-plugin-transform-export-default-name":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.189_1719119922108_0.6208376742508248","host":"s3://npm-registry-packages"}},"0.0.190":{"name":"respond-framework","version":"0.0.190","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.190","homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"7f8b1c637fb1c0f03374839bf58b111d6de5203a","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.190.tgz","fileCount":230,"integrity":"sha512-i4Evyd/NtEorZyHmZsweyrwlfHKYFTXFoqz/Au9BlA9f7mL+gVIHWLHS9r1xEcE7/0ZVIJ7GrCe96SzQ+O5J8Q==","signatures":[{"sig":"MEQCIFbfBP6HoHABQUhgDPjhY5I/HvxkVNp220buhXg/y/JRAiB8mEq9vIc9iCAuU2QXmrtZ/z0PXNVQVemaiZWCUQhFFw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":398366},"main":"./index.js","type":"commonjs","gitHead":"4cba6fa407afe1218c17a757d9fe05182d8ebbf2","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","start":"node server.js","deploy":"git add --all && npm version --force patch && npm run build && cd dist && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"^6.12.1","socket.io":"^4.7.5","jsonwebtoken":"^8.5.1","launch-editor":"^2.6.1","path-to-regexp":"^6.2.2","socket.io-client":"^4.7.5","universal-cookie":"^4.0.4","recursive-readdir-sync":"^1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"@babel/cli":"^7.24.5","@babel/core":"^7.24.5","@babel/preset-env":"^7.24.5","@babel/preset-react":"^7.24.1","@babel/plugin-transform-modules-commonjs":"^7.24.1","@babel/plugin-proposal-export-default-from":"^7.24.1","babel-plugin-transform-export-default-name":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.190_1719120151266_0.10320518264555822","host":"s3://npm-registry-packages"}},"0.0.195":{"name":"respond-framework","version":"0.0.195","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.195","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"efd9c057a1883cb7d6f8d58fde920c1130e5c3cb","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.195.tgz","fileCount":250,"integrity":"sha512-bEBNHaOQi/IQ0uV8I2C/0Pu7b0IyeJIsF2M/Fc0gli2LbTAobpbNDy5Buqo81vbXqO+yI4lEos9pgVj/pNZs2A==","signatures":[{"sig":"MEYCIQDVEsicTqxg1HWUC7SWkwWrXOpknxhDk0MQekmrI4c9wQIhAKQ6Ggs/UWLApOjhGdtvm/R6TwZnu4Sxb264pHR4LkJf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":415020},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"e1f008041d0ffa6abfffffcbe3945bbd3e530545","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.195_1742988469625_0.6883304234702505","host":"s3://npm-registry-packages-npm-production"}},"0.0.196":{"name":"respond-framework","version":"0.0.196","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.196","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"c3fd92ea535994ee8b0748620c18c4a42faafdfb","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.196.tgz","fileCount":250,"integrity":"sha512-yGy1C2zkwmD48ESqdcvCBeeBbh10DmGM0lIhRL9EKMLn9OL0hK8Q30eQjg876qI4Jl6Ba8/2PsJzgSkVKOGRbg==","signatures":[{"sig":"MEYCIQDJiZZYA5YPAtrQ3ajKHkL/aewtfJ/c4wiEl5zGZ/zgNgIhAL0epg6cvtSEQhw8NMCS0SCPM2fyXmWTOnoZdY9tk8Mk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":414235},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"576ca7049466b63a2adcdf4896729fc0811b51ff","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.196_1742989277165_0.9920182504590938","host":"s3://npm-registry-packages-npm-production"}},"0.0.197":{"name":"respond-framework","version":"0.0.197","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.197","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"4c2a3814dc7b984294eef71d2819806e36f30a0a","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.197.tgz","fileCount":250,"integrity":"sha512-87+uJNwVPT7JxAvrTxqL7Qflnl3jVcbOvaHMvqv/OQ5BVUsOTH6XZl+knECCxgWSy3QoK1x0GSDArNrh+N7GYg==","signatures":[{"sig":"MEYCIQDX3ZI+x389Ee+h9KQZssttRe4bUi6k95I8hnb01e/UlwIhALjWzYCK2Pa0eMFNxdOk4o4YdQyJK0RCUHpffpqN2ZzR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416394},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"a7923c7ed729628b855514dfda596976bdc1ff69","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.197_1743151608356_0.7590074656351562","host":"s3://npm-registry-packages-npm-production"}},"0.0.198":{"name":"respond-framework","version":"0.0.198","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.198","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"455fdb4766e77b183566dcbc2a3e252982194374","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.198.tgz","fileCount":250,"integrity":"sha512-f+EAimWZL2qi8jjeOCngmG/iWJatDqxNsEwM2D/EgjK1I2J3Hd1J7CS8wKLw6IVHoNLCmuWHE9kIqLjGhJ+4dg==","signatures":[{"sig":"MEUCIQD2BX43hpNxhRgrCbVP1UkXnyy+VEr/qm5iAN6+FnR6fAIgGzNhchZFpIi1X4h322PneL/hAbdi10DSzP018XgipgY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416401},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"0e88497d0817b5f6931db9e8abb16bffd3286fe3","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.198_1743161186461_0.35158509221644807","host":"s3://npm-registry-packages-npm-production"}},"0.0.199":{"name":"respond-framework","version":"0.0.199","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.199","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"cf280324a0ed20b5f7296ad798ce8ba35be4cf7c","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.199.tgz","fileCount":250,"integrity":"sha512-NbtPR0bQ7T/Zh7UvriNyBES7On2OpRWo4iyk0GYGIRY1o7LMGNm6mlehQoVSNTs73T9dC7V/zxCCDlGFku4sRg==","signatures":[{"sig":"MEUCICpdUmImyu+eUjL5LsNePGJxFT3a4CYJLgijbBjy/jhMAiEAvdds8Uxff1xtsqByGwgloDqz3X8RTalxKhlWpKL61eI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416546},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"a5960342f0319a99687979396c5cf43f3ec98e57","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.199_1743164313518_0.4227280294379463","host":"s3://npm-registry-packages-npm-production"}},"0.0.200":{"name":"respond-framework","version":"0.0.200","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.200","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"71f5392688ae9580d89932ad216aa6b2baca7bcc","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.200.tgz","fileCount":250,"integrity":"sha512-I+s3G2HfStKlpgHhY7aHrFfU6TPCf3VDLHnK56PnE4r6aTUq46lT8Vm/i+rTJRY2I6DcyuvlJIH41GfrlffspQ==","signatures":[{"sig":"MEQCIADxT8HCpJX765eUUfJAFBNnHoTgLWEPcYmJJZFzWbC9AiBNYRzcoLI/SUwuTS9jMNtnEAO7ZSxwAHZIY93rFHDgBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416599},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"33ef5a4f68b9b394e06f4b36ddb4c772d4395db2","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.200_1743246461850_0.20364110543626546","host":"s3://npm-registry-packages-npm-production"}},"0.0.201":{"name":"respond-framework","version":"0.0.201","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.201","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"8933c3be0982d24828d063850a26a70738b0a405","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.201.tgz","fileCount":250,"integrity":"sha512-QzDpITXTnvE8oHRMSK5s8sU74FyUeZ61TprJ3q+wCjhnP4EwJR+lnKc/KaHdOVx62o/g/Icy+9qEFLKcIFZK1w==","signatures":[{"sig":"MEQCICne72dYYq0cKmgGuZfBfFlfThlms3X/52v3baHzYubAAiBKET2dscaskcVyN7xBeHu1x4+n6qWpulKAOIyb1Atx/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416761},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"4fa2f610e460024e74ca9e0fce53e194044adefa","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.201_1743256146219_0.742456542566496","host":"s3://npm-registry-packages-npm-production"}},"0.0.202":{"name":"respond-framework","version":"0.0.202","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.202","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"663c45f44e6bc74341d254518795b7e54d3945ca","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.202.tgz","fileCount":250,"integrity":"sha512-4ZRkh6lxAaY/WGSk1VXQCLfYIFnmrMd9LPUiR/xmPuugro0hDGgrj34IxtxzGpD5LyndJxnFrh9gTSCDah4awA==","signatures":[{"sig":"MEQCIDBofOUTkzzgf+QyUepI8H4QMI24xq8j9sqwZKpb1WnAAiA7WTdCwA/rjSZuf1KczbbtWMIBp2KU+tGAiLWGtcaEyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416763},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"7089f0f733dc2075d76423fb6e23d2512030e74b","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.202_1743256213398_0.5338229050709162","host":"s3://npm-registry-packages-npm-production"}},"0.0.203":{"name":"respond-framework","version":"0.0.203","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.203","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"28d317187a8e2c32ea58368672e9eb72981cb032","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.203.tgz","fileCount":250,"integrity":"sha512-wuBWRl4NHM6hSqWMEfFwbTixXHC9Z0YMGeTUnbzlENdjP2e+swulAuWRWB6f+X3Bz6sZBmT77F5Gvt7Z420B4Q==","signatures":[{"sig":"MEYCIQDRFeSvtZ176etS+FV3Ud2W0E+BGGxUTWO3iCk4kW94jwIhAO0jDvj1dxiqC5dnn00mUV6qQLb+xmsCLWhCUtrfdePJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416816},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"00e7c30ac420e99ccdc51821c1d4475be675f425","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.203_1743333059129_0.6198761844870382","host":"s3://npm-registry-packages-npm-production"}},"0.0.204":{"name":"respond-framework","version":"0.0.204","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.204","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"2405f849d9219fa7ff168e7d9a93b4a8fe91be56","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.204.tgz","fileCount":250,"integrity":"sha512-TvSGhUodM9LAQBertAwcf+pypN5Iv7mig5mLPOdzRsvQoxX1fWIjaDrcVL8AlIqRxi2EgIr3cp3+p+pZom4i3g==","signatures":[{"sig":"MEUCIBsYD0KvBBcSqDdxjtk0SnVNbBvp4S5cWqMzewzcQx0XAiEA8oZ2bJgxe6IJoP8GcvAEBrglLeQ4pEJLeWeitWnqurs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416863},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"21c00bc4a152f8ab7e8981fdfdc0ad5885fe836a","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.204_1743487504872_0.2636035814619879","host":"s3://npm-registry-packages-npm-production"}},"0.0.205":{"name":"respond-framework","version":"0.0.205","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.205","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"de377e14a428ce9a5f734e8e5fdebb61eca688aa","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.205.tgz","fileCount":250,"integrity":"sha512-OVB8iQDH3AQwS0cp2Ju+dNDb6fzmxKmBpxtIDp6S7Ewf1rbmRIfpHTiYvSVrcMFnZFjbyunhRokAw+DAyBCl0Q==","signatures":[{"sig":"MEQCIA5q75aTgoT1SvWtVuCdPgspoUSlygWcP5D+FnvJIKcnAiACNVBJ7t3Oz93452+cutQBOkdqxLGH/kDEAnVh2H6ehA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417141},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"bb415d98535ed8a0483115990875b68f5937e214","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.205_1743796692827_0.6492319213616233","host":"s3://npm-registry-packages-npm-production"}},"0.0.206":{"name":"respond-framework","version":"0.0.206","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.206","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"2c96240b50d366a3d9c98f5022829f2138b311dd","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.206.tgz","fileCount":250,"integrity":"sha512-oCRYDhQaqJmclJRrsiFVZAM3ZjsaDm+/ldVJ2ufe7/HY2VHYs06cL1AR0De3BoVgGUc8uA2cq3U98pcmIcXN+A==","signatures":[{"sig":"MEQCIDRPdex1f+hkeSF1xBuFUX+1OH3WKW+CtZhYsfjylyJ2AiBIz1gd1QMHRGTeWzr75a3hGR53nUTJa8g2cLWiPrQagw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417119},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"56436c3c34ae7bcfaa952ef50a04c4fb09884881","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.206_1743796897652_0.5954125272186808","host":"s3://npm-registry-packages-npm-production"}},"0.0.207":{"name":"respond-framework","version":"0.0.207","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.207","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"7cc270221c2fdaad428ec90c6f147a8c378ec313","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.207.tgz","fileCount":250,"integrity":"sha512-FvmznmSKmpbJAKkjKInYTAqrMpYA9hUZhQcwR4JyuRTnp8NenQtu4lJH4ukVlKOY6Os6JM4S+3UeEOMNNDbPDA==","signatures":[{"sig":"MEYCIQCiSaQYbBXg/SiSsi2ihTysju/u+B19ZIrEv0b+LSgwmgIhAJ3LhapYsQTSYMKazwqHLjgPWsgdE7UGKEYUT/Zae7UF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417185},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"fe699a35230f4180076a1a842394de58753382cf","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.207_1744021748694_0.6910804951080778","host":"s3://npm-registry-packages-npm-production"}},"0.0.208":{"name":"respond-framework","version":"0.0.208","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.208","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"0b1292299004473f704ecc1b1f8600e1aca2affa","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.208.tgz","fileCount":250,"integrity":"sha512-PZIK8PiYQe3vZoUXitH1v++3Uw2dTEjQp96gCMF+t+NtZAcQ1Bi0Jhd/wWahIGVAIhMutKOmk7x+BeVJ6sCFGg==","signatures":[{"sig":"MEUCIBpcvBhlxJEpS5d8T2Cf96ha9J3UBALz+LPkoe1VSA8KAiEAjhd/95yC+9If6rh1u6+KM64J2KOBMEN61TrPOwd9u8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417186},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"5be29671dafac2d01502a5fc629c4e9ed873d9d3","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.208_1744175955083_0.860162306006065","host":"s3://npm-registry-packages-npm-production"}},"0.0.209":{"name":"respond-framework","version":"0.0.209","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.209","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"4a7bcc5f23604b01543cf708dce3817150179995","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.209.tgz","fileCount":250,"integrity":"sha512-Bv8iwfJ7JZ8C+na8dkNzpJfiVHUQRnAdC9wXEbHIIHmCNpkXZx4z/C+6ueCcD9jgG0cecYeO77TQE05+/D+Pvw==","signatures":[{"sig":"MEYCIQDpIpBUQU23PcHm+Ow6y+5+DSbClbh7IHB0CVnCcClYRQIhAKLgcrNQ0F+aZJ5YMKHcoqpxiDPPyJ8SogaBBO6bmJQr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417190},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"a6adcc98dc84bf76ffd7cb43ac657f0a7697e3ed","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.209_1744178622140_0.5756724140654446","host":"s3://npm-registry-packages-npm-production"}},"0.0.210":{"name":"respond-framework","version":"0.0.210","keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","_id":"respond-framework@0.0.210","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"homepage":"https://github.com/faceyspacey/respond-framework#readme","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"dist":{"shasum":"33851a12f2ffce34facd1c196d128aa812e75c67","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.210.tgz","fileCount":250,"integrity":"sha512-clSJ/BRgzTqny7HnKYTD92u/plkQnHq8OSX5YdvfJMd2aqxG6m9khQjriQnIdajRMhj6UrB2J4AK0PaPyrNDNg==","signatures":[{"sig":"MEUCIFnfA/tIflIrV4fNJ1LfFThOWD73cp4jhJpTyCcp2xXNAiEAjpGJixuUygwKSFlvt3EfM+z4ChMA8DU34TCMR/UgkL4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417224},"main":"./dist/index.js","type":"commonjs","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"gitHead":"75cec63915bb77691a74f68ce96f9b96f569e58e","scripts":{"copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","test":"npm test","build":"rm -rf dist && babel src -d dist","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"repository":{"url":"git+https://github.com/faceyspacey/respond-framework.git","type":"git"},"_npmVersion":"9.6.4","description":"create as fast you think","directories":{},"_nodeVersion":"20.1.0","dependencies":{"qs":"6.12.1","bson":"6.8.0","react":"18.2.0","express":"4.18.2","mongodb":"5.0.1","react-dom":"18.2.0","socket.io":"4.7.5","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","path-to-regexp":"6.2.2","react-native-web":"0.19.4","socket.io-client":"4.7.5","universal-cookie":"4.0.4","recursive-readdir-sync":"1.0.6","@react-native-async-storage/async-storage":"1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.6.4","@babel/cli":"7.24.5","better-opn":"3.0.2","@babel/core":"7.24.5","snapshot-diff":"0.9.0","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/plugin-proposal-export-default-from":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/respond-framework_0.0.210_1744180009356_0.9448045242513465","host":"s3://npm-registry-packages-npm-production"}},"0.0.211":{"name":"respond-framework","version":"0.0.211","description":"create as fast you think","type":"commonjs","main":"./dist/index.js","exports":{".":"./dist/index.js","./*":"./dist/*.js","./*.js":"./dist/*.js","./package.json":"./package.json"},"scripts":{"test":"npm test","build":"rm -rf dist && babel src -d dist","copy":"rm -rf dist && cp -r src dist && cp package.json dist/package.json && cp LICENSE dist/LICENSE && cp README.md dist/README.md","deploy":"git add --all && npm version --force patch && npm run build && npm publish --access public"},"repository":{"type":"git","url":"git+https://github.com/faceyspacey/respond-framework.git"},"keywords":["javascript","react","respond","redux","respond-framework"],"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"homepage":"https://github.com/faceyspacey/respond-framework#readme","devDependencies":{"@babel/cli":"7.24.5","@babel/core":"7.24.5","@babel/plugin-proposal-export-default-from":"7.24.1","@babel/plugin-transform-modules-commonjs":"7.24.1","@babel/preset-env":"7.24.5","@babel/preset-react":"7.24.1","babel-plugin-transform-export-default-name":"2.1.0","better-opn":"3.0.2","jest":"29.6.4","snapshot-diff":"0.9.0"},"dependencies":{"@react-native-async-storage/async-storage":"1.18.1","bson":"6.8.0","express":"4.18.2","jsonwebtoken":"8.5.1","launch-editor":"2.6.1","mongodb":"5.0.1","path-to-regexp":"6.2.2","qs":"6.12.1","react":"18.2.0","react-dom":"18.2.0","react-native-web":"0.19.4","recursive-readdir-sync":"1.0.6","socket.io":"4.7.5","socket.io-client":"4.7.5","universal-cookie":"4.0.4"},"gitHead":"49cf6488ebd5277a5e1704db11b0d1d57090987a","_id":"respond-framework@0.0.211","_nodeVersion":"20.1.0","_npmVersion":"9.6.4","dist":{"integrity":"sha512-7D5xY+e0CsBkXAlWbues2wDQ/rtHZ0n3z03rkE7rR7rK8LY7u4zFlMwqiLdhwum7JsV3xTxWBmkaJYwGCDXPgA==","shasum":"9212e642933018c1c2674240f30d30cade730268","tarball":"https://registry.npmjs.org/respond-framework/-/respond-framework-0.0.211.tgz","fileCount":250,"unpackedSize":452547,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC1c6AjP6YrFN6uUNJRR3KAf6njCL8BfvLcsJtH1yHxgwIgKjgPLoPFM5a5gQ/vlqiMewl17pK3eMtIYB3B1bktWkI="}]},"_npmUser":{"name":"faceyspacey","email":"james@faceyspacey.com"},"directories":{},"maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/respond-framework_0.0.211_1745532609238_0.6162229451945778"},"_hasShrinkwrap":false}},"time":{"created":"2019-03-22T02:37:07.141Z","modified":"2025-04-24T22:10:09.712Z","0.0.1":"2019-03-22T02:37:07.242Z","0.0.2":"2019-10-29T19:00:33.083Z","0.0.3":"2019-11-18T22:11:40.039Z","0.0.4":"2019-11-22T12:22:57.347Z","0.0.8":"2024-05-03T09:26:17.508Z","0.0.9":"2024-05-03T09:31:14.330Z","0.0.10":"2024-05-03T09:33:42.352Z","0.0.11":"2024-05-03T10:04:39.376Z","0.0.12":"2024-05-03T10:08:12.696Z","0.0.13":"2024-05-03T10:10:31.958Z","0.0.14":"2024-05-03T10:12:33.790Z","0.0.15":"2024-05-03T10:27:11.806Z","0.0.16":"2024-05-03T10:27:31.905Z","0.0.17":"2024-05-03T10:32:33.326Z","0.0.18":"2024-05-03T10:41:53.820Z","0.0.19":"2024-05-03T10:44:02.745Z","0.0.20":"2024-05-03T10:45:46.027Z","0.0.21":"2024-05-03T10:47:21.550Z","0.0.22":"2024-05-03T11:27:22.726Z","0.0.23":"2024-05-03T11:39:02.505Z","0.0.24":"2024-05-03T11:40:18.252Z","0.0.25":"2024-05-03T11:41:49.014Z","0.0.26":"2024-05-04T02:06:07.160Z","0.0.27":"2024-05-04T02:08:49.189Z","0.0.29":"2024-05-04T23:38:26.006Z","0.0.30":"2024-05-04T23:39:50.608Z","0.0.31":"2024-05-04T23:41:24.332Z","0.0.33":"2024-05-04T23:42:45.428Z","0.0.34":"2024-05-04T23:43:17.721Z","0.0.35":"2024-05-04T23:43:31.807Z","0.0.36":"2024-05-04T23:45:44.590Z","0.0.37":"2024-05-04T23:46:52.539Z","0.0.38":"2024-05-04T23:47:10.595Z","0.0.39":"2024-05-04T23:47:54.403Z","0.0.40":"2024-05-04T23:48:17.554Z","0.0.41":"2024-05-04T23:50:25.960Z","0.0.42":"2024-05-04T23:50:38.419Z","0.0.43":"2024-05-04T23:50:55.730Z","0.0.44":"2024-05-05T00:02:36.523Z","0.0.45":"2024-05-05T00:02:47.642Z","0.0.46":"2024-05-05T00:09:38.876Z","0.0.47":"2024-05-05T00:10:40.003Z","0.0.48":"2024-05-05T00:13:55.077Z","0.0.49":"2024-05-05T00:26:34.266Z","0.0.50":"2024-05-05T00:26:58.476Z","0.0.51":"2024-05-05T00:36:42.749Z","0.0.52":"2024-05-05T01:10:01.879Z","0.0.53":"2024-05-05T01:13:53.315Z","0.0.54":"2024-05-05T01:23:05.530Z","0.0.55":"2024-05-05T01:25:46.347Z","0.0.56":"2024-05-05T01:38:25.287Z","0.0.57":"2024-05-05T01:47:57.477Z","0.0.58":"2024-05-05T02:13:27.623Z","0.0.59":"2024-05-05T02:16:42.556Z","0.0.60":"2024-05-05T02:17:07.000Z","0.0.61":"2024-05-05T02:54:47.673Z","0.0.62":"2024-05-08T09:43:41.108Z","0.0.63":"2024-05-08T09:49:56.805Z","0.0.64":"2024-05-08T09:52:28.941Z","0.0.65":"2024-05-08T09:58:34.852Z","0.0.66":"2024-05-08T10:00:32.793Z","0.0.67":"2024-05-08T10:04:45.301Z","0.0.68":"2024-05-08T10:09:59.818Z","0.0.69":"2024-05-08T10:14:34.081Z","0.0.70":"2024-05-08T10:34:04.454Z","0.0.71":"2024-05-08T10:36:24.005Z","0.0.72":"2024-05-08T10:40:06.531Z","0.0.73":"2024-05-08T10:41:36.583Z","0.0.74":"2024-05-08T10:47:58.886Z","0.0.75":"2024-05-08T10:50:53.787Z","0.0.76":"2024-05-08T11:21:18.339Z","0.0.77":"2024-05-09T01:11:53.385Z","0.0.78":"2024-05-09T01:23:25.517Z","0.0.79":"2024-05-09T01:48:42.616Z","0.0.80":"2024-05-09T02:21:46.627Z","0.0.81":"2024-05-09T02:29:55.185Z","0.0.82":"2024-05-09T02:51:56.190Z","0.0.84":"2024-05-09T03:30:19.859Z","0.0.85":"2024-05-09T03:36:07.740Z","0.0.86":"2024-05-09T03:40:31.838Z","0.0.87":"2024-05-17T04:14:23.675Z","0.0.88":"2024-05-17T04:16:59.279Z","0.0.89":"2024-05-17T11:36:28.216Z","0.0.90":"2024-05-20T08:07:16.328Z","0.0.91":"2024-05-20T08:48:15.378Z","0.0.92":"2024-05-20T08:49:14.680Z","0.0.93":"2024-05-21T02:04:59.098Z","0.0.95":"2024-05-22T07:06:37.664Z","0.0.96":"2024-05-22T07:13:09.709Z","0.0.97":"2024-05-22T08:24:33.364Z","0.0.98":"2024-05-22T08:41:55.837Z","0.0.99":"2024-05-22T09:10:54.163Z","0.0.100":"2024-05-22T09:54:56.663Z","0.0.101":"2024-05-22T10:00:48.721Z","0.0.102":"2024-05-22T10:06:46.683Z","0.0.103":"2024-05-22T10:11:34.514Z","0.0.104":"2024-05-22T13:46:49.904Z","0.0.105":"2024-05-22T14:04:24.580Z","0.0.106":"2024-05-22T14:13:17.606Z","0.0.107":"2024-05-23T03:32:26.158Z","0.0.108":"2024-05-23T03:38:38.964Z","0.0.109":"2024-05-23T03:52:12.166Z","0.0.110":"2024-05-23T04:03:39.215Z","0.0.111":"2024-05-23T04:47:35.017Z","0.0.112":"2024-05-23T07:02:14.873Z","0.0.113":"2024-05-24T07:46:43.238Z","0.0.114":"2024-05-25T08:57:08.429Z","0.0.115":"2024-05-26T12:49:31.558Z","0.0.116":"2024-05-26T14:44:06.586Z","0.0.117":"2024-05-27T04:50:10.027Z","0.0.118":"2024-05-27T05:54:40.843Z","0.0.119":"2024-05-27T10:11:28.270Z","0.0.120":"2024-05-27T10:11:50.602Z","0.0.121":"2024-05-28T02:01:32.667Z","0.0.122":"2024-05-28T02:03:51.428Z","0.0.123":"2024-05-28T03:37:26.293Z","0.0.124":"2024-05-28T04:18:07.320Z","0.0.125":"2024-05-28T04:27:12.416Z","0.0.126":"2024-05-28T04:33:02.793Z","0.0.127":"2024-05-28T04:46:58.715Z","0.0.128":"2024-05-28T06:44:38.828Z","0.0.129":"2024-05-28T07:59:20.869Z","0.0.130":"2024-05-28T08:21:22.332Z","0.0.131":"2024-05-28T08:25:06.050Z","0.0.132":"2024-05-28T08:42:06.767Z","0.0.133":"2024-05-28T08:45:00.022Z","0.0.134":"2024-05-28T08:46:15.164Z","0.0.135":"2024-05-28T09:05:20.943Z","0.0.136":"2024-05-28T09:47:54.633Z","0.0.137":"2024-05-28T12:47:37.385Z","0.0.138":"2024-05-30T05:01:11.622Z","0.0.139":"2024-05-30T05:23:44.937Z","0.0.140":"2024-05-30T05:27:38.313Z","0.0.141":"2024-05-30T05:31:56.328Z","0.0.142":"2024-05-30T05:33:50.244Z","0.0.143":"2024-05-30T05:36:56.994Z","0.0.144":"2024-05-30T05:51:12.241Z","0.0.145":"2024-05-30T05:53:35.023Z","0.0.146":"2024-05-30T06:06:04.448Z","0.0.147":"2024-06-06T06:55:59.607Z","0.0.148":"2024-06-06T06:58:19.949Z","0.0.149":"2024-06-06T06:59:19.538Z","0.0.150":"2024-06-06T07:55:35.868Z","0.0.151":"2024-06-06T07:56:52.805Z","0.0.152":"2024-06-07T03:07:59.376Z","0.0.153":"2024-06-07T03:20:03.851Z","0.0.154":"2024-06-07T03:39:53.619Z","0.0.155":"2024-06-07T03:42:08.738Z","0.0.156":"2024-06-07T03:52:55.641Z","0.0.157":"2024-06-07T03:57:18.597Z","0.0.158":"2024-06-07T04:01:18.205Z","0.0.159":"2024-06-07T04:04:21.171Z","0.0.160":"2024-06-07T04:07:19.909Z","0.0.161":"2024-06-07T04:13:33.468Z","0.0.162":"2024-06-07T04:18:27.904Z","0.0.163":"2024-06-07T04:20:18.996Z","0.0.164":"2024-06-07T04:21:29.262Z","0.0.165":"2024-06-07T04:22:57.322Z","0.0.166":"2024-06-07T04:37:02.814Z","0.0.167":"2024-06-07T05:10:27.676Z","0.0.168":"2024-06-07T07:49:10.780Z","0.0.169":"2024-06-07T07:54:35.330Z","0.0.170":"2024-06-07T08:13:06.692Z","0.0.171":"2024-06-07T08:21:47.660Z","0.0.172":"2024-06-07T08:33:49.671Z","0.0.173":"2024-06-07T08:37:29.629Z","0.0.174":"2024-06-07T08:44:48.658Z","0.0.175":"2024-06-07T08:46:45.218Z","0.0.176":"2024-06-07T08:48:32.642Z","0.0.177":"2024-06-07T09:00:11.787Z","0.0.178":"2024-06-07T09:03:29.342Z","0.0.179":"2024-06-07T09:04:11.068Z","0.0.180":"2024-06-07T09:45:26.682Z","0.0.181":"2024-06-07T09:47:36.061Z","0.0.182":"2024-06-07T10:03:38.589Z","0.0.183":"2024-06-08T09:46:29.074Z","0.0.184":"2024-06-08T11:08:02.929Z","0.0.185":"2024-06-11T09:26:25.426Z","0.0.186":"2024-06-11T10:09:40.855Z","0.0.187":"2024-06-11T11:10:19.087Z","0.0.188":"2024-06-11T11:58:41.367Z","0.0.189":"2024-06-23T05:18:42.292Z","0.0.190":"2024-06-23T05:22:31.425Z","0.0.195":"2025-03-26T11:27:49.860Z","0.0.196":"2025-03-26T11:41:17.454Z","0.0.197":"2025-03-28T08:46:48.632Z","0.0.198":"2025-03-28T11:26:26.765Z","0.0.199":"2025-03-28T12:18:33.722Z","0.0.200":"2025-03-29T11:07:42.059Z","0.0.201":"2025-03-29T13:49:06.491Z","0.0.202":"2025-03-29T13:50:13.574Z","0.0.203":"2025-03-30T11:10:59.329Z","0.0.204":"2025-04-01T06:05:05.155Z","0.0.205":"2025-04-04T19:58:13.022Z","0.0.206":"2025-04-04T20:01:37.903Z","0.0.207":"2025-04-07T10:29:08.867Z","0.0.208":"2025-04-09T05:19:15.287Z","0.0.209":"2025-04-09T06:03:42.407Z","0.0.210":"2025-04-09T06:26:49.544Z","0.0.211":"2025-04-24T22:10:09.521Z"},"bugs":{"url":"https://github.com/faceyspacey/respond-framework/issues"},"author":{"name":"James Gillmore","email":"james@faceyspacey.com"},"license":"MIT","homepage":"https://github.com/faceyspacey/respond-framework#readme","keywords":["javascript","react","respond","redux","respond-framework"],"repository":{"type":"git","url":"git+https://github.com/faceyspacey/respond-framework.git"},"description":"create as fast you think","maintainers":[{"name":"faceyspacey","email":"james@faceyspacey.com"}],"readme":"# Respond Framework - The Dream\n\nThe dream of application development is to deterministically render from *user-triggered* events.\n\n```js\nApp(reduce(...events))\n```\n\nAnd to do so while building your app out of mini apps, so that you always maintain the same level of enjoyment as when first starting out.\n\n\n## Respond in 5 Minutes\n\nRespond is the first ever **fully declarative** fullstack **Deterministic**-***first*** modular framework.\n\nPostgrest (PG Lite) *runs in the browser*, and resets and replays all events/fx instantly on replays, hmr, rewinds, *as well as tests* that run in the browser as part of your daily development workflow at every stage, after every tap, click and keypress.\n\nWith Respond, you have a built-in UI to replay any of the previous events, instantly in milliseconds (\"Replay Tools\"). It's built in React Native Web, so the Replay Tools work out-of-the-box in React Native too. \n\nWhen you refresh the page, by default, every event is remembered, and you're right where you left off.\n\nYou're always in control of where you want to be, and never have to waste time reproducing steps to get to what you want to work on.\n\nYou can save all user interactions as a test directly to your project repo, and replay them later, or run them as an actual Jest test.\n\nTests are snapshots after each event. They are fully automatic, and you don't have to write any test code.\n\nIf you heard bad things about snapshot testing, it's because you're not working within a framework with tools to do them correctly. More on snapshot testing in the [Testing](./testing.md) section.\n\nSo with Respond you don't have to \"write\" tests. You simply use your app as part of your standard development flow. Then save your usage recording, which you can also edit, re-order, delete, skip, and splice new events.\n\n\n### Composability & Modularity\n\nReact is composable only at the *component level*. To be fully deterministic and declarative, requires a **holistic** approach and conception to apps.\n\nWhen React has you doing things like `setUserId` via `seState`, it's still living in the *imperative* world.\n\nUsing `useEffect` are component level \"implementation details\" that play a far smaller part in Respond.\n\nFrom the perspective of Respond, React is the equivalent of *Jquery* in terms of how many implemenation details you still must manage. Code is far simpler and easier to reason about; it benefits from separation of concerns, which AI loves; you're *at least* one order of magnitude more productive.\n\nEvents triggered should only ever signal user-intent, such as `events.profile`, `events.submitProfile`, `events.logout`. Any subsequent activities should happen in a *reduction manner* in relation to a ***single*** **user-triggered** event. Including async fx.\n\nAnd because the *user-triggered* event might come from anywhere within the component tree, requiring *work* to be *near* the trigger component doesn't make sense and quickly becomes cumbersome (re: \"prop drilling\").\n\nTo maintain composability, Respond offers user-defined module boundaries at a higher level.\n\n\"Respond Modules\" are large groups of components and functionality that can be composed together, and made modular via \"module props\".\n\n> Small dynamic modules are also supported, as it's up to the user to define the boundaries of their modules. That means a single component could be a module if you want.\n\nThe mechanism for composability isn't component function calls, which are limiting, but rather an outside tree of branches with names, **paired to your component tree**. Each component is paired to a branch.\n\n> Pairing is performed via a babel/swc plugin. Its inferred, so you don't have to do any extra work (unless you specify another module via the `useModule` hook).\n\nHere's what module `state` looks like in Respond components:\n\n```js\nconst MyComponent = (props, state) => {\n  const { id } = props\n  const event = state.events.profile\n\n  return Pressable({ event, arg: { id } }) // component functions\n}\n```\n\nAll `Respond` components receive a second `state` argument, which is the current module's state.\n\nAdditionaly, Respond sunsets JSX as well as `createElement` in favor of **direct component function calls** (handled by the babel/swc plugin). Your app will feel like **pure functions from top to bottom**.\n\n> Pure function all the way down, ie \"turtles all the way down.\"\n\nEvents are defined outside the component tree:\n\n```js\nexport default {\n  profile: {\n    pattern: '/user/:id',\n    fetch: (state, e) => state.db.user.findOne(e.id),\n  },\n  saveProfile: {\n    submit: ({ db, form }) => db.user.updateOne(form),\n  }\n}\n```\n> `/events.js`\n\nEvents have callbacks like `fetch` and `submit` which are powered by Respond's super simple plugin API.\n\nPlugins are just functions of the same 2 argument signature `(state, e)`, except they operate on *all events within a given module*.\n\nReduction is central to proper Respond usage. Like plugins, reducers listen to all events in a given module (and its children). \n\nRespond reducers also receive the module's `state` as an additional argument:\n\n```js\nexport default (showDrawer = false, e, state) => { // <-- `state` as 3rd arg\n  const { events } = state\n\n  switch (e.event) {\n    case events.profile:\n      return true\n\n    case events.saveProfile.done:\n      return false\n  }\n\n  return showDrawer\n}\n```\n> `/reducers/showDrawer.js`\n\nAs you can see, module `state` is always within reach.\n\nTo group events, reducers and components together, you specify them as a module:\n\n```js\nexport default {\n  id, // unique id of the module\n  plugins,\n  events,\n  reducers,\n  components,\n  selectors,\n  etc\n}\n```\n> `/index.js` for root module, or:   `/modules/foo/index.js`\n\n\n### Who's it For?\n\nRespond is for the beginner and expert building serious apps alike.\n\nRespond makes it possible for the beginner to single-handedly build bespoke high-end highly interactive apps.\n\nIt teaches both the beginner + expert *the science that's been missing for app development*: **\"App Science\"**.\n\nIt does so by abstracting out raw business logic from the \"implementation details\" of components.\n\nYou will learn to solve the logical problems of UI *standalone* as if the UI doesn't exist. It can be considered \"headless.\" Instead, your reducers are describing *abstractly* what such a UI *might look like*. Aka \"declaratively.\" \n\nUIs are just \"views\" or \"dumb templates\", as if your favorite server-side MVC framework is **\"rebuilding the world fresh\"** for each request.\n\nIt's focused on React Native and React Native Web, but can be used in plain React.\n\nYou will do 95% of your work in the browser, even when developing for React Native, thereby giving you the benefits of the best-in-class Chrome debugger experience. And since, during development, the server runs in the client, you will benefit immensely from a single unified fully traceable debugging experience.\n\nIt's geared for developers that want to go farther than building \"web pages\" and \"web sites\", but it shines there too.\n\nSince it's fully declarative -- comprised of simpler *usually pure function calls* -- beginners too will be in a far better place to start.\n\nThey will be dealing with \"raw business logic\" rather than the implementation details of components, which from Respond's perspective is the equivalent of \"UI assembly language.\"\n\nIf you want to learn application development form first principles, or correct your understanding, Respond is for you.\n\nReact has been called the \"Operating System of the Web\", but that hasn't been true until now. For it to be true, a truly new and more productive paradigm must emerge on top of it, like going from Assembly to C.\n\nReactlandia took a wrong turn a while back and, via Respond, you will find your way back to a world where \"separation of concerns\" simplifies, separates and centralizes unique business logic.\n\nRespond teaches you proper reduction principles and approaches. **You will become a better developer by using Respond.** Respond finally distills app development to a science, which it has struggled to become until now.\n\nThe constraints imposed by Respond results in less \"correct\" ways to do things. \n\n> Hence the \"science\" part.\n\nWhereas with React and other component-centric libraries, there's infinite ways to do things. It's hardly a science. And the resulting code is typically cyclical spaghetti, and impossible to reason about as apps become large.\n\nYou will find that Respond achieves the deterministic declarative dream of:\n\n```js\nApp = f(state)\n```\n\nor in expanded form:\n\n```js\nApp(await reduce(...events))\n```\n\nRead this whole doc through to fully understand why this is a superior approach and the *science* apps have been missing. The secret lies in knowing how to reduce correctly, which hasn't been taught until now.\n\n\n\n## User-Triggered Events\n\nThe deceptively simple realization at the core of Respond Framework is that to achieve **determinism** you must make a **distinction** between:\n\n- **user-triggered events**\n\nvs \n\n- **response events** ***called by user-triggered events***\n\n\nAnd you must in fact only trigger them from user interactions, not hooks like `useEffect` where you \"fetch while you render\", or you lose determinism.\n\n![image](./images/react-respond-simple.png)\n\nRespond is able to differentiate between the two because in components, you use `event.trigger()` in response to actual user interactions, and everywhere else you must use `event.dispatch()`.\n\n> Plugins and event callbacks use `event.dispatch`\n\nEvent callbacks however handles most of the calls to `dispatch` for you by \"auto-dispatching\" callback returns.\n\nOnly in a complex callback or if you write your own plugins will need to use `event.dispatch()`. Visit the [Plugins](./plugins.md) section when you're ready. \n\nAdditionally, you almost never will call `event.trigger()` either, as you will use built-in components like `Pressable` or `Input` that do this for you (or if you create your own):\n\n```js\nconst Pressable = ({ event, arg }) => {\n  const onPress = () => event.trigger(arg)\n  return TouchableOpacity({ onPress })\n}\n```\n\n```js\nconst MyComponent = (props, state) => {\n  const { id } = props\n  const event = state.events.profile\n\n  return Pressable({ event, arg: { id } }) // component functions\n}\n```\n> Respond recommends \"component functions\" instead of JSX. They are automatally memoized. More on that soon.\n\nBecause events are defined statically at the top level of your application -- rather than within components -- they maintain a consistent reference, preventing the need for `useCallback` to optimize renders.\n\nEverywhere in your App, you will simply pass the reference as we did with the call to `Pressable` above. \n\n> `arg` is a special prop name corresponding to the argument passed to events; it's also memoized.\n\n\n## Double Arg Components\n\nIn Respond, components receive a second argument for `state`.\n\n```js\nconst MyComponent = (props, state) => ...\n```\n\nYou don't need to call a hook to retreive it, and it's **modularized**, which we'll cover shortly.\n\n> Isolated `state` will be available wherever you go within a \"Respond Module\". It even has its own `props` api: \"Module Props\".\n\nComponent `state` is powered by a babel or swc plugin so that you don't have use any other framework than the React that you know and love.\n\nThat way you can still use React Native, which Respond is tailored toward. Respond's Replay Tools and Inspection Tools are in fact built using **React Native Web**. **Respond is a \"React Native\"-first framework.**\n\n> And yes, you can use Respond without React Native. The Replay + Inspection tools, built in React Native Web, will be stripped out during production.\n\n\n## Component Functions (not \"Functional Components\")\n\nRespond sunsets JSX in favor of its \"box-model\" package for styling and component calls, inspired by Van JS. \n\nIt also makes use of a babel/swc plugin.\n\nThe result is you can call components like this:\n\n```js\nPressable({ event })\n```\n\ninstead of this:\n\n```js\nReact.createElement(Pressable, { event })\n```\n\nor this:\n\n```js\n<Pressable event={event} />\n```\n\nIn essence, you no longer have to pass your `Component` to `createElement`, and instead can treat the component directly as the function that it is. TypeScript loves this by the way!\n\n> Another name for this is \"render-optimized component functions\" or \"render-aware component functions\" or \"component functions\" for short.\n\nJSX is still supported, and Respond intends to maintain both pairs of plugins. It's not a big deal which you choose. But try to come with us on the \"component function\" journey.\n\nYou can use both in a single project, and bring along legacy functional components.\n\n\n## Modularized State (\"Respond Modules\")\n\nThe next key pillar of Respond is the concept of \"Respond Modules\".\n\nA Respond Module is a collection of events, reducers, and other things that are related to a particular domain or area of your app:\n\n```js\nexport default {\n  id,\n  events,\n  reducers,\n  selectors,\n  db,\n  plugins: [initialData, wizard, ...defaultPlugins],\n  models: [shared, client],\n  components: {\n    App,\n  },\n}\n```\n> `/index.js`\n\nFor example, you might have a `profile` module, which might have an `edit` event, and a `updateOne` reducer.\n\nAnd you might have a `post` module, which might have an `create` event, and a `createOne` reducer.\n\nOr you might have a `drawer` module, or a `modal` module, or a `toast` module.\n\nYou can break up modules by feature, domain (ie database table), area (eg Admin Panel), screen, or whatever makes sense to you.\n\nTo include a child module, just import and assign it and Respond will automatically understand that it *is a module*:\n\n```js\nimport admin from './modules/admin.js' // child module\n\nexport default {\n  id,\n  events,\n  reducers,\n  selectors,\n  db,\n  plugins: [initialData, wizard, ...defaultPlugins],\n  models: [shared, client],\n  components: {\n    App,\n  },\n  admin: { // simply assign it\n    ...admin,\n    props: {\n      get you() {\n        return this.users[this.userId] // runs in context of parent\n      }\n    }\n  }\n}\n```\n> `/index.js`\n\nHere you can see an example of an `admin` module assigned, with a `you` *selector* prop, which will run in the context of the parent module, while being accessible within the child module.\n\nEvents, reducers, selectors, as well as the entire isomorphic database (tables + models) can receive props.\n\n> **A \"Respond Module\" is fullstack**, which means you could create a 3rd party NPM package, whose `db` runs on another server. Stripe for example could provide a more full featured payment module in Respond that never has go through your server.\n\nWhen run in production, server-oriented code will be stripped out. During development, it all runs in the browser with complete stack traces in a single debugger (eg Chrome). \n\n> **Respond with Console Ninja is a dream come true!**\n\nGenerally you will start out simply with a single top level *static* module, and you will make a ton of features in that one module, and then break em up later.\n\n*Dynamic modules* for features as small as a single `Input` are also possible and can be code-split.\n\nRespond offers \"namespacing\" for `events` and \"grouping\" for `reducers`, so what you do is gain as much mileage out of those as you can within a single module, and then graduate to multiple modules when the time comes.\n\n> Tip: when building your first Respond app, just create everything in a single module.\n\n## `state` Wherever You Go\n\nThe `state` object seen in the double arg component is within arms reach wherever you go:\n\n\n#### Components:\n```js\nconst MyComponent = (props, state) => {\n  const { id } = props\n  const event = state.events.profile\n\n  return Pressable({ event, arg: { id } }) // component functions\n}\n```\n\n#### Reducers:\n```js\nexport default (userId = '', e, state) => {\n  const { events } = state\n\n  switch (e.event) {\n    case events.drawer.logout:\n    case events.join.home:\n      return ''\n  }\n\n  return e.userId ?? userId\n}\n```\n> `/reducers/userId.js`\n\n\n#### Events:\n```js\nexport default {\n  profile: {\n    pattern: '/profile/:id',\n    fetch: (state, e) => state.db.user.findOne(e.id),\n  },\n  updateOne: {\n    submit: ({ db, form }) => db.user.updateOne(form),\n  }\n}\n```\n> `/events/index.js`\n\n\n\nState is automatically reactive, and is provided via a rewritten & customized version of [Valtio](https://github.com/pmndrs/valtio) to which Respond owes its creator, Dai-Shi, immense credit.\n\nVisit the Valtio docs to quickly grasp the reactivity model, and make sure to give Dai-Shi a hi-five!\n\nRespond's state management facilities can be considered Valtio wrapped in a reducer.\n\n\n## Models\n\nRespond has traditional MVC style models, but they are isomorphic, working on both the server and the client similar to Meteor.\n\nYou can define server-only models, client-only models, and shared models:\n\n```js\nexport default {\n  get fullname() {\n    return this.firstName + ' ' + this.lastName\n  },\n  async save() {\n    if (this.pro) await this.doSomethingPro()\n    return this.super.save()\n  }\n}\n```\n> models/shared/user.js\n\nShared models are available on both the server and the client. You can *await* `model.save()` client-side and it will be saved to the server.\n\nModels are automatically applied when a model is transfered from the server to the client.\n\n\n\n\n## \"Sticky Reducers\"\n\nRedux wasn't used correctly by most developers. The reason goes back to the distinction between \"user-triggered\" events and \"response\" events. The latter are **called in response to a single user-triggered event**.\n\nMore generally, developers did not *fully* put to use or did not properly understand that reducers were meant to be used as \"subscribers\" in the \"PubSub\" Pattern:\n\n![image](./images/event-bus.png)\n\nRather than fire multiple events back to back, correct usage revolves around listening to a **single user-triggered** event from *multiple reducers*.\n\nBut also async work and other fx must also be \"reduced\" in such a ***one-to-many*** way.\n\nIn the case of async fx like \"response\" events, you need a deterministic way to reliably *await* them.\n\n> You also need an understanding of reduction/subscription patterns to keep the number of response events to the minimum. \n\n> The goal is none or just one; and only more -- which we call \"pivot events\" -- in rare circumstances.\n\nCorrect reduction revolves around inferring state based on the least amount of information/dispatches possible.\n\nYou shouldn't do this:\n\n```js\nevents.logout.trigger()\nevents.unsetUserId.trigger()\nevents.home.trigger()\n```\n\nInstead do just this:\n\n```js\nevents.logout.trigger()\n```\nor this:\n\n```js\nPressable({ event: events.logout })\n```\n> And infer/reduce the rest.\n\n\nCorrect reduction involves *sticking* to certain bits of state while ignoring irrelevant events.\n\nJust like an `array.reduce` function, you must know when to make things \"sticky\" by ignoring unrelated events:\n\n```js\nconst sum = array.reduce((acc, item) => {\n  if (!item.num) return acc // ignored\n\n  acc += item.num // \"sticky\"\n  return acc\n}, 0)\n```\n\n### Sticky Reducer Examples:\n```js\nexport default (screen, e, { kinds }) => e.kind === kinds.navigation ? e : screen\n```\n> `/reducers/screen.js` (\"switch reducer\")\n\n```js\nexport default (userId = '', e) => e.userId ?? userId\n```\n> `/reducers/userId.js` (\"sticky id reducer\")\n\n\n```js\nexport default (state = false, e, { events }) => {\n  switch (e.event) {\n    case events.drawer.account:\n    case events.drawer.settings:\n    case events.drawer.editProfile:\n      return true\n\n    case events.login:\n    case events.main.view:\n      return false\n  }\n\n  return state\n}\n```\n> `/reducers/showDrawer.js` (\"flag reducer\")\n\n```js\nexport default (state = false, e, { events, kinds }) => {\n  if (e.kind === kinds.navigation) {\n    switch (e.event.namespace) {\n      case events.drawer:\n      case events.drawer.userProfile: // nested module in drawer\n        return true\n    }\n    \n    return false\n  }\n  else if (e.kind === kinds.submission) {\n    switch (e.event) {\n      case events.drawer.logout:\n      case events.admin.dashboard:\n        return false\n    }\n  }\n  \n  return state\n}\n```\n> `/reducers/showDrawer.js` (flag reducer distinguishing between event \"kinds\" + \"namespaces\")\n\n\n## Events\n\nEvents *themselves* are the `types` that you switch ever. They are stable references. They also are the \"creator\" functions of the concrete `e` objects passed to reducers and event callbacks:\n\n```js\nconst e = events.drawer.profile({ id: user.id })\n```\n\nThis means there's no boilerplate. It's all \"collapsed.\"\n\nEvents can be namespaced:\n\n```js\nexport default {\n  drawer: { // drawer namespace\n    profile: {\n      pattern: '/user/:id',\n      fetch: ({ db }, e) => db.user.findOne(e.id),\n    }\n    logout: ...\n  },\n  join: { // join namespace\n    login: ...,\n    signup: ...,\n  }\n}\n```\n> `/events.js`\n\nNamespace nesting can be as deep as you like.\n\nVia namespaces, you can create an event at a \"path\" like `events.drawer.profile`, and that's what you will use everywhere.\n\nBoth `events` such as (`events.drawer.profile`) and `e` are referred to just as \"events\", where `e` will contain data dispatched with it, eg `{ id: user.id }`.\n\n> There's minimal jargon to learn, and experienced Respond developers will know what you mean by the context of the conversation.\n\n> Everything is basically just \"events\" in Respond. Everything revolves around events. If you understand Respond's evented model, you understand Respond.\n\nHere's the concrete `e` object created above:\n\n```js\nconst arg = { id: user.id }\nevents.drawer.userProfile.trigger(arg)\n\n\n// shape of `e`:\n\ne === {\n  event: events.drawer.userProfile,\n  kind: kinds.navigation,\n  arg: { id: user.id },                  // standard\n  payload: { id: user.id, foo: 'bar' },  // transformed (optional)\n  id: user.id,                           // convenience\n  foo: 'bar',\n}\n```\n\nAn event starts out as a \"configuration\" object:\n\n```js\nexport default {\n  dasbhoard: {\n    pattern: '/dashboard',\n    transform: (state, arg) => ({ ...arg, foo: 'bar' }), // optional\n    before: ({ events }) => events.users()\n  },\n  users: {\n    pattern: '/dashboard/users',\n    fetch: ({ db, query }) => db.user.queryPaginated(query)\n  },\n  saveUser: {\n    submit: ({ db, form }) => db.user.updateOne(form)\n  }\n}\n```\n> `/modules/admin/events.js`\n\nIf they have a `pattern`, Respond considers the `kind` to be a `navigation` event, and otherwise it's a `submission` event. This allows for very productive switching and logic within reducers.\n\n> The distinction between `navigation` and `submission` events is almost as important as the distinction between *user-triggered* and *response* events. It is key to understanding the nature and science of UI-driven apps.\n\n`before`, `fetch` and `submit` are powered by built-in plugins. You can create your own that imbue \"events\" with different callbacks and functionality.\n\nEvents happen between renders in Respond:\n\n![image](./images/react-respond.png)\n\nAll sorts of asyncrony can happen in *\"response\"* to events *triggered* by components. As long as its awaited, **determinism** is maintained.\n\nRespond has a Plugin API. They operate on *all events* within a given module. Here are examples of more built-in plugins:\n\n\n```js\nexport default {\n  login: {\n    pattern: '/login', // step 1\n  },\n  submitPhone: {\n    validate: ({ form }) => validatePhone(form.phone),\n    tap: ({ db, form }) => db.user.submitPhone(form),\n  },\n  \n\n  loginCode: {\n    pattern: '/login/code', // step 2\n  },\n  submitCode: {\n    submit: ({ db, form }) => db.user.submitCode(form),\n  },\n\n\n  signup: {\n    pattern: '/signup', // step 3\n  },\n  submitProfile: {\n    validate: state => validateProfile(state),\n    submit: ({ db }, e) => db.user.submitProfile(e.user),\n  },\n\n  complete: { // step 4\n    before: async ({ events, userId }) => {\n      await connectToRealtimeSockets(userId)\n      return events.dashboard.view() \n    }\n  }\n}\n```\n> `./events/join.js`\n\nWithout any plugins, almost nothing happens.\n\nEvery key you see here (`before`, `validate`, `submit`, `tap` and `pattern`) is powered by a plugin. The methods are known as \"event callbacks\" or \"event handlers\".\n\nThey are pretty much all async. The plugin pipeline is an async pipeline. **When the plugine pipeline is complete, Respond's Replay Tools move to the next event.**\n\nThis is why you can't just trigger events without constraints. **Respond must know the first event**, and any \"response\" events must be awaited within the plugin pipeline or event callbacks.\n\nParallel and optimistic events are supported.\n\nIn regard to \"boilerplate\", the **event configuration objects become functions**:\n\n```js\nconst e = events.join.submitPhone()\nawait e.trigger()\n```\n\n\nYou can also call `trigger` directly on the original event function:\n\n```js\nevents.join.submitPhone.trigger()\n```\n\n\n\nHowever, most often you will simply pass the event reference to a component that will do it for you:\n\n\n```js\nPressable({ event: events.join.submitPhone })\n```\n\nThese **stable references** can be switched over in reducers like types:\n\n```js\nexport default (step = 1, e, { events, user }) => { \n  const { join } = events\n  \n  switch (e.event) {\n    case join.logout:\n    case join.login:                return 1\n\n    case join.submitPhone:          return 2\n\n    case join.submitCode.done: {\n      return !state.user.profileComplete ? 3\n                                         : 4\n    }\n\n    case join.submitProfile:        return 4\n  }\n  \n  return step ?? 1\n}\n```\n> `/reducers/step.js`\n\n\n## Plugins\n\nPlugins are defined just like event callback functions, receiving both a `state` and `e` arg.\n\nExcept they run for ***all events in a module***:\n\n```js\nexport default (state, e) => {\n  if (!e.event.submit) return\n\n  const response = await e.event.submit(state, e) // could be any event\n\n  await e.event.done.dispatch(response) // built-in nested event along w/ .error + .data\n\n  return response\n}\n```\n> `/plugins/submit.js`\n\nThis is the core functionality of the `submit` plugin, as well as the `fetch` plugin.\n\n> Observe the `.done` nested event, which is automatically created for you for the purpose of differentiating between the initial *\"trigger\"* event and the *\"response\"* event in your reducers.\n\nContinuing with the `step` reducer from the previous section, we can write a plugin that dispatches the steps:\n\n```js\nexport default ({ events, step, curr }, e) => {\n  if (e.event.namespace !== events.join) return\n  if (curr.event.step === step)          return\n\n  return step.dispatch() // trigger event!\n}\n```\n> `/plugins/joinWizard.js`\n\nBut we must convert the `step` number to an event function, further \"collapsing\" boilerplate:\n\n```js\nexport default (step, e, { events, user }) => { \n  const { join } = events\n\n  switch (e.event) {\n    case join.logout:\n    case join.login:                return join.login      // event function\n\n    case join.submitPhone:          return join.loginCode  // event function\n\n    case join.submitCode.done: {\n      return !state.user.profileComplete ? join.signup   // event function\n                                         : join.complete // event function\n    }\n\n    case join.submitProfile:        return join.complete   // event function\n  }\n  \n  return step ?? join.login\n}\n```\n\nThat's how you create a basic state machine in Respond. \n\n> By the way, there's a plugin that can help you with this: `wizard`.\n\n`Switch` components look like this:\n\n```js\nconst LoginSwitch = (props, { step }) => {\n  const Component = screens[step.name] // eg: events.join.login.name\n  return <Component />\n}\n\nconst screens = {\n  login: LoginScreen,\n  loginCode: LoginCodeScreen,\n  signup: SignupScreen,\n}\n```\n\nWe just hit multiple birds with 1 stone!\n\nYou specify the `wizard` plugin in your module like so:\n\n```js\nimport { defaultPlugins } from 'respond-framework/plugins'\n\nexport default {\n  id,\n  plugins: [wizard, ...defaultPlugins],\n  evevents,\n  reducers,\n  // omitted\n}\n```\n\nAll modules require a `plugins` array for Respond to infer that it's a module.\n\nThis keeps plugins at the forefront of your mind as a tool you should use, not just for package authors.\n\nIf a built-in event callback/plugin doesn't do what you need, you'll find that plugins allow for immense flexibility.\n\nRespond can run in wildly different ways by use of plugins. In fact, `reduce` is a plugin itself!\n\n> Idea: create an `async` reduce plugin, and talk to the `db` right in the reduction! Careful though: it could become slow due to waterfalls and lack of parallelism, the same way current React apps are slow due to waterfalls.\n\n> It's better to use async plugins + event callbacks to get/retreive data, and leave reducers to the \"business logic\" of reducing what you get back from the server.\n\n\n## `db`\n\nRespond depends on a fully reset*able* database, which means it must be a fullstack framework, providing not just a database, but a server and API.\n\nYou access the \"api\" by way of the `db` singleton.\n\nThere are no \"controllers\" as in traditional MVC, as none are needed in a client-centric framework.\n\n> There are however facilities for *filtering, permissions and authentication* around db calls, giving them a few capabilities of traditional controllers. Visit the [Db](./database.md) section for in depth documentation.\n\nThe `db` singleton offers an RPC interface to methods on the server. You call each method like a method on a table, just as you would server-side: \n\n```js\ndb.user.findOne(id)\n```\n\nBut here's where it gets interesting: full-fledged Postgres runs in the browser, using the amazing PG Lite library.\n\nWhich means, during development, you aren't in fact using \"RPC\" -- you're making a local function call like any other! \n\nThat means it's fully traceable and debuggable directly in the Chrome devtools.\n\nThis is one of several cornerstones/pillars of Respond's \"deterministic\" nature.\n\n\n## Browser History + Back/Forward Buttons\n\nWe've talked about user-triggered events, modularity, and the resetable database running in the browser, but now we're going to introduce the 4th pillar & blocker Respond had to solve to achieve the declarative deterministic dream:\n\n**The browser's history (i.e. those pesky back/forward buttons) had to be fully abstracted.**\n\n***The solution is to `trap` users, so the back/forward buttons just become a signal for your app to do what it needs to do.***\n\nLibraries like React Navigation have called this \"draining\", i.e. in reference to Android's back button.\n\nRespond brings this to the web, for both back and forward buttons.\n\nOne of the secret reasons React has had to self-limit itself to a \"component\" library is because it's been thought there's nothing that can be done with things like the browser history.\n\nWith the back/forward buttons removed as a blocker, Respond is able to do work in its rightful place: *the top global context outside of the component tree.*\n\nWith Respond Modules, composition is retained. \n\nIt's better than the *microscopic* modularity offered by components.\n\nWhy?\n\nBecause boundaries are user-defined, typically for areas of your app a lot larger than a single component.\n\nWith these 4 pillars\n\n1. modularity\n2. event determinism\n3. resetable database running in the client\n4. abstracted history\n\nthe foundation of Respond stands.\n\n\n## Replay Tools & Testing\n\nThe final pillar or crown jewel of Respond is the ability to generate tests out of the *most minimal* *most natural* set of information, from which your app should be replayable.\n\n```js\nimport { setupTest } from 'respond-framework/testing'\n\nconst settings = {}\n\nconst events = [\n  {\n    \"index\": 0,\n    \"type\": \"join.login\"\n  },\n  {\n    \"index\": 2,\n    \"type\": \"join.edit\",\n    \"arg\": {\n      \"email\": \"james@faceyspacey.com\"\n    }\n  },\n  {\n    \"index\": 3,\n    \"type\": \"join.submitPhone\"\n  },\n]\n\nconst t = setupTest({ settings })\n\ntest(`0. join.login`, async () => {\n  await t.snap(events[0])\n})\n\ntest(`1. join.edit`, async () => {\n  await t.snap(events[1])\n})\n\ntest(`2. join.submitPhone`, async () => {\n  await t.snap(events[2])\n})\n```\n> The Replay Tools UI saves user-triggered events to your Jest test folder like this.\n\n\nIn essence, the pinnacle of declarative*ness* is achieved:\n\n```js\nApp(await reduce(...events))\n```\n\nThat's always been the dream. **The Declarative Deterministic Dream.**\n\nHere's what your bootstrap entry script looks like:\n\n```js\nimport mod from '../index.module.js'\nimport { createModule } from 'respond-framework'\n\n\nconst { eventFrom, reduce, App } = createModule(mod)\n\nconst events = [eventFrom(window.location)]\nconst state = await reduce(...events) // aka firstEvent.trigger()\n\nconst props = {}\n\nApp(props, state) // aka \"render\"\n```\n\nThat gives you the **mental model** of how respond is supposed to work.\n\nYou can obviously simplify it to:\n\n```js\nimport mod from '../index.module.js'\nimport { createModule } from 'respond-framework'\n\n\nconst { eventFrom, reduce, App } = createModule(mod)\nconst state = await reduce(eventFrom(window.location))\n\n\nApp({}, state) // aka \"render\"\n```\n\nAs you can see, `App` is a function of `props` and `state`, just like the components you write everywhere in your app.\n\n`...events` are a lazy never ending iterator reduced by an async *but deterministic* pipeline.\n\n> This is metaphorical, as `...events` in this example isn't in fact a lazily evaluated generator, but a device to instill the overall *mental model* of Respond.\n\nImagine `reduce(...events)` pushing new `e` objects each time you call `e.trigger()`, such as from a `Pressable` or `Input`.\n\nMeanwhile Respond's \"call and response\" flow tiktoks back and forth between *responding* and rendering.\n\nBesides animations, components are reduced to mere \"dumb\" templates. \n\nSeparation of concerns makes each aspect (events, reducers, components, selectors) easy as they should be. \n\n> **AI has a field day with this approach.**\n\nIn fact, Respond makes code so much easier that Respond actually *is the answer to the current low level of quality of AI code generation, which is ok for small things, but degrades as you prompt for larger and larger things.*\n\nThis is the direction Redux was initially going before React itself took the spotlight. This is the Redux journey taken to its logical conclusion, with cybertruck levels of batteries included.\n\nRespond is the result of over a decade of research while Reactlandia went in a different direction.\n\nAs its creator, I challenge you to question \"consensus\" thinking, and build something with this and compare it to how much more challenging it is to build something with anything else. *And then come to a conclusion.*\n\nRespond shines both for the beginner and those making high-end bespoke apps. \n\nHowever, it's going to be more apparent to developers of large apps -- who have experienced the nightmare of the \"component everything\" approach -- that Respond really delivers on the direction our industry was always supposed to go and the \"one true way\". \n\nSo Don't Just React...Respond. And start **creating as fast as you think** today.\n\n\n## Next Steps\n\nRead the complete docs:\n\n- [events](./docs/events.md)\n- [reducers](./docs/reducers.md)\n- [selectors](./docs/selectors.md)\n- [components](./docs/components.md)\n- [models](./docs/models.md)\n- [db](./docs/db.md)\n- [modules](./docs/modules.md)\n- [plugins](./docs/plugins.md)\n- [replays](./docs/replays.md)\n- [testing](./docs/testing.md)","readmeFilename":"README.md"}