{"_id":"exredux","_rev":"49-a76fe3cef9a60b8c83a0c475341c01eb","name":"exredux","dist-tags":{"latest":"2.0.4","next":"2.0.0-beta.2"},"versions":{"0.0.1-beta.2":{"name":"exredux","version":"0.0.1-beta.2","description":"React-Redux Model Viewer Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","react-redux":">=7.0.0","reflect-metadata":">=0.1.13","typescript":">=3.0.0"},"dependencies":{},"devDependencies":{},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"_id":"exredux@0.0.1-beta.2","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-4q/6hU8bt9EdEY/5QPf4qdbsnNAkLccy3yBmAaubTPqYklpU1wa+HwhberaIP6lBSsFQ0No2gkbmIIkGMNlOIw==","shasum":"77f835ccb0cd3cf10688a8d77b83171e27ebee2c","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.0.1-beta.2.tgz","fileCount":14,"unpackedSize":22782,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJct5U0CRA9TVsSAnZWagAAd2EQAI3DuQdVBof0Te5BYx9V\nPteP/Da2lth44ROwk3CypOvbi3gTAQdLyrsADIwlAO+z1uYNH4pVh9DAm8HL\nEoVY/bOWfPq9BTrIVOC50tYOlYxZoM1jfufbGZ8ImTuJLo/GMYwVD482VmLQ\nVowoJCkWeJBg318OlMa2aIOXqHui1OD6jL9KVywA1r/AtYLg0QHM+7bTCTYP\nF9jCUJJbdUZJw8rUoelm4lsizK+dvQnj9gIrvPT8/zcyO4CQ5CCZ6vZUgSs1\n4Xxn/SrZzWrDP9Pmzei+je+mVHV1DZwW7C6Xbbec60Liz7uIhXZFmhq2rEVk\n4/E1GggVypw7DnUyBKpBtTy0JQOaesn7gxvcE1++o2z1hvfNG5Mvm5yWU30x\n1Bbh3OCkhfCgLOV3LKK1NGS67FKneS+T2CEtrP8UzgILkqLfwHlM/u2pvgjh\n8m5GhZ+HFWkgcO315Cy5CNT1M6WEJgDHM68iO0zv4qbVQMgT18lRadV9R4vZ\nNC5UgTb9O+1icEvzfU31IaJJndE9JsN6cgzV3VVjoy8zMwUWehkbDTzbpW2Z\nYX3oDQyjiOZpFeuTSdlolsdOOdO813gCcenKmlsa5pwUqBXwuHRqSWW0GU8u\nkO3yhpB4Y4wCWMVpGZa3drypLD75panAemCbnGbj1R1CEeml6F//yVspORbd\nQzKn\r\n=45GW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG2iUli9/frkRK9s0v1XMLguxqvmK5T6IXxAiMCxEN7zAiAgQtHyAsQvKWwcYT8HnU/xYjwkOVoNOprgJcFrNbHkVQ=="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.0.1-beta.2_1555535155292_0.64566524916992"},"_hasShrinkwrap":false,"deprecated":"DEPRECATED VERSION: use latest version as possible."},"0.0.1-beta.3":{"name":"exredux","version":"0.0.1-beta.3","description":"React-Redux Model Viewer Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","react-redux":">=7.0.0","reflect-metadata":">=0.1.13","typescript":">=3.0.0"},"dependencies":{},"devDependencies":{},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"_id":"exredux@0.0.1-beta.3","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-oZ8zydTte6llakFgxo0CJDALqZjJ4odPF+hLdKNB8F2s5u1EJRfpuNe4jcVTt+WioUGAMs8JPn9hVIAiE81mDQ==","shasum":"03b3de5a9d69d2a13f3cfd4155d43e3206db40cc","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.0.1-beta.3.tgz","fileCount":14,"unpackedSize":22880,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJct5ceCRA9TVsSAnZWagAAHs4P/imJNTBP8InPFbQgSn//\nwFuaGBHfGfuuwbZD7l/mSpGx15LWLMA1fNNvL27NgUBggPDXgSuG5xV3lPE+\nIynz0UA4OYgVJ2Cv2cc+khOU+p2XxkNgvtUeZMNjs9I3iYsxgB6e7SEa276/\nwpw7FMK9hrfdSM5ME4zoO3MdGUbSyBf3Lu7MOZET/7UY/AeBPRv+qIUhgJU+\nmVvfZjgvqVZy0nhldljsoBIpcdzDJbkThakAxI7xGB7wL13ydGX/bDuTY/wJ\nPVwc7A6uqQUqgHG2AbfwiTmE3PFJN6xylXl6fFqiQpu531ocfRqIt+Ths849\nXyympOgplXkwwA2NJJzy/mLlFF1xtw4cHjUPw5RCuIqrM/vtaMnJLnaSXz+w\nACmUMJtstHbpoxgZ6E93KpjADXzDw+AgU96RQHxyKKgtK0u2l2eybAG/U5Lm\n0/RUBtYuDTU1N1a9gy/NMeltVMnnSmGauZyVzDL4oM5BNYggZw6Kaw7LwK/A\nWCXG9GxdiNWdQcVIWwvB/vyKfI5TdE2YqsCYGufCYRtBqH9PgAL+ApCiVavO\noVL2zDEOfZbYAuENAJA5YxeLm7wzfkCVaI0GbTc9JfwMc007IpiKqYdSY8n5\naL7hxxmSPUZXQ0knBXE7Pi5wRL1ydUZDzTBad8qcKc/DeOT22tNoZAOhj6dR\nVIwI\r\n=ry2K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE1DvgznjyrHC1a03lpbMsDd62WwEsfFkux29pwlq/npAiBH7cWQsD16WhTKFfKHSfXIDyHuRlwcyS29ZTY6BQ5nRw=="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.0.1-beta.3_1555535645528_0.23891172056949572"},"_hasShrinkwrap":false,"deprecated":"DEPRECATED VERSION: use latest version as possible."},"0.0.1-beta.4":{"name":"exredux","version":"0.0.1-beta.4","description":"React-Redux Model Viewer Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","react-redux":">=7.0.0","reflect-metadata":">=0.1.13","typescript":">=3.0.0"},"dependencies":{},"devDependencies":{},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"_id":"exredux@0.0.1-beta.4","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-4EEjxtABBwjd8dQZgA4xzRa++BHrDTnmt5xzrCvx9P4tyDCGCK2suT+2ap9DrDs1DYrXDJ4iUXY6rj7bnY8EMw==","shasum":"fbfcf682bff061474db2f62d492e9e06075101d9","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.0.1-beta.4.tgz","fileCount":15,"unpackedSize":36140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcuG0OCRA9TVsSAnZWagAANQgP+QCS5YJ3NnBag2g3bRCk\naK5WnxRWejuoFvLxIKAL5xfZqC+neEl71oLl2KT55MS9MUU8Xi7wenkbQVU/\nJNUN01ktbJo7nFwuN7UfywEpyt1GUrY/Xwg/tu5yioDnJPsppceNc7OR4yIp\n0Lx7DKTTKtvaK4eQwlb/K/Lpub8wVUsTi8yn40G9598kuXnfAcDTLqD+W+gV\ns6w8Qm2n9uKPfYtJTSSCEnkK8VwKvbz+NcAeufIVgLcNkC8idT8x1YKbFGM8\nF0qNAJiLzDzZCgFp8EZMihbBGD1UhBBmlfLBJj4MO3Kxkz3Q88tXJOfZJHTO\n1lBiQeKH/OuD8SLO7GC1nYlrONJ2cRx0Qf5xHYEIahMn3r56BSf3wK+rAmG6\nuOW/JLanTSyEFG03rQ/zXF9JM8nJyMbYyXJt0fBZLUq1690LyvRg/Mk2T/S1\nht4HkW3qckonn/fn+Ww9S/7kOVUvxA/sKfU+D6yRmRsbM7abN7upqj+G3+Ti\n7tVEjCLaTKwuONHgMWVPEqTw9wVWn8OsZNYYXYNndG1F/0/28JHLRCJ5BtOQ\n4rlOX1kQXH+4WO7HjhP382ZFv06VI4tSOwexQ1iVOuOV5c5o7oT1ugWtcI6B\nnti4kt/2FE/6dJeaDRAIc06/QtxDOVdoT4IoBggapD0a/9shR+3lIGd4lsC3\nTr6l\r\n=qmGU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDy7rzEnOmI00WFloa9zdGbwY78O4TYAQOLW04I05f9pQIhAOaImawGvEiPMGbOeTCshtGrveW+PfnUgHBmM8M1XyWB"}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.0.1-beta.4_1555590413803_0.24760994894216792"},"_hasShrinkwrap":false,"deprecated":"DEPRECATED VERSION: use latest version as possible."},"0.0.1-beta.5":{"name":"exredux","version":"0.0.1-beta.5","description":"React-Redux Model Viewer Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","react-redux":">=7.0.0","reflect-metadata":">=0.1.13","typescript":">=3.0.0"},"dependencies":{},"devDependencies":{},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@0.0.1-beta.5","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-aeSXVTQwfwADSVpbYO06lskY+XZC3RTA1ZxOybjqZQOQEWGutK9Rbdgt9v4/OdF0CSXwbjRbW2BkHFvTNeSu2g==","shasum":"571e02d6da7ba350a181cdf93358e3543b9f8f83","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.0.1-beta.5.tgz","fileCount":15,"unpackedSize":36351,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcvfzfCRA9TVsSAnZWagAA/7oP+QB56zMpnZrZ6EG0UqW2\n7ttmQK2ijWnSEBBkwjfBJKuUW6qaB0ytCKkp2aYLOOs7ly6R1IKor6P0PINf\nNde/uh0OxZZZFLIK6+/HjB0LO7ZkdZi53013LZbQTVz8RkG7exWch8HkUP1t\nsEn6ugxx5P/6UxJYZSPB2DKQYo9GejaZrio7m0aiQ2IoEzBe39ZKKLNRNa3G\nrnkiJ6vEMHIubvWIL3mttx+rmYsI0REEHf7U3IgEw1Pmm05u0sKacdCkyh42\n2anUb5etFStNyQj/M+LlQUDJI/kK79NHboVE0iX7VFhmaa+Cd+gizmKBOW3M\nZSUZz5uurh+7hwQ5tdJeosaVnrGblLbGiikf4PKCEYHXcpsaRHn+9gParS/U\nRewd0nisEseLUm9eyjGupIV/OIvqUCt0HN/cd2OhLFuD16yzWNGNAYRQT9uP\nTW/ElYJ+Z3KmReLiQTeR5OA7tY2EGxpJt5IB7wwDNMPuvE5RT7YIlJS2fcKN\nnFdGbDIbpCliPJosESBcnXNyESVMJrBrZVK0BurmDEGi6ARQb0ydN6Q8zKHM\nNqPAy2jc3wJoLDIIcUYuXHouOWxXjw4uwwmC6l114bbBiVRCMWDidOV6+Iu7\nl/12BtTn12eTxasE7LI3OI6XAmG5T2g4U3YiSIuTD/UkUDDTeDGVEICdoOjB\nisC6\r\n=/HER\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAREwQXOH862kl6VEAx+fLwXt4EYCA25QbYDohhwx7jkAiEA56qa0l7453NhEZ8iisHFoL5zQy1VoJAZtxrL5w7oWG0="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.0.1-beta.5_1555954910415_0.4159166224025186"},"_hasShrinkwrap":false,"deprecated":"DEPRECATED VERSION: use latest version as possible."},"0.0.1-beta.6":{"name":"exredux","version":"0.0.1-beta.6","description":"React-Redux Model Viewer Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","react-redux":">=7.0.0","reflect-metadata":">=0.1.13","typescript":">=3.0.0"},"dependencies":{},"devDependencies":{},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@0.0.1-beta.6","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-1fUTqQFGOyvrDkBvtcKHmB2wb7yo+aNQiCgQE9KmbKG/4soq1+nKc2S1rSb/5tJ3R/T6y1SoyE/YWJg7nUxHtw==","shasum":"8a373ac4804d3c7db67dfea0a4f7982ba78521cf","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.0.1-beta.6.tgz","fileCount":16,"unpackedSize":38915,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcxwarCRA9TVsSAnZWagAAZKAP/2SDQU3HOrOm0L3QvOvm\nHI6PMH8nvakYlVRfUjQ4AWiA3Uuz34Jw8Wv5HPLcofbVZkXCUHsGerhEqXx6\nXwphTRYzJnr6PFcSC8n4/UKf7Qvp0Qe4xri2Ww/+63utxCGYKEAlAVb97AcB\nbM8oT7X9ohavdeskoxeAEuIasYDxHOHk393YXVFPVewhNAa7iZCjhQhGj0Cn\n7e6Wbiz5C8MihTvpp5q5PPF0dw1YGv7xyuGbxQDztDYcBuInPk+2gKPxaDz6\n0R6LfqOifbzrCFpo8K5nmDkzPFE7XgX2JyI50zs7oMHcJ3km9bk32aYHOsq5\nFC9JXm2kC6Wg8k7XcvqRd+CfL44z12v3SgOykUgIVmBOUsn5oA/JvWkNFFKB\nrg59gIxjW5hzLJ4Z/ZrxuLncy5wRbL6I4BLkrzlEs4gQUQpJ/0gMVrOhvplK\nKfVnrW6eWnnnbtkldSj2OL9PdHP5rBXcNnk1/vPTPeoOJeL0tERxOVzIdrLk\nl01Pbf1fmGHHh03lBrQHCx00JPl9fMTgkURkloyJvDqybCcwAg6q+sPxGEYq\nA1oYcF9LvjL0+4cc7Vt/EAoHqCpv/+JPSWzbwNRtGSKA2y4wyPXf5NJURC52\nBPhqbrkK+hvaz/dgy/TMcOPBiry3w4BOZp6vWo4nxptzzIr/scwvSyVkJ4c9\na9kV\r\n=WdaV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPeKbLeZo1xYsIse8nG+9G+JwamdNj4WrRHrPdHqBFvAIgeSOPzVwfXCIwUVNBUp3OAu8ulozlsx/TI7CF/SQd0V0="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.0.1-beta.6_1556547242962_0.5435177626235601"},"_hasShrinkwrap":false,"deprecated":"DEPRECATED VERSION: use latest version as possible."},"0.0.1-beta.7":{"name":"exredux","version":"0.0.1-beta.7","description":"React-Redux Model Viewer Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","react-redux":">=7.0.0","reflect-metadata":">=0.1.13","typescript":">=3.0.0"},"dependencies":{},"devDependencies":{},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@0.0.1-beta.7","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-5/JAId9vyF2wow9IAgKtMOgNMJUbAkh8LQdEXxTKLVKuV0U2kqxlg9uPD+pgGxgNY+TFEDyLgWFdakUeMKLqRA==","shasum":"aa540711f205824516ed3c747d7a72b9f9d94b15","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.0.1-beta.7.tgz","fileCount":17,"unpackedSize":199689,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0IWBCRA9TVsSAnZWagAA7DIP/jc4mdOk5HhSwV4oRueo\nnmIwywBuZ/gPFh/fdf41y4eTHYMkvmfXNOTld+eEmuuDJi1hNxCqbKMaudq1\nRxfvJSj4mUEFf4pklhRMEUysqAvRVL1MGEHEJhZV2fjJaWHMFBjKpbPI86n3\nMXU1ZlrHcZ8xYaqhnKUQOpC6c56wyEgqaLPMoL3yUPBHjmWBHqGVsuplge8Y\nxM0UmWuwKvEoF3SjwWmep4xFLfCEr9EWnn59sWKumMz6OtD7G8zjd6c9KkI2\nG9YhBTkcVXkSb4RzmpcVVxmoVRf+EpswLkNxeDvewoybYdTdLyzaMoyvzupF\nIzNd7niaxruCJVrkD24dtaIiSJc6LEPLFTm94GvaOUKamleuJzqYdUHgn6xf\nue60kf7bSM0yL1ASMiuaTM0K61UmflMNeEqwc3+rHB2zJw4N92tOfton85Rs\nd4bnWf5PKMIVaHmdyfswcH6VUCsN911EEwGu7xeCO+0+1Kzhtg//E0EcDBMH\ns+kBr1bPNILEI17nwqzaOA/ck99/OpEncMnfAcC5wj5etsSmwxUMobM4eJGe\nMUEUQ3PdUMBY1iEBn3FlJnvXvvD2UW2rqIhGEz3I6G9aRcZEL7vhORGiB+cg\n0pJD2pM+q2I2uqWE9+YOzZHqMjgJDP2RSTLfGDTmmBugLBgmraLrhmSN/hFs\nd13A\r\n=PFOp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICsPGIhOeHSOsGO1jhqkSVf1LD9Ut+c6ddR4xqyFd2h7AiEAiffBWljGuJC4/JZ359APbZm5/vM51YgdRGMVMOfTyTg="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.0.1-beta.7_1557169535997_0.9357007584910795"},"_hasShrinkwrap":false,"deprecated":"DEPRECATED VERSION: use latest version as possible."},"0.0.1":{"name":"exredux","version":"0.0.1","description":"React-Redux Model Viewer Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react-redux":">=7.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"^0.18.0","reflect-metadata":"^0.1.13"},"devDependencies":{},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@0.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-xouofg03pD5C/HVy3AGN37s1jQEKekHSd2lRdmerqOADDT1myVhiqBXTzmGiRXqXdsmDSm7tM6c/U0zXgTz96g==","shasum":"6530b7b946a8ef9e98c3e962c05fb90f99900e38","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.0.1.tgz","fileCount":17,"unpackedSize":204965,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0Z91CRA9TVsSAnZWagAApRYP/jO00RrZSwapxn3x2eo1\nNecpoXBgb6FpGFCSGRFmZ0wrSVW9z8oEqV1Cw153YP0ty+kUMHx7rTgLlVo8\nWROr+bh0ruWqMtKY/T4qUmQP5i55iyM2HXxIQw9DhB1sQA7QvMoq6xXxK+Zc\n5ZX4OJVxZT9hJ6ozCjHaQJCaMf5g7NzE14pVXuKLlOOo/RVxemJ/FQCHEpEW\nGskNzoDpGAyeaNC7HsfY2Z4k2XH+OBEkZtgHiRY2R2ybM36fyE4qCcShoruf\n/IBUzolFNIQ3nUIWzMjFXRvIs8kJJGTqEOZUqYo8FD5znGIjGe8ucdFvImC8\n9yKJAh4RCg9znfRIvY6dM33Czl0roNHZgV+JSaGRxOjA0M/2mngsc3r8H7rk\n5B5Om5b9uhqLE3DMdnk6ZyB5GTKzxHNYCEmKwwL+A5uc+27qD8IqRAHKJdxi\nSAjXdH1GBVb2MgtphnAJUJkUy8n8Y/wVoeZrNwv2xQLrSZ4UVek6dtzE/KZq\nGleEROyYRym9+KGI3cHzoaDk4CPSnvMVEFYTVZs9/hB3OxC2a33FrNIbYQd0\n7a/EDqkhIo+u+D3KChuIv3fk7dl5JBxeLdQ/Bf1Jh0amnrGiksANG4fVgY5P\nv1pGsvvtKc1z1O3j595XcuyZsm8mPEPDohfRns/Anxt+0gxhHx1Xe/Fe7ioo\nia0I\r\n=R/ZI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCul6I8xTJYSrjtDwuQqEIn2gRZmYH53aalNEUGYG1D5AIhAPLF2uHF+pIlETD8yT2N4iOYN92VbbF3XZF7idpFPvAK"}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.0.1_1557241717190_0.1187709921389628"},"_hasShrinkwrap":false,"deprecated":"DEPRECATED VERSION: use latest version as possible."},"0.0.2":{"name":"exredux","version":"0.0.2","description":"React-Redux Model Viewer Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react-redux":">=7.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"^0.18.0","reflect-metadata":"^0.1.13","rxjs":"^6.5.2"},"devDependencies":{},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@0.0.2","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-Hmj62onsQM+e4MvKAkGz7g+882eWV60y7eNg9fp/nBpPCiZQ8CRrRFhSzpFmXcP4+v764+z9PWDwKzlvM7KR8g==","shasum":"a4db3aa6434068b257243baa60e741973b9d1b65","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.0.2.tgz","fileCount":18,"unpackedSize":210691,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2eX6CRA9TVsSAnZWagAAs2gP/2I/6zI50xDvOelaAEG/\nIRKOu7fo6dbHl8JoMo62nrXZJc9PLt5Bdt2kxjRngYaW8RjEOeQB/xRVfwwf\n1/yYX1uiYY8VAYrzlEB1w2nHoTuRn2yuM/J0Nlo5Ln15aa1V/QqoS2I99mut\natl4jYYDu1SquGKGmZwwIPkXvdwHyJ+Jo+lkrDZ8hR9BGOZqHoG9IW/QIivm\n5LGDINqBZz6eQlBwdxs6JzyfYgJ7T7MZ1IMStCGwJ6pBDIr7Q5hEGTcM/YDZ\n73DcQXSBJOp2AFX3OCfSUvOAwdwHuwH1SkMfyl9g5WpcaaSP0iHSBnfolHnu\nNXRmQLMZT3WDAgD6o5LZLfi0ocOlUL/vmWGDgM2q15Lhvv8WXeRqJF0gYf4R\nWkr9inUDNER1SO30ZH+p42LcSP79ZRxugOy6P52lnBq5zEhJI6+hvkRNpXoB\noc7kDmnHWrfukeNLFYL5DgHkIsb02sGQlaVNcLJxzW5aFW4I6brNrkeptOmw\nYYLvbeW9B6sQUqSHFyXIkmgJVCbs5QsFSzM6CfSamlWQ9jL4nbcrrlIob0iy\nqDufRNmb80uv2ZsXZZk+WGzKlMyowv9M3j7hIdh0wiLVhD/vlCYwkFl8pDAn\n/L3YQNjXRmD3RzGy0TXl2ZmqCWIq3oLAfBcvY76u1nGc+vWjCxEE1RV3H1da\n0xWn\r\n=/DCV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAUaugu9P+dJc3uLEptLIOSvsFm+hQIeTUhPneTj4pvIAiAUQKfe30Bi/ShKITVkWAd7S2UdTU5qOkHUiOTGFF1RtQ=="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.0.2_1557784057686_0.23205019780730574"},"_hasShrinkwrap":false,"deprecated":"DEPRECATED VERSION: use latest version as possible."},"0.0.3":{"name":"exredux","version":"0.0.3","description":"React-Redux Model Viewer Library","main":"index.js","scripts":{"start":"webpack-dev-server -d --config ./config/webpack.config.dev.js","build":"npm run clean && npm run package && npm run postbuild","clean":"rm -rf ./dist","deploy":"npm run build && cd dist && npm publish","package":"webpack -p --config ./config/webpack.config.prod.js","postbuild":"node ./deploy/postbuild.js","tsc":"tsc -d","tslint":"tslint -c tslint.json 'src/**/*.ts*'","tslint:fix":"tslint -c tslint.json 'src/**/*.ts*' --fix"},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react-redux":">=7.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"^0.18.0","reflect-metadata":"^0.1.13","rxjs":"^6.5.2"},"devDependencies":{"@babel/core":"^7.3.4","@babel/plugin-proposal-class-properties":"^7.3.4","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.4","@babel/plugin-transform-modules-commonjs":"^7.1.0","@babel/preset-env":"^7.3.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/classnames":"^2.2.7","@types/enzyme":"^3.9.0","@types/enzyme-adapter-react-16":"^1.0.5","@types/jest":"^24.0.11","@types/react":"^16.8.7","@types/react-dom":"^16.8.2","@types/react-redux":"^6.0.13","@types/react-router-dom":"^4.3.1","awesome-typescript-loader":"^5.2.1","babel-core":"^6.26.3","babel-jest":"^24.5.0","babel-loader":"^8.0.5","css-loader":"^1.0.0","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.10.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"^2.0.0","html-webpack-plugin":"^3.2.0","jest":"^24.5.0","node-sass":"^4.9.4","react":"^16.8.6","react-dom":"^16.8.6","react-hot-loader":"^4.8.0","react-redux":"^7.0.2","react-router-dom":"4.3.1","redux-devtools-extension":"^2.13.8","sass-loader":"^7.1.0","source-map-loader":"^0.2.4","style-loader":"^0.23.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","tar":">=4.4.2","ts-jest":"^23.10.4","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","tslint-react-a11y":"^1.0.0","typescript":"^3.4.3","uglifyjs-webpack-plugin":"^2.1.2","url-loader":"^1.1.2","webpack":"^4.29.6","webpack-cli":"^3.2.3","webpack-dev-server":"^3.2.1"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","gitHead":"3995deae17b4cf26a6826459ac81884facea5fc7","_id":"exredux@0.0.3","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-Y7K5W0PFSW4qkT7pnZsS/OdBocEAjQVSdgfAuZUDRXx53SfNMRgunXhii9TlmZ8XfPMC4Rsax0ttM4TdC2ZeLw==","shasum":"583276431c5ba61d52cffbaa7d6ee7509f00b432","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.0.3.tgz","fileCount":38,"unpackedSize":138025,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3yjSCRA9TVsSAnZWagAAV/8P/iK7UU8CYyfvdr2Pabxp\nQIAYcqID1Lc5eNfRU2Grv9UF9+yozBJwit6/oRt4YphPdyPGyF2z9AVHJub4\nr4/iQj0L3QstxsV/vhxDiqt6D/dXGgAh3ulaEf766IFE131EbR1IT5bwB6/e\nrSaCVvI1hoAgPUSa86YFK+3fvZM3jQ0OD1tElG9IrkXhrWkYxaOAQoFMT0DH\n0Yk8/FfacbEabN2Fbxjx0CtIIKvU5sgbwXziRV+wEHUtU09S9/dtan02xI92\nh0GPERo+lBzgP4ZjcKubFfnrPr8X5MdS82HAvvs6/oi7pKjtcoN++/c6T1uc\nXAbSStUxKko9S3uFdRUPbNfBVhuWlvYkfnV2oTldO80s9CyTHY+S850J6qU4\naArPkmYSL3/4EJobPrp1HpqLVxr/u9Jom8kHyOpNqyCim4py7pXHaVNpAiML\n4uCgQ0HmW3yDqaZi6CilA2X+0FEyRkV3UrUuoFm++yOR/SX8Se/FwwO5F+bH\nj9oyvMgnsY6GOsrW7EjrejVoNA4YTIQYG4nAtwimU2Nas957SscPQ2793v98\nZwveyt/FTBp1bBhTCEr5M458aGcGkDeCgwo61diYmHPn/d6B1njwjbwEj39I\niPEhJScWP6pasecSF4JtBxHMJiBkt+bofM4Boe+/rzgtYSxSYL/E8cRef18C\n0gj4\r\n=v6aS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/Y1wNWQ5qhYuuZBVDm3qUP4TP64S26TbnBTtakJXoXgIgXiSWCs9gT1kQL5ro0ITfiGuWFivn4gVkpLEewE/BV/E="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.0.3_1558128849995_0.41327614804754087"},"_hasShrinkwrap":false,"deprecated":"DEPRECATED VERSION: use latest version as possible."},"0.0.4":{"name":"exredux","version":"0.0.4","description":"React-Redux Model Store Library","main":"index.js","scripts":{"start":"webpack-dev-server -d --config ./config/webpack.config.dev.js","build":"npm run clean && npm run package && npm run postbuild","clean":"rm -rf ./dist","deploy":"npm run build && cd dist && npm publish","package":"webpack -p --config ./config/webpack.config.prod.js","postbuild":"node ./deploy/postbuild.js","tsc":"tsc -d","tslint":"tslint -c tslint.json 'src/**/*.ts*'","tslint:fix":"tslint -c tslint.json 'src/**/*.ts*' --fix"},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react-redux":">=7.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"^0.18.0","reflect-metadata":"^0.1.13","rxjs":"^6.5.2"},"devDependencies":{"@babel/core":"^7.3.4","@babel/plugin-proposal-class-properties":"^7.3.4","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.4","@babel/plugin-transform-modules-commonjs":"^7.1.0","@babel/preset-env":"^7.3.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/classnames":"^2.2.7","@types/enzyme":"^3.9.0","@types/enzyme-adapter-react-16":"^1.0.5","@types/jest":"^24.0.11","@types/react":"^16.8.7","@types/react-dom":"^16.8.2","@types/react-redux":"^6.0.13","@types/react-router-dom":"^4.3.1","awesome-typescript-loader":"^5.2.1","babel-core":"^6.26.3","babel-jest":"^24.5.0","babel-loader":"^8.0.5","css-loader":"^1.0.0","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.10.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"^2.0.0","html-webpack-plugin":"^3.2.0","jest":"^24.5.0","node-sass":"^4.9.4","react":"^16.8.6","react-dom":"^16.8.6","react-hot-loader":"^4.8.0","react-redux":"^7.0.2","react-router-dom":"4.3.1","redux-devtools-extension":"^2.13.8","sass-loader":"^7.1.0","source-map-loader":"^0.2.4","style-loader":"^0.23.1","stylelint":"^9.10.1","stylelint-webpack-plugin":"^0.10.5","tar":">=4.4.2","ts-jest":"^23.10.4","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","tslint-react-a11y":"^1.0.0","typescript":"^3.4.3","uglifyjs-webpack-plugin":"^2.1.2","url-loader":"^1.1.2","webpack":"^4.29.6","webpack-cli":"^3.2.3","webpack-dev-server":"^3.2.1"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","gitHead":"0bc504892e161d452737d50ffbb43365d68a595d","_id":"exredux@0.0.4","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-lYnziaJ76zrvURJyiOF65m+o3ugjUlhn+vApqxYxp9WzNdQVhsytB64k+keyaa7qL3jpH+VWOeW0aI7WjVsOnA==","shasum":"2de5e76b97baf7f08f4124ed22cc9a116c4bb349","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.0.4.tgz","fileCount":38,"unpackedSize":138013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5Dd6CRA9TVsSAnZWagAAO3AP+QA3BLishoZ32aCTnq5t\niG2BPGrVslz4GvmCXilcsZDHWwUy3g4eEA+fi69hgG+zqSK7y0A6PZvfExDS\nYaUFPkmD4LLaG1avgATirLZvp4yJL2WxhP6YrxLmOm9kSJRaWtoGbxTrJ/qj\n7ETtwrepsq0y0DXhUaALdZ18akQq58ziTjxQJfMZ6UdUbmRsPj0Im7uuO2v8\nQLN72wEHcRKjL5DWjqhR8VrejsHn7VJvNx6uK771/nHscqM+merJVVK+LO0X\nmE3/ZlpMovn7tRLlCz/Tq+6lUAfcyidsNKn4Mzh7wmHorcMRaZm5iFJxUeAZ\nPLhdhC5AUAkzru9NHiuJGwl+IZ+wfoVCo142zKp5rRVSH1TbMs/GtszdJ66i\nPGoGPe4TliMvVQPYscd6HSDbux/O/b0hzSq5Xl1FJXuQKwb0TS4wqNBcODWE\nHURvCyx3VztFagL5j6mrPXMnEQo5usZpb92Abu0S+EClpbOVa1kF+LDK4z6d\nq2g4288fPxEw8NoBxkIUy6QJ/vnkXZ4mbXMF97Tq2xBubU2HUSbuYjBsH7cn\nejQlCb6x/7Q6MyAZnrEmrPtxw2bZLSCSAPrUFcLMwgNY4gcfr95CR80wTbwA\nxCtDaPo3vexXmoOcIzcvCOOXrtLaF3JYIZoay4+70Q13dtya2z3p4FftkrZ8\nU0dC\r\n=YyQM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtJeBzryJvIVzjlMt85g5uhiUxLuLxyTEnR3dnpJMkqQIgcolajrT6jqtVMboJwHxWW/nH8rxQ0fuEc5EuE+XN8UE="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.0.4_1558460281840_0.077736657743108"},"_hasShrinkwrap":false},"0.0.5":{"name":"exredux","version":"0.0.5","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react-redux":">=7.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"^0.18.0","reflect-metadata":"^0.1.13","rxjs":"^6.5.2"},"devDependencies":{},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@0.0.5","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-4h/rSfynnCo4PeJNjCyrP5e/D/xUBnIcJrNk16WstxI3rqFb/CWHVl2qb1g/vp/qvyQImhnFcVPeqxJ0cNseNg==","shasum":"d1e1c4a992370fd49ebee12fb5dee555295dc77a","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.0.5.tgz","fileCount":18,"unpackedSize":211351,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5TI9CRA9TVsSAnZWagAAlNAQAItyfEgKIzWPiQPAq/OF\nFTBxtcaXS0zkHOxJSGlNhoRTvmNVQOSzsnwO0TXHibv+3AqUKlqOMMuTW8YE\nRikFsfeSTQ9WWe6+z4dCFvlounCm39mnrqhuRSOPf7wwz3hnMTAKmdaHsvjs\nG29i28HEUa/BlEKxWcdaibVBVzHcFnYeJBI9ahVlISwQx9TPPyJEUaA7e8WW\nk/jHcYKc0vs4tkg/tJEVi23hk/u2oHAyJ+PIChWuOODwvbPPpRZjw5Tl8O1u\nz1PCnjBUGekIlNmnEJ1WVidDt6M+eYwy5EFEpLqL4HFlOXtzWlLCxKBbg5l2\nzg2J6WCilO+BHzFQr3vX5+tn3hN7XnLsBlg2Gjbmo3viHqs6qhI9au1Z4yx0\n6+GRhBc+PVdmb2A7UYrreqVDEzSPW8ZbyvGVhMBgqvuRwBGL2oGekT9Vq0K/\nJcCN8mpUmp02c/VHhHXbRGD4RnWcFuUQErw9aotnCY7qVIxwiltLc1FBXvu+\ngDNVpB4H7VlVzWkboxhjMhBlX06Ser77wmzvD2Zz/JQ1e1Kl+s1M2Tv8qpiu\np1tM5lGnj0xMjrtd+feeXpVKywU7Gz+gmDVL8HfLXaJMj4iQdP+VkV9AEhGk\nXKoCqz8YlS3Dg+cEmbT/1JJWIg7QxF8RUG7Exp2KqGiEy9sZVPkU598hxTpA\n+YLz\r\n=0pIn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF/QmjrN/r19UFeJbaob6J6haK7qbiMVQCeK+GoGi4M/AiEAqmVbOiyIGvoUPF6I78/jDOtxFw9f7HKnVM55CWKRa4Y="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.0.5_1558524476958_0.06367376044965178"},"_hasShrinkwrap":false},"0.1.0-beta.4":{"name":"exredux","version":"0.1.0-beta.4","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","react-redux":">=7.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"^0.18.0","reflect-metadata":"^0.1.13","rxjs":"^6.5.2"},"devDependencies":{},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","readme":"# EXREDUX\r\n\r\nAre u tired to create a lot of files with constants, actions, dispatchers and reducers?\r\n\r\n**Exredux** is solution to ease your life by abstracting all react/redux logics with understable architecture.\r\n\r\nBased on library **redux-flow-mapper**, this package use decorators to create Models, Actions, Dependencies and much more.\r\n\r\n[![NPM](https://nodei.co/npm/exredux.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/exredux)\r\n\r\n## Install\r\n\r\n```bash\r\n# install ExRedux\r\nnpm i exredux\r\n```\r\n\r\n## Setup tsconfig and babelrc\r\n\r\nInclude support for decorators in the tsconfig.json file:\r\n\r\n```js\r\n{\r\n  \"compilerOptions\": {\r\n    ...\r\n    \"experimentalDecorators\": true,\r\n    \"emitDecoratorMetadata\": true\r\n  }\r\n}\r\n```\r\n\r\nExRedux uses Babel 7.x as base for transpilation/building and should be included the plugins below in the _.babelrc_ file.\r\nConsider these itens as firts in the plugins list and in the same order that appears below:\r\n\r\n```js\r\n\"presets\": [\r\n  \"@babel/react\",\r\n  \"@babel/typescript\",\r\n  [\"@babel/env\", { \"modules\": false }]\r\n],\r\n\"plugins\": [\r\n  \"babel-plugin-transform-typescript-metadata\",\r\n  [\"@babel/plugin-proposal-decorators\", { \"legacy\": true }],\r\n  [\"@babel/plugin-proposal-class-properties\", { \"loose\": true }],\r\n  \"@babel/plugin-proposal-object-rest-spread\"\r\n],\r\n```\r\n\r\n## Concept\r\n\r\nThis package is based in the common MVVM principles to control the activities in the frontend.\r\n\r\nAny action of the flow is build on ExRedux Models and were dispatched thru Connection and Inject to the Containers and Components.\r\n\r\n![Flow Chart Concept][img-flowchart]\r\n\r\n[img-flowchart]: https://github.com/debersonpaula/exredux/raw/master/docs/exredux.png\r\n\r\n## Models\r\n\r\nThe logic starts with the Model.\r\n\r\nThe _Model_ it's a simple class with properties and methods. And values that was set in the properties, acts as initial store for the reducer.\r\n\r\nThe reducer name will be the same as the class name.\r\n\r\n```ts\r\nimport { Model } from 'exredux';\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n}\r\n```\r\n\r\n## Actions\r\n\r\nThe _Action_ it's a method decorator and acts as dispatcher for the decorated method.\r\n\r\nAny method decored will be replaced by dispatcher function that emits an action with the name of method as type and the result of the original function, will be the payload to be stored in the reducer.\r\n\r\n```ts\r\nimport { Model, Action } from 'exredux';\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n\r\n  @Action add() {\r\n    this.counter += 1;\r\n  }\r\n}\r\n```\r\n\r\n## ModelStore\r\n\r\nThe main component of Exredux, the ModelStore act as dependency controller.\r\n\r\nAll models created should be listed in the models property:\r\n\r\n```ts\r\nimport { ModelStore } from 'exredux';\r\nimport { CounterModel } from './counter/CounterModel';\r\nimport { ListDataModel } from './listdata/ListDataModel';\r\n\r\nexport const appModels = new ModelStore({\r\n  devExtension: true, // enables redux-dev-extension for chrome\r\n  models: [CounterModel, ListDataModel]\r\n});\r\n```\r\n\r\nAlso, the variable that stores the ModelStore, must be used in the connection to provide the state and actions to the components.\r\n\r\n## Connection\r\n\r\nThe models will be available on component, thru the Connection decorator, that indicate the ModelStore and the model injection properties:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { CounterModel } from './CounterModel';\r\n\r\nclass ModelProps {\r\n  // Inject the model into property\r\n  @Inject counterModel?: CounterModel;\r\n}\r\n\r\n// make connection between state and component\r\n@Connection({\r\n  modelStore: appModels, // <-- model store location\r\n  props: ModelProps // <-- props with model injection\r\n})\r\nexport class Counter extends React.Component<ModelProps> {\r\n  render() {\r\n    const { counterModel } = this.props;\r\n    return (\r\n      <div>\r\n        Counter = {counterModel.counter}\r\n        <br />\r\n        <button onClick={counterModel.add}>Add</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## BaseHttpModel\r\n\r\nThese Actions are designed to be a Http-Promise based template.\r\nIs used Axios as http requester.\r\n\r\n```ts\r\nimport { Model, Action, BaseHttpModel } from 'exredux';\r\n\r\n// mocking http request\r\nconst httpDoneRequest = (label: string) =>\r\n  new Promise(resolve => {\r\n    setTimeout(() => {\r\n      resolve({ data: label });\r\n    }, 1500);\r\n  });\r\n\r\nconst httpErrorRequest = (errorMessage: string) =>\r\n  new Promise((_, reject) => {\r\n    setTimeout(() => {\r\n      reject({ message: errorMessage });\r\n    }, 1500);\r\n  });\r\n\r\n@Model\r\nexport class HttpHandlerModel extends BaseHttpModel<string> {\r\n  @Action getHttpTest(label: string) {\r\n    this.request(httpDoneRequest(label));\r\n  }\r\n\r\n  @Action getHttpTestError(label: string) {\r\n    this.request(httpErrorRequest(label));\r\n  }\r\n\r\n  // it can be used the internal method resetState\r\n  // to clear all state data for this model\r\n  @Action reset() {\r\n    this.resetState();\r\n  }\r\n}\r\n```\r\n\r\nTo connection in the http based model, use the same decorators _Connection_ and _Inject_ to get the data and states based on promise:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { HttpHandlerModel } from './HttphandlerModel';\r\n\r\nclass ModelProps {\r\n  @Inject httpHandlerModel?: HttpHandlerModel;\r\n}\r\n\r\n@Connection({\r\n  modelStore: appModels,\r\n  props: ModelProps\r\n})\r\nexport class HttpHandler extends React.Component<ModelProps> {\r\n  render() {\r\n    const { httpHandlerModel } = this.props;\r\n    return (\r\n      <div>\r\n        <button onClick={this.handleClick}>Http Done</button>\r\n        <button onClick={this.handleClickError}>Http Fail</button>\r\n        <button onClick={this.handleReset}>ResetState</button>\r\n\r\n        {httpHandlerModel.isCompleted ? <p>From http model => {httpHandlerModel.response.data}</p> : null}\r\n        {httpHandlerModel.isFailed ? <p>Error From http model => {httpHandlerModel.error.message}</p> : null}\r\n        {httpHandlerModel.isLoading ? <p>Loading...</p> : null}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  handleClick = () => {\r\n    this.props.httpHandlerModel.getHttpTest('test inserted from HttpComponent');\r\n  }\r\n\r\n  handleClickError = () => {\r\n    this.props.httpHandlerModel.getHttpTestError('error test inserted from HttpComponent');\r\n  }\r\n\r\n  handleReset = () =>{\r\n    this.props.httpHandlerModel.reset();\r\n  }\r\n}\r\n\r\n```\r\n\r\n## Dependency\r\n\r\nYou inject models in another models thru _Inject_ decorator:\r\n\r\n```tsx\r\nimport { Model, Action, Inject } from 'exredux';\r\nimport { CounterModel } from 'playground/counter/CounterModel';\r\n\r\n@Model\r\nexport class ListModel {\r\n  items: string[] = [];\r\n\r\n  // inject CounterModel inside ListModel\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Action add() {\r\n    this.counterModel.add();\r\n    this.items.push(`Item ${this.items.length} : Counter = ${this.counterModel.counter}`);\r\n  }\r\n}\r\n\r\n```\r\n\r\n## Triggers\r\n\r\nTriggers are interceptors that listen to action completion.\r\n\r\nAnd must be used to trigger events from another actions.\r\n\r\nThis triggers can't be used to listen itself.\r\n\r\n```tsx\r\nimport { Model, Inject, Trigger } from 'exredux';\r\nimport { CounterModel } from 'playground/counter/CounterModel';\r\n\r\n@Model\r\nexport class EventsModel {\r\n  message: string;\r\n\r\n  // dependency from another model\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Trigger(CounterModel, 'add') checkAddCounter() {\r\n    this.message = `Counter updated to = ${this.counterModel.counter}`;\r\n  }\r\n}\r\n```\r\n\r\nThe connection is the same as usual model:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { EventsModel } from './EventsModel';\r\n\r\nclass ModelProps {\r\n  @Inject eventsModel: EventsModel;\r\n}\r\ntype Props = Partial<ModelProps>;\r\n\r\n@Connection({\r\n  modelStore: appModels,\r\n  props: ModelProps\r\n})\r\nexport class Events extends React.Component<Props> {\r\n  render() {\r\n    const { eventsModel } = this.props;\r\n    return (\r\n      <div>\r\n        Example of Trigger\r\n        <br />\r\n        <p>Message = {eventsModel.message}</p>\r\n        <button onClick={eventsModel.checkAddCounter}>Manually get event</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\nAlso, the triggers dispatch action to redux state and does not require _Action_ decorator to do it.\r\n```tsx\r\n@Action // <=== NOT REQUIRED, Trigger already is an Action\r\n@Trigger\r\ndecorated() {\r\n  ...\r\n}\r\n```\r\n\r\n## Availability of methods in component props\r\n\r\nFunctions and property without decorator can be used in the model, but wil be not available to the connection props.\r\nThe reducer dispatcher breaks any method or property and the React component can not see those properties at the component side.\r\n\r\nTo reach the component side, use arrow function.\r\n\r\n```ts\r\n@Model\r\nexport class AvailabilityModel {\r\n  // invisible for components\r\n  makeSomething() {\r\n    ...\r\n  }\r\n\r\n  @Action\r\n  callMakeSomething() {\r\n    this.makeSomething();\r\n  }\r\n\r\n  // use arrow function to be visible at the component side\r\n  makeSomethingFromComponent = () => {\r\n    ...\r\n  }\r\n}\r\n```\r\n\r\n## State change guideline\r\n\r\nMethods without decorate changes the state only in the class and will not be dispatched to the redux store.\r\nBut can be used to calculate or change something until some point, and after that, call a decorated action to dispatch it to the store.\r\n\r\n```ts\r\n@Model\r\nexport class AvailabilityModel {\r\n  // change state internally only\r\n  changeSomething() {\r\n    this.stateData = 'something';\r\n  }\r\n\r\n  // change state internally\r\n  // and dispatch it to the store and components\r\n  @Action\r\n  changeAndDispatch() {\r\n    this.stateData = 'something changed';\r\n  }\r\n}\r\n```\r\n\r\n## Sample\r\n\r\nThe sample project is available in the source https://github.com/debersonpaula/exredux. Just install dependencies and run with `npm start`.\r\n\r\n![Changelog][changelog]\r\n\r\n[changelog]: https://github.com/debersonpaula/exredux/raw/master/CHANGELOG.md\r\n\r\n## License\r\n\r\n[MIT](LICENSE)\r\n\r\n\r\n","readmeFilename":"README.md","_id":"exredux@0.1.0-beta.4","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-rkE36Tesqv0RqZj9o6f5DJZme7t0NnKPejjI1SZ/6PyYUYUVlQU3l+OH615xQxePRgGCXyzISmuLo3W3iSd9Cw==","shasum":"f4c4ef65e93ead6cf8d8f7c0e61120ea3271d57e","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.1.0-beta.4.tgz","fileCount":20,"unpackedSize":287412,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9TvpCRA9TVsSAnZWagAATAAQAIXd4BKVu+0087mvIEEX\nwpQKa+2nLFQmkvyECK6aMV6WtTn16BiTQ43AAHaw0HNRkqjmygrN8HJeo8Cb\n8MZWKMvRAOrv53qVJTDQf35D9COloDiABWsVfPD1GVtoBjdmkz+2nJSYi8g1\n+NSC36hMgzld6MkvG6ZOWH+k5yAXwv1bMKERGl36R/ZGprGBJqJpobtXAttq\nrMRntzpHWcg1F4GoIJdwOHeANLivIJmFszMiGp1CPi2xkxQeP3yxI/rYvQbb\nxFol7JD+RzRW5jDpuCmOsMf+pdvHryF8MTQLnzZlkNKyiJynywcSTcUVGGbs\nWcf0km/9l3MDWGx/os4RYDX78Th3RiB8QmowcCfXKB1JJ0nmulMW7lr8Mxa2\nvA2671TeCoZkTMaqev0VEhBQyEluyttKzkAmJzPGSxjzPiEIZCxCMSQIYVJ7\n91iWViR3HEOZsS/9jhtwFlx+SuWnzkB/4VQixF5IMZ9PAWoMSkzTAFe0ones\njaaFe033+67nIOWf8vR9zltPROOR0l+qtsTyUzzTULc/mmnIKiK3mK9vnQgh\nYLnqtct83nCCbqQyZdvHbWOl0l7mVahlnWiHOpe7z30aMltkQjGVC4GOpH6r\nLFgFocGC9bKmh+Syo2virfBwbDVgtwoJTj3GR57vjSKX/CXdWN3kPXOta9Mn\nx/zp\r\n=DQPU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSCGXmsZP09vXWdJqJ133Doyt2Oh4XSaHCw0OrfJVq3wIhAJpSpr1ovf4XcuAwaUmkne5imC3zWqDr9VElRLT1+AoB"}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.1.0-beta.4_1559575528735_0.3746718826398474"},"_hasShrinkwrap":false},"0.1.0-beta.5":{"name":"exredux","version":"0.1.0-beta.5","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"^0.18.0","rxjs":"^6.5.2"},"devDependencies":{"@babel/core":"^7.3.4","@babel/plugin-proposal-class-properties":"^7.3.4","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.4","@babel/plugin-transform-modules-commonjs":"^7.1.0","@babel/preset-env":"^7.3.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/classnames":"^2.2.7","@types/enzyme":"^3.9.0","@types/enzyme-adapter-react-16":"^1.0.5","@types/jest":"^24.0.11","@types/react":"^16.8.7","@types/react-dom":"^16.8.2","@types/react-redux":"^6.0.13","@types/react-router-dom":"^4.3.1","awesome-typescript-loader":"^5.2.1","babel-core":"^6.26.3","babel-jest":"^24.5.0","babel-loader":"^8.0.5","babel-plugin-transform-typescript-metadata":"^0.2.2","css-loader":"^1.0.0","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.10.0","eslint":"^5.16.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"^2.0.0","html-webpack-plugin":"^3.2.0","jest":"^24.5.0","react":"^16.8.6","react-dom":"^16.8.6","react-redux":"^7.0.2","react-router-dom":"4.3.1","redux-devtools-extension":"^2.13.8","reflect-metadata":"^0.1.13","source-map-loader":"^0.2.4","ts-jest":"^23.10.4","ts-loader":"^6.0.2","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","tslint-react-a11y":"^1.0.0","typescript":"^3.4.3","uglifyjs-webpack-plugin":"^2.1.2","url-loader":"^1.1.2","webpack":"^4.29.6","webpack-cli":"^3.2.3","webpack-dev-server":"^3.2.1"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","readme":"# EXREDUX\r\n\r\nAre u tired to create a lot of files with constants, actions, dispatchers and reducers?\r\n\r\n**Exredux** is solution to ease your life by abstracting all react/redux logics with understable architecture.\r\n\r\nBased on library **redux-flow-mapper**, this package use decorators to create Models, Actions, Dependencies and much more.\r\n\r\n[![NPM](https://nodei.co/npm/exredux.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/exredux)\r\n\r\n## Install\r\n\r\n```bash\r\n# install ExRedux\r\nnpm i exredux\r\n```\r\n\r\n## Setup tsconfig and babelrc\r\n\r\nInclude support for decorators in the tsconfig.json file:\r\n\r\n```js\r\n{\r\n  \"compilerOptions\": {\r\n    ...\r\n    \"experimentalDecorators\": true,\r\n    \"emitDecoratorMetadata\": true\r\n  }\r\n}\r\n```\r\n\r\nExRedux uses Babel 7.x as base for transpilation/building and should be included the plugins below in the _.babelrc_ file.\r\nConsider these itens as firts in the plugins list and in the same order that appears below:\r\n\r\n```js\r\n\"presets\": [\r\n  \"@babel/react\",\r\n  \"@babel/typescript\",\r\n  [\"@babel/env\", { \"modules\": false }]\r\n],\r\n\"plugins\": [\r\n  \"babel-plugin-transform-typescript-metadata\",\r\n  [\"@babel/plugin-proposal-decorators\", { \"legacy\": true }],\r\n  [\"@babel/plugin-proposal-class-properties\", { \"loose\": true }],\r\n  \"@babel/plugin-proposal-object-rest-spread\"\r\n],\r\n```\r\n\r\n## Concept\r\n\r\nThis package is based in the common MVVM principles to control the activities in the frontend.\r\n\r\nAny action of the flow is build on ExRedux Models and were dispatched thru Connection and Inject to the Containers and Components.\r\n\r\n![Flow Chart Concept][img-flowchart]\r\n\r\n[img-flowchart]: https://github.com/debersonpaula/exredux/raw/master/docs/exredux.png\r\n\r\n## Models\r\n\r\nThe logic starts with the Model.\r\n\r\nThe _Model_ it's a simple class with properties and methods. And values that was set in the properties, acts as initial store for the reducer.\r\n\r\nThe reducer name will be the same as the class name.\r\n\r\n```ts\r\nimport { Model } from 'exredux';\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n}\r\n```\r\n\r\n## Actions\r\n\r\nThe _Action_ it's a method decorator and acts as dispatcher for the decorated method.\r\n\r\nAny method decored will be replaced by dispatcher function that emits an action with the name of method as type and the result of the original function, will be the payload to be stored in the reducer.\r\n\r\n```ts\r\nimport { Model, Action } from 'exredux';\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n\r\n  @Action add() {\r\n    this.counter += 1;\r\n  }\r\n}\r\n```\r\n\r\n## ModelStore\r\n\r\nThe main component of Exredux, the ModelStore act as dependency controller.\r\n\r\nAll models created should be listed in the models property:\r\n\r\n```ts\r\nimport { ModelStore } from 'exredux';\r\nimport { CounterModel } from './counter/CounterModel';\r\nimport { ListDataModel } from './listdata/ListDataModel';\r\n\r\nexport const appModels = new ModelStore({\r\n  devExtension: true, // enables redux-dev-extension for chrome\r\n  models: [CounterModel, ListDataModel]\r\n});\r\n```\r\n\r\nAlso, the variable that stores the ModelStore, must be used in the connection to provide the state and actions to the components.\r\n\r\n## Connection\r\n\r\nThe models will be available on component, thru the Connection decorator, that indicate the ModelStore and the model injection properties:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { CounterModel } from './CounterModel';\r\n\r\nclass ModelProps {\r\n  // Inject the model into property\r\n  @Inject counterModel?: CounterModel;\r\n}\r\n\r\n// make connection between state and component\r\n@Connection({\r\n  modelStore: appModels, // <-- model store location\r\n  props: ModelProps // <-- props with model injection\r\n})\r\nexport class Counter extends React.Component<ModelProps> {\r\n  render() {\r\n    const { counterModel } = this.props;\r\n    return (\r\n      <div>\r\n        Counter = {counterModel.counter}\r\n        <br />\r\n        <button onClick={counterModel.add}>Add</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## BaseHttpModel\r\n\r\nThese Actions are designed to be a Http-Promise based template.\r\nIs used Axios as http requester.\r\n\r\n```ts\r\nimport { Model, Action, BaseHttpModel } from 'exredux';\r\n\r\n// mocking http request\r\nconst httpDoneRequest = (label: string) =>\r\n  new Promise(resolve => {\r\n    setTimeout(() => {\r\n      resolve({ data: label });\r\n    }, 1500);\r\n  });\r\n\r\nconst httpErrorRequest = (errorMessage: string) =>\r\n  new Promise((_, reject) => {\r\n    setTimeout(() => {\r\n      reject({ message: errorMessage });\r\n    }, 1500);\r\n  });\r\n\r\n@Model\r\nexport class HttpHandlerModel extends BaseHttpModel<string> {\r\n  @Action getHttpTest(label: string) {\r\n    this.request(httpDoneRequest(label));\r\n  }\r\n\r\n  @Action getHttpTestError(label: string) {\r\n    this.request(httpErrorRequest(label));\r\n  }\r\n\r\n  // it can be used the internal method resetState\r\n  // to clear all state data for this model\r\n  @Action reset() {\r\n    this.resetState();\r\n  }\r\n}\r\n```\r\n\r\nTo connection in the http based model, use the same decorators _Connection_ and _Inject_ to get the data and states based on promise:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { HttpHandlerModel } from './HttphandlerModel';\r\n\r\nclass ModelProps {\r\n  @Inject httpHandlerModel?: HttpHandlerModel;\r\n}\r\n\r\n@Connection({\r\n  modelStore: appModels,\r\n  props: ModelProps\r\n})\r\nexport class HttpHandler extends React.Component<ModelProps> {\r\n  render() {\r\n    const { httpHandlerModel } = this.props;\r\n    return (\r\n      <div>\r\n        <button onClick={this.handleClick}>Http Done</button>\r\n        <button onClick={this.handleClickError}>Http Fail</button>\r\n        <button onClick={this.handleReset}>ResetState</button>\r\n\r\n        {httpHandlerModel.isCompleted ? <p>From http model => {httpHandlerModel.response.data}</p> : null}\r\n        {httpHandlerModel.isFailed ? <p>Error From http model => {httpHandlerModel.error.message}</p> : null}\r\n        {httpHandlerModel.isLoading ? <p>Loading...</p> : null}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  handleClick = () => {\r\n    this.props.httpHandlerModel.getHttpTest('test inserted from HttpComponent');\r\n  }\r\n\r\n  handleClickError = () => {\r\n    this.props.httpHandlerModel.getHttpTestError('error test inserted from HttpComponent');\r\n  }\r\n\r\n  handleReset = () =>{\r\n    this.props.httpHandlerModel.reset();\r\n  }\r\n}\r\n\r\n```\r\n\r\n## Dependency\r\n\r\nYou inject models in another models thru _Inject_ decorator:\r\n\r\n```tsx\r\nimport { Model, Action, Inject } from 'exredux';\r\nimport { CounterModel } from 'playground/counter/CounterModel';\r\n\r\n@Model\r\nexport class ListModel {\r\n  items: string[] = [];\r\n\r\n  // inject CounterModel inside ListModel\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Action add() {\r\n    this.counterModel.add();\r\n    this.items.push(`Item ${this.items.length} : Counter = ${this.counterModel.counter}`);\r\n  }\r\n}\r\n\r\n```\r\n\r\n## Triggers\r\n\r\nTriggers are interceptors that listen to action completion.\r\n\r\nAnd must be used to trigger events from another actions.\r\n\r\nThis triggers can't be used to listen itself.\r\n\r\n```tsx\r\nimport { Model, Inject, Trigger } from 'exredux';\r\nimport { CounterModel } from 'playground/counter/CounterModel';\r\n\r\n@Model\r\nexport class EventsModel {\r\n  message: string;\r\n\r\n  // dependency from another model\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Trigger(CounterModel, 'add') checkAddCounter() {\r\n    this.message = `Counter updated to = ${this.counterModel.counter}`;\r\n  }\r\n}\r\n```\r\n\r\nThe connection is the same as usual model:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { EventsModel } from './EventsModel';\r\n\r\nclass ModelProps {\r\n  @Inject eventsModel: EventsModel;\r\n}\r\ntype Props = Partial<ModelProps>;\r\n\r\n@Connection({\r\n  modelStore: appModels,\r\n  props: ModelProps\r\n})\r\nexport class Events extends React.Component<Props> {\r\n  render() {\r\n    const { eventsModel } = this.props;\r\n    return (\r\n      <div>\r\n        Example of Trigger\r\n        <br />\r\n        <p>Message = {eventsModel.message}</p>\r\n        <button onClick={eventsModel.checkAddCounter}>Manually get event</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\nAlso, the triggers dispatch action to redux state and does not require _Action_ decorator to do it.\r\n```tsx\r\n@Action // <=== NOT REQUIRED, Trigger already is an Action\r\n@Trigger\r\ndecorated() {\r\n  ...\r\n}\r\n```\r\n\r\n## Availability of methods in component props\r\n\r\nFunctions and property without decorator can be used in the model, but wil be not available to the connection props.\r\nThe reducer dispatcher breaks any method or property and the React component can not see those properties at the component side.\r\n\r\nTo reach the component side, use arrow function.\r\n\r\n```ts\r\n@Model\r\nexport class AvailabilityModel {\r\n  // invisible for components\r\n  makeSomething() {\r\n    ...\r\n  }\r\n\r\n  @Action\r\n  callMakeSomething() {\r\n    this.makeSomething();\r\n  }\r\n\r\n  // use arrow function to be visible at the component side\r\n  makeSomethingFromComponent = () => {\r\n    ...\r\n  }\r\n}\r\n```\r\n\r\n## State change guideline\r\n\r\nMethods without decorate changes the state only in the class and will not be dispatched to the redux store.\r\nBut can be used to calculate or change something until some point, and after that, call a decorated action to dispatch it to the store.\r\n\r\n```ts\r\n@Model\r\nexport class AvailabilityModel {\r\n  // change state internally only\r\n  changeSomething() {\r\n    this.stateData = 'something';\r\n  }\r\n\r\n  // change state internally\r\n  // and dispatch it to the store and components\r\n  @Action\r\n  changeAndDispatch() {\r\n    this.stateData = 'something changed';\r\n  }\r\n}\r\n```\r\n\r\n## Sample\r\n\r\nThe sample project is available in the source https://github.com/debersonpaula/exredux. Just install dependencies and run with `npm start`.\r\n\r\n![Changelog][changelog]\r\n\r\n[changelog]: https://github.com/debersonpaula/exredux/raw/master/CHANGELOG.md\r\n\r\n## License\r\n\r\n[MIT](LICENSE)\r\n\r\n\r\n","readmeFilename":"README.md","_id":"exredux@0.1.0-beta.5","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-jfzXl3D/QVclEO3xFr0U9naJddicyKhR55Ie9WfkNj/+EfuoQZMGvWUpetMltW/s/AU7i/6wnUScEZEi8uPpbw==","shasum":"46267a823303b25dce2e5c5cf701252bab5b30b6","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.1.0-beta.5.tgz","fileCount":20,"unpackedSize":415904,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9lyACRA9TVsSAnZWagAAOpgQAJHuq6EefQVupiyPOt9m\nKAFfdhI7fd4ElZgBVc0DBWC8dcvuzd4K/DwhNAnJQUdmBjQdwvdzi/CRzHEv\nfNU1qwAWB3Ww4xVIi/oZqBeSnWZDGfWuRuxCX+1B8V4sJKdNL696E+HRBD72\nWNXm6lF3jfXH2hrCgfmHYg6lc433+yHmRo7cJdh0BR+B1I2dLYZLoFUvoTyR\nkYKbkMUjNVQXbrJB/8ppqLM0yzsfP47bYjdq+R1PXNC5EakXck8Gtm3FNHlW\nUWk740sijvUBWyuj9KXcsw0PEZnDvue3Vzkj/1UPaHK8dN9HhnCIqNfS4b+9\ngwKOywxusQQykVtZLiWMdSb2elGF/pin8Xg4R+1vKSRa9WBOnCVqVjTiM7Fo\n609cnZqzWYH0evQGRMfBnmNoPNSez7ZvgV1mKuZd0C6AIvZaW9otW+lKNzVG\nMB+bIoQ0ECWIFj0FO9oS7K134rzHet0+i9AMpGA5QTvDWieOcEnJsQ+Opn2O\nBDWPcY/3+vdf/eem2Vnvoa3rdQrex6ZYrXhLk2R2OP9kS0QS24MTEXNGaWVO\nGITwyw909Vpy+HhXEsypPXvnC1wNTEBV2ZLlUTsFzJXdrwJutFYE5003HfdI\nkqdjPujujf/MG7LGCoghsXw5RO/U0CVQdT6Sb3JJVFDZYvrwHQ6DYUtnuaN7\n9kuo\r\n=Rjb7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICWnp21RbQCqyahiUIdUbHtq7WyNi8w6VG2oOiEFng9NAiEA9Azzfi23SBxrLR0oHQ/Ow5+FgVmdhUonlgIy+oClC/k="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.1.0-beta.5_1559649408188_0.49194939041329966"},"_hasShrinkwrap":false},"0.1.0-beta.6":{"name":"exredux","version":"0.1.0-beta.6","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":">=0.19.0","rxjs":"^6.5.2"},"devDependencies":{"@babel/core":"^7.3.4","@babel/plugin-proposal-class-properties":"^7.3.4","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.4","@babel/plugin-transform-modules-commonjs":"^7.1.0","@babel/preset-env":"^7.3.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/classnames":"^2.2.7","@types/enzyme":"^3.9.0","@types/enzyme-adapter-react-16":"^1.0.5","@types/jest":"^24.0.11","@types/react":"^16.8.7","@types/react-dom":"^16.8.2","@types/react-redux":"^6.0.13","@types/react-router-dom":"^4.3.1","awesome-typescript-loader":"^5.2.1","babel-core":"^6.26.3","babel-jest":"^24.5.0","babel-loader":"^8.0.5","babel-plugin-transform-typescript-metadata":"^0.2.2","css-loader":"^1.0.0","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.10.0","eslint":"^5.16.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"^2.0.0","html-webpack-plugin":"^3.2.0","jest":"^24.5.0","react":"^16.8.6","react-dom":"^16.8.6","react-redux":"^7.0.2","react-router-dom":"4.3.1","redux-devtools-extension":"^2.13.8","reflect-metadata":"^0.1.13","source-map-loader":"^0.2.4","ts-jest":"^23.10.4","ts-loader":"^6.0.2","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","tslint-react-a11y":"^1.0.0","typescript":"^3.4.3","uglifyjs-webpack-plugin":"^2.1.2","url-loader":"^1.1.2","webpack":"^4.29.6","webpack-cli":"^3.2.3","webpack-dev-server":"^3.2.1"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","readme":"# EXREDUX\r\n\r\nAre u tired to create a lot of files with constants, actions, dispatchers and reducers?\r\n\r\n**Exredux** is solution to ease your life by abstracting all react/redux logics with understable architecture.\r\n\r\nBased on library **redux-flow-mapper**, this package use decorators to create Models, Actions, Dependencies and much more.\r\n\r\n[![NPM](https://nodei.co/npm/exredux.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/exredux)\r\n\r\n## Install\r\n\r\n```bash\r\n# install ExRedux\r\nnpm i exredux\r\n```\r\n\r\n## Setup tsconfig and babelrc\r\n\r\nInclude support for decorators in the tsconfig.json file:\r\n\r\n```js\r\n{\r\n  \"compilerOptions\": {\r\n    ...\r\n    \"experimentalDecorators\": true,\r\n    \"emitDecoratorMetadata\": true\r\n  }\r\n}\r\n```\r\n\r\nExRedux uses Babel 7.x as base for transpilation/building and should be included the plugins below in the _.babelrc_ file.\r\nConsider these itens as firts in the plugins list and in the same order that appears below:\r\n\r\n```js\r\n\"presets\": [\r\n  \"@babel/react\",\r\n  \"@babel/typescript\",\r\n  [\"@babel/env\", { \"modules\": false }]\r\n],\r\n\"plugins\": [\r\n  \"babel-plugin-transform-typescript-metadata\",\r\n  [\"@babel/plugin-proposal-decorators\", { \"legacy\": true }],\r\n  [\"@babel/plugin-proposal-class-properties\", { \"loose\": true }],\r\n  \"@babel/plugin-proposal-object-rest-spread\"\r\n],\r\n```\r\n\r\n## Concept\r\n\r\nThis package is based in the common MVVM principles to control the activities in the frontend.\r\n\r\nAny action of the flow is build on ExRedux Models and were dispatched thru Connection and Inject to the Containers and Components.\r\n\r\n![Flow Chart Concept][img-flowchart]\r\n\r\n[img-flowchart]: https://github.com/debersonpaula/exredux/raw/master/docs/exredux.png\r\n\r\n## Models\r\n\r\nThe logic starts with the Model.\r\n\r\nThe _Model_ it's a simple class with properties and methods. And values that was set in the properties, acts as initial store for the reducer.\r\n\r\nThe reducer name will be the same as the class name.\r\n\r\n```ts\r\nimport { Model } from 'exredux';\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n}\r\n```\r\n\r\n## Actions\r\n\r\nThe _Action_ it's a method decorator and acts as dispatcher for the decorated method.\r\n\r\nAny method decored will be replaced by dispatcher function that emits an action with the name of method as type and the result of the original function, will be the payload to be stored in the reducer.\r\n\r\n```ts\r\nimport { Model, Action } from 'exredux';\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n\r\n  @Action add() {\r\n    this.counter += 1;\r\n  }\r\n}\r\n```\r\n\r\n## ModelStore\r\n\r\nThe main component of Exredux, the ModelStore act as dependency controller.\r\n\r\nAll models created should be listed in the models property:\r\n\r\n```ts\r\nimport { ModelStore } from 'exredux';\r\nimport { CounterModel } from './counter/CounterModel';\r\nimport { ListDataModel } from './listdata/ListDataModel';\r\n\r\nexport const appModels = new ModelStore({\r\n  devExtension: true, // enables redux-dev-extension for chrome\r\n  models: [CounterModel, ListDataModel]\r\n});\r\n```\r\n\r\nAlso, the variable that stores the ModelStore, must be used in the connection to provide the state and actions to the components.\r\n\r\n## Connection\r\n\r\nThe models will be available on component, thru the Connection decorator, that indicate the ModelStore and the model injection properties:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { CounterModel } from './CounterModel';\r\n\r\nclass ModelProps {\r\n  // Inject the model into property\r\n  @Inject counterModel?: CounterModel;\r\n}\r\n\r\n// make connection between state and component\r\n@Connection({\r\n  modelStore: appModels, // <-- model store location\r\n  props: ModelProps // <-- props with model injection\r\n})\r\nexport class Counter extends React.Component<ModelProps> {\r\n  render() {\r\n    const { counterModel } = this.props;\r\n    return (\r\n      <div>\r\n        Counter = {counterModel.counter}\r\n        <br />\r\n        <button onClick={counterModel.add}>Add</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## BaseHttpModel\r\n\r\nThese Actions are designed to be a Http-Promise based template.\r\nIs used Axios as http requester.\r\n\r\n```ts\r\nimport { Model, Action, BaseHttpModel } from 'exredux';\r\n\r\n// mocking http request\r\nconst httpDoneRequest = (label: string) =>\r\n  new Promise(resolve => {\r\n    setTimeout(() => {\r\n      resolve({ data: label });\r\n    }, 1500);\r\n  });\r\n\r\nconst httpErrorRequest = (errorMessage: string) =>\r\n  new Promise((_, reject) => {\r\n    setTimeout(() => {\r\n      reject({ message: errorMessage });\r\n    }, 1500);\r\n  });\r\n\r\n@Model\r\nexport class HttpHandlerModel extends BaseHttpModel<string> {\r\n  @Action getHttpTest(label: string) {\r\n    this.request(httpDoneRequest(label));\r\n  }\r\n\r\n  @Action getHttpTestError(label: string) {\r\n    this.request(httpErrorRequest(label));\r\n  }\r\n\r\n  // it can be used the internal method resetState\r\n  // to clear all state data for this model\r\n  @Action reset() {\r\n    this.resetState();\r\n  }\r\n}\r\n```\r\n\r\nTo connection in the http based model, use the same decorators _Connection_ and _Inject_ to get the data and states based on promise:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { HttpHandlerModel } from './HttphandlerModel';\r\n\r\nclass ModelProps {\r\n  @Inject httpHandlerModel?: HttpHandlerModel;\r\n}\r\n\r\n@Connection({\r\n  modelStore: appModels,\r\n  props: ModelProps\r\n})\r\nexport class HttpHandler extends React.Component<ModelProps> {\r\n  render() {\r\n    const { httpHandlerModel } = this.props;\r\n    return (\r\n      <div>\r\n        <button onClick={this.handleClick}>Http Done</button>\r\n        <button onClick={this.handleClickError}>Http Fail</button>\r\n        <button onClick={this.handleReset}>ResetState</button>\r\n\r\n        {httpHandlerModel.isCompleted ? <p>From http model => {httpHandlerModel.response.data}</p> : null}\r\n        {httpHandlerModel.isFailed ? <p>Error From http model => {httpHandlerModel.error.message}</p> : null}\r\n        {httpHandlerModel.isLoading ? <p>Loading...</p> : null}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  handleClick = () => {\r\n    this.props.httpHandlerModel.getHttpTest('test inserted from HttpComponent');\r\n  }\r\n\r\n  handleClickError = () => {\r\n    this.props.httpHandlerModel.getHttpTestError('error test inserted from HttpComponent');\r\n  }\r\n\r\n  handleReset = () =>{\r\n    this.props.httpHandlerModel.reset();\r\n  }\r\n}\r\n\r\n```\r\n\r\n## Dependency\r\n\r\nYou inject models in another models thru _Inject_ decorator:\r\n\r\n```tsx\r\nimport { Model, Action, Inject } from 'exredux';\r\nimport { CounterModel } from 'playground/counter/CounterModel';\r\n\r\n@Model\r\nexport class ListModel {\r\n  items: string[] = [];\r\n\r\n  // inject CounterModel inside ListModel\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Action add() {\r\n    this.counterModel.add();\r\n    this.items.push(`Item ${this.items.length} : Counter = ${this.counterModel.counter}`);\r\n  }\r\n}\r\n\r\n```\r\n\r\n## Triggers\r\n\r\nTriggers are interceptors that listen to action completion.\r\n\r\nAnd must be used to trigger events from another actions.\r\n\r\nThis triggers can't be used to listen itself.\r\n\r\n```tsx\r\nimport { Model, Inject, Trigger } from 'exredux';\r\nimport { CounterModel } from 'playground/counter/CounterModel';\r\n\r\n@Model\r\nexport class EventsModel {\r\n  message: string;\r\n\r\n  // dependency from another model\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Trigger(CounterModel, 'add') checkAddCounter() {\r\n    this.message = `Counter updated to = ${this.counterModel.counter}`;\r\n  }\r\n}\r\n```\r\n\r\nThe connection is the same as usual model:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { EventsModel } from './EventsModel';\r\n\r\nclass ModelProps {\r\n  @Inject eventsModel: EventsModel;\r\n}\r\ntype Props = Partial<ModelProps>;\r\n\r\n@Connection({\r\n  modelStore: appModels,\r\n  props: ModelProps\r\n})\r\nexport class Events extends React.Component<Props> {\r\n  render() {\r\n    const { eventsModel } = this.props;\r\n    return (\r\n      <div>\r\n        Example of Trigger\r\n        <br />\r\n        <p>Message = {eventsModel.message}</p>\r\n        <button onClick={eventsModel.checkAddCounter}>Manually get event</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\nAlso, the triggers dispatch action to redux state and does not require _Action_ decorator to do it.\r\n```tsx\r\n@Action // <=== NOT REQUIRED, Trigger already is an Action\r\n@Trigger\r\ndecorated() {\r\n  ...\r\n}\r\n```\r\n\r\n## Availability of methods in component props\r\n\r\nFunctions and property without decorator can be used in the model, but wil be not available to the connection props.\r\nThe reducer dispatcher breaks any method or property and the React component can not see those properties at the component side.\r\n\r\nTo reach the component side, use arrow function.\r\n\r\n```ts\r\n@Model\r\nexport class AvailabilityModel {\r\n  // invisible for components\r\n  makeSomething() {\r\n    ...\r\n  }\r\n\r\n  @Action\r\n  callMakeSomething() {\r\n    this.makeSomething();\r\n  }\r\n\r\n  // use arrow function to be visible at the component side\r\n  makeSomethingFromComponent = () => {\r\n    ...\r\n  }\r\n}\r\n```\r\n\r\n## State change guideline\r\n\r\nMethods without decorate changes the state only in the class and will not be dispatched to the redux store.\r\nBut can be used to calculate or change something until some point, and after that, call a decorated action to dispatch it to the store.\r\n\r\n```ts\r\n@Model\r\nexport class AvailabilityModel {\r\n  // change state internally only\r\n  changeSomething() {\r\n    this.stateData = 'something';\r\n  }\r\n\r\n  // change state internally\r\n  // and dispatch it to the store and components\r\n  @Action\r\n  changeAndDispatch() {\r\n    this.stateData = 'something changed';\r\n  }\r\n}\r\n```\r\n\r\n## Sample\r\n\r\nThe sample project is available in the source https://github.com/debersonpaula/exredux. Just install dependencies and run with `npm start`.\r\n\r\n![Changelog][changelog]\r\n\r\n[changelog]: https://github.com/debersonpaula/exredux/raw/master/CHANGELOG.md\r\n\r\n## License\r\n\r\n[MIT](LICENSE)\r\n\r\n\r\n","readmeFilename":"README.md","_id":"exredux@0.1.0-beta.6","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-p047SuMpk0xQqkJOjINoEOEWxpAJvgxqSqZ06S5yQ92Iy4kSFpAgPJQxNhKEsf8sMhcah4wtXihsTX/RFPqrPQ==","shasum":"f815d5646a46ffdad1e4e25a51eb22145c5b6274","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.1.0-beta.6.tgz","fileCount":20,"unpackedSize":423463,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9l2/CRA9TVsSAnZWagAAj2wP/jygnLykupLogSMbTYE9\nOGTM6Gcj2hGCTDAPcdsZuv8/YwW/+Sreoi7OwMhaKcSv92HmTxZKjPOWbzhQ\nKJJoshBTvgIbmRMZT9U76eiLVWzBPHlWEywM+RBDgmL5g1xgDusRGFh56KD1\nDMCrHi2D01bba1+veyJspNHeF9dLmLiidkbrh7oc9dUVWTROaZ+HnxhTbtHs\nxBwE/CZpLUu0EpYxxKf1Bsf3se15a6j3VJMjYQjk3v8ltY3WY+W/uZoxtxWG\njbZ86fDTsXN0BlUADrx/XoG8UqsN2UnQo2hMO+pVhyF1llRPzk5HXjLYZv3M\n72gsHLj9k/5oDOq4CdgEIO4j5fSbgBEJXPHhC3/52dEiKFUxoTegrIjpSf8v\nq51MnHdnhglBrt2aIG4guNDANGgK8/uJawD7MUz7RfyjQLl/vzhX7FBiECUe\nu/pgliKfxlnbXKKkFsR6PqC5GQGxL3o+gPSa3OIIW5B0LdVsVX50YFW2M5Rz\n/iTENhcccEL+lfDW77iJ601AL6TU0Cp7alIzD7iNzgxgUs9ry4wMLsuYUlp0\nZiEAvl7NW1z6dsxQrqUFLjNmDIji3UyzK2C1m8E9uznqegNbP9ELrJuvS7Yw\nJhKcsi3xdsXIs568mqrn3bmPML5o0YGZjP3e2eotdkixlOl8z1aFRgkuJbYb\n8xhx\r\n=ht+w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+eo8Z1TjIWlEFNhAln41/ifCKGd2lhLZkfhR7M7hMLQIgEO2XGJn88mpfUWYsbilOZftQIenqGktp8ZttISUl5rM="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.1.0-beta.6_1559649727421_0.4548402456123197"},"_hasShrinkwrap":false},"0.1.0-beta.7":{"name":"exredux","version":"0.1.0-beta.7","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":">=0.19.0"},"devDependencies":{"@babel/core":"^7.3.4","@babel/plugin-proposal-class-properties":"^7.3.4","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.4","@babel/plugin-transform-modules-commonjs":"^7.1.0","@babel/preset-env":"^7.3.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/react":"^16.8.7","@types/react-dom":"^16.8.2","@types/react-redux":"^6.0.13","@types/react-router-dom":"^4.3.1","acorn":"^6.1.1","awesome-typescript-loader":"^5.2.1","babel-core":"^6.26.3","babel-loader":"^8.0.5","babel-plugin-transform-typescript-metadata":"^0.2.2","eslint":"^5.16.0","html-webpack-plugin":"^3.2.0","react":"^16.8.6","react-dom":"^16.8.6","react-redux":"^7.0.2","react-router-dom":"4.3.1","redux-devtools-extension":"^2.13.8","reflect-metadata":"^0.1.13","rxjs":"^6.5.2","source-map-loader":"^0.2.4","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","tslint-react-a11y":"^1.0.0","typescript":"^3.4.3","uglifyjs-webpack-plugin":"^2.1.2","url-loader":"^1.1.2","webpack":"^4.29.6","webpack-cli":"^3.2.3","webpack-dev-server":"^3.2.1"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","readme":"# EXREDUX\r\n\r\nAre u tired to create a lot of files with constants, actions, dispatchers and reducers?\r\n\r\n**Exredux** is solution to ease your life by abstracting all react/redux logics with understable architecture.\r\n\r\nBased on library **redux-flow-mapper**, this package use decorators to create Models, Actions, Dependencies and much more.\r\n\r\n[![NPM](https://nodei.co/npm/exredux.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/exredux)\r\n\r\n## Install\r\n\r\n```bash\r\n# install ExRedux\r\nnpm i exredux\r\n```\r\n\r\n## Setup tsconfig and babelrc\r\n\r\nInclude support for decorators in the tsconfig.json file:\r\n\r\n```js\r\n{\r\n  \"compilerOptions\": {\r\n    ...\r\n    \"experimentalDecorators\": true,\r\n    \"emitDecoratorMetadata\": true\r\n  }\r\n}\r\n```\r\n\r\nExRedux uses Babel 7.x as base for transpilation/building and should be included the plugins below in the _.babelrc_ file.\r\nConsider these itens as firts in the plugins list and in the same order that appears below:\r\n\r\n```js\r\n\"presets\": [\r\n  \"@babel/react\",\r\n  \"@babel/typescript\",\r\n  [\"@babel/env\", { \"modules\": false }]\r\n],\r\n\"plugins\": [\r\n  \"babel-plugin-transform-typescript-metadata\",\r\n  [\"@babel/plugin-proposal-decorators\", { \"legacy\": true }],\r\n  [\"@babel/plugin-proposal-class-properties\", { \"loose\": true }],\r\n  \"@babel/plugin-proposal-object-rest-spread\"\r\n],\r\n```\r\n\r\n## Concept\r\n\r\nThis package is based in the common MVVM principles to control the activities in the frontend.\r\n\r\nAny action of the flow is build on ExRedux Models and were dispatched thru Connection and Inject to the Containers and Components.\r\n\r\n![Flow Chart Concept][img-flowchart]\r\n\r\n[img-flowchart]: https://github.com/debersonpaula/exredux/raw/master/docs/exredux.png\r\n\r\n## Models\r\n\r\nThe logic starts with the Model.\r\n\r\nThe _Model_ it's a simple class with properties and methods. And values that was set in the properties, acts as initial store for the reducer.\r\n\r\nThe reducer name will be the same as the class name.\r\n\r\n```ts\r\nimport { Model } from \"exredux\";\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n}\r\n```\r\n\r\n## Actions\r\n\r\nThe _Action_ it's a method decorator and acts as dispatcher for the decorated method.\r\n\r\nAny method decored will be replaced by dispatcher function that emits an action with the name of method as type and the result of the original function, will be the payload to be stored in the reducer.\r\n\r\n```ts\r\nimport { Model, Action } from \"exredux\";\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n\r\n  @Action add() {\r\n    this.counter += 1;\r\n  }\r\n}\r\n```\r\n\r\n## ModelStore\r\n\r\nThe main component of Exredux, the ModelStore act as dependency controller.\r\n\r\nAll models created should be listed in the models property:\r\n\r\n```ts\r\nimport { ModelStore } from \"exredux\";\r\nimport { CounterModel } from \"./counter/CounterModel\";\r\nimport { ListDataModel } from \"./listdata/ListDataModel\";\r\n\r\nexport const appModels = new ModelStore({\r\n  devExtension: true, // enables redux-dev-extension for chrome\r\n  models: [CounterModel, ListDataModel]\r\n});\r\n```\r\n\r\nAlso, the variable that stores the ModelStore, must be used in the connection to provide the state and actions to the components.\r\n\r\n## Connection\r\n\r\nThe models will be available on component, thru the Connection decorator, that indicate the ModelStore and the model injection properties:\r\n\r\n```tsx\r\nimport * as React from \"react\";\r\nimport { Connection, Inject } from \"exredux\";\r\nimport { appModels } from \"../AppModels\";\r\nimport { CounterModel } from \"./CounterModel\";\r\n\r\nclass ModelProps {\r\n  // Inject the model into property\r\n  @Inject counterModel?: CounterModel;\r\n}\r\n\r\n// make connection between state and component\r\n@Connection({\r\n  modelStore: appModels, // <-- model store location\r\n  props: ModelProps // <-- props with model injection\r\n})\r\nexport class Counter extends React.Component<ModelProps> {\r\n  render() {\r\n    const { counterModel } = this.props;\r\n    return (\r\n      <div>\r\n        Counter = {counterModel.counter}\r\n        <br />\r\n        <button onClick={counterModel.add}>Add</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## BaseHttpModel\r\n\r\nThese Actions are designed to be a Http-Promise based template.\r\nIs used Axios as http requester.\r\n\r\n```ts\r\nimport { Model, Action, BaseHttpModel } from \"exredux\";\r\n\r\n// mocking http request\r\nconst httpDoneRequest = (label: string) =>\r\n  new Promise(resolve => {\r\n    setTimeout(() => {\r\n      resolve({ data: label });\r\n    }, 1500);\r\n  });\r\n\r\nconst httpErrorRequest = (errorMessage: string) =>\r\n  new Promise((_, reject) => {\r\n    setTimeout(() => {\r\n      reject({ message: errorMessage });\r\n    }, 1500);\r\n  });\r\n\r\n@Model\r\nexport class HttpHandlerModel extends BaseHttpModel<string> {\r\n  @Action getHttpTest(label: string) {\r\n    this.request(httpDoneRequest(label));\r\n  }\r\n\r\n  @Action getHttpTestError(label: string) {\r\n    this.request(httpErrorRequest(label));\r\n  }\r\n\r\n  // it can be used the internal method resetState\r\n  // to clear all state data for this model\r\n  @Action reset() {\r\n    this.resetState();\r\n  }\r\n}\r\n```\r\n\r\nTo connection in the http based model, use the same decorators _Connection_ and _Inject_ to get the data and states based on promise:\r\n\r\n```tsx\r\nimport * as React from \"react\";\r\nimport { Connection, Inject } from \"exredux\";\r\nimport { appModels } from \"../AppModels\";\r\nimport { HttpHandlerModel } from \"./HttphandlerModel\";\r\n\r\nclass ModelProps {\r\n  @Inject httpHandlerModel?: HttpHandlerModel;\r\n}\r\n\r\n@Connection({\r\n  modelStore: appModels,\r\n  props: ModelProps\r\n})\r\nexport class HttpHandler extends React.Component<ModelProps> {\r\n  render() {\r\n    const { httpHandlerModel } = this.props;\r\n    return (\r\n      <div>\r\n        <button onClick={this.handleClick}>Http Done</button>\r\n        <button onClick={this.handleClickError}>Http Fail</button>\r\n        <button onClick={this.handleReset}>ResetState</button>\r\n\r\n        {httpHandlerModel.isCompleted ? (\r\n          <p>From http model => {httpHandlerModel.response.data}</p>\r\n        ) : null}\r\n        {httpHandlerModel.isFailed ? (\r\n          <p>Error From http model => {httpHandlerModel.error.message}</p>\r\n        ) : null}\r\n        {httpHandlerModel.isLoading ? <p>Loading...</p> : null}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  handleClick = () => {\r\n    this.props.httpHandlerModel.getHttpTest(\"test inserted from HttpComponent\");\r\n  };\r\n\r\n  handleClickError = () => {\r\n    this.props.httpHandlerModel.getHttpTestError(\r\n      \"error test inserted from HttpComponent\"\r\n    );\r\n  };\r\n\r\n  handleReset = () => {\r\n    this.props.httpHandlerModel.reset();\r\n  };\r\n}\r\n```\r\n\r\n## Dependency\r\n\r\nYou inject models in another models thru _Inject_ decorator:\r\n\r\n```tsx\r\nimport { Model, Action, Inject } from \"exredux\";\r\nimport { CounterModel } from \"playground/counter/CounterModel\";\r\n\r\n@Model\r\nexport class ListModel {\r\n  items: string[] = [];\r\n\r\n  // inject CounterModel inside ListModel\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Action add() {\r\n    this.counterModel.add();\r\n    this.items.push(\r\n      `Item ${this.items.length} : Counter = ${this.counterModel.counter}`\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## Triggers\r\n\r\nTriggers are interceptors that listen to action completion.\r\n\r\nAnd must be used to trigger events from another actions.\r\n\r\nThis triggers can't be used to listen itself.\r\n\r\n```tsx\r\nimport { Model, Inject, Trigger } from \"exredux\";\r\nimport { CounterModel } from \"playground/counter/CounterModel\";\r\n\r\n@Model\r\nexport class EventsModel {\r\n  message: string;\r\n\r\n  // dependency from another model\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Trigger(CounterModel, \"add\") checkAddCounter() {\r\n    this.message = `Counter updated to = ${this.counterModel.counter}`;\r\n  }\r\n}\r\n```\r\n\r\nThe connection is the same as usual model:\r\n\r\n```tsx\r\nimport * as React from \"react\";\r\nimport { Connection, Inject } from \"exredux\";\r\nimport { appModels } from \"../AppModels\";\r\nimport { EventsModel } from \"./EventsModel\";\r\n\r\nclass ModelProps {\r\n  @Inject eventsModel: EventsModel;\r\n}\r\ntype Props = Partial<ModelProps>;\r\n\r\n@Connection({\r\n  modelStore: appModels,\r\n  props: ModelProps\r\n})\r\nexport class Events extends React.Component<Props> {\r\n  render() {\r\n    const { eventsModel } = this.props;\r\n    return (\r\n      <div>\r\n        Example of Trigger\r\n        <br />\r\n        <p>Message = {eventsModel.message}</p>\r\n        <button onClick={eventsModel.checkAddCounter}>\r\n          Manually get event\r\n        </button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\nAlso, the triggers dispatch action to redux state and does not require _Action_ decorator to do it.\r\n\r\n```tsx\r\n@Action // <=== NOT REQUIRED, Trigger already is an Action\r\n@Trigger\r\ndecorated() {\r\n  ...\r\n}\r\n```\r\n\r\n## Availability of methods in component props\r\n\r\nFunctions and property without decorator can be used in the model, but wil be not available to the connection props.\r\nThe reducer dispatcher breaks any method or property and the React component can not see those properties at the component side.\r\n\r\nTo reach the component side, use arrow function.\r\n\r\n```ts\r\n@Model\r\nexport class AvailabilityModel {\r\n  // invisible for components\r\n  makeSomething() {\r\n    ...\r\n  }\r\n\r\n  @Action\r\n  callMakeSomething() {\r\n    this.makeSomething();\r\n  }\r\n\r\n  // use arrow function to be visible at the component side\r\n  makeSomethingFromComponent = () => {\r\n    ...\r\n  }\r\n}\r\n```\r\n\r\n## State change guideline\r\n\r\nMethods without decorate changes the state only in the class and will not be dispatched to the redux store.\r\nBut can be used to calculate or change something until some point, and after that, call a decorated action to dispatch it to the store.\r\n\r\n```ts\r\n@Model\r\nexport class AvailabilityModel {\r\n  // change state internally only\r\n  changeSomething() {\r\n    this.stateData = \"something\";\r\n  }\r\n\r\n  // change state internally\r\n  // and dispatch it to the store and components\r\n  @Action\r\n  changeAndDispatch() {\r\n    this.stateData = \"something changed\";\r\n  }\r\n}\r\n```\r\n\r\n## Provider\r\n\r\nA simple Provider components connects your code with the ModelStore.\r\n\r\n```tsx\r\nimport * as React from \"react\";\r\n\r\nimport { appModels } from \"./AppModels\";\r\nimport { Counter } from \"./counter/Counter\";\r\nimport { Provider } from \"exredux\";\r\n\r\nexport class Sample extends React.Component {\r\n  public render() {\r\n    return (\r\n      <Provider modelStore={appModels}>\r\n        <div>\r\n          Test Application for ExRedux\r\n          <hr />\r\n          <Counter />\r\n        </div>\r\n      </Provider>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## Sample\r\n\r\nThe sample project is available in the source https://github.com/debersonpaula/exredux. Just install dependencies and run with `npm start`.\r\n\r\n![Changelog][changelog]\r\n\r\n[changelog]: https://github.com/debersonpaula/exredux/raw/master/CHANGELOG.md\r\n\r\n## License\r\n\r\n[MIT](LICENSE)\r\n","readmeFilename":"README.md","_id":"exredux@0.1.0-beta.7","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-N3ORVR4bN130d8i+8/M+CYozgBllkJVArrVO7EaTTgpvcE2VpxkNZhYcm7+ttRiQwcpu0dhZmkQ5EG5ueqzr4Q==","shasum":"0cb54047891b114158a63446701fe6ce3dd84733","tarball":"https://registry.npmjs.org/exredux/-/exredux-0.1.0-beta.7.tgz","fileCount":21,"unpackedSize":355769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9nkfCRA9TVsSAnZWagAAVHkP/ieoxHotb5AZwEbzJ2wM\nx5rCVr8s0L9rMUxOxLpS6LWrnDue46h52runEvAB/DikDyMInAfUXaoBYl41\nQW/7kJ2jbQS7yZe4JfWyZvFJeoR6Fj+LQIVJca5L9fOoGE+jTrXk3i0tG20C\nnbrOyibcQYmRc4nojx996lLI9FabvwbVy0eqldgZCFQbUYt2wvshFQ0I4/iq\nAsW7Zk4gl8oEB0SxXhcmI66OgnMrmDMOo+JM5ZLjVlSg0XH271l2dQuwaA8g\npW/rgAVCMKKdYnQSW79gMWRwTkcpAxKVQCfhiN+gfqneDmgkzfsh7ukQvGkY\nQ5O47CmNfve+qktExSE5/g9ky+6iD9CzH6RP14VOdNkxATlCBakui7m0N6+l\nGaqWsh495SSpJfBjceQdrRNFYHdxSo1OdwlhD6oZKmyEQN9kZ5O01fj4GTlb\n1r1jUH7iUOLIzfCgNs+rDex+qaE13q0hluwXwFwlU7qniFXjcxh60rZSy4m1\nppm0D6mc2AJrQXH5sV9L+8jaq7Xiri6jCjMZVKVPDEe2q26iBI2wOROFLdDw\nWs+4o3a5rtqS2t1M6vmAu34etDrcynHdy8g/aih/EVQ6pe0AZkRNYG+rl6RE\nX71RWJ9WegEEPB2eGh7foBD14ZnqGPVFed2+QzFJtqjC+QpjSCDJ5/UPF7Rk\n1t3S\r\n=FHKK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGMsniNRwLxnCIKEwcbJsPG3F003nEY8dlUHwc1ZdfgqAiEA158OGpIzl3IGeobsu8FxyatWn9zlOrZMmVAyYf6XV8M="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_0.1.0-beta.7_1559656735069_0.414371719464224"},"_hasShrinkwrap":false},"1.0.0":{"name":"exredux","version":"1.0.0","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":">=0.19.0"},"devDependencies":{"@babel/core":"^7.3.4","@babel/plugin-proposal-class-properties":"^7.3.4","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.4","@babel/plugin-transform-modules-commonjs":"^7.1.0","@babel/preset-env":"^7.3.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/react":"^16.8.7","@types/react-dom":"^16.8.2","@types/react-redux":"^6.0.13","@types/react-router-dom":"^4.3.1","acorn":"^6.1.1","awesome-typescript-loader":"^5.2.1","babel-core":"^6.26.3","babel-loader":"^8.0.5","babel-plugin-transform-typescript-metadata":"^0.2.2","eslint":"^5.16.0","html-webpack-plugin":"^3.2.0","react":"^16.8.6","react-dom":"^16.8.6","react-redux":"^7.0.2","react-router-dom":"4.3.1","redux-devtools-extension":"^2.13.8","reflect-metadata":"^0.1.13","rxjs":"^6.5.2","source-map-loader":"^0.2.4","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","tslint-react-a11y":"^1.0.0","typescript":"^3.4.3","uglifyjs-webpack-plugin":"^2.1.2","url-loader":"^1.1.2","webpack":"^4.29.6","webpack-cli":"^3.2.3","webpack-dev-server":"^3.2.1"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@1.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-HFrTpJoaIJempet/JkgiqYsGfs86a9YASRhgw0gZS7C1qxXfoVdUpeSMxZZpujCFdVcelY1sgtwFYlG4ovwvOA==","shasum":"35c68cd1fccfd7b9039a5c71dc7f2d81885382b1","tarball":"https://registry.npmjs.org/exredux/-/exredux-1.0.0.tgz","fileCount":21,"unpackedSize":355762,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9ovHCRA9TVsSAnZWagAA9zUP/1OYktGPd9EiD8UdMjRH\nvMyrxedMpdsnRMUji987/uerc9CAjqYKasgyFpoaDBTB7dgsf/iknVZSdsKo\nDnhoI09gO1osYybUBu/qOn+Nw+1PCJTjJfN9DYbrkZC12IThFsZQRr9R5yct\nsVdH3/5sRO84knbGKtGxSThMMmO5B7F/733IqO4pPmtBKUtLFwp7FXjXNlwz\nNsNvULQf6uYo+ml4sb3fPhurH0g8TbBNe4rtRuNkuTcnuFjll8oWcXbYzC3s\nVxCJ8iJuvLCPFfe0GbFd1y0U7eFqGHTr60rXImbE3+iAqQ9RLpmlUNpwRvrg\naiplypL1kcpFtJ7bn+9z3UvuhZT/CIeanufgTLuEK1kWRf4uh81xxpMBamw8\nH2Epm+NMmfesz5ZSs6x3WXtijiDqmcRyY/E8BFbs/EsBvrWWB+7fQtpPXRNw\nmgn73SzygbHt5zFGNrsMFxKtkfJiREL7GgO6lQYnWnC2CY/Ye6av5swkywr5\n7NM9n8idYeABZnILHFsWiuJgtQpDqbt8uTuzipsS/QZI5cmJdVD+/k73q32q\nM+QhDYhnNWu0msjl4d1kBm0xWeZVBH5alGGQ77CXl4x3APpXfhCKYstWXsgk\nLY+uda780IU4TNNRBZEZSWYgM/7twIIwyEHF3GLUlE9dT+ghC8unEAJsmlAq\n8Fzt\r\n=BlEM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCl7cQ7MrQ4HJv8MPuWOBW29xlpX/ZvZDhEekQAOkTbkgIgGGARe5Y4cM5bdwqz/8Xxu6vmuxDEUmSrpZe4OIQUofQ="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_1.0.0_1559661510679_0.9584303791894817"},"_hasShrinkwrap":false},"1.0.1":{"name":"exredux","version":"1.0.1","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":">=0.19.0"},"devDependencies":{"@babel/core":"^7.3.4","@babel/plugin-proposal-class-properties":"^7.3.4","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.4","@babel/plugin-transform-modules-commonjs":"^7.1.0","@babel/preset-env":"^7.3.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/react":"^16.8.7","@types/react-dom":"^16.8.2","@types/react-redux":"^6.0.13","@types/react-router-dom":"^4.3.1","acorn":"^6.1.1","awesome-typescript-loader":"^5.2.1","babel-core":"^6.26.3","babel-loader":"^8.0.5","babel-plugin-transform-typescript-metadata":"^0.2.2","eslint":"^5.16.0","html-webpack-plugin":"^3.2.0","react":"^16.8.6","react-dom":"^16.8.6","react-redux":"^7.0.2","react-router-dom":"4.3.1","redux-devtools-extension":"^2.13.8","reflect-metadata":"^0.1.13","rxjs":"^6.5.2","source-map-loader":"^0.2.4","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","tslint-react-a11y":"^1.0.0","typescript":"^3.4.3","uglifyjs-webpack-plugin":"^2.1.2","url-loader":"^1.1.2","webpack":"^4.29.6","webpack-cli":"^3.2.3","webpack-dev-server":"^3.2.1"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@1.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-uwI5a4jyJQaKpnL80t+ymPSqDh3SL/1dK71/xnIFoI6YhNYPlh163i+Yy49bae8RGxwakxl3YVGy2ZeinneQEA==","shasum":"9259ede6e5a0e20da3b517144ca7419c3d7aaaa0","tarball":"https://registry.npmjs.org/exredux/-/exredux-1.0.1.tgz","fileCount":21,"unpackedSize":355766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9t6TCRA9TVsSAnZWagAASjsP/0xkTqwMYCRxgV99zXcE\nbKhC/KedsmqwAf8rL1JI2M5772YbIT4erpuLYQGOQM1kcxuYynAPRmMWMROY\n4+3j9jPDUEcKDWKa2nZ+OAJr9k9lRLMDqLy+sR2CMvdp9uBPHWllkGyXjbyw\nRUP7TWQ6U70J5mBBTI8jbmNSPur2wwr2Q8JR/RCDrY814nf1UB70ly7Ne4l9\nA9XjapLv8+ocpzSBwsP9Cr7+3UmSp6qEhqSayUqPzGc5lEm+3Cg4f7XKlJJw\n9BbdCRJGss6cXqAYUFFk+1gIRmke+yOAGPeVSgENhIfS18aksjPs1Zh1fxrX\nBlsgRuLYQ2B2wh+SbgS7c1H5MxeyqmD+yhOzrrsajhPRa1zKlmSuNlRVxDac\nZOEotFj/iTz3gS3tXKwPBbie8EAFHF5DZiuTvraoa9v8gSRzuY2erAqKd4Qd\nQ7zCt6zaNjqcvtqsDAbIQn9sU4FtnE7AzmUcrRcS8Mntxv8s8iJMVP2NkZH5\nLruc+J21ey6fv/67mshfeJdrIKSsv6rijt2kW6C3g13q492aURkG1hEmG3k2\nozF+HNlxy0Gho05O6hRgdfKwvZKsDfVCMu3+GHzzln8NBVrrGPc34xElTAgf\n3QQS4TGmZaJPKQGl1od7BQ904j1CpiGQDpupASzs9gTW3qh+pQEGdAjn0mO9\n90O5\r\n=6sul\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFNdQQlLLd8FIcnBehXXkNIFZFG8c1bF56kIRua+90QDAiBG2K4u4W12tenm7mI8zv+eian/CVdEOOpOOChgohiLog=="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_1.0.1_1559682707186_0.5801425841600027"},"_hasShrinkwrap":false},"1.0.2":{"name":"exredux","version":"1.0.2","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":">=0.19.0"},"devDependencies":{"@babel/core":"^7.3.4","@babel/plugin-proposal-class-properties":"^7.3.4","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.4","@babel/plugin-transform-modules-commonjs":"^7.1.0","@babel/preset-env":"^7.3.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/react":"^16.8.7","@types/react-dom":"^16.8.2","@types/react-redux":"^6.0.13","@types/react-router-dom":"^4.3.1","acorn":"^6.1.1","awesome-typescript-loader":"^5.2.1","babel-core":"^6.26.3","babel-loader":"^8.0.5","babel-plugin-transform-typescript-metadata":"^0.2.2","eslint":"^5.16.0","html-webpack-plugin":"^3.2.0","react":"^16.8.6","react-dom":"^16.8.6","react-redux":"^7.0.2","react-router-dom":"4.3.1","redux-devtools-extension":"^2.13.8","reflect-metadata":"^0.1.13","rxjs":"^6.5.2","source-map-loader":"^0.2.4","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","tslint-react-a11y":"^1.0.0","typescript":"^3.4.3","uglifyjs-webpack-plugin":"^2.1.2","url-loader":"^1.1.2","webpack":"^4.29.6","webpack-cli":"^3.2.3","webpack-dev-server":"^3.2.1"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@1.0.2","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-AhjHRJLH/7UTCeHW/QQb8mKWrwkL8nQSyOth+Hn39qEidnNPssWPA4J0T2/kHeFlWLbst2hkSL5TQzJV93180w==","shasum":"3c655fddb0ce5eeef2e86063da53428338b2df3f","tarball":"https://registry.npmjs.org/exredux/-/exredux-1.0.2.tgz","fileCount":21,"unpackedSize":355094,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9v11CRA9TVsSAnZWagAAEggP/0iSU5LHFEu84yNkUi2g\nQIMMI48pcMVrM92aoDiF1iK0duf4usIQsN2kdoGZfP88GbmlKh4smNeKL7gc\nVLsBOAL12VmFu8Q0SDGwWgljVahsDPFvst9B+6/dRZKFpub866Ne5aoF5s5t\ntMRvLV6XRcJmk/yWFCDz4PnDDs+fz/pY3ECJPMGmwP2FWqQwuj9En8gg+CLZ\nYjEZBg0m7m5kdfU59x7XA1ams/ueuPUnIj6sPCPI03l/LvDz3M1D87VtrX1l\nPML14G9OAdYq3K4iMuQy5jcX7JfdT9xl+iKY4b6ZloF/z9FDKVypi7LhzVXw\nmcirj250dHdVtaqousqQ26LuH72WY+zWHZmLF6Z0xPrE5r0tiZm2Cx9ekPOp\noVsm2X7wqh2I07L0J5Vu/iWpYqsd8zgdllZpHY9s5hA2ykSSnJYwMyZkizBm\nNfQDOxpoZSihOpYdHDi0wgFX37cY0F7QFXORDnOenIgK/FNkxubxrXpqHrJ1\n8y7v/2sBb64zaSCimFq1sCJJ9sz1bLwsdc7HQseCAK2sskK53RBbm8nXfxf6\nzWENBZIPc8NCMcLI1tmCT/NoXwqr5t41EaWCGx/4dlggUwtQdW4ZqRDy5Drf\ncCAkNBSmW4Kb8lT5DnU24YEraV229QaOWgMrbLfyfSz0G6NTVo4CJVVQm2Mp\ncYxl\r\n=YHNs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvKTXtmKC5rLtNxnoBm0S3OFflAsYtM5Vu3ETukvs9nwIgU16XvdIObUyUBy1eG/BV4WO/LdCqsU3133XTOnerkcg="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_1.0.2_1559690612842_0.2134134585016958"},"_hasShrinkwrap":false},"1.0.3":{"name":"exredux","version":"1.0.3","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":">=0.19.0"},"devDependencies":{"@babel/core":"^7.3.4","@babel/plugin-proposal-class-properties":"^7.3.4","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.4","@babel/plugin-transform-modules-commonjs":"^7.1.0","@babel/preset-env":"^7.3.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/react":"^16.8.7","@types/react-dom":"^16.8.2","@types/react-redux":"^6.0.13","@types/react-router-dom":"^4.3.1","acorn":"^6.1.1","awesome-typescript-loader":"^5.2.1","babel-core":"^6.26.3","babel-loader":"^8.0.5","babel-plugin-transform-typescript-metadata":"^0.2.2","eslint":"^5.16.0","html-webpack-plugin":"^3.2.0","react":"^16.8.6","react-dom":"^16.8.6","react-redux":"^7.0.2","react-router-dom":"4.3.1","redux-devtools-extension":"^2.13.8","reflect-metadata":"^0.1.13","rxjs":"^6.5.2","source-map-loader":"^0.2.4","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","tslint-react-a11y":"^1.0.0","typescript":"^3.4.3","uglifyjs-webpack-plugin":"^2.1.2","url-loader":"^1.1.2","webpack":"^4.29.6","webpack-cli":"^3.2.3","webpack-dev-server":"^3.2.1"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@1.0.3","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-kRW0CUuEIH6uYJ+XeeSMrcge2wG3XZRMZG1zaUMCEdnL/wnGRhvlViBL/L4/KhKFSCevworxIipf5P2+dJEMDA==","shasum":"88c6691bd63b53c56f1763b32e9e62031b095f17","tarball":"https://registry.npmjs.org/exredux/-/exredux-1.0.3.tgz","fileCount":22,"unpackedSize":361320,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+CheCRA9TVsSAnZWagAAlEsP/0lo+QCHMYqOHGO8BQ1s\nOI/4j8SBVL0/HIqgSesB2qwNz/Q2X0wpxizdwtWDBpHDiF8T+R1fM1z+0VWk\nK1QrCiroM5cuJerxeqOcmkPJ+GjjxwbA00ppQSwtXwsXzsYi6Bhg2V6lZ1nn\nQiakVgsZd9SB4rfwk8XhpRkho0sjQV9FocB8M4Y3NZIxkyj9KABq1lF7uGxK\nZTpfBTugytTAOJkOAAJARZPzKNhBX5dIMsPhp5GB248ENporTm3Ja+0kejAn\nt3hgkE8E15cBJ5qHlLvwFYvWt8VyK+TSONHrjNCOlZotcsIwBrHSrYAw+C9y\n5WKTGfulL+iH8j6q6RfI3Q7unDYI7e0qoRNDFED7iRNJ6So+CQpAfvoBO0wQ\ntH1hvZ6sfZR0eZeOxBSLSlF67X41adRGy5vfAjo98V5b9Ol7n/+sXIHWOPXY\nl6JfaPyoIuAoOhVLQ9iZEYnlpb73U7pGSKg6iFeb/xYIZTwS/Ryqe1FFR5Am\nwOj/n5cEk+HUaJAPqAmJ0LkVaylsfW1APQcXD6S246jKeWlSqW/t4jy7ESJB\nKcSxxzxHESjyeBQ5g+ZKW/TYUThfQiqddlaR6vgfz7bQk6VfqJPIwnqnKYVC\nePB1luHPOvOk8vRmDLNPsljtO4s0nftScSgXp6Ra//55PUIcn54MSBXQMm4P\nH+qv\r\n=eaen\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkuTY+HCZiAZHqSZT0tEAu2+4f4GHG9YBKO33zwTwSWwIhANmRniTxsk7mUohV/9qHaq5vareg1sjl6YLlH1OFgrEb"}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_1.0.3_1559767133639_0.6884310239378215"},"_hasShrinkwrap":false},"1.0.4":{"name":"exredux","version":"1.0.4","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","redux":"4.0.1","rxjs":"6.5.2","react-redux":"7.0.3"},"devDependencies":{"@babel/core":"7.3.4","@babel/plugin-proposal-class-properties":"7.3.4","@babel/plugin-proposal-decorators":"7.3.0","@babel/plugin-proposal-object-rest-spread":"7.3.4","@babel/plugin-transform-modules-commonjs":"7.1.0","@babel/preset-env":"7.3.4","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/react":"16.8.7","@types/react-dom":"16.8.2","@types/react-redux":"7.0.9","@types/react-router-dom":"4.3.1","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-loader":"8.0.5","babel-plugin-transform-typescript-metadata":"0.2.2","eslint":"5.16.0","html-webpack-plugin":"3.2.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","redux-devtools-extension":"2.13.8","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.1","uglifyjs-webpack-plugin":"2.1.2","url-loader":"1.1.2","webpack":"4.29.6","webpack-cli":"3.2.3","webpack-dev-server":"3.2.1"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@1.0.4","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-Lu+GIesOYgcYjh4OjSXOwreJtuWWLKSj/yYdtW1y0yE+UyqZViYPB7mG0eG3i6XtRYFQnNJ5QSW5qkRowrUmRg==","shasum":"9b66664aea4328240d7c73047244ebd2c0ad9d32","tarball":"https://registry.npmjs.org/exredux/-/exredux-1.0.4.tgz","fileCount":22,"unpackedSize":360851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+X5hCRA9TVsSAnZWagAAIMAP/0Td8LRYL3MPTYi9143m\na/dkpqooaQTfJ2gqyf0axsIHGDIEdY75KHq5pyDnW881IT4CsKmHxcFonsvF\n8P3JzArgynYTo1Zdb/w5XY70qv9qOs2vhhipmayW+aAMRyQFlKtra0fXaaeB\nYD0Jic9KFOltEl0hZOgbgB1/3ltuJ6Sh4OrQ9+8+ud+3bR+YKuAa43drrEnD\nAMnCmim+Yv/W4lmyq96v3FByI3qwFstgaUXkjWnuppMCUJElZTTyoZbU4EmP\nMsAVN0aZG/f9proDuvBFPyhm9DS9EVLtoDaziCmGjDVQ+W0ey6UltyQ6INj+\nxGvszpzAmyn9qYxDz3kkyGKlUcQETUjfdiON/aoosOWEpYdOmI9ZpJxcOF1o\nWJMYETWxm8DI4TN2iyGY3Vco7a9sJAz0sXBnV4DTXhinSQEFmL1H5l+Als7J\nX6V2TzPvPX0RjCZys4UtNVKqQ7zB59S8BwFgZs+cI+FJuP4aw+fO4FcozQLf\nCAR/XnNQaIerl9HmfnAGT1pw3HJPieAd7XhWINPk6FvJYULTP+A3TAm3SKz9\nAlXNeBEaUzuoBQuGU3f/FdhxEdgptLW271JpdD9u9YeHED3n0b5LMNHH9p7Y\nML4VRs2fBoONcFBd8lcZstpYD1TpqtdM2hpvgL/vuXeE/EWIHqnTSHTAtiNy\nIG48\r\n=GlUO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHaPhDCXrNPadCkirrGQqRa36mWyf58PJMhgUH3IgsVNAiASp5UVEHHnu87rU/FrRHVqE/ij0PITEbrpQu6gBxc9sg=="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_1.0.4_1559854688586_0.7935533480822121"},"_hasShrinkwrap":false},"1.0.5":{"name":"exredux","version":"1.0.5","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","redux":"4.0.1","rxjs":"6.5.2","react-redux":"7.0.3"},"devDependencies":{"@babel/core":"7.3.4","@babel/plugin-proposal-class-properties":"7.3.4","@babel/plugin-proposal-decorators":"7.3.0","@babel/plugin-proposal-object-rest-spread":"7.3.4","@babel/plugin-transform-modules-commonjs":"7.1.0","@babel/preset-env":"7.3.4","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/react":"16.8.7","@types/react-dom":"16.8.2","@types/react-redux":"7.0.9","@types/react-router-dom":"4.3.1","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-loader":"8.0.5","babel-plugin-transform-typescript-metadata":"0.2.2","eslint":"5.16.0","html-webpack-plugin":"3.2.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","redux-devtools-extension":"2.13.8","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.1","uglifyjs-webpack-plugin":"2.1.2","url-loader":"1.1.2","webpack":"4.29.6","webpack-cli":"3.2.3","webpack-dev-server":"3.2.1"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@1.0.5","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-mA9Bqocc0O3vjjSYhNAvS++JrUyObcUqrt8x+LslEfdu1H+O00bM0QjtV34ZUQJNXqrt3bJXwBs6eS5vxkvn6g==","shasum":"1d57d5b7b382703532616409407f8a8af6172eed","tarball":"https://registry.npmjs.org/exredux/-/exredux-1.0.5.tgz","fileCount":22,"unpackedSize":360875,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdE3IzCRA9TVsSAnZWagAA90kQAIb5vZVGu95210JsYtKH\nIdVoVD41+J3XDKAWkA5jnUvd4XijrXdPq0M2goEoLN6FYOhWWbggoXbcqxP3\npNeUfGxNHtLGA4mrbVj03QVoiNJ11NpFCa15r3Fz7Rld0AEtDEB+7TpEFAjk\neMCo8d0ypinAfxEVIAedujWhVvMmLOG3g5HySAAf7qifsTjIFFsim//uwynM\nylA58exuGYeWVe8ia7P7MqCgwhHQ4VGEWsjAnfgVSk8LQTM60YAy1jcgAZTn\nXHZWGI238fKBngu60PveSnDSRGCUsjygdwvY+jc1773tgSLQrhCVs3YuwzCo\neqlkKqh7cIfJ8y8E+5GbNj17HYZ2cR1nazYY00ECQaEWY1LHWixzYGNZzC4W\n7KriCY+qCdIPHmVvdqeAPrkTZTJosFRyGVYw13TFIS1yvPhFr5JLQVqyuQCK\nITZCSu9BA19/CQLIVvDVo3dxwCCSVwxuWoJdrSSQAjReQlMZ73zaMS6P6dPJ\nmIYwhen6VF4Alc1BHAYSrZHhrglb+eAcL2meOKts5kPaU70YEB84smg85/L5\nk6F5blSGhIHHQQGFsbx9S3dZDvH7vLfla9mNhptizxtvBgzKIXglnrAGcHhT\ncY4U+OI79IKm977lUiofuNHvODNAWXpFRG6LY1JWWmhiJUOecajfqr5QsMMc\nDupO\r\n=V5X/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6Kc/c/dmntxJtvaJzuAKsgB1ZFVWW4RYPWXs8VbxL6wIgKj/W/kN3aDd0c2nswum6A96YpHAImBe4D2RR3qvp/i0="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_1.0.5_1561555507121_0.4475492466255975"},"_hasShrinkwrap":false},"1.0.6-rc.1":{"name":"exredux","version":"1.0.6-rc.1","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","redux":"4.0.1","rxjs":"6.5.2","react-redux":"7.0.3"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-redux":"7.1.0","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-loader":"8.0.6","babel-plugin-transform-typescript-metadata":"0.2.2","eslint":"5.16.0","html-webpack-plugin":"3.2.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","redux-devtools-extension":"2.13.8","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","uglifyjs-webpack-plugin":"2.1.3","url-loader":"1.1.2","webpack":"4.35.0","webpack-cli":"3.3.5","webpack-dev-server":"3.7.2"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","readme":"# EXREDUX\r\n\r\nAre u tired to create a lot of files with constants, actions, dispatchers and reducers?\r\n\r\n**Exredux** is solution to ease your life by abstracting all react/redux logics with understable architecture.\r\n\r\nBased on library **redux-flow-mapper**, this package use decorators to create Models, Actions, Dependencies and much more.\r\n\r\n[![NPM](https://nodei.co/npm/exredux.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/exredux)\r\n\r\n## Install\r\n\r\n```bash\r\n# install ExRedux\r\nnpm i exredux\r\n```\r\n\r\n## Setup tsconfig and babelrc\r\n\r\nInclude support for decorators in the tsconfig.json file:\r\n\r\n```js\r\n{\r\n  \"compilerOptions\": {\r\n    ...\r\n    \"experimentalDecorators\": true,\r\n    \"emitDecoratorMetadata\": true\r\n  }\r\n}\r\n```\r\n\r\nExRedux uses Babel 7.x as base for transpilation/building and should be included the plugins below in the _.babelrc_ file.\r\nConsider these itens as firts in the plugins list and in the same order that appears below:\r\n\r\n```js\r\n\"presets\": [\r\n  \"@babel/react\",\r\n  \"@babel/typescript\",\r\n  [\"@babel/env\", { \"modules\": false }]\r\n],\r\n\"plugins\": [\r\n  \"babel-plugin-transform-typescript-metadata\",\r\n  [\"@babel/plugin-proposal-decorators\", { \"legacy\": true }],\r\n  [\"@babel/plugin-proposal-class-properties\", { \"loose\": true }],\r\n  \"@babel/plugin-proposal-object-rest-spread\"\r\n],\r\n```\r\n\r\n## Concept\r\n\r\nThis package is based in the common MVVM principles to control the activities in the frontend.\r\n\r\nAny action of the flow is build on ExRedux Models and were dispatched thru Connection and Inject to the Containers and Components.\r\n\r\n![Flow Chart Concept][img-flowchart]\r\n\r\n[img-flowchart]: https://github.com/debersonpaula/exredux/raw/master/docs/exredux.png\r\n\r\n## Models\r\n\r\nThe logic starts with the Model.\r\n\r\nThe _Model_ it's a simple class with properties and methods. And values that was set in the properties, acts as initial store for the reducer.\r\n\r\nThe reducer name will be the same as the class name.\r\n\r\n```ts\r\nimport { Model } from \"exredux\";\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n}\r\n```\r\n\r\n## Actions\r\n\r\nThe _Action_ it's a method decorator and acts as dispatcher for the decorated method.\r\n\r\nAny method decored will be replaced by dispatcher function that emits an action with the name of method as type and the result of the original function, will be the payload to be stored in the reducer.\r\n\r\n```ts\r\nimport { Model, Action } from \"exredux\";\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n\r\n  @Action add() {\r\n    this.counter += 1;\r\n  }\r\n}\r\n```\r\n\r\n## ModelStore\r\n\r\nThe main component of Exredux, the ModelStore act as dependency controller.\r\n\r\nAll models created should be listed in the models property:\r\n\r\n```ts\r\nimport { ModelStore } from \"exredux\";\r\nimport { CounterModel } from \"./counter/CounterModel\";\r\nimport { ListDataModel } from \"./listdata/ListDataModel\";\r\n\r\nexport const appModels = new ModelStore({\r\n  devExtension: true, // enables redux-dev-extension for chrome\r\n  models: [CounterModel, ListDataModel]\r\n});\r\n```\r\n\r\nAlso, the variable that stores the ModelStore, must be used in the connection to provide the state and actions to the components.\r\n\r\n## Connection\r\n\r\nThe models will be available on component, thru the Connection decorator, that indicate the ModelStore and the model injection properties:\r\n\r\n```tsx\r\nimport * as React from \"react\";\r\nimport { Connection, Inject } from \"exredux\";\r\nimport { appModels } from \"../AppModels\";\r\nimport { CounterModel } from \"./CounterModel\";\r\n\r\nclass ModelProps {\r\n  // Inject the model into property\r\n  @Inject counterModel?: CounterModel;\r\n}\r\n\r\n// make connection between state and component\r\n@Connection({\r\n  modelStore: appModels, // <-- model store location\r\n  props: ModelProps // <-- props with model injection\r\n})\r\nexport class Counter extends React.Component<ModelProps> {\r\n  render() {\r\n    const { counterModel } = this.props;\r\n    return (\r\n      <div>\r\n        Counter = {counterModel.counter}\r\n        <br />\r\n        <button onClick={counterModel.add}>Add</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## BaseHttpModel\r\n\r\nThese Actions are designed to be a Http-Promise based template.\r\nIs used Axios as http requester.\r\n\r\n```ts\r\nimport { Model, Action, BaseHttpModel } from \"exredux\";\r\n\r\n// mocking http request\r\nconst httpDoneRequest = (label: string) =>\r\n  new Promise(resolve => {\r\n    setTimeout(() => {\r\n      resolve({ data: label });\r\n    }, 1500);\r\n  });\r\n\r\nconst httpErrorRequest = (errorMessage: string) =>\r\n  new Promise((_, reject) => {\r\n    setTimeout(() => {\r\n      reject({ message: errorMessage });\r\n    }, 1500);\r\n  });\r\n\r\n@Model\r\nexport class HttpHandlerModel extends BaseHttpModel<string> {\r\n  @Action getHttpTest(label: string) {\r\n    this.request(httpDoneRequest(label));\r\n  }\r\n\r\n  @Action getHttpTestError(label: string) {\r\n    this.request(httpErrorRequest(label));\r\n  }\r\n\r\n  // it can be used the internal method resetState\r\n  // to clear all state data for this model\r\n  @Action reset() {\r\n    this.resetState();\r\n  }\r\n}\r\n```\r\n\r\nTo connection in the http based model, use the same decorators _Connection_ and _Inject_ to get the data and states based on promise:\r\n\r\n```tsx\r\nimport * as React from \"react\";\r\nimport { Connection, Inject } from \"exredux\";\r\nimport { appModels } from \"../AppModels\";\r\nimport { HttpHandlerModel } from \"./HttphandlerModel\";\r\n\r\nclass ModelProps {\r\n  @Inject httpHandlerModel?: HttpHandlerModel;\r\n}\r\n\r\n@Connection({\r\n  modelStore: appModels,\r\n  props: ModelProps\r\n})\r\nexport class HttpHandler extends React.Component<ModelProps> {\r\n  render() {\r\n    const { httpHandlerModel } = this.props;\r\n    return (\r\n      <div>\r\n        <button onClick={this.handleClick}>Http Done</button>\r\n        <button onClick={this.handleClickError}>Http Fail</button>\r\n        <button onClick={this.handleReset}>ResetState</button>\r\n\r\n        {httpHandlerModel.isCompleted ? (\r\n          <p>From http model => {httpHandlerModel.response.data}</p>\r\n        ) : null}\r\n        {httpHandlerModel.isFailed ? (\r\n          <p>Error From http model => {httpHandlerModel.error.message}</p>\r\n        ) : null}\r\n        {httpHandlerModel.isLoading ? <p>Loading...</p> : null}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  handleClick = () => {\r\n    this.props.httpHandlerModel.getHttpTest(\"test inserted from HttpComponent\");\r\n  };\r\n\r\n  handleClickError = () => {\r\n    this.props.httpHandlerModel.getHttpTestError(\r\n      \"error test inserted from HttpComponent\"\r\n    );\r\n  };\r\n\r\n  handleReset = () => {\r\n    this.props.httpHandlerModel.reset();\r\n  };\r\n}\r\n```\r\n\r\n## Dependency\r\n\r\nYou inject models in another models thru _Inject_ decorator:\r\n\r\n```tsx\r\nimport { Model, Action, Inject } from \"exredux\";\r\nimport { CounterModel } from \"playground/counter/CounterModel\";\r\n\r\n@Model\r\nexport class ListModel {\r\n  items: string[] = [];\r\n\r\n  // inject CounterModel inside ListModel\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Action add() {\r\n    this.counterModel.add();\r\n    this.items.push(\r\n      `Item ${this.items.length} : Counter = ${this.counterModel.counter}`\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## Triggers\r\n\r\nTriggers are interceptors that listen to action completion.\r\n\r\nAnd must be used to trigger events from another actions.\r\n\r\nThis triggers can't be used to listen itself.\r\n\r\n```tsx\r\nimport { Model, Inject, Trigger } from \"exredux\";\r\nimport { CounterModel } from \"playground/counter/CounterModel\";\r\n\r\n@Model\r\nexport class EventsModel {\r\n  message: string;\r\n\r\n  // dependency from another model\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Trigger(CounterModel, \"add\") checkAddCounter() {\r\n    this.message = `Counter updated to = ${this.counterModel.counter}`;\r\n  }\r\n}\r\n```\r\n\r\nThe connection is the same as usual model:\r\n\r\n```tsx\r\nimport * as React from \"react\";\r\nimport { Connection, Inject } from \"exredux\";\r\nimport { appModels } from \"../AppModels\";\r\nimport { EventsModel } from \"./EventsModel\";\r\n\r\nclass ModelProps {\r\n  @Inject eventsModel: EventsModel;\r\n}\r\ntype Props = Partial<ModelProps>;\r\n\r\n@Connection({\r\n  modelStore: appModels,\r\n  props: ModelProps\r\n})\r\nexport class Events extends React.Component<Props> {\r\n  render() {\r\n    const { eventsModel } = this.props;\r\n    return (\r\n      <div>\r\n        Example of Trigger\r\n        <br />\r\n        <p>Message = {eventsModel.message}</p>\r\n        <button onClick={eventsModel.checkAddCounter}>\r\n          Manually get event\r\n        </button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\nAlso, the triggers dispatch action to redux state and does not require _Action_ decorator to do it.\r\n\r\n```tsx\r\n@Action // <=== NOT REQUIRED, Trigger already is an Action\r\n@Trigger\r\ndecorated() {\r\n  ...\r\n}\r\n```\r\n\r\n## Availability of methods in component props\r\n\r\nFunctions and property without decorator can be used in the model, but wil be not available to the connection props.\r\nThe reducer dispatcher breaks any method or property and the React component can not see those properties at the component side.\r\n\r\nTo reach the component side, use arrow function.\r\n\r\n```ts\r\n@Model\r\nexport class AvailabilityModel {\r\n  // invisible for components\r\n  makeSomething() {\r\n    ...\r\n  }\r\n\r\n  @Action\r\n  callMakeSomething() {\r\n    this.makeSomething();\r\n  }\r\n\r\n  // use arrow function to be visible at the component side\r\n  makeSomethingFromComponent = () => {\r\n    ...\r\n  }\r\n}\r\n```\r\n\r\n## State change guideline\r\n\r\nMethods without decorate changes the state only in the class and will not be dispatched to the redux store.\r\nBut can be used to calculate or change something until some point, and after that, call a decorated action to dispatch it to the store.\r\n\r\n```ts\r\n@Model\r\nexport class AvailabilityModel {\r\n  // change state internally only\r\n  changeSomething() {\r\n    this.stateData = \"something\";\r\n  }\r\n\r\n  // change state internally\r\n  // and dispatch it to the store and components\r\n  @Action\r\n  changeAndDispatch() {\r\n    this.stateData = \"something changed\";\r\n  }\r\n}\r\n```\r\n\r\n## Provider\r\n\r\nInstead using Provide from _react-redux_, use directly from __exredux__.\r\nIt's already provide encapsulation for the ModelStore and the redux Provider.\r\n\r\n```tsx\r\nimport * as React from \"react\";\r\n\r\nimport { appModels } from \"./AppModels\";\r\nimport { Counter } from \"./counter/Counter\";\r\nimport { Provider } from \"exredux\";\r\n\r\nexport class Sample extends React.Component {\r\n  public render() {\r\n    return (\r\n      <Provider store={appModels.createStore()}>\r\n        <div>\r\n          Test Application for ExRedux\r\n          <hr />\r\n          <Counter />\r\n        </div>\r\n      </Provider>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## Sample\r\n\r\nThe sample project is available in the source https://github.com/debersonpaula/exredux. Just install dependencies and run with `npm start`.\r\n\r\n![Changelog][changelog]\r\n\r\n[changelog]: https://github.com/debersonpaula/exredux/raw/master/CHANGELOG.md\r\n\r\n## License\r\n\r\n[MIT](LICENSE)\r\n","readmeFilename":"README.md","_id":"exredux@1.0.6-rc.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-KcuXGjMpfEQnLKABzN9xe2gcYMrIm+LdyO/blgjUfdnvXSIs24vsJrrcvaIjx1+YUUr2H53EB1lfMgXdkHXYwA==","shasum":"32f8ab83480e1fd935bd3ed4688590276d76dba2","tarball":"https://registry.npmjs.org/exredux/-/exredux-1.0.6-rc.1.tgz","fileCount":22,"unpackedSize":362146,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdE4dgCRA9TVsSAnZWagAA0nUP/1mz0RirXs2Sduu1Mxr9\nT2yEEz4gscQeNPxnLd88+5nSCzPqkcNcFvE0Y+Zcn+DEdJ/l+1jgL6Ah6sKG\n+dsSxCAIgkCVOsIw2V4uNsNi/WcWvKfT8+11mW+HgazzgBvBVSFqn0rezCJg\nSjsNzKywofh2FiCRLN/1g/lISWFYHI4ApAX4rbewx9gKJPVVZP/lpov4AMoO\nb5+2ht4rXUV8N35Ygi3i0QGSzQJPXzIT1J4sQnrWDRozSOo4GAed8O2Ze6r1\nzpbfVRXBFrwxbPZa9kEyFwJ32MaY2rXX5l9ZG+6Y/q9ZDC6WTURwRbAY5Nb5\n41ePk5T5YtULHHQIrZigaIiS3XSUjoxQ1HWLEtSMb1r4NQL0LMlwgBRJNc9h\nylauKZDMV7Q0TiyMTr3V4hPX7am8yClvQUSNb8bK/M7w1jNaVyogC60TTz7k\nSfpSJeUdMe/6docGRupzBm14Oj4UB3dfNFzHIbyPbs7qkc0JcpQBZnej96X1\nfni3SDglQnzsHwPF7n7Uc46tS3T79PQVOJGqzeGSF+jf/v7+oRPopxeHgeDp\nVPfpP1Z5RJ/wzXJr8ICp0GtyDAnVL5fvyM8AEeDMaQZsw3eqP1fukPICO/+4\n0dgG/K5EWO/P6GpwJglESGXNeBBX8BzUO4x/unVJyj4PeyJo49ViNabNk6XR\nOUK6\r\n=q7z5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF5nYIy7BfhXg2wHQUOr7W5qOQQct7dazj8DzWy/iz6EAiEAhh17k+0yT391uzXbId9KFxjAssDRSCiIDkKQOBkuEO0="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_1.0.6-rc.1_1561560928115_0.2578888671323283"},"_hasShrinkwrap":false},"1.0.6":{"name":"exredux","version":"1.0.6","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","redux":"4.0.1","rxjs":"6.5.2","react-redux":"7.0.3"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-redux":"7.1.0","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-loader":"8.0.6","babel-plugin-transform-typescript-metadata":"0.2.2","eslint":"5.16.0","html-webpack-plugin":"3.2.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","redux-devtools-extension":"2.13.8","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","uglifyjs-webpack-plugin":"2.1.3","url-loader":"1.1.2","webpack":"4.35.0","webpack-cli":"3.3.5","webpack-dev-server":"3.7.2"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@1.0.6","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-Y0xJ9yVqSzHJ2Vaf61sGvZxjnq+st72t69jXvTs3NQCUegKjJFV7fEE5SPmjzPG5NyZ9UQZ/bKdT5IKJCxY2kw==","shasum":"aebb32194caf4299bf1939ac140b1d7273ecc2e6","tarball":"https://registry.npmjs.org/exredux/-/exredux-1.0.6.tgz","fileCount":22,"unpackedSize":362141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdE4xACRA9TVsSAnZWagAA80EQAIzMAmP8Llqir0gDxnKb\n8AmVtYWqOZNVesDDNZ8M3TeYd8Ncs4BXEbBXb1KVSTAkl/+WEQgtYQZhjb04\nXjdmvjspwUTU8QzWIOBvRyA4AWtmYPllglsCc0Z9N0EPluOwZN1zv+cCc0jZ\ngJ118CrqFxc6mxqAZWfzjEcNTyi0tGcg1MkFtrpbtSd3Yn1Nf2pgykgmtTZw\njcFHcFyXhuemXSz+HhOa3dM6BqqCvakQx0Jj/K7ulzfBD3mHunluyGjbxDBZ\nhrCQU/Za81PPuvm62ZuktWlVVW8QTksTQXifuW9YiDi4mI4EDfi2FWZzU4r2\nWh9DM8IUSj+VbyvC9to9v37oahTFSCbxXlznp+4eWWaAxfIus5Qcs52ytrtW\ntQjIJ3RWIYcQiGwZAM8pwo6D2EYBTaqLZX99IDcoi+3JRu+KOqUg/RjSgL2Y\n3Toos0qhvZYO0Mw9P+Y9fTL4cKisOeKnvUnoQ6/P40o/1ayW/AHuZm4NVgEN\nUL8Ayt8vnSsBYzzZ7koysuqClJVBrD4MfPSEu8GHWH5iYufGJzF3+KT2Tox5\nestzDtgfZe0ROsK6S6GkfEhR1xAZ9qDPsaz5VUV8O0LuZm6UeY+qWP7VqBSR\nHDbZkJcvcBtaKO1HAz8R1ZhIhXL0cZlMavOdpBkRPf+jRB5yptxrjOha6zZK\nkE/m\r\n=2jUw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH1jiyJbb5LcK3lZaLkTM/AUB8ejYJOQ3bijzfHTmMBbAiEAwl1bXdUAEOBb9YPmVKyuoVeelAalBiLlyVU1mqUGfGM="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_1.0.6_1561562175526_0.2509621092209755"},"_hasShrinkwrap":false},"1.0.7":{"name":"exredux","version":"1.0.7","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","redux":"4.0.1","rxjs":"6.5.2","react-redux":"7.0.3"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-redux":"7.1.0","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-loader":"8.0.6","babel-plugin-transform-typescript-metadata":"0.2.2","eslint":"5.16.0","html-webpack-plugin":"3.2.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","redux-devtools-extension":"2.13.8","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","uglifyjs-webpack-plugin":"2.1.3","url-loader":"1.1.2","webpack":"4.35.0","webpack-cli":"3.3.5","webpack-dev-server":"3.7.2"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@1.0.7","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-SwgUhNkXp+D3TOhLvZmRDUf5qSob8pfsvupuxqx4rN9HMbztdRG/B773c2lMGyf7BDYyGTWmwgy7tajybQChDg==","shasum":"98aba5d60ba01b5d2494546a957ae9969fb6ff21","tarball":"https://registry.npmjs.org/exredux/-/exredux-1.0.7.tgz","fileCount":22,"unpackedSize":361328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJhxKCRA9TVsSAnZWagAAMrgP/iok63XZa7fPRkQN6vfk\nPT8g5t5wpPAjZHy9F4l4XjGmFMrQpws0i35NoEQMdH/IC6fCl33YQgiThU+W\nazdnycmxulG5CeQvSIfqtTGVfDeALYddJq6qU0TcDyhI3gvXKymRq/piSh4R\nwgV+NVwTZZHhoJ2L45sXFqnRPp2kS9JEuwAVGsMZmhZedpY0zjTsJbD9O8Sl\n4XsCMnFfaub2PlMQubTpRY2zq0Z9O1Dl/UbXYu7gLnokWcwrYJEa6ftjizeh\nfZ1ynhpHZGcNUNcJ0sv3v3v+t8nIjLIfgmU1vHCQY3btTziKc3mI9Ook7I2q\n8RiLGI/Kh57Zaj6Cx1igIM/hr4aOVPi7KNQzTBEQTzzOwlGv22fMruXA2O99\nCFS4IidRcSfr8Zu/e9gjwuz4QdidPLIOEATIbCZlrAQHZk+lAATdUJ2+hLPH\nvFpj16zamuY4Xy70j4xVmBQSjU70L8GdIbzaLdc4XjvqdeBKk6Fm75o+DgNJ\nGKcOIFJZkHRNxmSvnRHNSx3lt8e5bTtZMw/AEcbrT8OHgD9E1RZ5xZvMIuMO\nL6de+O9HFhCVv1EHtJfKBchCv3eMCZsHDhxjtTvle0hLXKq+yP56JYmqKE+Q\nI9kMlErevRqDHpjN5P0tScv/yyx3+vqbJCsn25zmDBKabNudJiy94LQNTmwt\nMcb8\r\n=GR5y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICAn/KanyC1RrpXeKFbs5i+VoDu+/oZ0ppteCFTSpKiOAiA53wK5OjCaFbzcyJ5nhMjTNUpcKm7+8ASrpkc2xqecsg=="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_1.0.7_1562778698034_0.49285397080404647"},"_hasShrinkwrap":false},"1.0.8":{"name":"exredux","version":"1.0.8","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","redux":"4.0.1","rxjs":"6.5.2","react-redux":"7.0.3"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/enzyme":"^3.10.2","@types/jest":"^24.0.15","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-redux":"7.1.0","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-jest":"^24.8.0","babel-loader":"8.0.6","babel-plugin-transform-es2015-modules-commonjs":"6.26.2","babel-plugin-transform-typescript-metadata":"0.2.2","enzyme":"^3.10.0","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"5.16.0","html-webpack-plugin":"3.2.0","jest":"^24.8.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","redux-devtools-extension":"2.13.8","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","uglifyjs-webpack-plugin":"2.1.3","url-loader":"1.1.2","webpack":"4.35.0","webpack-cli":"3.3.5","webpack-dev-server":"3.7.2"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@1.0.8","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-Ii8ZZoCNIgkutaWv3FCatkIDmmqmRiKBLoOf8Dh+i10dNw/F3SNw6KHLdaERB4dkmxJptWc1YXimxf3Gjd3zHA==","shasum":"1a030f866c821bb065cf48fbaf1d28f073c71d78","tarball":"https://registry.npmjs.org/exredux/-/exredux-1.0.8.tgz","fileCount":23,"unpackedSize":366786,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLdBDCRA9TVsSAnZWagAAi4AQAIRYa8uCL6uUFh13exvO\nKQoDgLM6A6S7mv+eCuL+ZMckx5HgY6XKOvYKvXPEg4HmPYkkMjPkWHVw0IlK\nYZ9N08HMDZGJiTrZxl0tGRFFBQfwEQuIbOZyoJZifMRttJ4dU2JbbhYmhSNW\nvGFOcsgg7nnQOSLxB9VNMRZyQifGO884FbP+qQFP7RInx5qzDeuQyOzeqHPT\nxjgq3iXUijxbddFf7zN/06PdGmrW2YqLFsKDeNUSHXjbPJxC8WHBZa6yuzL9\nipvsPCHotskS0NQkq3GfX0TtOQc1Z+16HNRKp5KkkvbI00xnvGhcTVpyPdZm\nqHMjRSielyEH3Kexji9r2dIiaJMYNEtcpIgPa35y8dwo9+dQif/Oj7O7g96W\nmUh470bw63NL3SO30uM8auyrdnh/V4+Q0BKIBvF31Mxxtca3Tw8daydVX5Ez\nP7cNfjxelPEI/wqnjP8lVtLfX3h1t+NSdpZYvUqI2Bkseq/LKQ6bC1UJxah1\nk0V3q928wxZcevo1qHS4KPj5xykDQjRUdMRiGiXpalfrdjBO1AM+XOSZQV/U\n8eo5D5Ma/9XqHd1HqllvrvPeOVhSU83gXoMrVK/dTm7ZaBEdoDlx+I4ZDH+D\nmPZObNvNiQWJQYNoUkhBkZxMCbHarqFzQn7R+93eAcTfHa9PjkTxR0nPMj6v\nPaPL\r\n=gdYr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSTx5zT7yKmmMCSnIi2OmyWIq2uoL/DQ4ZDF668oQt6AIhAPPhgtzePYrLz3XPXYZEBtOtZngJn0onOrk/KOkSyh2D"}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_1.0.8_1563283522842_0.5473655643308686"},"_hasShrinkwrap":false},"1.0.9":{"name":"exredux","version":"1.0.9","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","redux":"4.0.1","rxjs":"6.5.2","react-redux":"7.0.3"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/enzyme":"^3.10.2","@types/jest":"^24.0.15","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-redux":"7.1.0","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-jest":"^24.8.0","babel-loader":"8.0.6","babel-plugin-transform-es2015-modules-commonjs":"6.26.2","babel-plugin-transform-typescript-metadata":"0.2.2","enzyme":"^3.10.0","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"5.16.0","html-webpack-plugin":"3.2.0","jest":"^24.8.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","redux-devtools-extension":"2.13.8","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","uglifyjs-webpack-plugin":"2.1.3","url-loader":"1.1.2","webpack":"4.35.0","webpack-cli":"3.3.5","webpack-dev-server":"3.7.2"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@1.0.9","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"dist":{"integrity":"sha512-u21S1UhD3i/Sr+4IeP+q6pndDlWOLzX0svmt4jr+msYzi2ckUS1A2eu9Q3GiijRSrNoHDkXaeA1LgSzwnpsHTQ==","shasum":"f1d22a2022528a1129af3c8b9a56b5ef84fd274a","tarball":"https://registry.npmjs.org/exredux/-/exredux-1.0.9.tgz","fileCount":23,"unpackedSize":367710,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdMGXuCRA9TVsSAnZWagAArjkP/0uN0WztD/RZn1ZfDVj9\nSbucADDUJEo8/K9rs9XvHGXLOPuiX7Ey/XWA1pLc7ePSDCZiRuq3+s0BolfV\nfWowsYmN3NVln9dOCT/QjXaRoWvEW4NhbzUWJ7mvCti2qcbfWLEiEE/g2sho\nG0WGDXP5vnvYXXjcdTmQbQ+YSibw3Au9cE/BGJZ45j/DlneKtZhuQsz9FrZf\n28cIlsm8q4iro8aB6nFUC/yfLDMU0Cn1CoNfqZkR+6oEvaPjpV2nvfngg1vl\n1NTVrQOE9HONAFAwfjzo5mHl3TNUJWJdXz6dQgpoYB+6aX94dlz1VYw0HdXG\n59rS3vsQPyrCMwAEangKNHrp10078R8wBfOMCOVukhR5iWoUdg+DTKAodcbb\nqqIjMHIsB2dl6F+gMflTUqjfQO063O79PPYmKj78ydEZPgsjHdsMQu69ExMl\n81J+jbXadXCulhIDlUPS/MCz71MxCJAlCCZrYEko/8Rp2KTKOz1E7id/daMG\nbnQiMg1Hr4gE9b36EI0SSPq4MPNPmXy/51Zc+bPC/UquclTNQbuXxCmlt+4o\nlUYUtO/OYXN7Sqmm1M3chUnAIEN3o5CQy/1ypO0b9xiyT85kzIjNeU2iea6n\nThaoTs45uKpRV+n4X3UyI6v/0k5rErG9Tw6xQxhw1dinrmdycc01wDOTyVp2\nOqa4\r\n=V4sg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBdjFNpUgPQcW14KF2qliHhq4LvsCMzcctFhfsH5NbQAIhAKt60wc+OrRn9w98jBXe5crZAJZ0NflVd8CZ9E5iW64Z"}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_1.0.9_1563452909612_0.16691779350895852"},"_hasShrinkwrap":false},"1.0.10":{"name":"exredux","version":"1.0.10","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","redux":"4.0.1","rxjs":"6.5.2","react-redux":"7.0.3"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/enzyme":"^3.10.2","@types/jest":"^24.0.15","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-redux":"7.1.0","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-jest":"^24.8.0","babel-loader":"8.0.6","babel-plugin-transform-es2015-modules-commonjs":"6.26.2","babel-plugin-transform-typescript-metadata":"0.2.2","enzyme":"^3.10.0","enzyme-adapter-react-16":"^1.14.0","enzyme-to-json":"^3.3.5","eslint":"5.16.0","html-webpack-plugin":"3.2.0","jest":"^24.8.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","redux-devtools-extension":"2.13.8","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","uglifyjs-webpack-plugin":"2.1.3","url-loader":"1.1.2","webpack":"4.35.0","webpack-cli":"3.3.5","webpack-dev-server":"3.7.2"},"keywords":["react","redux","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@1.0.10","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-WpGvRVYxLVqepiZ/8++GQLFSb6qAA8C0MS8nF0JHbmiweSJjgifLWf8/payEpUZw+JF7r3nrMvT7UjPmk7b1qw==","shasum":"18fc10f4fc5feefd7b97890605244356c885ec56","tarball":"https://registry.npmjs.org/exredux/-/exredux-1.0.10.tgz","fileCount":23,"unpackedSize":368003,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdbTrWCRA9TVsSAnZWagAAgDsP/jeNghaL+3hLBowgLCCa\nZFi08CjGR7EPGDrtN6FwwXdgH96zB7doFLITVbvQbVW45RVntF0OUEx+MA0i\n7HRyXlVv75txlowWtqIwa9EzJ0QwtWVpVw/fifvtxeMCjLB0kMT/tW5bYGlQ\noDs5Da5Xmbjb4YtCkuvd1ecQXBW0rEF+NVnn6C0VDwDG8y2hQr1yODzx9JSN\nEXq1kySDq5Xtxg5y/fkTqGfqV1S1g/qx67k+8KFzDlFqwF23Co4GYVtN/cdc\nYoIqD1BW6+y0EPa9Oe2GtIdc821NHipZJdxU1qLku364njtXYT5T+RKlwaji\nWqAPfZAUWmd6EjBW12s/Mqrj67pRf3g6aDZNbBtvWCyhI7yEzApi9dQdgsy8\n3EPDejVVcH5BaZ7UNXe+EmyNgF6BYf9Yi5ZgDUhS4xJrreMAwQ2BnYxocgpj\njrBpbc64MzFcDynRoIIaT3ppQrKlzULDpG8t5E093GmALukQL7A3Gue9WkH1\nbooJsyHKDUD7AWliT+9fj++83nTZUcglELQ5k0BVYr5kGX2QTBS16AkoPuWP\ntnCHtpLQHGX+ch4PlztLYPczfYJyiBIiG8PyxRphK3qxN7Kl4CTcrK+1RH/l\npwDwL2hz6phCluwTvVrozf2FUYSAK7n5G1/YZtpy7pBzLvZRN+Bdr4iuX26P\nqgTT\r\n=z7AG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCr/mi+VkYvEpH149QJH+bBc/abgPTAyS12ZPpYc2ROrwIhAPL9rg0U2yG5qEFv5UpjanUdiw1umT7sJyeyyjmjTfgn"}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_1.0.10_1567439573648_0.6291184914663057"},"_hasShrinkwrap":false},"2.0.0-beta.1":{"name":"exredux","version":"2.0.0-beta.1","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","rxjs":"6.5.2"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/enzyme":"^3.10.4","@types/jest":"^24.9.0","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-jest":"^24.9.0","babel-loader":"8.0.6","babel-plugin-transform-es2015-modules-commonjs":"6.26.2","babel-plugin-transform-typescript-metadata":"0.2.2","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"5.16.0","html-webpack-plugin":"3.2.0","jest":"^24.9.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","url-loader":"1.1.2","webpack":"4.41.5","webpack-cli":"3.3.10","webpack-dev-server":"3.10.1"},"keywords":["react","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","readme":"# EXREDUX\r\n\r\nAre u tired to create a lot of files with constants, actions, dispatchers and reducers?\r\n\r\n**Exredux** is the solution to ease your life by abstracting all react/redux logics with understable architecture.\r\n\r\nBased on library **redux-flow-mapper**, this package use decorators to create Models, Actions, Dependencies and much more.\r\n\r\n[![NPM](https://nodei.co/npm/exredux.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/exredux)\r\n\r\n## Install\r\n\r\n```bash\r\n# install ExRedux\r\nnpm i exredux\r\n```\r\n\r\n## Setup tsconfig and babelrc\r\n\r\nInclude support for decorators in the tsconfig.json file:\r\n\r\n```js\r\n{\r\n  \"compilerOptions\": {\r\n    ...\r\n    \"experimentalDecorators\": true,\r\n    \"emitDecoratorMetadata\": true\r\n  }\r\n}\r\n```\r\n\r\nExRedux uses Babel 7.x as base for transpilation/building and should be included the plugins below in the _.babelrc_ file.\r\nConsider these itens as firts in the plugins list and in the same order that appears below:\r\n\r\n```js\r\n\"presets\": [\r\n  \"@babel/react\",\r\n  \"@babel/typescript\",\r\n  [\"@babel/env\", { \"modules\": false }]\r\n],\r\n\"plugins\": [\r\n  \"babel-plugin-transform-typescript-metadata\",\r\n  [\"@babel/plugin-proposal-decorators\", { \"legacy\": true }],\r\n  [\"@babel/plugin-proposal-class-properties\", { \"loose\": true }],\r\n  \"@babel/plugin-proposal-object-rest-spread\"\r\n],\r\n```\r\n\r\n## Concept\r\n\r\nThis package is based in the common MVVM principles to control the activities in the frontend.\r\n\r\nAny action of the flow is build on ExRedux Models and were dispatched thru Connection and Inject to the Containers and Components.\r\n\r\n![Flow Chart Concept][img-flowchart]\r\n\r\n[img-flowchart]: https://github.com/debersonpaula/exredux/raw/master/docs/exredux.png\r\n\r\n## Models\r\n\r\nThe logic starts with the Model.\r\n\r\nThe _Model_ it's a simple class with properties and methods. And values that was set in the properties, acts as initial store for the reducer.\r\n\r\nThe reducer name will be the same as the class name.\r\n\r\n```ts\r\nimport { Model } from 'exredux';\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n}\r\n```\r\n\r\n## Actions\r\n\r\nThe _Action_ it's a method decorator and acts as dispatcher for the decorated method.\r\n\r\nAny method decored will be replaced by dispatcher function that emits an action with the name of method as type and the result of the original function, will be the payload to be stored in the reducer.\r\n\r\n```ts\r\nimport { Model, Action } from 'exredux';\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n\r\n  @Action add() {\r\n    this.counter += 1;\r\n  }\r\n}\r\n```\r\n\r\n## ModelStore\r\n\r\nThe main component of Exredux, the ModelStore act as dependency controller.\r\n\r\nAll models created should be listed in the models property:\r\n\r\n```ts\r\nimport { ModelStore } from 'exredux';\r\nimport { CounterModel } from './counter/CounterModel';\r\nimport { ListDataModel } from './listdata/ListDataModel';\r\n\r\nexport const appModels = new ModelStore({\r\n  devExtension: true, // enables redux-dev-extension for chrome\r\n  models: [CounterModel, ListDataModel]\r\n});\r\n```\r\n\r\nAlso, the variable that stores the ModelStore, must be used in the connection to provide the state and actions to the components.\r\n\r\n## Connection\r\n\r\nThe models will be available on component, thru the Connection decorator, that indicate the ModelStore and the model injection properties:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { CounterModel } from './CounterModel';\r\n\r\nclass ModelProps {\r\n  // Inject the model into property\r\n  @Inject counterModel?: CounterModel;\r\n}\r\n\r\n// make connection between state and component\r\n@Connection({\r\n  modelStore: appModels, // <-- model store location\r\n  props: ModelProps // <-- props with model injection\r\n})\r\nexport class Counter extends React.Component<ModelProps> {\r\n  render() {\r\n    const { counterModel } = this.props;\r\n    return (\r\n      <div>\r\n        Counter = {counterModel.counter}\r\n        <br />\r\n        <button onClick={counterModel.add}>Add</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## BaseHttpModel\r\n\r\nThese Actions are designed to be a Http-Promise based template.\r\nIs used Axios as http requester.\r\n\r\n```ts\r\nimport { Model, Action, BaseHttpModel } from 'exredux';\r\n\r\n// mocking http request\r\nconst httpDoneRequest = (label: string) =>\r\n  new Promise(resolve => {\r\n    setTimeout(() => {\r\n      resolve({ data: label });\r\n    }, 1500);\r\n  });\r\n\r\nconst httpErrorRequest = (errorMessage: string) =>\r\n  new Promise((_, reject) => {\r\n    setTimeout(() => {\r\n      reject({ message: errorMessage });\r\n    }, 1500);\r\n  });\r\n\r\n@Model\r\nexport class HttpHandlerModel extends BaseHttpModel<string> {\r\n  @Action getHttpTest(label: string) {\r\n    this.request(httpDoneRequest(label));\r\n  }\r\n\r\n  @Action getHttpTestError(label: string) {\r\n    this.request(httpErrorRequest(label));\r\n  }\r\n\r\n  // it can be used the internal method resetState\r\n  // to clear all state data for this model\r\n  @Action reset() {\r\n    this.resetState();\r\n  }\r\n}\r\n```\r\n\r\nTo connection in the http based model, use the same decorators _Connection_ and _Inject_ to get the data and states based on promise:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { HttpHandlerModel } from './HttphandlerModel';\r\n\r\nclass ModelProps {\r\n  @Inject httpHandlerModel?: HttpHandlerModel;\r\n}\r\n\r\n@Connection({\r\n  modelStore: appModels,\r\n  props: ModelProps\r\n})\r\nexport class HttpHandler extends React.Component<ModelProps> {\r\n  render() {\r\n    const { httpHandlerModel } = this.props;\r\n    return (\r\n      <div>\r\n        <button onClick={this.handleClick}>Http Done</button>\r\n        <button onClick={this.handleClickError}>Http Fail</button>\r\n        <button onClick={this.handleReset}>ResetState</button>\r\n\r\n        {httpHandlerModel.isCompleted ? <p>From http model => {httpHandlerModel.response.data}</p> : null}\r\n        {httpHandlerModel.isFailed ? <p>Error From http model => {httpHandlerModel.error.message}</p> : null}\r\n        {httpHandlerModel.isLoading ? <p>Loading...</p> : null}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  handleClick = () => {\r\n    this.props.httpHandlerModel.getHttpTest('test inserted from HttpComponent');\r\n  };\r\n\r\n  handleClickError = () => {\r\n    this.props.httpHandlerModel.getHttpTestError('error test inserted from HttpComponent');\r\n  };\r\n\r\n  handleReset = () => {\r\n    this.props.httpHandlerModel.reset();\r\n  };\r\n}\r\n```\r\n\r\nAlso, the class __BaseHttpModel__ inherits _responseAsync_ and _errorAsync_ from __BasePromiseModel__ that works as Observables from completed and failed (respectively) methods.\r\n\r\n## Dependency\r\n\r\nYou inject models in another models thru _Inject_ decorator:\r\n\r\n```tsx\r\nimport { Model, Action, Inject } from 'exredux';\r\nimport { CounterModel } from 'playground/counter/CounterModel';\r\n\r\n@Model\r\nexport class ListModel {\r\n  items: string[] = [];\r\n\r\n  // inject CounterModel inside ListModel\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Action add() {\r\n    this.counterModel.add();\r\n    this.items.push(`Item ${this.items.length} : Counter = ${this.counterModel.counter}`);\r\n  }\r\n}\r\n```\r\n\r\n## Events\r\n\r\nEvents are method interceptors that listen to the action completion.\r\n\r\nAnd is used to listen methods inside the class.\r\n\r\n```tsx\r\nimport { Model, Action, Event } from 'exredux';\r\n\r\n@Model\r\nexport class CounterModel {\r\n  counter = 0;\r\n  lastAction = '';\r\n\r\n  @Action add() {\r\n    this.counter += 1;\r\n  }\r\n\r\n  @Action del() {\r\n    this.counter -= 1;\r\n  }\r\n\r\n  @Event('add')\r\n  lastActionAdd() {\r\n    this.lastAction = 'add';\r\n  }\r\n\r\n  @Event('del')\r\n  lastActionDel() {\r\n    this.lastAction = 'del';\r\n  }\r\n}\r\n```\r\n\r\n## Triggers\r\n\r\nTriggers are similar to Event.\r\nThe difference it is used to trigger events from another models.\r\nThis triggers can't be used to listen itself.\r\n\r\n```tsx\r\nimport { Model, Inject, Trigger } from 'exredux';\r\nimport { CounterModel } from 'playground/counter/CounterModel';\r\n\r\n@Model\r\nexport class EventsModel {\r\n  message: string;\r\n\r\n  // dependency from another model\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Trigger(CounterModel, 'add') checkAddCounter() {\r\n    this.message = `Counter updated to = ${this.counterModel.counter}`;\r\n  }\r\n}\r\n```\r\n\r\nThe connection is the same as usual model:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { EventsModel } from './EventsModel';\r\n\r\nclass ModelProps {\r\n  @Inject eventsModel: EventsModel;\r\n}\r\ntype Props = Partial<ModelProps>;\r\n\r\n@Connection({\r\n  modelStore: appModels,\r\n  props: ModelProps\r\n})\r\nexport class Events extends React.Component<Props> {\r\n  render() {\r\n    const { eventsModel } = this.props;\r\n    return (\r\n      <div>\r\n        Example of Trigger\r\n        <br />\r\n        <p>Message = {eventsModel.message}</p>\r\n        <button onClick={eventsModel.checkAddCounter}>Manually get event</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\nAlso, the triggers dispatch action to redux state and does not require _Action_ decorator to do it.\r\n\r\n```tsx\r\n@Action // <=== NOT REQUIRED, Trigger already is an Action\r\n@Trigger\r\ndecorated() {\r\n  ...\r\n}\r\n```\r\n\r\n## Availability of methods in component props\r\n\r\nFunctions and property without decorator can be used in the model, but wil be not available to the connection props.\r\nThe reducer dispatcher breaks any method or property and the React component can not see those properties at the component side.\r\n\r\nTo reach the component side, use arrow function.\r\n\r\n```ts\r\n@Model\r\nexport class AvailabilityModel {\r\n  // invisible for components\r\n  makeSomething() {\r\n    ...\r\n  }\r\n\r\n  @Action\r\n  callMakeSomething() {\r\n    this.makeSomething();\r\n  }\r\n\r\n  // use arrow function to be visible at the component side\r\n  makeSomethingFromComponent = () => {\r\n    ...\r\n  }\r\n}\r\n```\r\n\r\n## State change guideline\r\n\r\nMethods without decorate changes the state only in the class and will not be dispatched to the redux store.\r\nBut can be used to calculate or change something until some point, and after that, call a decorated action to dispatch it to the store.\r\n\r\n```ts\r\n@Model\r\nexport class AvailabilityModel {\r\n  // change state internally only\r\n  changeSomething() {\r\n    this.stateData = 'something';\r\n  }\r\n\r\n  // change state internally\r\n  // and dispatch it to the store and components\r\n  @Action\r\n  changeAndDispatch() {\r\n    this.stateData = 'something changed';\r\n  }\r\n}\r\n```\r\n\r\n## Provider\r\n\r\nInstead using Provide from _react-redux_, use directly from **exredux**.\r\nIt's already provide encapsulation for the ModelStore and the redux Provider.\r\n\r\n```tsx\r\nimport * as React from 'react';\r\n\r\nimport { appModels } from './AppModels';\r\nimport { Counter } from './counter/Counter';\r\nimport { Provider } from 'exredux';\r\n\r\nexport class Sample extends React.Component {\r\n  public render() {\r\n    return (\r\n      <Provider store={appModels.createStore()}>\r\n        <div>\r\n          Test Application for ExRedux\r\n          <hr />\r\n          <Counter />\r\n        </div>\r\n      </Provider>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## Sample\r\n\r\nThe sample project is available in the source https://github.com/debersonpaula/exredux. Just install dependencies and run with `npm start`.\r\n\r\n![Changelog][changelog]\r\n\r\n[changelog]: https://github.com/debersonpaula/exredux/raw/master/CHANGELOG.md\r\n\r\n## License\r\n\r\n[MIT](LICENSE)\r\n","readmeFilename":"README.md","_id":"exredux@2.0.0-beta.1","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-49JmemR2G/jOqA4uqP1SBoKG9ftBKeZoNWzCee8JCwp216DRJiNB7GJWVgUU5IqobqUBZg9ZVCf2At0KoVDQNg==","shasum":"e2dff5e3d303bce1d7c27cff04a050d3eb236558","tarball":"https://registry.npmjs.org/exredux/-/exredux-2.0.0-beta.1.tgz","fileCount":24,"unpackedSize":218816,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeKYkcCRA9TVsSAnZWagAAI9EQAIG4RTiY0sY9n36qE1Kp\naPEpsvt1Gq005SYldjEHQbXNhIVzpG6Qo5MfpP97t2yO3SPWvm5XlNL82lhb\neEqurLNYQobXf6Q+pE+f1oH7ymvukHUQkZ4TMKdQeUo9VAMP6lH1oUBF5Vap\noU4NIj4G3APBqIFy8fnBXXL6OuO/9YSxtuncZN3rpKlpQRGB3TT3evRwUfqZ\nRO2g9LLR1R/mirBE/Llc2CQIpYiXD3BDG9RS2FafxEupoqmgiZi3IOycZgNc\nvH8Xh91/5/ikVnrN3OcGpmOzjX5df2TC71CNu9N9a82omeJajAbs9YlEaC3S\nL8xqeyFZpF6Ib6QNc6DNZnPHfC/LriB5ayQAn5dYW+e8xKGfdmkQN24pawGo\nDUfVvhiJRRIGCxonO7khQSSQJTZLV/8SO/v+jl2TdqLc5BPmHACpoUss+Kpf\npQBEKoZnZwc16hhBOzNIBySV0UVlra5JM7GejVh5iwj767byPlp3T20bfXFJ\nQ3ItRcZsjGnL4lxEp9FjJfZ4FusVZjaLLJ4l7VgXU0weFg6/5WJI1rsuNMwX\nYwScqpwRMnglXF6tT5qymlkfiSxzSfXugfZxEzTOgH3WtGaTMCrs/UnymbR/\nOYoxEWqITkqEi9dE/afw/D30lVlqBTMm7IXU+PXJFn9yVzcpezO41m1zgRH9\njMHj\r\n=vZUC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFTtFtDmvVwFi3Z1zvWARoPIsohPp0CnPQd9GQKUjxMBAiEAjKUI78f1NX1sUkut23ntqzj3TVbBd72DOiE2aL6lPr0="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_2.0.0-beta.1_1579780380501_0.1306760518002239"},"_hasShrinkwrap":false},"2.0.0-beta.2":{"name":"exredux","version":"2.0.0-beta.2","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","rxjs":"6.5.2"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/enzyme":"^3.10.4","@types/jest":"^24.9.0","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-jest":"^24.9.0","babel-loader":"8.0.6","babel-plugin-transform-es2015-modules-commonjs":"6.26.2","babel-plugin-transform-typescript-metadata":"0.2.2","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"5.16.0","html-webpack-plugin":"3.2.0","jest":"^24.9.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","url-loader":"1.1.2","webpack":"4.41.5","webpack-cli":"3.3.10","webpack-dev-server":"3.10.1"},"keywords":["react","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","readme":"# EXREDUX\r\n\r\nAre u tired to create a lot of files with constants, actions, dispatchers and reducers?\r\n\r\n**Exredux** is the solution to ease your life by abstracting all react/redux logics with understable architecture.\r\n\r\nBased on library **redux-flow-mapper**, this package use decorators to create Models, Actions, Dependencies and much more.\r\n\r\n[![NPM](https://nodei.co/npm/exredux.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/exredux)\r\n\r\n## Install\r\n\r\n```bash\r\n# install ExRedux\r\nnpm i exredux\r\n```\r\n\r\n## Setup tsconfig and babelrc\r\n\r\nInclude support for decorators in the tsconfig.json file:\r\n\r\n```js\r\n{\r\n  \"compilerOptions\": {\r\n    ...\r\n    \"experimentalDecorators\": true,\r\n    \"emitDecoratorMetadata\": true\r\n  }\r\n}\r\n```\r\n\r\nExRedux uses Babel 7.x as base for transpilation/building and should be included the plugins below in the _.babelrc_ file.\r\nConsider these itens as firts in the plugins list and in the same order that appears below:\r\n\r\n```js\r\n\"presets\": [\r\n  \"@babel/react\",\r\n  \"@babel/typescript\",\r\n  [\"@babel/env\", { \"modules\": false }]\r\n],\r\n\"plugins\": [\r\n  \"babel-plugin-transform-typescript-metadata\",\r\n  [\"@babel/plugin-proposal-decorators\", { \"legacy\": true }],\r\n  [\"@babel/plugin-proposal-class-properties\", { \"loose\": true }],\r\n  \"@babel/plugin-proposal-object-rest-spread\"\r\n],\r\n```\r\n\r\n## Concept\r\n\r\nThis package is based in the common MVVM principles to control the activities in the frontend.\r\n\r\nAny action of the flow is build on ExRedux Models and were dispatched thru Connection and Inject to the Containers and Components.\r\n\r\n![Flow Chart Concept][img-flowchart]\r\n\r\n[img-flowchart]: https://github.com/debersonpaula/exredux/raw/master/docs/exredux.png\r\n\r\n## Models\r\n\r\nThe logic starts with the Model.\r\n\r\nThe _Model_ it's a simple class with properties and methods. And values that was set in the properties, acts as initial store for the reducer.\r\n\r\nThe reducer name will be the same as the class name.\r\n\r\nBasically, the Model is only a class:\r\n\r\n```ts\r\nexport class CounterModel {\r\n  counter = 0;\r\n}\r\n```\r\n\r\n## Actions\r\n\r\nThe _Action_ it's a method decorator and acts as dispatcher for the decorated method.\r\n\r\nAny method decored will be replaced by dispatcher function that emits an action with the name of method as type and the result of the original function, will be the payload to be stored in the reducer.\r\n\r\n```ts\r\nimport { Action } from 'exredux';\r\n\r\nexport class CounterModel {\r\n  counter = 0;\r\n\r\n  @Action add() {\r\n    this.counter += 1;\r\n  }\r\n}\r\n```\r\n\r\n## ModelStore\r\n\r\nThe instatiator class _ModelStore_ was removed and is no longer needed to create instance of store. Instead, create a constant with all needed models and use it directly in the Provider component.\r\n\r\nAll models created should be listed in the models property:\r\n\r\n```ts\r\nimport { ModelStore } from 'exredux';\r\nimport { CounterModel } from './counter/CounterModel';\r\nimport { ListDataModel } from './listdata/ListDataModel';\r\n\r\nexport const appModels = [CounterModel, ListDataModel];\r\n```\r\n\r\nAlso, the variable that stores the ModelStore, must be used in the connection to provide the state and actions to the components.\r\n\r\n## Connection\r\n\r\nThe models will be available on component, thru the Connection decorator, that indicate the model injection properties:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { CounterModel } from './CounterModel';\r\n\r\nclass ModelProps {\r\n  // Inject the model into property\r\n  @Inject counterModel?: CounterModel;\r\n}\r\n\r\n// make connection between state and component\r\n@Connection(ModelProps)\r\nexport class Counter extends React.Component<ModelProps> {\r\n  render() {\r\n    const { counterModel } = this.props;\r\n    return (\r\n      <div>\r\n        Counter = {counterModel.counter}\r\n        <br />\r\n        <button onClick={counterModel.add}>Add</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## BaseHttpModel\r\n\r\nThese Actions are designed to be a Http-Promise based template.\r\nIs used Axios as http requester.\r\n\r\n```ts\r\nimport { Action, BaseHttpModel } from 'exredux';\r\n\r\n// mocking http request\r\nconst httpDoneRequest = (label: string) =>\r\n  new Promise(resolve => {\r\n    setTimeout(() => {\r\n      resolve({ data: label });\r\n    }, 1500);\r\n  });\r\n\r\nconst httpErrorRequest = (errorMessage: string) =>\r\n  new Promise((_, reject) => {\r\n    setTimeout(() => {\r\n      reject({ message: errorMessage });\r\n    }, 1500);\r\n  });\r\n\r\nexport class HttpHandlerModel extends BaseHttpModel<string> {\r\n  @Action getHttpTest(label: string) {\r\n    this.request(httpDoneRequest(label));\r\n  }\r\n\r\n  @Action getHttpTestError(label: string) {\r\n    this.request(httpErrorRequest(label));\r\n  }\r\n\r\n  // it can be used the internal method resetState\r\n  // to clear all state data for this model\r\n  @Action reset() {\r\n    this.resetState();\r\n  }\r\n}\r\n```\r\n\r\nTo connection in the http based model, use the same decorators _Connection_ and _Inject_ to get the data and states based on promise:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { HttpHandlerModel } from './HttphandlerModel';\r\n\r\nclass ModelProps {\r\n  @Inject httpHandlerModel?: HttpHandlerModel;\r\n}\r\n\r\n@Connection(ModelProps)\r\nexport class HttpHandler extends React.Component<ModelProps> {\r\n  render() {\r\n    const { httpHandlerModel } = this.props;\r\n    return (\r\n      <div>\r\n        <button onClick={this.handleClick}>Http Done</button>\r\n        <button onClick={this.handleClickError}>Http Fail</button>\r\n        <button onClick={this.handleReset}>ResetState</button>\r\n\r\n        {httpHandlerModel.isCompleted ? <p>From http model => {httpHandlerModel.response.data}</p> : null}\r\n        {httpHandlerModel.isFailed ? <p>Error From http model => {httpHandlerModel.error.message}</p> : null}\r\n        {httpHandlerModel.isLoading ? <p>Loading...</p> : null}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  handleClick = () => {\r\n    this.props.httpHandlerModel.getHttpTest('test inserted from HttpComponent');\r\n  };\r\n\r\n  handleClickError = () => {\r\n    this.props.httpHandlerModel.getHttpTestError('error test inserted from HttpComponent');\r\n  };\r\n\r\n  handleReset = () => {\r\n    this.props.httpHandlerModel.reset();\r\n  };\r\n}\r\n```\r\n\r\nAlso, the class **BaseHttpModel** inherits _responseAsync_ and _errorAsync_ from **BasePromiseModel** that works as Observables from completed and failed (respectively) methods.\r\n\r\n## Dependency\r\n\r\nYou inject models in another models thru _Inject_ decorator:\r\n\r\n```tsx\r\nimport { Action, Inject } from 'exredux';\r\nimport { CounterModel } from 'playground/counter/CounterModel';\r\n\r\nexport class ListModel {\r\n  items: string[] = [];\r\n\r\n  // inject CounterModel inside ListModel\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Action add() {\r\n    this.counterModel.add();\r\n    this.items.push(`Item ${this.items.length} : Counter = ${this.counterModel.counter}`);\r\n  }\r\n}\r\n```\r\n\r\n## Triggers (local)\r\n\r\nTriggers with only one parameter, is an event that interceps a listener to the action completion.\r\n\r\nAnd is used to listen methods inside the class.\r\n\r\n```tsx\r\nimport { Action, Event } from 'exredux';\r\n\r\nexport class CounterModel {\r\n  counter = 0;\r\n  lastAction = '';\r\n\r\n  @Action add() {\r\n    this.counter += 1;\r\n  }\r\n\r\n  @Action del() {\r\n    this.counter -= 1;\r\n  }\r\n\r\n  @Trigger('add')\r\n  lastActionAdd() {\r\n    this.lastAction = 'add';\r\n  }\r\n\r\n  @Trigger('del')\r\n  lastActionDel() {\r\n    this.lastAction = 'del';\r\n  }\r\n}\r\n```\r\n\r\n## Triggers (global)\r\n\r\nTrigger global are similar to Trigger local.\r\nThe difference it is used to trigger events from another models.\r\nThis triggers can't be used to listen itself.\r\n\r\n```tsx\r\nimport { Inject, Trigger } from 'exredux';\r\nimport { CounterModel } from '../counter/CounterModel';\r\n\r\nexport class EventsModel {\r\n  message: string;\r\n\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Trigger('add', CounterModel) checkAddCounter() {\r\n    this.message = `Counter updated to = ${this.counterModel.counter}`;\r\n  }\r\n}\r\n```\r\n\r\nThe connection is the same as usual model:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { EventsModel } from './EventsModel';\r\n\r\nclass ModelProps {\r\n  @Inject eventsModel: EventsModel;\r\n}\r\ntype Props = Partial<ModelProps>;\r\n\r\n@Connection(ModelProps)\r\nexport class Events extends React.Component<Props> {\r\n  render() {\r\n    const { eventsModel } = this.props;\r\n    return (\r\n      <div>\r\n        Example of Trigger\r\n        <br />\r\n        <p>Message = {eventsModel.message}</p>\r\n        <button onClick={eventsModel.checkAddCounter}>Manually get event</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\nAlso, the triggers dispatch action to redux state and does not require _Action_ decorator to do it.\r\n\r\n```tsx\r\n@Action // <=== NOT REQUIRED, Trigger already is an Action\r\n@Trigger\r\ndecorated() {\r\n  ...\r\n}\r\n```\r\n\r\n## Availability of methods in component props\r\n\r\nFunctions and property without decorator can be used in the model, but wil be not available to the connection props.\r\nThe reducer dispatcher breaks any method or property and the React component can not see those properties at the component side.\r\n\r\nTo reach the component side, use arrow function.\r\n\r\n```ts\r\nexport class AvailabilityModel {\r\n  // invisible for components\r\n  makeSomething() {\r\n    ...\r\n  }\r\n\r\n  @Action\r\n  callMakeSomething() {\r\n    this.makeSomething();\r\n  }\r\n\r\n  // use arrow function to be visible at the component side\r\n  makeSomethingFromComponent = () => {\r\n    ...\r\n  }\r\n}\r\n```\r\n\r\n## State change guideline\r\n\r\nMethods without decorate changes the state only in the class and will not be dispatched to the redux store.\r\nBut can be used to calculate or change something until some point, and after that, call a decorated action to dispatch it to the store.\r\n\r\n```ts\r\nexport class AvailabilityModel {\r\n  // change state internally only\r\n  changeSomething() {\r\n    this.stateData = 'something';\r\n  }\r\n\r\n  // change state internally\r\n  // and dispatch it to the store and components\r\n  @Action\r\n  changeAndDispatch() {\r\n    this.stateData = 'something changed';\r\n  }\r\n}\r\n```\r\n\r\n## Provider\r\n\r\nInstead using Provide from _react-redux_, use directly from **exredux**.\r\nIt's already provide encapsulation for the React contexts.\r\n\r\n```tsx\r\nimport * as React from 'react';\r\n\r\nimport { appModels } from './AppModels';\r\nimport { Counter } from './counter/Counter';\r\nimport { Provider } from 'exredux';\r\n\r\nexport class Sample extends React.Component {\r\n  public render() {\r\n    return (\r\n      <Provider models={appModels}>\r\n        <div>\r\n          Test Application for ExRedux\r\n          <hr />\r\n          <Counter />\r\n        </div>\r\n      </Provider>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## Sample\r\n\r\nThe sample project is available in the source https://github.com/debersonpaula/exredux. Just install dependencies and run with `npm start`.\r\n\r\n![Changelog][changelog]\r\n\r\n[changelog]: https://github.com/debersonpaula/exredux/raw/master/CHANGELOG.md\r\n\r\n## License\r\n\r\n[MIT](LICENSE)\r\n","readmeFilename":"README.md","_id":"exredux@2.0.0-beta.2","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ygmoo90lRI9WAYz3KvrhjhzfCPeiC4cvD3AgX19Xly5afn3Fwa3LMOvX5iztX4pZUu7XP6Pd3Ypn2hy953JZnQ==","shasum":"0fd7ab36d26f484eaa2880fa9492082fab1ee609","tarball":"https://registry.npmjs.org/exredux/-/exredux-2.0.0-beta.2.tgz","fileCount":25,"unpackedSize":220522,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeKdW1CRA9TVsSAnZWagAAoXYP+QEXTG+hx40H++EVVqY7\nQRLNv65VB9G90zI8ytVbct1p3wM7JVB2zBiWsn5nFZu3cYE2D9R9e9AQA4X+\nh2L7SxxR4IHXLXvsRCApXA+Y/vTI030JIYJg9dVXddzpSgzdQeZnYOVY+W95\nJwKDbGvBcFcBo6Ds+IiUUar9NQ06t058be7kk+1NRV61zY+UmtKy5KhHrHdP\n5xQ6e1Tx1jUXD39nc7hv3Yu8cLJPs7IWWRJNHhV4q00//0rGQlI+L21JWxJ9\n2gHhm8E6czhW2UAHa1M2xZqZe5sXN8cN12I7Yv/hJKH60RdzPmyniHROuPok\nFnAiQ6zpMiHsWJc9sPZHBcuOslcxtqSa8wV/bdE6MKOUGVUygOLaOV/z/vq5\nbrTlj429l3hDjQILd4ZgRi96XwCOQbhrv/VrOSr37K2iA4II8iT2GIurxvIx\nzFasrSCNl9gQtDbUPM0LV1N43zfDqu0tbyDo55U3Xwz8uMQEfa7XvBS5Z+xn\naBv9KOvQQdvSpRzEjj4EhmJAHLYNCeSZ5NoLPlOM7yetH6J/FVOueE40HSa/\nehFAYd2RZ34MSnbZXIaDgqWYkoaVSInvlhlBg51N+bJZnvNk8OtShqNJBZFE\n+4pl95hskgGIxzEJNW2UCmjECpMj6CjhNLZno4cWHoSYg2Y79DhCPQOP69bN\nCIR7\r\n=s+6T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIETpkc7FnmH57OPjaUKS4trv5fIiMj5flGWeAcx7pdvBAiEAmnWR1FNCTcqvwQHbA/c/M/9v1Hi8DpqbrLB6EXb4nYc="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_2.0.0-beta.2_1579799989157_0.7390434976906062"},"_hasShrinkwrap":false},"2.0.0":{"name":"exredux","version":"2.0.0","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","rxjs":"6.5.2"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/enzyme":"^3.10.4","@types/jest":"^24.9.0","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-jest":"^24.9.0","babel-loader":"8.0.6","babel-plugin-transform-es2015-modules-commonjs":"6.26.2","babel-plugin-transform-typescript-metadata":"0.2.2","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"5.16.0","html-webpack-plugin":"3.2.0","jest":"^24.9.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","url-loader":"1.1.2","webpack":"4.41.5","webpack-cli":"3.3.10","webpack-dev-server":"3.10.1"},"keywords":["react","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@2.0.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-MPecd66UUTjFtoQtQtsuBewzugHXg3IPNKXJ385LsZPEFxiDzWQdWl1qlOQHA8usVnTejHKmvT3nDwqfGKnbcw==","shasum":"e3ada0afa8c4a99bfd08bbe7b3d54fc2acefd963","tarball":"https://registry.npmjs.org/exredux/-/exredux-2.0.0.tgz","fileCount":25,"unpackedSize":220515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeKd1hCRA9TVsSAnZWagAAPOYP/1PKwsKm3JlCcjraMtPz\ndMGwdYItdd6+dNDxNwWxF11Q+fGUv44Zpdiwj0UeeWAVB+DQdC2WMLmrSdRS\nz7dC0oOqaNEQjHXT2km+pVPUmYtvdTEsc3I3izQplYrxR9bAgu8Oj1ZJs4J7\nN8qinUr24N4cJm1t2PJBtnd0SngrYCQtEbR6bNjqPuw7WcsxRhwcuyoLE4J/\npSXf4qeQbmk8qJPFLoPJHMXs33tpKxm7eJ5S0j3URyAAm3wTYFjK29pEKR4+\nmPaekFCGhTXM0S5OOGPXhbX5gZbU9lWMkfyu9TR5xrpVCXQ96Uh6cFcSxu+P\nMbiE5zOq8Jk28bwW/RuTUNO81B+4vOp56Xxk1qnnoRZKZYBrKbjWEPyri6qv\nyvcc9t3TJFyfUj75OdbCURLRz2zG5zVwRQR502x4DjE1X7dQUDut06MHvdzb\npcskeJYkjvV4SK+2zyML9BiB/r97XO2Dl1f8XxUN/T4mb/e5vlRv6RvtvorK\nCpuC4OOWZRLq24z5y4F0RFwFHavr23JzKpaCoRBVr0c00swanWreu0HR7Bff\n2loa+onnd2PktovfFZArgpzNQ0mltqxdRWIARCcUiVtYlmYt97j0SwIe3qxA\nm7Mn0kddpmhTVgscubdIEhiMnuVlYnr0/u0JWw24eGDBqGnR7yskZVm+m6bH\nSQfp\r\n=wbi0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBXfDBrenwcVDNzxraj52y53/Howe1xwpb2WYC67a9wNAiB3wkQwfdtE2RzlGpMbKlCtMFErAI8EDpUkTTx2cQWFRw=="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_2.0.0_1579801953466_0.1640023699950368"},"_hasShrinkwrap":false},"2.0.1":{"name":"exredux","version":"2.0.1","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","rxjs":"6.5.2"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/enzyme":"^3.10.4","@types/jest":"^24.9.0","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-jest":"^24.9.0","babel-loader":"8.0.6","babel-plugin-transform-es2015-modules-commonjs":"6.26.2","babel-plugin-transform-typescript-metadata":"0.2.2","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"5.16.0","html-webpack-plugin":"3.2.0","jest":"^24.9.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","url-loader":"1.1.2","webpack":"4.41.5","webpack-cli":"3.3.10","webpack-dev-server":"3.10.1"},"keywords":["react","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@2.0.1","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-SAchKdXkQQaz+6/gEiF2mUGPUBT1TVY/+svjSA4ZVf3g8s0dW86jDUyxZ2ST8vbciIitwLC/K7VclF2MnXWqHQ==","shasum":"a1edb3e09af6b7ce22d75797cd9ad1d29f3ea261","tarball":"https://registry.npmjs.org/exredux/-/exredux-2.0.1.tgz","fileCount":25,"unpackedSize":220728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXRkdCRA9TVsSAnZWagAAfhUP/371DAnRMeTRpp4URMkq\nlvrqqvyx/KL5cScTktllbDkrKRNMQtFWgym4ZnNAnJKLaRpoBR9nVZCgW8Ym\nZYNl8FcJYozMMxrXpihliogYGcibxL+32DApKao8ocbspTgyM2vzwpse/NGM\noAh1zDoHhpLpHG+9IsU6fHJ6PrIClpJgJ024j3Ha23ZrTbGV5N9qQ2VSHWd+\nyHMxIfPzinM6DFcZmtEK1zP2HxNoKuVccq0K3f73unGTyPKi7/x4+9gRtEaS\nbPkjPtMcmFiyK/lp3hgdaQQCuaimdSOklj5jz9NwlYgYntt8E4MwWzfABQDS\nvl6Ozr/+JLPCdWTCb4C6ELPyQMFim17CvjnCsH4HmYuM3FYk1NSTWBxgPqxl\nQ0DE+DrGQZhYD0EcPCdGCF9VlRp3pVkCfc3ZHb6ITIHGmteNx3Qodf/3HOXc\nEgPA89nhfSq0vWb8kEvTyBPrJon3a/T1eBHFa9tfpaL2HkyaC6MP6wUGkLI4\nrlDtzzVEiT3n3DZU7OK+GPLyzlBHIqqXzHiHUOkUNbhFVUbvDpRhNRbFJ5KK\nw6PZtxPMlSXvfCAbOyAJ1dNHvBjLfYOari3gRZbaNUIL7znJBApfCQFufETc\nzqssWTaUc0m8FUjzD+AOAJFj6Nq+8j4ZGbdVM1Dx7ag6XXQyegtVkSldejbW\nhcQB\r\n=Oy25\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNZY5qzRsl0w4M3Mtook5OJ+5JB10EsgaZwslWhVsZYAIhAINRT4NYb7TIS+CLwCZsN5MnfeWC4t6MTEZOE7PnZ6zx"}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_2.0.1_1583159580965_0.2706625586404987"},"_hasShrinkwrap":false},"2.0.2":{"name":"exredux","version":"2.0.2","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","rxjs":"6.5.2"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/enzyme":"^3.10.4","@types/jest":"^24.9.0","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-jest":"^24.9.0","babel-loader":"8.0.6","babel-plugin-transform-es2015-modules-commonjs":"6.26.2","babel-plugin-transform-typescript-metadata":"0.2.2","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"5.16.0","html-webpack-plugin":"3.2.0","jest":"^24.9.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","url-loader":"1.1.2","webpack":"4.41.5","webpack-cli":"3.3.10","webpack-dev-server":"3.10.1"},"keywords":["react","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@2.0.2","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+r5TGqAnFOTPb+sYRbef3YoHnVRxJLOy68t4R0nTw3jju3Q7IqFREx8A2i/eP0EPjJJlYdSR0OGTdTeAg9m1gQ==","shasum":"f986d6981764b27d03cdb234e9fd809bc1f9a3b1","tarball":"https://registry.npmjs.org/exredux/-/exredux-2.0.2.tgz","fileCount":27,"unpackedSize":226278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXX98CRA9TVsSAnZWagAAzfwP/Rihem5koxM6m2p+nZI3\niuXz1gI5qOXAE3E4hw7CNNPYPCstb9v8XkPHl8G45AXCk0+jo9OwJaz+ny+S\nxr+JrBX8i+L9ji/UIE2NqV/oPLTDnz+sQXtjHIEeNZn2Pq6V/BJOEm6y9sF5\nn6WeZL0TQNwxtRWJXwlDDFwThlIxtDyXrA8IsCcl2Dupom2xQ2NCVAobLZQp\nrn4sxUom6zRDw1qFL2LHbq/5+XJs4BJ5UNrSRrHb4NpB/dIsWFPawLxohxql\n271xx2aPYt1TamsuK1Q16GQ60UrYQ0vmqC8Focbi6OkPWk03cnK5tgpKMnSJ\ng5PhQpMS1XtbNaPQaAejqzB5iN1v/0D5WSEcu78nTu8fWmMeGY4JOjKuoVSR\nae691IwgakmYZ88kpkj3eqLNMn8G3xKo+sK2KuZ7g8ldfDhw0BxJWZxkg8oa\nCj04IBIyFO/iw4kcBE6YSy5+6SWCzj4pIWw6j7h5KuRdX1d/9d9IXC4T43LP\nVM6B0+tugN8+MVuSbxmMtAvKjVQzbNj7MBGt4qrHsc7gn/AIe/Z59wfwsSS4\n3i5B+KEVpLl5PTNtVJxcRfha6JyEEG5SE56oW4SsGtG9xUXVj89wcBATUn6k\n6SGtZkCiSrbLv62cTKjpA3MBWxKFjqldi8WgO2hUK5s9JNx+ovKn4t8CBXfc\n3SGj\r\n=pEpw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICQHxK7bqmvZ4Jt48hLuRBvBYYLxce+vM9nJE7H6FWoKAiBBmvs+GSFU6SeCWv5iyzfiBICyFj3wLmcVMEY6jVf9Ag=="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_2.0.2_1583185787476_0.3166614450502656"},"_hasShrinkwrap":false},"2.0.3":{"name":"exredux","version":"2.0.3","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","rxjs":"6.5.2"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/enzyme":"^3.10.4","@types/jest":"^24.9.0","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-jest":"^24.9.0","babel-loader":"8.0.6","babel-plugin-transform-es2015-modules-commonjs":"6.26.2","babel-plugin-transform-typescript-metadata":"0.2.2","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"5.16.0","html-webpack-plugin":"3.2.0","jest":"^24.9.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","url-loader":"1.1.2","webpack":"4.41.5","webpack-cli":"3.3.10","webpack-dev-server":"3.10.1"},"keywords":["react","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@2.0.3","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-29lD96SluWcJcSKN8+8d9HSmBBHPs1pz6cQzWBhK0E7cOyOJLL6/g0R2T6RK/knPLsOuFrPiQFp0/uNdpsrXHw==","shasum":"2797430875cf25326bb0a6091524fc0fbdb4e057","tarball":"https://registry.npmjs.org/exredux/-/exredux-2.0.3.tgz","fileCount":27,"unpackedSize":226263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXj5bCRA9TVsSAnZWagAAPqcP/RvPk3R+zUUngwuAw7tA\nw94geBhsWEaWZ6apgcgpBtlMB9c0A5/0rNcycmV3sBB7AQAy/qnQeXZzj6eE\nUT2A9H5ZCBWEz+co1x1OlqxcpUwWMiLqgu9KCNZpOqB92YjZaHg6mVBLdtrU\nq6pf4kXPV3Z4DbrzsM0JCHTKqqLlF4y8Aq6X6+CG37KpdgEFI5KC+bsfiGM9\nL4Ujc0j5e4zvGfrGPYVsrh6Q2I+X/O6R5LppKjBoA2wSMNqHOD8LgecrcBVJ\n8i7nxuTR7YHyYZlXEUe4/M54bW5gf3xtF2H1SlirrRy9kqLpCKfr/8+TNb97\nr3KhKx50rXD72ZUsPhL7LKVSUEi0qI5vTx34kAT41MM5p6ZV16I4q3FzoKJo\nPEStZA6uetSNPK+ux5vCGgUM1hdq+qQ8OJLHmk9lH4QZSjh2f3+bS4o/dDCk\njEL5YPMJlxmucdkguEaoEXe+cZ5O9d4c+RaP29pukoEEYKxmMNtZImojvcOa\nC32nxfsFOnr8NlbCZKffHrg5/RivLyoNFlBgrVAQAHhIuOycUF9N5pXN4/gA\nze5uy3Ff+iTJcJDK3rKS7VqFmJx0C+81Xj3tPP5HlcyVPTtQlaIP9qX+ED65\n5AAHkkxKAc7ygrNi4BMFHsDWVQujBS+4E16m8QO50yMmIwY2NL+e4+3lZeLY\nYWPh\r\n=yIe0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEM7FSpbOQmemMC5MPI2zrbYvlgoNabP+LVnphsuq813AiEAqPcx9kKKN8LlnBNpU5K6jr7aTxhZK2ngqEugap7PPfQ="}]},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_2.0.3_1583234651006_0.2622725812554261"},"_hasShrinkwrap":false},"2.0.4":{"name":"exredux","version":"2.0.4","description":"React-Redux Model Store Library","main":"index.js","scripts":{},"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","peerDependencies":{"react":">=16.0.0","react-dom":">=16.0.0","typescript":">=3.0.0"},"dependencies":{"axios":"0.19.0","rxjs":"6.5.2"},"devDependencies":{"@babel/core":"7.4.5","@babel/plugin-proposal-class-properties":"7.4.4","@babel/plugin-proposal-decorators":"7.4.4","@babel/plugin-proposal-object-rest-spread":"7.4.4","@babel/plugin-transform-modules-commonjs":"7.4.4","@babel/preset-env":"7.4.5","@babel/preset-react":"7.0.0","@babel/preset-typescript":"7.3.3","@types/enzyme":"^3.10.4","@types/jest":"^24.9.0","@types/react":"16.8.22","@types/react-dom":"16.8.4","@types/react-router-dom":"4.3.4","acorn":"6.1.1","awesome-typescript-loader":"5.2.1","babel-core":"6.26.3","babel-jest":"^24.9.0","babel-loader":"8.0.6","babel-plugin-transform-es2015-modules-commonjs":"6.26.2","babel-plugin-transform-typescript-metadata":"0.2.2","enzyme":"^3.11.0","enzyme-adapter-react-16":"^1.15.2","enzyme-to-json":"^3.4.3","eslint":"5.16.0","html-webpack-plugin":"3.2.0","jest":"^24.9.0","react":"16.8.6","react-dom":"16.8.6","react-router-dom":"4.3.1","reflect-metadata":"0.1.13","source-map-loader":"0.2.4","tslint":"5.13.1","tslint-config-airbnb":"5.11.0","tslint-config-prettier":"1.18.0","tslint-react":"3.6.0","tslint-react-a11y":"1.0.0","typescript":"3.5.2","url-loader":"1.1.2","webpack":"4.41.5","webpack-cli":"3.3.10","webpack-dev-server":"3.10.1"},"keywords":["react","flow","mapper","typescript"],"directories":{"doc":"docs"},"repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"},"homepage":"https://github.com/debersonpaula/exredux#readme","_id":"exredux@2.0.4","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-O5+DParblaFvYwwLC+pWYlNwRKtdqaxmUncgt3+J6JxU0P5RvKqzow8Z8FVReE7ccj1l9LFrfDJ9gthmBKtahg==","shasum":"8ff5a82466326700c979bea1ed3fe3551276dee9","tarball":"https://registry.npmjs.org/exredux/-/exredux-2.0.4.tgz","fileCount":27,"unpackedSize":227189,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPmg5CRA9TVsSAnZWagAAvZ0QAIoVNxPo380iHsWxfMPy\n0OcgZlraUGvfPZ4z9S7HqJzH3QSgMOCv8R9ZiSpEccrfGUzyRc1yb03IPBQQ\nVpsIJ7lb/QI06yZnqO7LW9gRBmzKItKbOO4Nm5KIqavF5OljXotGzHgqCigq\nwaSWSEQ+sXgcIbUt1E4rkELwJFg6KNOCV1rRoZ8aGrqMhQtuXvenjXkNoLTL\nqf7qy82FM2INjHNP4cegD4m+4JIJ5KCbrBngNhp1wxGtTLcJ08+P6Q/8aGK7\n7YzO9BCS/yk/nJsI+vaEYaf13r1wK1RPQUheFInONY+LTN8XtXabPRMsBCvy\nq99wXH2xHeQcYeLqiFZDihf8zGQdRRlw63ADFU+glZ0AbEkL0/W6tP8uDN7c\nKR+6X8DujCbWZBtaBU5fYzCtCqa1ih/lla6+lsTgO+nuB3oBxSeu3K19kHeq\nTx5EnlTaADcyFttBFaoSWuv7PTFI6W+9DTLIRi6MLzO5sugSGjr4JItGs3Fp\nBdkjoLz6O+dcNfIpS/iP7RjhjgtIhpxeTfdtONeKxhoFT1TRiiH69Qqb30X1\nLpX4zbPeYS9tV/M6tKsre4O0L5BOZnwz1SK+ca2NNIuY5NM10UcoWdu5jr+S\nbblBCn5QWsh1lgiOv84yUBjVo8cyQqfhmko9lzN0hgsPJp8MeQU48pwhluhs\nYEcl\r\n=81B1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFKisKNej1C+zvNCogrqGVdNuoPMY3nW8BqrjnD4VKIbAiBDh0+sUMSGszdBOpK2az8qwGfE9JosGM8gZct0CQJnYQ=="}]},"_npmUser":{"name":"deberson.paula","email":"deberson.paula@gmail.com"},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/exredux_2.0.4_1614702649190_0.7389786547080432"},"_hasShrinkwrap":false}},"time":{"created":"2019-04-17T20:54:06.649Z","0.0.1-beta.1":"2019-04-17T20:54:06.794Z","modified":"2022-05-02T00:36:49.374Z","0.0.1-beta.2":"2019-04-17T21:05:55.498Z","0.0.1-beta.3":"2019-04-17T21:14:05.705Z","0.0.1-beta.4":"2019-04-18T12:26:53.954Z","0.0.1-beta.5":"2019-04-22T17:41:50.650Z","0.0.1-beta.6":"2019-04-29T14:14:03.181Z","0.0.1-beta.7":"2019-05-06T19:05:36.455Z","0.0.1":"2019-05-07T15:08:37.335Z","0.0.2":"2019-05-13T21:47:37.808Z","0.0.3":"2019-05-17T21:34:10.123Z","0.0.4":"2019-05-21T17:38:01.954Z","0.0.5":"2019-05-22T11:27:57.112Z","0.1.0-beta.1":"2019-06-03T12:17:00.087Z","0.1.0-beta.2":"2019-06-03T15:12:25.253Z","0.1.0-beta.3":"2019-06-03T15:13:28.434Z","0.1.0-beta.4":"2019-06-03T15:25:28.914Z","0.1.0-beta.5":"2019-06-04T11:56:48.388Z","0.1.0-beta.6":"2019-06-04T12:02:07.570Z","0.1.0-beta.7":"2019-06-04T13:58:55.166Z","1.0.0":"2019-06-04T15:18:30.827Z","1.0.1":"2019-06-04T21:11:47.358Z","1.0.2":"2019-06-04T23:23:32.984Z","1.0.3":"2019-06-05T20:38:53.912Z","1.0.4":"2019-06-06T20:58:08.678Z","1.0.5":"2019-06-26T13:25:07.233Z","1.0.6-rc.1":"2019-06-26T14:55:28.274Z","1.0.6":"2019-06-26T15:16:15.642Z","1.0.7":"2019-07-10T17:11:38.184Z","1.0.8":"2019-07-16T13:25:22.948Z","1.0.9":"2019-07-18T12:28:29.872Z","1.0.10":"2019-09-02T15:52:53.802Z","2.0.0-beta.1":"2020-01-23T11:53:00.676Z","2.0.0-beta.2":"2020-01-23T17:19:49.316Z","2.0.0":"2020-01-23T17:52:33.588Z","2.0.1":"2020-03-02T14:33:01.123Z","2.0.2":"2020-03-02T21:49:47.567Z","2.0.3":"2020-03-03T11:24:11.200Z","2.0.4":"2021-03-02T16:30:49.424Z"},"maintainers":[{"name":"deberson.paula","email":"deberson.paula@gmail.com"}],"description":"React-Redux Model Store Library","keywords":["react","flow","mapper","typescript"],"author":{"name":"D.A.Paula","email":"deberson.paula@gmail.com"},"license":"MIT","readme":"# EXREDUX\r\n\r\nAre u tired to create a lot of files with constants, actions, dispatchers and reducers?\r\n\r\n**Exredux** is the solution to ease your life by abstracting all react/redux logics with understable architecture.\r\n\r\nBased on library **redux-flow-mapper**, this package use decorators to create Models, Actions, Dependencies and much more.\r\n\r\n[![NPM](https://nodei.co/npm/exredux.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/exredux)\r\n\r\n## Install\r\n\r\n```bash\r\n# install ExRedux\r\nnpm i exredux\r\n```\r\n\r\n## Setup tsconfig and babelrc\r\n\r\nInclude support for decorators in the tsconfig.json file:\r\n\r\n```js\r\n{\r\n  \"compilerOptions\": {\r\n    ...\r\n    \"experimentalDecorators\": true,\r\n    \"emitDecoratorMetadata\": true\r\n  }\r\n}\r\n```\r\n\r\nExRedux uses Babel 7.x as base for transpilation/building and should be included the plugins below in the _.babelrc_ file.\r\nConsider these itens as firts in the plugins list and in the same order that appears below:\r\n\r\n```js\r\n\"presets\": [\r\n  \"@babel/react\",\r\n  \"@babel/typescript\",\r\n  [\"@babel/env\", { \"modules\": false }]\r\n],\r\n\"plugins\": [\r\n  \"babel-plugin-transform-typescript-metadata\",\r\n  [\"@babel/plugin-proposal-decorators\", { \"legacy\": true }],\r\n  [\"@babel/plugin-proposal-class-properties\", { \"loose\": true }],\r\n  \"@babel/plugin-proposal-object-rest-spread\"\r\n],\r\n```\r\n\r\n## Concept\r\n\r\nThis package is based in the common MVVM principles to control the activities in the frontend.\r\n\r\nAny action of the flow is build on ExRedux Models and were dispatched thru Connection and Inject to the Containers and Components.\r\n\r\n![Flow Chart Concept][img-flowchart]\r\n\r\n[img-flowchart]: https://github.com/debersonpaula/exredux/raw/master/docs/exredux.png\r\n\r\n## Models\r\n\r\nThe logic starts with the Model.\r\n\r\nThe _Model_ it's a simple class with properties and methods. And values that was set in the properties, acts as initial store for the reducer.\r\n\r\nThe reducer name will be the same as the class name.\r\n\r\nBasically, the Model is only a class:\r\n\r\n```ts\r\nexport class CounterModel {\r\n  counter = 0;\r\n}\r\n```\r\n\r\n## Actions\r\n\r\nThe _Action_ it's a method decorator and acts as dispatcher for the decorated method.\r\n\r\nAny method decored will be replaced by dispatcher function that emits an action with the name of method as type and the result of the original function, will be the payload to be stored in the reducer.\r\n\r\n```ts\r\nimport { Action } from 'exredux';\r\n\r\nexport class CounterModel {\r\n  counter = 0;\r\n\r\n  @Action add() {\r\n    this.counter += 1;\r\n  }\r\n}\r\n```\r\n\r\n## ModelStore\r\n\r\nThe instatiator class _ModelStore_ was removed and is no longer needed to create instance of store. Instead, create a constant with all needed models and use it directly in the Provider component.\r\n\r\nAll models created should be listed in the models property:\r\n\r\n```ts\r\nimport { ModelStore } from 'exredux';\r\nimport { CounterModel } from './counter/CounterModel';\r\nimport { ListDataModel } from './listdata/ListDataModel';\r\n\r\nexport const appModels = [CounterModel, ListDataModel];\r\n```\r\n\r\nAlso, the variable that stores the ModelStore, must be used in the connection to provide the state and actions to the components.\r\n\r\n## Connection\r\n\r\nThe models will be available on component, thru the Connection decorator, that indicate the model injection properties:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { CounterModel } from './CounterModel';\r\n\r\nclass ModelProps {\r\n  // Inject the model into property\r\n  @Inject counterModel?: CounterModel;\r\n}\r\n\r\n// make connection between state and component\r\n@Connection(ModelProps)\r\nexport class Counter extends React.Component<ModelProps> {\r\n  render() {\r\n    const { counterModel } = this.props;\r\n    return (\r\n      <div>\r\n        Counter = {counterModel.counter}\r\n        <br />\r\n        <button onClick={counterModel.add}>Add</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## BaseHttpModel\r\n\r\nThese Actions are designed to be a Http-Promise based template.\r\nIs used Axios as http requester.\r\n\r\n```ts\r\nimport { Action, BaseHttpModel } from 'exredux';\r\n\r\n// mocking http request\r\nconst httpDoneRequest = (label: string) =>\r\n  new Promise(resolve => {\r\n    setTimeout(() => {\r\n      resolve({ data: label });\r\n    }, 1500);\r\n  });\r\n\r\nconst httpErrorRequest = (errorMessage: string) =>\r\n  new Promise((_, reject) => {\r\n    setTimeout(() => {\r\n      reject({ message: errorMessage });\r\n    }, 1500);\r\n  });\r\n\r\nexport class HttpHandlerModel extends BaseHttpModel<string> {\r\n  @Action getHttpTest(label: string) {\r\n    this.request(httpDoneRequest(label));\r\n  }\r\n\r\n  @Action getHttpTestError(label: string) {\r\n    this.request(httpErrorRequest(label));\r\n  }\r\n\r\n  // it can be used the internal method resetState\r\n  // to clear all state data for this model\r\n  resetThisModel() {\r\n    this.reset();\r\n  }\r\n}\r\n```\r\n\r\nTo connection in the http based model, use the same decorators _Connection_ and _Inject_ to get the data and states based on promise:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { HttpHandlerModel } from './HttphandlerModel';\r\n\r\nclass ModelProps {\r\n  @Inject httpHandlerModel?: HttpHandlerModel;\r\n}\r\n\r\n@Connection(ModelProps)\r\nexport class HttpHandler extends React.Component<ModelProps> {\r\n  render() {\r\n    const { httpHandlerModel } = this.props;\r\n    return (\r\n      <div>\r\n        <button onClick={this.handleClick}>Http Done</button>\r\n        <button onClick={this.handleClickError}>Http Fail</button>\r\n        <button onClick={this.handleReset}>ResetState</button>\r\n\r\n        {httpHandlerModel.isCompleted ? <p>From http model => {httpHandlerModel.response.data}</p> : null}\r\n        {httpHandlerModel.isFailed ? <p>Error From http model => {httpHandlerModel.error.message}</p> : null}\r\n        {httpHandlerModel.isLoading ? <p>Loading...</p> : null}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  handleClick = () => {\r\n    this.props.httpHandlerModel.getHttpTest('test inserted from HttpComponent');\r\n  };\r\n\r\n  handleClickError = () => {\r\n    this.props.httpHandlerModel.getHttpTestError('error test inserted from HttpComponent');\r\n  };\r\n\r\n  handleReset = () => {\r\n    this.props.httpHandlerModel.reset();\r\n  };\r\n}\r\n```\r\n\r\nAlso, the class **BaseHttpModel** inherits _responseAsync_ and _errorAsync_ from **BasePromiseModel** that works as Observables from completed and failed (respectively) methods.\r\n\r\n## Dependency\r\n\r\nYou inject models in another models thru _Inject_ decorator:\r\n\r\n```tsx\r\nimport { Action, Inject } from 'exredux';\r\nimport { CounterModel } from 'playground/counter/CounterModel';\r\n\r\nexport class ListModel {\r\n  items: string[] = [];\r\n\r\n  // inject CounterModel inside ListModel\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Action add() {\r\n    this.counterModel.add();\r\n    this.items.push(`Item ${this.items.length} : Counter = ${this.counterModel.counter}`);\r\n  }\r\n}\r\n```\r\n\r\n## Triggers (local)\r\n\r\nTriggers with only one parameter, is an event that interceps a listener to the action completion.\r\n\r\nAnd is used to listen methods inside the class.\r\n\r\n```tsx\r\nimport { Action, Event } from 'exredux';\r\n\r\nexport class CounterModel {\r\n  counter = 0;\r\n  lastAction = '';\r\n\r\n  @Action add() {\r\n    this.counter += 1;\r\n  }\r\n\r\n  @Action del() {\r\n    this.counter -= 1;\r\n  }\r\n\r\n  @Trigger('add')\r\n  lastActionAdd() {\r\n    this.lastAction = 'add';\r\n  }\r\n\r\n  @Trigger('del')\r\n  lastActionDel() {\r\n    this.lastAction = 'del';\r\n  }\r\n}\r\n```\r\n\r\n## Triggers (global)\r\n\r\nTrigger global are similar to Trigger local.\r\nThe difference it is used to trigger events from another models.\r\nThis triggers can't be used to listen itself.\r\n\r\n```tsx\r\nimport { Inject, Trigger } from 'exredux';\r\nimport { CounterModel } from '../counter/CounterModel';\r\n\r\nexport class EventsModel {\r\n  message: string;\r\n\r\n  @Inject counterModel: CounterModel;\r\n\r\n  @Trigger('add', CounterModel) checkAddCounter() {\r\n    this.message = `Counter updated to = ${this.counterModel.counter}`;\r\n  }\r\n}\r\n```\r\n\r\nThe connection is the same as usual model:\r\n\r\n```tsx\r\nimport * as React from 'react';\r\nimport { Connection, Inject } from 'exredux';\r\nimport { appModels } from '../AppModels';\r\nimport { EventsModel } from './EventsModel';\r\n\r\nclass ModelProps {\r\n  @Inject eventsModel: EventsModel;\r\n}\r\ntype Props = Partial<ModelProps>;\r\n\r\n@Connection(ModelProps)\r\nexport class Events extends React.Component<Props> {\r\n  render() {\r\n    const { eventsModel } = this.props;\r\n    return (\r\n      <div>\r\n        Example of Trigger\r\n        <br />\r\n        <p>Message = {eventsModel.message}</p>\r\n        <button onClick={eventsModel.checkAddCounter}>Manually get event</button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\nAlso, the triggers dispatch action to redux state and does not require _Action_ decorator to do it.\r\n\r\n```tsx\r\n@Action // <=== NOT REQUIRED, Trigger already is an Action\r\n@Trigger\r\ndecorated() {\r\n  ...\r\n}\r\n```\r\n\r\n## Availability of methods in component props\r\n\r\nFunctions and property without decorator can be used in the model, but wil be not available to the connection props.\r\nThe reducer dispatcher breaks any method or property and the React component can not see those properties at the component side.\r\n\r\nTo reach the component side, use arrow function.\r\n\r\n```ts\r\nexport class AvailabilityModel {\r\n  // invisible for components\r\n  makeSomething() {\r\n    ...\r\n  }\r\n\r\n  @Action\r\n  callMakeSomething() {\r\n    this.makeSomething();\r\n  }\r\n\r\n  // use arrow function to be visible at the component side\r\n  makeSomethingFromComponent = () => {\r\n    ...\r\n  }\r\n}\r\n```\r\n\r\n## State change guideline\r\n\r\nMethods without decorate changes the state only in the class and will not be dispatched to the redux store.\r\nBut can be used to calculate or change something until some point, and after that, call a decorated action to dispatch it to the store.\r\n\r\n```ts\r\nexport class AvailabilityModel {\r\n  // change state internally only\r\n  changeSomething() {\r\n    this.stateData = 'something';\r\n  }\r\n\r\n  // change state internally\r\n  // and dispatch it to the store and components\r\n  @Action\r\n  changeAndDispatch() {\r\n    this.stateData = 'something changed';\r\n  }\r\n}\r\n```\r\n\r\n## Provider\r\n\r\nInstead using Provide from _react-redux_, use directly from **exredux**.\r\nIt's already provide encapsulation for the React contexts.\r\n\r\n```tsx\r\nimport * as React from 'react';\r\n\r\nimport { appModels } from './AppModels';\r\nimport { Counter } from './counter/Counter';\r\nimport { Provider } from 'exredux';\r\n\r\nexport class Sample extends React.Component {\r\n  public render() {\r\n    return (\r\n      <Provider models={appModels}>\r\n        <div>\r\n          Test Application for ExRedux\r\n          <hr />\r\n          <Counter />\r\n        </div>\r\n      </Provider>\r\n    );\r\n  }\r\n}\r\n```\r\n\r\n## Sample\r\n\r\nThe sample project is available in the source https://github.com/debersonpaula/exredux. Just install dependencies and run with `npm start`.\r\n\r\n![Changelog][changelog]\r\n\r\n[changelog]: https://github.com/debersonpaula/exredux/raw/master/CHANGELOG.md\r\n\r\n## License\r\n\r\n[MIT](LICENSE)\r\n","readmeFilename":"README.md","homepage":"https://github.com/debersonpaula/exredux#readme","repository":{"type":"git","url":"git+https://github.com/debersonpaula/exredux.git"},"bugs":{"url":"https://github.com/debersonpaula/exredux/issues"}}