{"_id":"re-use-form","_rev":"26-e482bae7aabc1b318df4fddb6a8d5db1","name":"re-use-form","dist-tags":{"latest":"3.10.1"},"versions":{"2.2.0":{"name":"re-use-form","version":"2.2.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"4a858670968917614c93a535b0eb67cc495ccb4c","_id":"re-use-form@2.2.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-COzl2Uh23ZERSDScNLa7WdWdw2ODzDzLiZzYc4384AGprsSMGziS8BRFAZCN7dNDmG19LmTCxU9byCXA2UO9sg==","shasum":"ec50107113566e2ce69b8bcca7ed982003258ebf","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-2.2.0.tgz","fileCount":9,"unpackedSize":41413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdhoGRCRA9TVsSAnZWagAAfcMP/2eqRsZJd0ipRzfrzwjf\nHi/X/RTAxsAC6YzoqBbIcAHjdh27vkVeoQJzRBORnAmq6bgnv2qOqHH0vBuw\nO4cx7aLbYHWO0ABoIhWw0ZD7adTBbrnTE+d2YlrIFfooRdXpTpNvpSgS/ad5\nsI6k9F6ftzoKihsPHzpxDKDMF5G7VyJUu5WCjtM7YFSvbizZqFrrKtZ2na8o\ndi6t8qmRW05af3wkfyRsRAwdYQ+xq3g6EvkaOAh1dtO4oE3jLOF/aScEBgkt\nXf5b04KjMgKPraEweiQLLuti7uVlAp30yhQ4oMl9kRI6MxnGUoMpddg9ellt\n1rrRHFszY4PyzINZ4kRzpEnmG9+M5wgAJj87JvdIyjhN+q5mjlP9ORwfsId/\nsmIDECxDyF5W6SAs95Z7eFFH4XIqkHAHz0RYmNTqWQjGlXmz3RaWraeKPIRG\nSuNDvtOFN61GfbCH9bxkwbQqHoLG5yMbIUAQojdZvq5qSEszxkYvhTGOng1x\nP/uD98FcgGZCqApUQjCSNn+EWRCGuRGKSTugCpbxuN+KKodIjvVnFtdi8b/W\nDZH4NYC6hTONyNqfyLaqzUEGYy4j9WPyC17bgWKJ6SxB1dbdHtTT3Kcy1+0q\nI6KVBpidchjwm6LWGSRNT85PTwR2vzoYSuX9NIxvCPZmRY9VKvhp9wn28nTR\ntq29\r\n=hyQz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfGYyqVAkAQtU3ReSeo3hFOifWo6OQxQvwIprLdw9qZQIgKKfkGvc0laomCKPnZCsfZ/95+2rYDQYtoY+5kqfDAs4="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_2.2.0_1569096080502_0.09306901613066465"},"_hasShrinkwrap":false},"2.3.0":{"name":"re-use-form","version":"2.3.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"290cdd61cbb9d49741b00353b0c1f0320beeeb82","_id":"re-use-form@2.3.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-I8cbv7I1TpHjruBuUQkr9+LnaS+mHS4sHtMnYtCs8xUGdGs/+ZLJ2bvQmil9ks6iFeLQqLIlfvDhaPOK36JNPg==","shasum":"feda9d4c50ee2ef620e676dffb73b81db4102a2a","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-2.3.0.tgz","fileCount":9,"unpackedSize":42734,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdh+lRCRA9TVsSAnZWagAA+WkP/1t6OiFuraOJWw2HmYSW\nSq1XjTNS1r0SviXRjboqA7Cd+P6SPe3U4zFEpNLooNguuLqtsl8L2QsNqVFb\niydF3+KNeE1VTe5K7jIJTjiN5f5j7tfQPTvrS7IjLX6gLc2oPiCPPKJUdYmm\n14VVxcaWMaN2XfuVlbOTQfwdP4rW5Q3T43K4TT5+W0yu4ufmCPHTeBZh9eVu\n+4t98tJhRSTsIQJPa0XOytpp90ilkb+w/EqQZlF+wIyVmLoP8V/mEdYcuLzC\np0YoyOI+ZtBF+owG6T3c+AAiwSfQYbKlB3//qTDM46vXhlMSWk4rdNvE9cvy\nRp0oPbDnqbcdfXv1mx3qbVC+0HIZs34LriPpaiNcxo7PqQ/XQfamqcjwFujW\nVzid4AArebeuVVEfcXeMCf8ZcV6e///ZgTcelGM2UfWv0splLsUlAHOH4Bs1\ng9DHbJktKkwmLOA17HChs/I0pm31k6gbe5rWa9t0NhfP4shfPj8AtLMYJglK\n7E2sn3JhG5fX5I2iKBvzw0mdibHIwCZhR2NIk3aN16MqTEHE4QMUpClyIA/G\nFwfhfHqIJJR29z+SjcjND7CrYp5E0R8KSKZH7N/4J8SjncHDrOhCd46p8dGo\n7MTe1Q2GvhEXPLrEMYCDSjLXXf/HIILiY7dEZOIvaX1HtPEyS7LCet4trh2m\njv88\r\n=h2QM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD617kijLsNOLYMPc1IesUCXGjm8O+7Z1F9NDFQVGbskwIgAK+X22cZW19e0Ix26yAAaLnpT+gbqBWkGO02c4e86Xs="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_2.3.0_1569188176898_0.18099980533626825"},"_hasShrinkwrap":false},"2.4.0":{"name":"re-use-form","version":"2.4.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"e5f971b03e4089fca602b7a736994d7bbfab536a","_id":"re-use-form@2.4.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-tZkykib8lybZTG9lrVLXjM0RwrZJba2AAtxuA8ufpGj52cGpB28/dOFcKxbTbylQ1zPNLtBZqIeeoXrIaLolLQ==","shasum":"4847d5836b9a9db0deedc4b1703935d0496d6088","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-2.4.0.tgz","fileCount":9,"unpackedSize":43458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdn5CaCRA9TVsSAnZWagAAgDgP/iZ/IWy/N5nGS3uEoUSd\nIeC4160UygbJDft9XuJwU+VhAUMT6ZCaipMiZj0hi3Nus2awZMQtaLdMdNG/\nsIe7jmGbFMz7lFHc1L6NFOhaQBvX42rV4pPwUwAtY4lQc1+Dx+sdwvCieSpl\nEarnSg3+CvVx5HKCPaNILrfwPsZqlvb5HDEPKMB/JLQTtdJa69vPrYcfC/E1\n2+TXTiWaUuZ+1mXRsuKFR07Yeeht06I4gmreSRIWaAsQhLO/OrwoEQ+Fe2Tr\nu44c8A24A9d4ZolnFEjKWf/6fcb28smhF6wmOnEr8gIxjP4CjwN4SDwplAg2\nYa5bLXgOSeAGEJxhql3KM7sHJH7j7JkBiKmKaPJU9rRY2r/4+4T81OMgGdoL\nRb8CIv7dkC5qQ5lLrXnv+cC24h/Nut9fDksMJvhyzOeS1yercpyLmtzwBGr7\nDKE89i8rrNHhxv29UNa33lZf6ptLccaO0jmFHGDYbaH2SjezWh1R+orjiy4S\njGTjywl6SApxj2NGRj9tTnNrsf0SoZ+f+uuNmh7lIeroMndxp23eO4U4Tyui\nGD8bECa5x1NGcVQhTpsFpdXKqLmZ5lRjBoRcv9v/9zYg9Ebh0APELwbD8c9I\nLJVCmASVfis4WX3DpIfMONOJOKNGOgzQ4H9d+7C0F+WXMxTGbHEO10koyqFf\nth0w\r\n=FHDG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCul78ILjX5YQEjJZdfrcKMvnN4BopPo6asQ85jQXhRawIhAJmCbxCHB6OLs364CgyzsXYAiBQUvf7iq6V03KOWZ1dW"}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_2.4.0_1570738329301_0.23450643867790455"},"_hasShrinkwrap":false},"2.5.0":{"name":"re-use-form","version":"2.5.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"71977d814864bef6ff89f717418f9c499b0c8fab","_id":"re-use-form@2.5.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-sYquq0ZZqKvLQnTqFzAL0nzxbcFJAW3Ttc2cIaodTZPSXIGEMmqhCqgf19t0KMwQ3ya3GkFoZHNtE4Bqg7RuMw==","shasum":"e00d1ae767372879d6753a08d59596356d86fe6d","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-2.5.0.tgz","fileCount":9,"unpackedSize":48023,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoYifCRA9TVsSAnZWagAAMmEP/iSaroWvtYLqio1BemN5\nCTIJLZ3jBn6i9mR7o/d3gkzgrsFrMCk2HYAe3FWldkvbFMbc0K/dy/xD1yqZ\n4wbSkZrl3u6YeZBOsOTPzEOf8PXbRUJd39fLBuVkIJvQnOJT5Oft2HZ/KxBE\ng+cjf9AbiVe1A23Pk8NUrZt2mYb3IHVodSUPe6XjRHscdCOEKf/jhCkyRktq\nb0QEwxpONJw+G8+T5rxyLBlmB8EAR7eWQuvC7bFUWXKnSVaeg4/1vOH3Xrlg\ntJBnWtH74YcIOHgN0Wv+jLMKP02VLDL+xPg1y9FvfFWCxDCmgr5v3xGxNBsc\nzUamgrUt6t4psiPNmhvv4SXaOYDPyp/99h0OjIT4OfT7OndT9C52ZTSnB3kK\nmZJ4xgHC37yM/d92cP7c+IbDO8qNArHpkpcCtJgSyy3ERgKoVdBLBIfJMRwm\nS2z6udmN8q3RUK8cyzMmpZC0ATlkv911RbcmMM8YQJG3NfDlhEhKNNXa+bZ7\nlpQXSTsxU1ZNpljy1MIjn5uykGeZ3hPwmqLw6PrnTU93JHusx9hywsG3TL9W\nSuJPP2ENSKHWCritcztfbntJbyuR+kfR/eqOPTrbX0d7a7RJzzccjvpV0vlT\nrTFycTx9gU2e022gDx5OcQqYbJ+VQckJwyxpHBim1UC/RZkftzZUQOh9OusI\nptRR\r\n=87iu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyPeSU19pCwr7Kmv5PAarw3vqD+fs+7aWjSthQfs7Y2wIgAqlOHQmLDm/E/2n7oeJjxGOZ9ubNPqczmR3S9Dg6CUA="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_2.5.0_1570867358267_0.04230156562005116"},"_hasShrinkwrap":false},"2.6.0":{"name":"re-use-form","version":"2.6.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"a726dacdd74b9208c712252b75a45d821f6325a6","_id":"re-use-form@2.6.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-kyHiHlIb4sy+qCWWldHuDb8f8yG4VOrr+AGkxovxpKBpQCvYSaDryuiuAQuMdxADMzc7/hhHNH6eW/V/Axu50g==","shasum":"b77da4df913ef0e8c32b236d6ec799babd31879f","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-2.6.0.tgz","fileCount":10,"unpackedSize":51937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSRLlCRA9TVsSAnZWagAAXj8P/2ijXQXwpvJNCtenGjpa\nF1s1E998OFPTDz/Us5MpIzDZyOTI3t0L13r4APhrdDB3hBdxcA+5pnrzZFJ2\n4Mx+yvCy4fawNnUKJLNvu6IAMN06FYjAfhAFoEZsmtsWJCgfJPjZx8OJM+mA\nj5GHG/uR60gLAQU7y7kSJLxC+CTvgpk1rdd2GNLFqTFidfF1NjVfigC8i5ei\nsp5xu7Cv+R48HiE5AoRnKL/phwRDlRs0rrVnHAyBYLoSM55+bmh7M4tAgBh5\nYoqr02OBUJIYp6Zu/RIlkHXkSyZUwz6/kezjTM4vqDPk0QGl7sNs4SMD8Y3p\neQt53obCai8vqhg1P7NyCVK+wSJAhH3/BDDLfr1EfFUDpfEGQdmLi41hlFWQ\nFRhe7ix6m70jNyk0dtllCKtsuIiRv++yR3sxCgTVBr5Hj0vTKOQ2wxeSJKKp\nfU+A2cf1ZNhtKIAAgX4wRCUS8VNkQ31LdOU6codxArWTv7N9BwFsBj/s/ZTW\n8TaDiINZdtUjfyqjcXDs43TpcuzrT0MGnpcAhMEpIq9KnJAD19VIsenXDMGU\nnYP5aslCcm+Yge2+6mmxXq69A8AacqIgaUYGN5cCURaU3/RqX1S+JXeA+5zi\nWAPtqR/ZJ7zkDP8qv7ckznQE3un+IbLLRiqerZmBwQCpY1g4sNgdU/gZ5p0N\nRhlz\r\n=+BVY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFFi6tIgbNJKmB80IvGA3vXhrKdbsTzGvmMecGdiQBi5AiAe+nE0S9vARiCMILG3oJJDI5dSjM5DWes3VXTQARy5yg=="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_2.6.0_1581847268595_0.65018018931989"},"_hasShrinkwrap":false},"2.7.0":{"name":"re-use-form","version":"2.7.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"00dcaf94d97ef43f4651451818fb6dc6083b77ce","_id":"re-use-form@2.7.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-TycH4Rz3z/7xm6eq1++688X+qMJ7KQBtYPLy5Ke6Y9AzKpgEJrmeS5jitsP3+6EhshHdBk4H5BOFCl0HIFeBaA==","shasum":"c46cedf060eb26d53d9cb40e6e3e3ed804f6119a","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-2.7.0.tgz","fileCount":11,"unpackedSize":57774,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSvUkCRA9TVsSAnZWagAANWAQAI7Dy5jDqB/FsYuqyH/t\niaWzxoNplUVQmn3ewfoSHz89aDxOQbH3ZHxg/Y3nYU9dleNyAoc3nahuBaeF\nsyMR3qnbi6ftWofwf2rl4eOK1T2iKYaFztPv31EqDxmYzJMYq/eN/hzEpArt\no6NZIS4pnputWSOHubwgzNP+t7OHDyc/I1B9KRv4Ru/AyRnocD3Y9s541tNt\na6Z3N+XwdQF5umjDnnI3x5O+oJj2jPQH22gupvgyjQOwCeI+8SfpBnkJcPxh\ncZ8gBASj9PKFhGBrCHe96yqWtfX4l9aaHku9uvpLJvpYDyatFI4fiAssgMtm\n+J6wKwb7e2ylLjJoQ9SwvO2ts2sBsfhNAuIxRNCNx8f0ZqDSSRdT4dWF8b+C\n+WE+KTHkISAVjdBLEoxtoxIXlxAZdJZ34Res8b0QQNtpUCR2P5QyzTd7ZNRs\nMy8UZFYqGrvvoOQ0JAaS7PZHavGZXaWV52Vs/94UChcAXytIRheVhPS3c/QX\nKwYpxBz6JciW4UEPYhaznVnLE5HII4ndGTi2ay6q6SQKWVTSIDOAvzMUx37p\nR8H/YmcicDuBk4kSHEqdyHFYwWC9agzigZK6o992dLZczXPfg5anVZMGIfOR\ncDyUm0aH2dW/rfG3VzDgCatkJJBkbRF78cwb0aaR+Lf4K9CB6K1SzoozChoc\nd49c\r\n=W+6v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA3+r+NImINmJ5bT9Q96Of92fma0SDqSRbnVZUmGLgyaAiBgSdI2IXNOdQNJ3tCAW/3uDWvZwOffk+Kf0IeVhMdnwQ=="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_2.7.0_1581970723680_0.2832852665821104"},"_hasShrinkwrap":false},"2.8.0":{"name":"re-use-form","version":"2.8.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"0b8552a6ec70f8689f08873554e91b518ca0a728","_id":"re-use-form@2.8.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-k7p/BTSrP+fwOZfjAeQaF9wX66DUit6Vg8ti3XNjmJIbQ1fXCb9BiwxjImDfBzoJ3mHaIKuE90HARWj8i2mMbw==","shasum":"e454d6f0f08753b2bd5b0efb9ea0bae8d1a27582","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-2.8.0.tgz","fileCount":11,"unpackedSize":61928,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeUZzDCRA9TVsSAnZWagAAZpoP/RPRIDItEmrT16yoDk85\nY7P4oK75mI9jDyu5lVjO/lTMw83V6f24M0mf3XE/Fdyyrtqjx2kRt1Gjn/tm\n/Qk0DzLtw7kNlyh+mbuq8R79DxQgUSsS/u/nSRwCwaB3A8plF8f4IEp7h9/N\nIhWrl8bbv/ad87i51U7pqJR6HSAvDlkac3QV2ATsdmRpkaFxxN3F9rSFarvj\nL4o+FgSyi9hKXK0EZaaIMplcowlc/L2GByWHQsWr9XRwMbGawd523JQD7nQ6\nHnFPAgHJ+4gT6tqU7he7h337Tc4BcZl6egxqA7/VwzVsNpijNac1ZM4AqY2o\ndd2xXHMRbsEkeT1wUW6Xr5ESP9Fhdnfw2ZJyayWyCrLTtGvcLRLevujtmwME\n8XOnNMWHrbgFCs1w9WcnQefCYoUljheFimuywFIzBzDdAfPMx361eea3UNeb\nnEE9jXAYDdvZOC4ACz9S8EgJMyp1wkfm7onV9FMHdhsDxOg9ozFTAb0Z/FDG\nnKXeeNCu1fIUQHk4WDFmGH03onmxGt1GzyVgwpR55bqPFPOkI4cSCNY6xMRA\n9iOtCjnmHu9nAxsz+VBWggsfPeDV8FTNUOe/7luYqhyOWiUq5XTjyWINJbwB\nfthgkaGvZoPtOxdSFaTfoPI2G24JDLR0sxQa9BcBwCQ0c90gIzxsBra90LGP\nRfkt\r\n=0ANc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHrOdnw/HZ9F+BYUeyD847dlfgMZ36yHSxN3HguIlZpQIhANhK0mw30p9edPJgvFKvFJWcEZU42yGMSVK4P/FWyp0g"}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_2.8.0_1582406851479_0.6065962503888744"},"_hasShrinkwrap":false},"2.8.1":{"name":"re-use-form","version":"2.8.1","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"eea9693952df642771dcf940e387f121e43f74a8","_id":"re-use-form@2.8.1","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ncN2NknbiQmJryRlArTXPjwfgY86Hz02P8MEtQh86oPe8Y5hrvvXS8i2bztkkF5ubbWWZMxc87nY9NlmF2SOPQ==","shasum":"2c6a46259a3bde395aded59da16bb6bb359f9ce0","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-2.8.1.tgz","fileCount":11,"unpackedSize":62022,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaAvvCRA9TVsSAnZWagAAtCwP/R6/GFSw1ALliI6qzFef\nrhi/wzjws4iFnC+2IxBfug/yNq9wdKIS4LhdvrisxHqKn1GwpOpibCpbC5B+\no5IweBZNT/plJaYNmiJ1Fc8qX6PoHxGv0FpN+hufiNH35+Ne2AEjHVcnY/6N\nuvXvQqpgx8v/xVQrDF/N7cJcFfQEgfrEYGHhV/4Ug5s+pJqzjMywAUMastxF\nsxpS8/T2JzRavXLF5oNTlL4fd/91Ntyyy/7QSSF9OD0amYloeyuJGK0ccBSB\n8menb9N01iO5CMniTyDkZhZWcBpONOnEy3B+b/GiR15rteDb81kvo04JOFpl\nxtlEt1NHSc05FdqA8F1cwjyDhSHMVROTRT6ogw1qf0m71lbnEbo5N8w+8XcE\nhTNEfY2x+7gsmK1BN/hGDjpXEybZECs9oG4Zo8eBQ5qzW0hG7UPne1oh2RvD\nDsnSdLRmk3mLvdiZBpETomWA6f6svGihQWl6PEmq5vffPxHzfBaZcMm9MjK6\n9zYHmgjuWOqQoGX/8x5jYnqBTJKrJU9tuwCxRguVrVW3eIUKsaHYHUcKSOV9\nj+fernQNIOjPMF6RK4VHqXRbBdii/NnZpc/T6rceaH+pZ06X8AJnApuddhfN\niHvujwCA5kaWWFWqTV5ZKWsDdqG9nieh6U2sTIKAFzMlVYSngf5vgRN22dMv\nNcuy\r\n=n6PO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGeCgxUiiq5FQbm0fuP0taeJfg8SeVEy4WHHXS6t6Wh/AiBXZ27OUL/3PujIeL1u8NDOsmbyjMwAah6Y8I0KRksidA=="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_2.8.1_1583877102864_0.9402130674697011"},"_hasShrinkwrap":false},"3.0.0":{"name":"re-use-form","version":"3.0.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"cc6df8daa728a97e0fd7a558d3e47468f06db6c3","_id":"re-use-form@3.0.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Ir34ajnq5Lf3d41x1ZUlkPzwBJ4JsvJFdPB3E6W5zv8gU8knhPWYOHOSJ6fwVuguurqOrhCPF6KwMo4xDD3phg==","shasum":"6f376aac802e1155b400d5caeb5f9fc32dc07dc5","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.0.0.tgz","fileCount":11,"unpackedSize":65589,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaXLZCRA9TVsSAnZWagAAnxQP/3/iUi10YU0z/xr0lv+0\n/BAg+Ny1xuN52qK3m/On0cgkP7Qi/wMrBnDdbppZUD3aTRyr+PUHMqcZn0ZQ\n02YpR/8biuoHlvvjw9vGNhsAktjj1qCO6CHvL6D6a06YQayxv7tpGD+X/7Ms\n1nJDOgFpZoYzBy02rGEiNfLdrhFdu0tE5FmNWnyGl63NbAor+XMKn90yREd5\nJfc8LRl0fhfgq5QdOMJbFYOqM1Xto0vTnAtJuR3PoiSyJT2YjDm7V5ZI0BRH\n4BwZLTGL/qXN0VZ+ChWdzODM94PJ1zClDs/61yxrsbkfHNU+6eQf21lMWJ0y\njM42YkFdwE+3P2Q/zFxgbvX4X3ZGjsazn2h5XZVuBzwL11uLYOpq06ID2rTo\nyFkjwBwXeEfrSc27pyuy+eZk8Yt9qz+imP+ie/mgSR+/E9Y2bsJpJJ2iHz7s\n8mDHJ9xyir+Lqg0ZSY+tU4f/DNr9j32ixK4C0Hu5JxcHiH6/f6P1hTFShc44\nUrujL3T+uOjIU2GsA90GzKReXR89aVlDLaYA+N+l9IhfVEe0MxXqWpCtfSLT\ntkX5c0Qse7/3GuIV0szRYlL6kY+WC5xxKf5BhYiu93HE5SRgOfRqwMV8LLx6\nsRwWntf1bAn4dIsr4l/zzABEKEeUXgN/+YPKXW1veIijXeGUJ5QHVpeIPe6e\njzYI\r\n=aA4J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmMoR6BOP9VnILhswB43EGYRC3u1GiOpHrDvNtdH4XxwIgcWRanhtkW/b69om2BFim4/dWCKNvsHIcV81iiDjLpZA="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.0.0_1583968984668_0.3084985512359917"},"_hasShrinkwrap":false},"3.1.0":{"name":"re-use-form","version":"3.1.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"b8f0c45537dafb453d20ab8118c235998c3d2e7c","_id":"re-use-form@3.1.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-75PWpD742cA434AoUgDAi3ZyxVUewUp3CE8B9WB9V+hJqgjv6kQrbdri6Vx73JXSHOkQBozCfhVcWWJqCHE65Q==","shasum":"ea18dae46349301a212c0ebd1bf63f72afc9a0e3","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.1.0.tgz","fileCount":11,"unpackedSize":65993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegLl7CRA9TVsSAnZWagAAYaoP/0j1StIbCdp94cJf92Ad\ncZ+TQ38WbpqKoO3Kef7NWDk1ycCeGTW5rxVUAfXAPbOUOe6/5wB2wQfGOA5t\nejAE17vLBG8Yvy45LYgB1Sdh2beY1dm3RruPnig6dKv9Sy2HxAWskUvIYsmP\nhWwnyWKcMDFIvsi2sdCErhRLa1a9VCaxvAGmDf/GRvltjNZsdr+hJs3IMLxh\nTEv2jEustiOJ8MmgYXVjH3ZYHqXg4lR3Rlhg7ee2OVUlFYisY2l4Ok/JAYWc\nNjN+zDWGmSXKAE7FHZ5DM7X9q6v3LQ8ImE0yULBpTDYYZHZjUMEcFvxDwh0r\nkdWUmjisnD3tJ0E1cxIs40ZOCNavMBd2LgVH9mCK/kjZwbroEXf1lV/lT/do\n2mUx6CysN5bmBlvFl43K3OELWzwhwT1GdKozNh9f81UFKaHHk/k1wMsc6FdB\n6XSzveoWIKyG4ZwbsQFBdoknciWsVpEnLDmCT+fvRovNlMOBYYSMX0PUcgIL\nqLDPkr2I0Egxe/Z8rXKaGjRw5YdC2ssL05+LnrcMTEi25rViMLuePeHrBobB\n1RGhx0kX66Rt9U+MwfjqugIlMaf/0oJQOuNxQzd/qThGEVTv7YpxeBP+4F2D\nZiOF526bpBSTdduaSF5wyIVn5mG7E+g0jkCE1W6G/c+lj4vE13O5b71FLS6x\n8f17\r\n=3g4i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+nYkL2HzMbgAUCTqa6ZVDI0WnJ/yf0ByyXorEvpdH5gIhAM1EL/fA48AqxGZr/eRRg3TUhRP3GtFEwJ8ITDGGiOFm"}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.1.0_1585494395011_0.048595682491007874"},"_hasShrinkwrap":false},"3.2.0":{"name":"re-use-form","version":"3.2.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"ec0bfcb76e6f182f6bf429e0b461093defcbf05b","_id":"re-use-form@3.2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-OE00/M9dYsOVqApt1BQ5u7qK/QD+bH5dsqqLGwp1kdyqKb1yCgyz2jdIAMaQaRYsOZk8lIncqwWJHDc1AyCcAw==","shasum":"d44984a3dbd690385b28039b353b9163996a4453","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.2.0.tgz","fileCount":11,"unpackedSize":74334,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfY840CRA9TVsSAnZWagAA4zsP/1yH/3SNh59i7GEgtFq8\nNwZD2EZaFqr08pTL1Fqm5yEfDerY42p8Sd7reQ8qFF/Wt2HaCW4MyBcYH/XD\nMhSU0d239MUk3BRsB+B+Kg9E70fsd/McsHbYnWsFnyI3mY2lrn/dCvcA6JPw\nyo+12iIHKErgBJOsi4fBzWtzY9Ga/wLzGvyGu8V8Gu3zhidgelh85l4F+zr6\nWlNtnV+HmzWUvxqXRZp8yIWPwrNxHENFReoZbo/gNz1QC3JnlbaCELy2bKW3\nkmoOzwofwxWthZA41w7oIZkubN2BInyj8rSpiBpjAe9ZNHqjmG2ErCR+Lo73\npPwkkzlHucx/a9eA790AAOJjlBXktCOg46ykSVfl7wIILHiYX5cKmnFrdJkG\n8qQXZ1ZKucXu0BclOtvBawbeTcv2nUSE5eRDKUreaMUqBY3q8P7oZqPsyo2B\nBHUEArOnI7KDPC3khw/Tibkl5PP/gKnEBQ7DCdeutUdrdsFN/JKDebBfIZvn\nIRAsbaI9Immz9ZvfFEd4vUyn7mnOf1rThglINrcV3IoFqdw5qI6WYzOGEWi8\n9Ve0T5M/sfaxsFq0jjFrNgdxcLPK276fMsQtsORjmtqQZvkR2qor5XcTHNlZ\nlI/8ZBfNrYsTTaCVGjqmlDRJKB7PxaLqzaUZSpBgv8SRTcPHuLwa5ReyfIga\nSzSd\r\n=Cdq+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUqJSyChzUfMMYuu/FxR82X3RmjPtTAESpNk5pp+gEMQIgbCGci2lEcrMD4awU/n3MfYDjrFYn0YeZ3zv9mIPFZho="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.2.0_1600376371817_0.6449020601492015"},"_hasShrinkwrap":false},"3.2.1":{"name":"re-use-form","version":"3.2.1","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"33eedfcd1147848f3c99e55a21c0480668c1c1d9","_id":"re-use-form@3.2.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-K3Q2/U5VBGsHJYg2puSQ9yQTJTeztPk2driUP5cTseO/YxMoL7pNRAHdnZS/TdIQzaPk3BuPHADSmL7ijPSkBA==","shasum":"4ac9bd47ce569dcca34ceb8f138c8667b252d909","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.2.1.tgz","fileCount":11,"unpackedSize":74370,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfZFnzCRA9TVsSAnZWagAAYpIP/RZgmsH9M3cSfOo9NZee\nsbi1MUSl9C3gtV5BelFqqsRizjM2jDY3VxVjIhvHS+gqbZC/zIETgwe3h4SY\nEvnCc1JFQ9hl+TdYUJ7XYVfgkfyjZc0X5xzD8g4CMszVRGPID71s9Gu01fkt\nfTdahIX0VOtr84Z6roPurCmHDBxA36tZKjD1se0INxpunQdM4wLnSs5+xTrI\nI4KtSeveAXYPAUBFAl+TKB7gDqCjUM8058M33whbj2EoGPKjsz7k93/POjNp\nZlspraqR02GqMTxjslW+C5FQTAFc6cA6QuO8O/ZVwrye7BB1mnOg/xS/PYiN\nPLTbuetmXW2ISpT8jf4byso6/yYUxNaZUVFnFbBsJXx7295Wdk/pKTP8krhA\n/irRLyA8mznKxqOcE/uXuXLefUSm5j7WlZPPBm2afglFrnAleGeXQnwIV0Fi\nwwT8KCLUyv9f85/zUbgdzfroHdVmxt82GE1GMt9O+1ZqqDohADK/7CYG6NMp\nNsIw0ywIxW6qNpT3kVW+irp5OK4HsZCsnKo6NAawSmZtCq76adkJC+zOeokt\nn0zz0O0i3v/jmjjixB6qXci9DUIChJK0pwxkX3DGRSs871RnhOH4rwN+aLxd\n8QQt/B7mt8FJDTJXEYWBygraAmqj9RavTkVjDvYK5CVlzKag5a3mYaM+xMBP\nWWNd\r\n=M3Nv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID0LRE8jXxptbFuRAmMllLSeyL10XPLevm9108u9pFykAiEA+3bX2lsxp82PO3eXj+j8nT6y6nhUN4LbPhRyJkDS5kc="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.2.1_1600412147073_0.611066228557674"},"_hasShrinkwrap":false},"3.3.0":{"name":"re-use-form","version":"3.3.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"f1d7faa6e99a21106821eaa3d51e25a80a9f0de2","_id":"re-use-form@3.3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rDgnhONDeuKkxMLmTUpNn38VwzxksDCOpFhlY6Rir9dxUZEFK1OgucF3tsOpwM38HgpaklzO7kV1OVcrkgSZnA==","shasum":"73ec667e2f15397045ccbc934d918c561c4776e5","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.3.0.tgz","fileCount":11,"unpackedSize":74572,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfamLPCRA9TVsSAnZWagAA/IQP/3v52CA23ZJ+cnfFdmLK\n5hO6q+O1i5XL8oWh+nqbd/iERBJs9AdaUkUK7xJiRm9kO1Ieel5UagFImC8M\nf3gakz1vqwgqWXyjXz+4JoSIHw4BkATBWmB6VfZ6TPcdb9OJPpINlQI3lsLo\ngXCyJCDP02//5i3DqXFQzWQuLuaI0DPdJaen9eGSttf619BOrYlRdDclT5Qc\nB6YiynNzJefUOkXrkpXtLFkX+9z8wdPym5V5gLSQlyjm7lkM/haT/01A83py\nFkAlwITxF64cxG1erSaIVnqoskuOMxZQW3Ct9YOpqj1EdIgA0XLZDBxlKP98\nmrsqDsOxvGisJPxpSjcWKdIX6C4LZGljd/vhuK1mTcRl/HSZcqdQscMxRDbb\nikODrjdhSprIRyKonJ5806O0+Q/AVDIT1xYvzTnBu4ajAuMD0KXs1TSE5n9K\nwswRt6aRZWYWdChVLFfwFHPWm9XWc2TweFKn/Del7eMdZ5E/k3WH7J5Cr9f1\n3cGtmzmrRKfX/MAdkXNeBFxir3icfZnunRVFrc34IL0hmLzJtKeHai5TIe23\nxjyOAAeE4m+lZxeClOOSbMsBk9PxUx9Q67mm/OwnDQZBtO+ZYw8vcgo6wLNL\nhGy0BqbVMBZEN9yD6/9i502jIL2nXGrE/QZC7xwPGz4GOBmHLxGkINxQO9Ig\nrIuF\r\n=G4hc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIRQRyw+DudqBkPH1jR2cixar73o9/Zra+fuUzNbFsjwIhAOd6Opri5iISdQnvJFIBw2X6IkZoROmbvdcuUUr4c4b0"}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.3.0_1600807631292_0.8913142909812555"},"_hasShrinkwrap":false},"3.4.0":{"name":"re-use-form","version":"3.4.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"4fa77972ce9e273b271f26eb62bd2f8f5379eb4c","_id":"re-use-form@3.4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WWtdy9hxNKJVlxYOKl6ihu04/YqcJQs1NzowBvXV3HWdPnvyhkZG1QETq4+1KQAHQOpEFwdIli58VXvcRRbuoQ==","shasum":"ba782218b840118db9046305d2b0d65463c7c693","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.4.0.tgz","fileCount":11,"unpackedSize":74929,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa1YFCRA9TVsSAnZWagAAy6QP/RcSMtcoFbSlDOJvc/MF\nzPathbm58D2M/7qxMso3U22CYWJXjsDxQs5feshACuSovNoW4OpigOosSlfW\n+rIGUOPZnCPgYUkeVtv2vS+IEQxrVb3EnIvMpDX/AJd9y8ijxpuqn+hO9gX4\nFD+wl3QkjkGYKacWIFkmPUqRwacD8Wcw+NZYMc5lopmwgmWBp7v8r3rvJJSl\nXXNIXarjtgYbiY0PwRoce8Xrk/dLRgLnZDvLcGN6mgYVivotOv28XYlFF4pl\nvoHNfDXnXflk1x6w/hcIW63rCHGyfJXUmq5KYYdTLcxz3NSs6ahmQT6AJ2JY\nQOYXZ2xZwH0VvPQ7qhNAH+99UVgbOKJ6UBBfZGe1NIc4kbNAw6D5RhbKqJTE\nQNC12y0J2YNxB4fs8/n7yOEw2XMcS+HQbYNzIi+O1Za5cBMR0XQ9bxXR+l6V\nO6rwzMjt4FfHdVJmUQZE2aCdsvmNsaiXL1CBYdxinWJgtKF8802hkwOfCVk7\nkQ/dEct55hgK+siZp6+S3jFhuu/Ssm+4S1rI+HVZB2vgmn+l5PRFltFUnVdu\nbfqIgti3QS+QGx22F2Lood2eTUfhFt5hxiQmEdHGI++Jp3MbwU4KkPMnB4dd\nTBbhrzm0wPMOoF2Vw44nu71JtsiO5L1h+uuVAF/OrBBpMzFt8QzGCDqvv4vt\nCHiP\r\n=DZ8d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjLDz8ujYaJek1FP67l3lcgWh1HGulPCszTdVTaDrdOAIhAPm/6EUQvr2S1vmPS/m9luiS17JdmImfozcACJYe65bX"}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.4.0_1600869892752_0.006854786237490584"},"_hasShrinkwrap":false},"3.5.0":{"name":"re-use-form","version":"3.5.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"0f73e54a59ce88cb293365a2b61f3ee26783f2de","_id":"re-use-form@3.5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-At5YOmZCcG2/3R6J8Z8jWpFu2GGa+/llGYYLpC72rfasGS0AoBeEuSDKYsxLCeGuzT3SxOtq5AsdP2f2j3puGw==","shasum":"5aa3e1d0720a60d5d3c80f4133ad68123ee6b52a","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.5.0.tgz","fileCount":11,"unpackedSize":76145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbJaECRA9TVsSAnZWagAA6AIP/0H89hd+aYyBeco8JFd+\nZjM/9/YpeCVxWTq20VoCKzAuaj70zmzfF6NBaz+t5ehQPQp9FM/GSVm7pY1J\nvFBjvLrJAyQakK5gkfcQprJgcYxxQpdpL48UNJMAbUUHCSWVAOPggwWUg34G\n5ojblGvtlqBTZJp3aPKT9Mc0SEIUsym2keIYdGZpKrZX+djCNO4/EEwwbcBR\n14d4gdR05zkb7PvC1d7ujFPrUFm9Dph3vOLW6roNEA9spCLmN4+mzKbvU9+1\n+64c7eu+sjEWrV7A3PS0HwvYPmXSRo2SvI1A6vFies076GMMRPbVz/Aen76t\nBtaArV/mh0XR7vDPwY3ecukgxuFHoK7elNbgEvF/ZdMCTiZePjD26w9CrrcU\nS5ES6dtsPBtvjjsHs6ti9kR0Wf8BjwmiqlOXWmDVvCrNFfaPJw8Wis2XGmmm\nY7MHLwqm96WipHs0SLdysriSwUvt71lkZCIa+ZNvYyL+BmQpTzZZmLxNvzxX\nnLohC+YC2BZ/q0b+PKwMiVbuaVSRsTnlvhuy7Y+Cq+zeom+iE/i3Ns8u7bsd\n2I5cLnBG0s3VXw6iqg+x5q+ebMsQOPp3Ji+jq3xWKCMJZynbOOfqHEdsI8zv\nq1nv8cL6qbvc+wX4j332YQPJ3uXyTWvD5NkfNAKi2PziK7tjHqVT5J9nZZ7W\nCtf1\r\n=exAf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAy/Z8wkN/Zzdh9y6sR4k1tnUCWFiI307bKEQ7kAgLdvAiEAzS+aO8oFJzMS0plhOlqE9eEfx9dn/SSNJq+NXZtLI4I="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.5.0_1600951939652_0.14139496398996476"},"_hasShrinkwrap":false},"3.5.1":{"name":"re-use-form","version":"3.5.1","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"c1d00525cf183b0cac19c0c67c5edb199a1601d6","_id":"re-use-form@3.5.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PZSpHWknXUoL5Tb5Mo6KtiZNzd8g/udwsuzyoZiCqD2Ap6XrdyT9QjCWVZV0jQDIMFFrJGi4YAF0GwRFsmo8rw==","shasum":"550a2c0e6dca98cb6859c765ff094a40b4738b92","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.5.1.tgz","fileCount":11,"unpackedSize":76157,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbLgXCRA9TVsSAnZWagAAYzsP/joM58WQxSK/43NPQl+l\ngRKn9nOlSjj4I+c4wuQ+4xQJ/lV+u9LHby6j2yKhPk2pilvJydflzvtDzsRn\nS4xm05c70wJAn/OhWszjxiL2RhP+b1V/OXOzVWwhpsjix+f0Tf0ENjtVXPbh\nJ0eGNc2T9ooL8oVHPkfiOhWz6BJ2WOk5jWdnH711WPvaQUpW9Q9te6XTv3p0\n6U9ui8+aGzgbMKYVYdV9x7eM+Cl6JY1dWp8jl0bBmxZskATuZNkrxna7Rb7R\nTWMdcZjS67kyFzdsxhknm/p9C/TnDNYHj3KKbpHx2iOIXeIl9rGTVX3N8a57\nnRW5se/S2GoZnQCsY7MmXysnJc7xa9rWQgQt3ofa7h40hMwps14FyeYgG0X3\n0v2wqZkzFmNJNz5XhufY/kKPRPsjAkpQITOj/YbbQxKgofx/SR/a1woJtyAY\nNm9xd9VTpa8FOG9vuuI8oUsFANMpsTTVUpFSpMoBJ7hBJtyVyUXPoW6vZzKG\nKhwOegF75YVV/33OAqLyIQYFEyzvuh/iMW5R20rKYKK2sMSRo48iklSWvqFB\n3x69cLACsPeRERWZViUPDNfRhOCh0fH4nPlfjQWJx8xRc93KHGhbCvwvRO/7\n4GpduB//mRH4SreWwv+3n6umbyx6S4ouYnZwH/+nV7LfBO6gjmEGjQeNnmNv\nx+lh\r\n=gAMf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFC3MgQNy90wLqu3M6tfYlCxXVm71IBgF53txzIG/KQfAiAkYVMNM/knHZ3COcW7cN8lQiVTxz3Hf/doVUoOXuB2+Q=="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.5.1_1600960535237_0.8607515504733065"},"_hasShrinkwrap":false},"3.5.2":{"name":"re-use-form","version":"3.5.2","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"b32a296075a72d35fb6ac7e896d6fef31d458985","_id":"re-use-form@3.5.2","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MJ1ipOeulA+SMC7ePnMtPHwmV2gRoDEQTRdl6+BnKj7ZvjY8fEiMpjbefmz4xAJViqRasuoq3KV1gSIJyDMoRg==","shasum":"cc992e0b00dba7d48d5b158681e20419421956fa","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.5.2.tgz","fileCount":11,"unpackedSize":76215,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbQNHCRA9TVsSAnZWagAAHoYP/1VLVnY9hfPeRbC3XEd1\niVo0IuJddC2nOrYE9j7EeX06QK+ypHYYduDi9hwH3pp7McHGC1lRTQUdjQMX\nd57zk0XdmnNzVyveizc4SNc+otMSY+44p51jmsRUKuZlvuKv7pNmIDv9oKSO\n9/dJUvDjbHHcYIN9tuJNUct9oeHcDAgJExZfbksoIzl6HOsNqP1rfni1KMVC\nqq1a/a+mkHiN6Nr9b0zcNBEKmxrtlvjJZ5IovslRFHGTSjjxblPEMA7aPhsX\n71PEESKNoKFZ6E83fgzk8n/JLzCo353OrguKK3e6BSeeNnP3WzaGd1cb5TBP\nnM5IX5HAKtAuCFWIz5v93/Ysyg058intNeZCX+TGGdFk8HeMlvPdGHCNhj3S\nWn60CMDuIUQrIwE8FcassIHIKmKCRZ88cjNx6N63yzw6M/H0sZ+pJOUE+tU+\nb5CN5oo8/wH52fdvLWXMsZXzCVddzvEnQDoys2qFcG7JbXv1f9uJ8tijiuax\nhZAvIu/K3JyKK1bWz+56fnIDC9sEjxjJk6orgjZx25nBhyiI1/3IKMEEI2G6\no69WoSRiTMJ0yyCrJbwscccgMmitFkMnGt2rMKBukY7gurWIRTrKyMuvWvfY\nLkOHjSF3WXiA8uXj70rZOxVM/tuwlK4vvYPGN3usPXIGdCyP5dRlVIVQYsPA\nN3HT\r\n=kDdu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDFZhYvHZQLa1K/5CGMdlXmHXr4NXeRNCo7MjZ2nwvDaAiAFd9Tmgpv95WbWe4fgACLIEV4I3w6c2rrEyzQTY1vOog=="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.5.2_1600979782878_0.1070854186831276"},"_hasShrinkwrap":false},"3.6.0":{"name":"re-use-form","version":"3.6.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"bb38c918945a11e61e251c990dad299617d28c37","_id":"re-use-form@3.6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FrGh2XZOhNebBVlaiK4FD5KNKT0uTGE8NrvgEfC8QxMeTL+jxx9XIqMWddKBShi8TXGF26BGHwMUxkYls42sQA==","shasum":"dd42e400833cb8a0d395a930b6ec0f6121ed39d0","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.6.0.tgz","fileCount":11,"unpackedSize":80126,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnzRECRA9TVsSAnZWagAAvloP/0kesUgxs4GEgvol1si3\nebAQbjakkCGI2XQ4Ju4b3wiLXHRzRDUmLGS4JWzokmW+S/G/esX9dsnW9o2h\nMYGd31jOrHVI1NNuL5nw6kABj9QCmIkvEL8QUobd+NzCZ4IQxjfL0IUb48Db\n3S3+hvbXdiGY6gNh7EhLsn++AqyH7nnVKCkcRPYz4nvwr1zN44UViDtt694m\nS8N6cifsRZWHlndldn9DLpg/mhU3ojkyEgflKVk2gcWJbpftvwiRQD626M+X\n35otYTOhmTPwGix4+wAJgjptr0YrrSpOuvPIWRROT9dxjQS1yCPuHIzJVxzn\n/MQPh//BCuP6H0sGuvEN5QHSYdNhGB/uPF65rfS6AKgud1D6+s3Z0ULuhd5d\noUVmTtN8m6J3YrP5nd2UJlmqC5Xod5fPvGADR0gLDMpnX5hwqqlqR9wmJBjo\nk0wvBP8lWrkzU2eUL2ptGvDfEs6AGPZoOUKJ7GsCoFqQjRhI3od9bkfYJc7g\nRlCoz0himvfYlqYdIzUs1aG+HJFrtxWWhJl2O60QR1GQ4vzREnmkXJXH2eMI\nvwO0+vzlLZYuC5dZrehgtHKE7FmKm/cWp9ZTORzR7tgXqHUwjln3juid1v1N\nG5uEBOE2m3H6ksu7pzNhf0FVlORWuBVNKnhbvWyVYRETG//Ok5rGvd8c5SzE\nMvqR\r\n=RBLL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHsnWQI24Ndk32H4NP9vtSB3/j/iXE761H/+CyI0nD2JAiByikOJJ5OyyIkktj1F6KnCZkmUDeBci8rRLiXCqpRbPQ=="}]},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.6.0_1604269124000_0.21336794741904175"},"_hasShrinkwrap":false},"3.6.1":{"name":"re-use-form","version":"3.6.1","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"ce80211b739b917a849e7d7e6b357102c97a41df","_id":"re-use-form@3.6.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xWoc1yBJQBQ76RjlLIqGQdAQJ8dy1o+UYn768007c+TekeGUlEa+ueTZ7s3BMnjyXx7S42Hpm0Rei0KVGzWl7g==","shasum":"46e06eb34e31334d6277cf7e34d7df3b8e5b824e","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.6.1.tgz","fileCount":11,"unpackedSize":80470,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfswR2CRA9TVsSAnZWagAAaB0P/R6Tlzy2w+O2mTvgaAEX\nTOG6XCPm9sIUz0ZmeKjYdRFanuGOB44ECWA7F8CvlNjY9j6Db57xZ4KEEV//\njbI9gK87R/YGXe7qvH0fOcAx9b2/K4fiDGlILLArjklfL8Km68d7xDXO3imb\nVDDJEJd2TavnowVztqax7oDooInDneugYFD6LSitOda9FKGzB5WDIOBHPrOJ\nLs4QBFF5X3U9xQ7WPjsvlbQWNIu97kLUlojIjrQkqdbkqYRVWzVmruofE7Pl\nMiUboyiFdmleQfbBWtHLsJ0f8VNghXK+saBMO6KaRgpk1lnAzqTcL7zuLozj\nJj+D/XV/K8Iw3XDbdUvQgMviBZr2otFeYZHfvzGY3ZZ5UNVls9Uen2NvQIri\nE0zxqnfqt/TVY0EaCC9eGM94NncaLpQYfL+Gm6O68NK/Bn7RV/c0OBgp9IfA\nU+rdC1a5w+WhANhDCD3uKLCmO2dW6skJ7KKLsTKMvF9c80QSK32cFOcbdMYX\nZen4VsEWEAjHLJXWT/fQqlEiyIO60ozdpgsHHHQBskiuyohUtNPpJ+9GsL5J\ncmpwiDF8mzg6Ny1JoXL5J0U1z4Jp+YrQzEbPzH7sjZRp0K+4W14gA9WP5S3D\nbf3fg41Ug6v4iUlPi1fnpgO2HEaktaTW/+1DUaDPgJG3NFr1HFNHNpVlcoAa\n1dqi\r\n=E/Kq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEpGd8QeBvAtlsuKFI8cZukuekXJcGs+pstjk7vk8qX8AiBY5GnE5X819UUEhN9CvZVlOxySEPkEbQNVp8+MXis/Nw=="}]},"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.6.1_1605567605884_0.39373444316822837"},"_hasShrinkwrap":false},"3.6.2":{"name":"re-use-form","version":"3.6.2","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"f489b50641151f7cf7ca0eefc4eaece05201c0c9","_id":"re-use-form@3.6.2","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-LFjYXdBd7GfrH2V7tD5TpPMaf0ktrEZt/rG2iegdb2UPz1dpDPz6H7aBPzyjiUVayc8G0zH3O02l1peoPOQFcQ==","shasum":"d632700e95bc9b1b8a1e694a7053284b955f7ddd","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.6.2.tgz","fileCount":11,"unpackedSize":80695,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJISWCRA9TVsSAnZWagAAq4wP/3DlsHV9vHDRyC+tLDGp\nnjsT7y8FKt0W49BYMCKjfbnFnrfeUAkn2ad7c5zHuDdjdl5mvaB1jl4wqIVH\nVhxgSUfUwnh1IwdlXTw9VgrJ8Fp60gQAZrH2ts6ZnVHvmmkT2mBNo/i0NJhy\nFReZw9P6xNnguEoaI90c/zZT5fB7v/8U5nd4g8yeotR4ufzu74Pdb+Gk/3l/\nhRofPIwia7xxkOMi5kQrqRDKf/vOdMPsul4T5MMppWDLY5q9QvBEYoRmV3Ts\nvlTfrS6JQ2DNezJu2KiQvFJThBaAsfGHHEsd7QG4srcP3gVDVlmcChXy3nxa\nh5140pPHNKxQChRsbHz8+abTJluHy5X67quKGAmheomhEhFfGGRe/g23xezN\noAAlR5CAntsJ7Sq0pzGKvz4jK2UkwuGaM3FHXAbBtbXv5XsOgJ1/bhHgt6uF\n4Rtr3aAdngLoAUtN46r7uiFDVG4A+Q389wFmRg38qArmTUMlaWNPiRnkwXkn\ntrT+6CTr3VsHZ6E26lO+1rq1hMPhZRC3niztE09NPoSs3UtTSqwxRppnz7tL\n9LoaFTHMcNlXUChEivCMlOCSGSI8PMHjSWPrww0ZhUTqf8qVteo0YkmNHUzf\nVS2+QWV38DjJ1rc6vTSETxfshtXLHTWuQbUCP28EWPjZ1SRS3l1dH48s0E0U\nmZLr\r\n=QD0D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA/avGutpmusNz1I/D8dYiZjaQIf4ml10AH4NSN+g/svAiEAnTkGnOckvJ9fXDaUnrbQIWjAnXeHmU1kUVlVd1miR+Y="}]},"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.6.2_1613005973706_0.20556129846706916"},"_hasShrinkwrap":false},"3.7.0":{"name":"re-use-form","version":"3.7.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"3b43b48b97059975af3768d4fa461d443824490a","_id":"re-use-form@3.7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nuAYslxGFEb6LZdyeY6J5R4Y+QlZVC2ykrbPpumANU1+yvZV0ViEZVQLBdoVf51H9zMt/4+83qc0ytc2Ff2wpw==","shasum":"6ca8428971833793d7934d6a5830697d2fe0e2ff","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.7.0.tgz","fileCount":11,"unpackedSize":86335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMsDWCRA9TVsSAnZWagAAwroQAKLGFlP6BxaBE/m0QzA8\nZCqcqVNHXwMfHbMM3ene0YVbi5XuCPBhA7Auab6k6WDJimk5eJXaY4JHhH/T\nChB1gYXRDYPbekEKyQjCB2n8sb6LPu0bfJ4AStIf2SEwlh3ifU9NGEaV8/Hy\niYJJhd6C5PnsWu0St5dreI8qNHRr27Px/SrzSYkX3E0P00BKFeQPLYA5JbY0\n3AdbM0g91MQO+wuZJrO8KLJ5v2WzRcWMJILO/kd9AjmIM6nGSUpYm/mMm+6Z\n+DH4xXxHZcO1sxmbqEElQO4YsE93uL5cpyG6M4aWp1UL1it7Ygc35p75gaB2\nwz9gBSNLfoA9tPwMq4CkmsFUuB/pb/elBnIDhyLT0ZQw/N6MV5eJqBWGQvQ+\nLAp3Oo2RzwxU/51TtotsIH/n/D/hydUpbr/nxrVViHNyMQReVZGEztUwrjwd\nkS1PhHWKlL07KU91Ha+U3eMPz0gxpwBD3akAJosiRh7zafsoyloO4mIyUc3+\n9KNf+Y37HoPVdHz6z2JSBOg71ih0EU5Asp62SnfijgOx6wmNoKQXuTJVuuda\n88SpzA83I5Y9RZ4R1P1kzEYL3qEMQvzNvv7jTw31sG1czlH/anf1CAKqF6eZ\neBLl2PpsbEq9TeKXVW/fenIBmg5ZSvJcFHDyOXu5/dLfKRjDWAE5uhCdI17z\noHJn\r\n=yZ3t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHaHJQhrr/10YDN8Z4IXR5Gyy33zPLfo3gYKKsj2f8zfAiEAhPZhf7KUCtU1xGFgws4PaOv89xNSuIfO6/DqQxZKtII="}]},"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.7.0_1613938901515_0.3833731307756587"},"_hasShrinkwrap":false},"3.8.0":{"name":"re-use-form","version":"3.8.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","license":"MIT","peerDependencies":{"react":"^16.8.6","react-dom":"^16.8.6"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^3.2.0","jsdom":"^14.0.0","mocha":"^5.0.0","react":"^16.8.6","react-dom":"^16.8.6","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^4.30.0","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"a0a81c915462650c2512ee72be5d35b8c3a67e22","_id":"re-use-form@3.8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-XERGtZTsJDXRFbatW/lnxm+mVH+mSFljDE1ZS5nlbMxaJbFOZ7z/to7L7vL4I1xHOZ8sl7U1QqxWc7EIJITZEg==","shasum":"919593409df9e95075fc9124cdd9a3f51c760390","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.8.0.tgz","fileCount":11,"unpackedSize":88013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgqqvhCRA9TVsSAnZWagAAPA0P/3buzq4DMxdeCHr0X3NP\nAyZZ0mQuRMXXSjQugMrzaSEquWkn5LZiK/BjxXGQIsjr8DeyoOsl5ShXr4hY\nb0Rfn3jwMGTeW9R5r49CL1PL0ae5vpF3huvy5uQqLzGVq2XXFstwp3ijYBWm\nCkFXpbel3WeKxHYX8y5BQBM+RSp/trHjwBG/p1kly3ycQevgm2IIQd3TFfgp\n8yi4MmXNzHXDCrUdb1l1vM07btUziyWkw0vqpE+4vU1tAA/UnmXksjyRvyAy\niLTxXYA8xpUKAIL5iolIJ6iHtP+xioxH1g86HBAv2Aq5HWAyvwoUqJ1yiXRY\nnk4MFqc1KYFgMmjUcA9/D1XYyLe53ityrTmsQ7EXriUN1JHzuWDkdqh+c1uC\n9rP+FntC+6huufgJhZjuUFHjrG3TGJ00JwJ3gQ+uuENh88FwDRBC6IguOeoq\nDnV+kRtz0VoihYVvudFWls3nFUHLvA5igskh0mqgQR26PJdhjkhcFuC4sXqb\nXJlPYq39jef8hUjBv0M01NYbw+yGl4ie+esvzYzK7UTvKJm6zwgMINj87rxG\nrHunDg24kjjyeoa+VmlWu5cRRwPWGmIRk9Xti7ycGok8XJl67OnCEFLuvzsC\ne/9NuaeOcAqu1DvtStRSapcXsrlkiskwqwEXIu+uMEYPxZ0ywiatuPNgzMkG\ndgJF\r\n=IyZD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwwoJRUrey2hr8XhAbH6eI6SOp7XrV9MT6LLJjRDeLHQIhAMp06cvcjTcVPFe5RLpNDQGiB8r5TZx+sAfeISsrmPB9"}]},"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.8.0_1621797856959_0.8656298678790983"},"_hasShrinkwrap":false},"3.9.0":{"name":"re-use-form","version":"3.9.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","repository":{"type":"git","url":"git+https://github.com/akuzko/re-use-form.git"},"license":"MIT","peerDependencies":{"react":"^16.8.6 || ^17.0.1","react-dom":"^16.8.6 || ^17.0.1"},"devDependencies":{"@babel/cli":"^7.17.6","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","@wojtekmaj/enzyme-adapter-react-17":"^0.6.7","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^5.5.0","jsdom":"^14.0.0","mocha":"^9.2.2","react":"^17.0.2","react-dom":"^17.0.2","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^5.72.0","webpack-cli":"^4.9.2","webpack-dev-server":"^4.8.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"e508ecc40d1bd05570849d6a55ddb8f06c34018c","bugs":{"url":"https://github.com/akuzko/re-use-form/issues"},"_id":"re-use-form@3.9.0","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-HuNUj+zA69vFDYjWPG4zRvyw3Nov7Nv5cq1QSSCGvxAg7PauB3JMWNXtYidJ0vgtgsVXFeN0rwnK3MgZjht/Og==","shasum":"412c0538ae2e202b252db38ba56dce5a7074e312","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.9.0.tgz","fileCount":11,"unpackedSize":100524,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPasMvalRK8bPoCQBe1DbRtdsgCoNiisCh6mpyE+4rKQIhAMPGT0yaCsN/3BG9epRVw5bluwAsSj0Z3lGvkRWvSLR/"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiUc4fACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrXfw//eg/n0zlUvWzl6RuE4ITSlmmKnk+id3Sb6hVHrvvy7atFHwqG\r\nEIdiIKURFHqwEcGu7MCwxFnC0AopX+OJgW4ZUk8bINzbs7eh943RJmta64I5\r\nzNjnV/4T9J3PBuoe22Kjub8CeGaPX4Xv4EoGP2wrxaGC/GDqlZ+BgCs6itHG\r\nuX3m9LQwGqkatrZnjAdixtqD/mw76iyqJEGv80ID2/k4Fe2e3HVwFl5S4aVM\r\nopwmJwdk1fXFknvtzDJl29CTsOnaWjRWk+BXl9ifNc5sI0XpMZu4M4ojnswS\r\nMRp2Nz93mrNIul1DKy+z6+tzgSMByvxa/ILqoZyLzueu1/LU26Nc03gYtndB\r\nzkp1cnGvDXg6hj378GSQvlD1eeryhBNl0CkJTCBPEO85fKxHMk6TECXZja0V\r\nKiW476747T5PU9AmYz1hyLwk8gzGkYCJa0VjGiUe84N7R/WXEQoz6AfX7Yjv\r\na+AW4/RU+EGsuEDjMW04ykY1yvZCdfwaZJ0XbCwGdQyuaEdOT6Q28IMEqmGq\r\nPJA61I4pBzxfIRxeriKhBQC7NbUAyLICBhVEUAD3xOl5CasrItmjbdFVX533\r\n2opt3c8i5m+8Ftlt40E3s/tYXYmH31vFVPVlqepkgqzRGoh0WXaAZlYPqH1S\r\nhsIxLDHbhY9RmGo5eNcwtaGs6Bq3yBLi6LE=\r\n=FODy\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.9.0_1649528351471_0.5219450053121604"},"_hasShrinkwrap":false},"3.9.1":{"name":"re-use-form","version":"3.9.1","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","repository":{"type":"git","url":"git+https://github.com/akuzko/re-use-form.git"},"license":"MIT","peerDependencies":{"react":"^16.8.6 || ^17.0.1 || ^18.0.0","react-dom":"^16.8.6 || ^17.0.1 || ^18.0.0"},"devDependencies":{"@babel/cli":"^7.17.6","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","@wojtekmaj/enzyme-adapter-react-17":"^0.6.7","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^5.5.0","jsdom":"^14.0.0","mocha":"^9.2.2","react":"^17.0.2","react-dom":"^17.0.2","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^5.72.0","webpack-cli":"^4.9.2","webpack-dev-server":"^4.8.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"f7f62c05a90534054b89f67b17820c928ffa77b4","bugs":{"url":"https://github.com/akuzko/re-use-form/issues"},"_id":"re-use-form@3.9.1","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-DheZfSPefm3mn5/BqMKc12HNcBxIWcT5qGiNU9css1emKcFPcnd/ucTGAwdjx4BUZ9PqGrGVOSfkhSoGkj9HrA==","shasum":"1cbad2845b90b9dedbcedb90423fa063d8d2f446","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.9.1.tgz","fileCount":11,"unpackedSize":100546,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrpNLSyXg8adb+zy9dbSA7EHDuuqlhQYZhkTtNSeXiAgIhAOro//N7yPtsLnUCIfMBZVJjlyhjkElmha14J9zUqi62"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiUeXqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq8uQ/9GqGgMmhw9Pcdba1N9JNsIUI63Ty2MOl5pDtPTWSFj9wk/0ok\r\nuhz8/ECoBhtvkFVwUNxYj9Iu4DxVjfbWh4MrTxqQMnD+0gV52voS5IcJfQS6\r\ni806G+7bS/GEu7gting/UZ5WwKO3mKrWMGSVMrR7kHNMQJGQn3FwA5kUhDNo\r\ndOi0BbJ6kDrz36RmaakzXMTbC66xm7HWRByjamthJ3QfW8KwQTrx/30vsdNw\r\nrGabMuwIxP6VSvzb7rnrHkdgKzrB1KMJZwGz0kieTrsiElG2u8JM7Uhkqw1K\r\ngc47wwT93Ogi34YMvbxh2KgtzKrTrmmj2rFSl/ie2ke6lGXgknbRjp8j2h53\r\nldfbGjaNYmoK4JU/X9OKUnCDWRxIr14aonFUo9sTK1FOSd/6cLGfKYWr+Cbv\r\nWIS0MLdgOjWzBh+xlVUBxtsR4+gHGSMWIlHsBlsJJP6l0GL3BUf1VKMzChyK\r\nfX7RMpMKHWVaQqIKzSRIhGIvxlcyLK+OoKLk8dNaSZ2jNaAkh/5MocwNASHG\r\n5TIT3iScxd+IJYj2FTLjboPVGzBUIYfS7WFCoR+DtxeOuqs8WOTFgaJU7v+P\r\nSKGm9c/DqkuAzSIQ3EOc1TccmZMzdb+SPosGjeVOssUoZ6JYb8pgfp5rNtNh\r\niWvAcERKDQDWi/mqQAjIUPBZmg2cZHfjgK4=\r\n=wC2/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.9.1_1649534442496_0.9264562371805789"},"_hasShrinkwrap":false},"3.10.0":{"name":"re-use-form","version":"3.10.0","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","repository":{"type":"git","url":"git+https://github.com/akuzko/re-use-form.git"},"license":"MIT","peerDependencies":{"react":"^16.8.6 || ^17.0.1 || ^18.0.0","react-dom":"^16.8.6 || ^17.0.1 || ^18.0.0"},"devDependencies":{"@babel/cli":"^7.17.6","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","@wojtekmaj/enzyme-adapter-react-17":"^0.6.7","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^5.5.0","jsdom":"^14.0.0","mocha":"^9.2.2","react":"^17.0.2","react-dom":"^17.0.2","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^5.72.0","webpack-cli":"^4.9.2","webpack-dev-server":"^4.8.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"6435928983843ea9404ce2f8f4cfb08909e15d87","bugs":{"url":"https://github.com/akuzko/re-use-form/issues"},"_id":"re-use-form@3.10.0","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-AiM0Un8NnRjr3Nt0d/eREDpv9emJXnhWXtY9KXOSQrR5f9jNmRuiSzRtUaL0tveKOupPig8HaAL2phZW+j9v/w==","shasum":"34c97bd35641d5401d78692ab122eaee7f1bf2d9","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.10.0.tgz","fileCount":11,"unpackedSize":100806,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC70iZ9QNP6nJ3K3+RUdvO8r1SeVU9ZDPlCsfsQt1x6+QIhAPIkR0Bib+X+e8C6crQpWrFKhenmsE4VK/vXSdx1QEy9"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiXRiGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoVThAAk1LpWjFKjTc8w/PSHXN/pVacyABu0pMrXw7xCsxmGSlAEwEH\r\naQw9VpD6/qh7rNNBERd/9QjI754g0DCIRmjsyFrSCZZUJu46nCxu5Na2Yzh/\r\ne+4mP254YC+F0wW6/GtUxmZreRct5NnUFV925Aw88V0c9n68kVE5eWyCNMMX\r\nHxb/r/rqIZjt9RRdloG1124rrmz3+S9lFQPukDNjCab6kLEiyAVxgbv+4U8U\r\n0WtMS0jOsuCbujcmhWIs6vRwbG+ptsgFfFi/J6AZqd6T1y/naYOsy3spEpAm\r\nKBqPIKkIB3/iGm0JCI/pqfJtKlmHekHZiT78z5yjoBBM1iR9/KZBFO9qZ9Ik\r\ntdcbHlJw5+PN6jUMWxa6wn7H6IlDEb4DjxniVC1NgXPbym3pzlwOMKrbmOgk\r\nBZGMn0HInutVeNCzefQVnhrefDQy+YHKlMnvNbzJDoc4LI4VeJ3AsCTE0+C8\r\ntH2bvxJ9NhPR4HQCJuq9bgz3yo8Pbxhdm67hEI9Bx8OG+ya+Zw/7km9PAe0s\r\npeJrpf5IFQvEuwRUwD0XHgCUaMQ4xxT6ouUB6I0qqrXGqUC9RA62ARUro9q7\r\nK3g9iO1K7dWM+kT4wN/mThn3czXaBwJcwNM5uXxMwPHz5V2rQxmsolNh+2Tn\r\nP+vTruEEIsFZ7O7eF+JNOmHTkJ+wB3jNu78=\r\n=MgUh\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.10.0_1650268294192_0.332727138321258"},"_hasShrinkwrap":false},"3.10.1":{"name":"re-use-form","version":"3.10.1","description":"Easy-to-use React form hooks with built-in validation support","main":"dist/index.js","scripts":{"start":"webpack-dev-server --mode development","test":"mocha --require @babel/register --require @babel/polyfill --require ./test/setup.js --recursive","test:watch":"npm run test -- --watch","lint":"eslint src test examples --ext .js --ext .jsx","lint:fix":"eslint src test examples --fix --ext .js --ext .jsx","transpile":"babel src -d dist --copy-files","prepublishOnly":"npm run transpile"},"keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"homepage":"https://github.com/akuzko/re-use-form","repository":{"type":"git","url":"git+https://github.com/akuzko/re-use-form.git"},"license":"MIT","peerDependencies":{"react":"^16.8.6 || ^17.0.1 || ^18.0.0","react-dom":"^16.8.6 || ^17.0.1 || ^18.0.0"},"devDependencies":{"@babel/cli":"^7.17.6","@babel/core":"^7.4.3","@babel/plugin-proposal-export-default-from":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/register":"^7.4.0","@wojtekmaj/enzyme-adapter-react-17":"^0.6.7","babel-eslint":"^10.0.2","babel-loader":"^8.0.5","chai":"^4.2.0","css-loader":"^2.1.1","enzyme":"^3.9.0","enzyme-adapter-react-16":"^1.12.1","eslint":"^6.1.0","eslint-plugin-react":"^7.14.3","html-webpack-plugin":"^5.5.0","jsdom":"^14.0.0","mocha":"^9.2.2","react":"^17.0.2","react-dom":"^17.0.2","sinon":"^7.3.2","style-loader":"^0.23.1","webpack":"^5.72.0","webpack-cli":"^4.9.2","webpack-dev-server":"^4.8.1"},"dependencies":{"get-lookup":"^1.1.2","update-js":"^1.7.3"},"gitHead":"e1d7d05f4f7b139607cb155ffbe3358d0b33267f","bugs":{"url":"https://github.com/akuzko/re-use-form/issues"},"_id":"re-use-form@3.10.1","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-6XsCvk3lsCtwcX4SVS+AYHi/ki5OIeNzkxtvHfX9DA5wHsGIHACPyRFP/7X1J6jyLNCN96koyBCQ741dZg/NJA==","shasum":"db08b17ec903bbc4e56427abd824fcbd3fd33ae3","tarball":"https://registry.npmjs.org/re-use-form/-/re-use-form-3.10.1.tgz","fileCount":11,"unpackedSize":100991,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGZQ6fAdhZKcgDKU7vDFRNYSZ8eeNJz774voXHZmi3BLAiEA2Je0m6L8t8t4PTPQDVFHLNImddbBXp11F7X2b0NAvLs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiXSZaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqWPQ/9HC5S34c2xQtKl0DqQKRJH3sH6VCC32nHQwyT4NKa8nktVKE2\r\nbESEYwbOqmEBW9mW91KYe+ER43balsH8M0WjTFmHZZcf8ORxNlvqu57m28pO\r\nw+apjKmWYA89FpsL/c8yYvKsI5Bip9JVe6Vzrdy2ERaTLJOCcVbXmD2mHOuX\r\n2Ij5+CJ7Z9CRncfhBdQzT5sqzXwORrR1X9F7/iAH8Jhz9X13kbiy4jjTn/ln\r\nCsXh+1etLTp578y9vLhOWNyTPf30ywlYd0+/d8EKFxQi6TWL7O2Gh8uenlbl\r\nQ/rsKmPdXpnvDW7GEE4iWMjay3YiOTCBHPs4U+V5nrkFCZ8KBiVQf00VmmOl\r\nbjr5+h/5gE65XOfKtpW69XMkTieYI7HJLq9PYJqKzmBy7p4W5AlZiTB8936N\r\nuGG+QZJGOUD9pAkgX46E1yP9ArCMJbCDuRpyGzipDXF0uvcm4BqgnDB0zeDX\r\nCW0vhtuBIpEyTOMq92y/Zt4V++bq4tEWQeMBN1BsvpFgitywdSyH55w3CJTn\r\nSkpAsuA03DovtNPyxWO2dmENtyEfeQD+Z+S9xlf3+dgc7SS6GwqaAgFVGuD+\r\n+eZaTGKu/hQiQhFycxZY8HArkuf178PLtGhC2Ls3Yna4EAH9o2TzfYIJnb+0\r\njG5ELQSHh7ImpS9UACAVn3Fjb7eM1rQVKyw=\r\n=41Fx\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"a.kuzko","email":"a.kuzko@gmail.com"},"directories":{},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/re-use-form_3.10.1_1650271834001_0.6940983185572052"},"_hasShrinkwrap":false}},"time":{"created":"2019-09-21T20:01:20.501Z","2.2.0":"2019-09-21T20:01:20.626Z","modified":"2022-05-14T05:33:37.851Z","2.3.0":"2019-09-22T21:36:17.020Z","2.4.0":"2019-10-10T20:12:09.421Z","2.5.0":"2019-10-12T08:02:38.443Z","2.6.0":"2020-02-16T10:01:08.733Z","2.7.0":"2020-02-17T20:18:43.821Z","2.8.0":"2020-02-22T21:27:31.633Z","2.8.1":"2020-03-10T21:51:42.994Z","3.0.0":"2020-03-11T23:23:04.807Z","3.1.0":"2020-03-29T15:06:35.136Z","3.2.0":"2020-09-17T20:59:31.979Z","3.2.1":"2020-09-18T06:55:47.220Z","3.3.0":"2020-09-22T20:47:11.441Z","3.4.0":"2020-09-23T14:04:52.879Z","3.5.0":"2020-09-24T12:52:19.856Z","3.5.1":"2020-09-24T15:15:35.354Z","3.5.2":"2020-09-24T20:36:23.074Z","3.6.0":"2020-11-01T22:18:44.182Z","3.6.1":"2020-11-16T23:00:06.019Z","3.6.2":"2021-02-11T01:12:53.816Z","3.7.0":"2021-02-21T20:21:41.644Z","3.8.0":"2021-05-23T19:24:17.068Z","3.9.0":"2022-04-09T18:19:11.609Z","3.9.1":"2022-04-09T20:00:42.656Z","3.10.0":"2022-04-18T07:51:34.351Z","3.10.1":"2022-04-18T08:50:34.185Z"},"maintainers":[{"name":"a.kuzko","email":"a.kuzko@gmail.com"}],"description":"Easy-to-use React form hooks with built-in validation support","homepage":"https://github.com/akuzko/re-use-form","keywords":["react","hook","hooks","form","validation","i18n"],"author":{"name":"Artem Kuzko","email":"a.kuzko@gmail.com","url":"https://github.com/akuzko"},"license":"MIT","readme":"React Form Hook\n===============\n\nSimple and robust form hook for [React](https://facebook.github.io/react/) with\nvalidation support and simple internationalization.\n\n[![npm version](https://img.shields.io/npm/v/re-use-form.svg?style=flat-square)](https://www.npmjs.com/package/re-use-form)\n\n## Installation\n\n```\nnpm install --save re-use-form\n```\n\n## Usage\n\n### Input Prerequisites\n\n`re-use-form` provides a `useForm` hook that is intended to be used alongside\nwith custom **Input** components. An **Input** is any component that consumes\nthree properties: `value`, `error` and `onChange` (note that there is also `name`\nproperty supplied for input by form's helpers). It also has to provide it's\n`value` as first argument to `onChange` function supplied in props (see\n\"Custom `onChange` Input Handler\" section bellow for more info and examples).\n\n### `useForm` Hook\n\n`useForm` hook is primary hook provided by the package. It accepts an optional\nconfiguration object that can be used to specify form's initial attributes,\nclient-side validations (see *\"Form Validations\"* section bellow) and to\nease internationalization of error messages by providing default validation\noptions.\n\n```js\nimport { useForm } from 're-use-form';\nimport { TextField, Select } from 'my-components/inputs';\n\nfunction MyForm({ onSave }) {\n  const { input, attrs } = useForm(); // initializes form attributes with empty object.\n\n  const save = () => onSave(attrs);\n\n  return (\n    <>\n      <TextField {...input('email')} label=\"Email\" />\n      <TextField {...input('fullName')} label=\"Full Name\" />\n\n      <Select {...input('address.countryId')} options={countryOptions} label=\"Country\" />\n      <TextField {...input('address.city')} label=\"City\" />\n      <TextField {...input('address.line')} label=\"Address\" />\n\n      <button onClick={save}>Submit</button>\n    </>\n  );\n}\n```\n\n#### Note on `$` alias for `input` helper.\n\n`useForm` hook returns an object that has both `input` and `$` properties with the same\nvalue. While `input` is more explicit name, it might become cumbersome to use it\nover and over again. For this reason, `useForm` hook also provides a `$` helper\nthat does the same. Basically, it's the same approach as used in\n[`react-form-base`](https://github.com/akuzko/react-form-base) package. All examples\nbellow will use `$` helper method as more common one.\n\nKeep in mind that although `$` is available by default, you can use any alias\nyou find convenient when destructuring form helpers object returned by hook:\n\n```js\nconst { input: inp } = useForm();\n\n// and then you can use `<Input {...inp('name')} />`\n```\n\n### Hook Config\n\n`useForm` hook accepts a config as it's only argument. This `config` object is\nused to specify form's initial values, client-side validations (see\n*\"Form Validations\"* section bellow), their dependencies, etc.\nThis config object **is memoized with no dependencies by default**. For dynamic\nconfiguration one should use `useConfig` hook (see bellow).\n\nBellow are examples of `useForm` hook call with different config examples:\n```js\nconst { $ } = useForm({\n  initial: {\n    username: '',\n    items: [{}]\n  },\n  validations: {\n    username: 'presence'\n  }\n});\n```\n\nIn cases when validation setup needs to share common options for all\nvalidation rules (like for internationalizing error messages, see corresponding\nsection bellow), you can specify `defaultOptions` within validation setup:\n```js\nconst { t } = useTranslation('common');\nconst { $ } = useForm({\n  validations: {\n    defaultOptions: { t },\n    rules: {\n      username: 'presence'\n    }\n  }\n});\n```\n\nTo apply a dynamic configuration, for instance, input value-dependent validation,\none can use `useConfig` helper hook. It has the same signature as `useMemo`\nhook, and should it's function provide a config object, it will be merged with\nthe configuration form already has:\n```js\nconst { $, useConfig, attrs: { guest } } = useForm({\n  initial: { username: '', address: '', guest: false }\n});\n\nuseConfig(() => {\n  return !guest && {\n    validations: {\n      username: 'presence',\n      address: 'presence'\n    }\n  };\n}, [guest]);\n````\n\n### Custom `onChange` Input Handler\n\nThe most common use-case when you need custom logic is to have custom onChange\nhandler for handling any input's change. For this, `$`/`input` function takes\nthis function as second attribute. This function will be called with input\nvalue as first argument and an object with meta information as second one.\nAs a bare minimum, this object will have `name` property that corresponds\nto input's name (the string value passed to `$`/`input` function call), and\nother properties can be populated by your input components:\n\n```js\nfunction TextField({ value, error, onChange, ...rest }) {\n  const handleChange = useCallback((e) => {\n    onChange(e.target.value, { event: e });\n  }, []);\n\n  return (\n    <div>\n      <input value={value} onChange={handleChange} {...rest} />\n      { error &&\n        <div className=\"error\">{ error }</div>\n      }\n    </div>\n  );\n}\n\nfunction Form() {\n  const { $, set } = useForm();\n\n  // uppercases user's input and logs event provided by TextField input component\n  const changeInput = useCallback((value, { name, event }) => {\n    console.log(event);\n    set(name, value.toUpperCase());\n  }, []);\n\n  return (\n    <>\n      <TextField {...$('username', changeInput)} label=\"Username\" />\n      <TextField {...$('address.postalCode', changeInput)} label=\"Postal Code\" />\n    </>\n  );\n}\n```\n\n### Purity Support\n\nAll of the helper functions returned by `useForm` hook, with the exception of\n`get` and `getError` functions that depend on form attributes and errors whenever\nthey change, are persistent and do not change on per render basis. The same goes\nfor values returned by `$`/`input` helper - as long as on-change handler passed\nto `$` function is persistent (or if it was omitted), it's `onChange` property\nwill be persistent as well, i.e. pure input components that consume it won't be\nre-rendered if other properties do not change too.\n\nIf, for some reason, you want to disable input onChange handlers persistence,\nyou can use `pureHandlers: false` config option.\n\n### Note on Validation-less Forms\n\nBefore we go to validation section bellow, it should be mentioned that even\nforms without defined client-side validation can use `getError`, `setErrors`\nand `setError` helpers returned by form hook. With no client-side validation,\nyou might still want to interact with the server when user works with form\nand should something go wrong, you might want to set server-side errors for\nform's inputs and use them in form's rendering logic, which is exactly what\nmentioned helpers are about.\n\n### Form Validations\n\n`re-use-form` provides a very easy way to declare form validations,\nwhich will automatically validate inputs on change when required.\n\n#### Vanilla JS Functions\n\nIt is always possible to pass a function, or array of functions as input\nvalidation rule. Each validator function will be called with input value\nas first argument, and object of validation options as second one. By\ndefault, this object will have input `name` and `attrs` properties. This\nfunction should return an error if input's `value` doesn't pass validation\nlogic:\n\n```js\nfunction presence(value) {\n  if (!value) return 'Cannot be blank';\n}\n\nfunction UserForm() {\n  const { $, validate } = useForm({\n    validations: {\n      username: presence\n    }\n  });\n  // ...\n}\n```\n\nSince it's very common to have additional validation options, at least\ncustomizable message, the easiest way to achieve this is to have\nvalidator-generating functions that accept additional options and pass\nthem to validator function they return:\n\n```js\nfunction presence({ message }) {\n  return (value) => {\n    if (!value) {\n      return message || 'Cannot be blank'\n    }\n  }\n}\n\nfunction format({ pattern, message }) {\n  return (value) => {\n    if (!value) return;\n\n    if (!pattern.test(value)) {\n      return message || 'Invalid format';\n    }\n  }\n}\n\nfunction UserForm() {\n  const { $, validate } = useForm({\n    validations: {\n      username: [\n        presence({ message: 'Please enter username' }),\n        format({ pattern: /^[a-zA-Z0-9]{3,}$/, message: 'Only alphanumerics are allowed, min 3 symbols' })\n      ]\n    }\n  });\n  // ...\n}\n````\n\n#### `defValidation` Helper\n\n`re-use-form` also allows to predefine named validation rules via `defValidation`\nhelper function call. Just like validators described above, validation handler\nfunction used in this call should accept two arguments - input's `value` and\nvalidation `options`. As already mentioned, by default, `re-use-form` will pass\nform attributes as `attrs` option, and name of the input being validated as `name`\noption. Even if not used very often, this may become in handy when defining custom\nwildcard validations that depend on other values of the form. Also, the most common\nuse case scenario is to allow user to specify custom error message when validation\nis failed.\n\n```js\nimport { defValidation } from 're-use-form';\n\n// Bellow are very primitive validations defined for demonstration purposes.\n// All validation rules should be defined only once on your app initialization.\ndefValidation('presence', (value, { message }) => {\n  if (!value) {\n    return message || 'Cannot be blank';\n  }\n});\n\ndefValidation('email', (value, { message }) => {\n  if (!value) return;\n\n  if (!/.+@.+/.test(value)) {\n    return message || 'Should be a valid email address';\n  }\n});\n\ndefValidation('format', (value, { pattern, message }) => {\n  if (!value) return;\n\n  if (!pattern.test(value)) {\n    return message || 'Invalid format';\n  }\n});\n```\n\nWith generic validations defined, they can be used in form hook (alongside with\ncustom function validations, if needed)\n\n```js\n// UserForm.js\n// ...other imports...\nimport { useForm } from 're-use-form';\n\nfunction UserForm() {\n  const { $, validate } = useForm({\n    validations: {\n      'email': ['presence', 'email'],\n      'fullName': 'presence',\n      'address.city': [\n        'presence',\n        (value) => {\n          if (!value) return;\n\n          if (!/^[A-Z]/.test(value)) {\n            return 'Should start with capital letter';\n          }\n        }\n      ],\n      'address.line': {\n        presence: true,\n        format: {\n          pattern: /^[\\w\\s\\d\\.,]+$/,\n          message: 'Please enter a valid address'\n        }\n      }\n    }\n  });\n\n  const save = useCallback(() => {\n    validate()\n      .then((attrs) => {\n        // Do something on successful validation.\n        // `attrs` is identical to `get()` helper call\n      })\n      .catch((errors) {\n        // Do something if validation failed. At this moment\n        // errors are already rendered.\n        // It is safe to omit this `.catch` closure - no\n        // exception will be thrown.\n      });\n  }, []);\n\n  return (\n    <>\n      <TextField {...$('email')} label=\"Email\" />\n      <TextField {...$('fullName')} label=\"Full Name\" />\n\n      <Select {...$('address.countryId')} options={countryOptions} label=\"Country\" />\n      <TextField {...$('address.city')} label=\"City\" />\n      <TextField {...$('address.line')} label=\"Address\" />\n\n      <button onClick={save}>Submit</button>\n    </>\n  );\n}\n```\n\nIt's up to you how to define validation rules. But as for suggested solution,\nyou might want to take a look at [`validate.js`](https://validatejs.org/) project\nand adopt it's functionality for validation definitions.\n\n#### Validation Dependencies\n\nSometimes your inputs can have custom validation that depends on values of\nother inputs. In such cases, when form is in \"validate on change\" state,\nvalidation rules on dependent inputs should be triggered whenever their\ndependencies change. Such validation with dependencies is defined by using\nobject with `rules` and `deps` properties, where `rules` specify any acceptable\nvalidation rules, and `deps` is an array of dependency input names.\n\nFor example:\n\n```js\nfunction ItemForm() {\n  const { $ } = useForm({\n    validations: {\n      min: ['presence', 'numericality'],\n      max: {\n        rules: [\n          'presence',\n          'numericality',\n          (value, { attrs }) => {\n            if (value <= attrs.min) {\n              return 'Should be greater than \\'min\\'';\n            }\n          }\n        ],\n        deps: ['min']\n      }\n    }\n  });\n}\n```\nAnd now, if form has any errors rendered, `max` input will be validated whenever\nits `min` dependency input changes.\n\n#### Validation Wildcards and Index Capture\n\nIf your form deals with collections of items, it is possible to declare validation\nfor them using wildcards:\n\n```js\nfunction OrderForm() {\n  const { $ } = useForm({\n    initial: { items: [] },\n    validations: {\n      'email': ['presence', 'email'],\n      'items.*.name': 'presence',\n      'items.*.count': {\n        presence: true,\n        numericality: { greaterThan: 10 }\n      }\n    }\n  });\n\n  // ...\n}\n```\n\nIt is also possible to specify dependencies for wildcard validation:\n\n```js\nfunction OrderForm() {\n  const { $ } = useForm({\n    initial: { items: [] },\n    validations: {\n      'items.*.id': 'presence',\n      'items.*.min': 'presence',\n      'items.*.max': {\n        rules: [\n          'presence',\n          (value, { name, attrs }) => {\n            const index = +name.split('.')[1];\n\n            if (value <= attrs.items[index].min) {\n              return `Should be greater than ${attrs.items[index].min}`;\n            }\n          }\n        ],\n        deps: ['items.*.min']\n      }\n    }\n  });\n}\n```\n\nKeep in mind, though, that such wildcard dependency means that change of\n_any_ `min` input will trigger validation of _every_ `max` input. If such\nbehavior is not desired, one might want to use **pinned validation dependencies**\nby using \"pin\" `^` symbol instead of wildcard `*`:\n\n```js\nfunction OrderForm() {\n  const { $ } = useForm({\n    initial: { items: [] },\n    validations: {\n      'items.*.id': 'presence',\n      'items.*.min': 'presence',\n      'items.*.max': {\n        rules: [\n          'presence',\n          (value, { name, attrs }) => {\n            const index = +name.split('.')[1];\n\n            if (value <= attrs.items[index].min) {\n              return `Should be greater than ${attrs.items[index].min}`;\n            }\n          }\n        ],\n        deps: ['items.^.min']\n      }\n    }\n  });\n}\n```\n\nSuch dependency means that change of `'items.1.min'` input would trigger\nvalidation only for corresponding `'items.1.max'` input.\n\nAs can be seen from the example above, in some cases custom validation functions\nrely on item index when validating collection item. To ease it's access\none may use validation rule with **index capturing**. When used, corresponding\nproperty will be added to validation options:\n\n```js\nfunction OrderForm() {\n  const { $ } = useForm({\n    initial: { items: [] },\n    validations: {\n      'items.*.id': 'presence',\n      'items.*.min': 'presence',\n      'items.(index).max': {\n        rules: [\n          'presence',\n          (value, { index, attrs }) => {\n            if (value <= attrs.items[index].min) {\n              return `Should be greater than ${attrs.items[index].min}`;\n            }\n          }\n        ],\n        deps: ['items.^.min']\n      }\n    }\n  });\n}\n\n````\n\n#### Asynchronous Validation\n\nStarting from version `3.9.0`, `re-use-form` provides support for asynchronous\nvalidation. Following basic rules apply for async validation:\n\n- async validation is executed only if \"local\" (non-async) validation yields\n  no errors.\n- async validation functions have to return `Promise` objects that reject\n  with an error message in case if validation fails.\n- all async validation routines are executed in parallel.\n- async validations are not executed as part of validation `onChange` strategy (see bellow),\n  i.e. they can be called only explicitly via `validate()` or `validate(inputName)`\n  helper function calls.\n\nSince `re-use-form` has to know which validations are asynchronous ones, they\nhave to be declared within `async` property of validations config object, like so:\n\n```js\ndefValidation('checkEmail', (value, { message }) => {\n  if (!value) return;\n\n  apiClient.checkEmail(value)\n    .then((data) => {\n      if (!data.isValid) {\n        return Promise.reject(message || data.message || 'This email cannot be used');\n      }\n    })\n});\n\nfunction UserForm() {\n  const { $ } = useForm({\n    initial: { email: '', fullName: '' },\n    validations: {\n      rules: {\n        email: 'presence',\n        fullName: 'presence'\n      },\n      async: {\n        email: 'checkEmail'\n      }\n    }\n  });\n}\n````\n\nWith such setup, async `checkEmail` validation will be executed whenever\n`validate` helper is called with no arguments (to fully validate form attribues)\nor as `validate('email')` to validate email input standalone.\n\n**NOTE:** when validating form, standard validation errors will be rendered\nimmediately without waiting for async validations to finish their work.\nHowever, validation promise object, returned by `validate` helper, will be settled\n**only when all async validations are settled**.\n\nIn order to get the status on ongoing async validation, one can use\n`validating` object provided by form helper. If there is nothing being\nvalidated at the moment, the value of this property will be `null` to allow\n`validating && ...` shortcuts.\n\n\n##### Dealing with multiple async errors\n\nSince `re-use-form` will trigger all async validations in parallel, one\nmight be interested in all of received error messages, not only in the first\none, which is rendered by default. This behavior can be controlled by\n`errorsStrategy` async validation config property:\n\n\n```js\nfunction UserForm() {\n  const { $ } = useForm({\n    initial: { email: '', fullName: '' },\n    validations: {\n      rules: {\n        email: 'presence',\n        fullName: 'presence'\n      },\n      async: {\n        rules: {\n          email: ['checkEmailUniqueness', 'checkEmailBlacklist']\n        },\n        errorsStrategy: 'join'\n      }\n    }\n  });\n}\n```\n\nThe possible values are:\n- `'takeFirst'` (default) - renders only first error message.\n- `'join'` - joins all error messages with semicolon (`'; '`) string.\n- a custom function that takes `errors` array as the only argument and returns\n  a single error message string.\n\n##### Skipping async validation\n\nSince at the end of the user flow all async-related validation may have\nbeen already passed, one may decide to avoid additional calls on final\nsubmit. This can be done by passing options object to `validate` helper\nfunction call with `async` property set to `false`:\n\n```js\nconst handleSubmit = () => {\n  validate({ async: false })\n    .then((attrs) => sendRequest(attrs));\n}\n````\n\nThis works for standalone input validation as well: `validate('email', { async: false })`\nto trigger only \"local\" input validations.\n\n#### `withValidation` Helper\n\nIt's pretty common to perform some action as soon as form has no errors and\nvalidation passes. For such case there is `withValidation` helper that accepts\na callback and wraps it in validation routines. This callback will be called\nonly if form had no errors:\n\n```js\nconst { $, withValidation } = useForm({\n  validations: {\n    name: 'presence'\n  }\n});\n\nconst save = withValidation((attrs) => {\n  // send `attrs` to server\n});\n\nreturn (\n  <>\n    <Input {...$('name')} />\n    <button onClick={save}>Submit</button>\n  </>\n);\n```\n\n#### Validation onChange strategy\n\nBy default, form will validate input values onChange only if there are any\nerrors rendered on the form. This might not be the most suitable behavior\nin some cases. To specify other behavior one can use `onChangeStrategy`\nvalidation configuration option:\n\n```js\nconst { $ } = useForm({\n  validations: {\n    onChangeStrategy: 'onAfterValidate',\n    rules: {\n      username: 'presence'\n    }\n  }\n});\n```\n\nFollowing strategies are supported:\n- `'onAnyError'` - default one. Will validate inputs on change only if form\n  has any errors.\n- `'onAfterValidate'` - form will validate values on change only if `validate`\n  helper has been called. This flag is set to initial `false` value after\n  `reset` helper call.\n- `'onAnyChange'` - form will validate inputs immediately on any change. Keep in\n  mind that it means that user might see error messages before they finished\n  entering their input. This especially takes place when using validation\n  with dependencies.\n- `'none'` - form will not validate inputs on change, but **will** drop any\n  errors rendered on this input on change.\n\n### Form Partials (`usePartial` Helper Hook)\n\nOne of the features of `re-use-form` package is that it's `useForm` hook also\nprovides a `usePartial` helper, which is a hook itself, and can be used to define\n\"nested\" forms with their own validation and other business logic. This can help\nyou improve code organization and extract independent parts into dedicated\ncomponents for better maintainability.\n\n```js\nfunction OrderForm() {\n  const { $, get, validate, usePartial } = useForm({\n    initial: { username: '', items: [{}] },\n    validations: {\n      username: 'presence'\n    }\n  });\n\n  return (\n    <div>\n      <Input {...$('username')} />\n      { get('items').map((item, i) => (\n          <ItemForm key={i} usePartial={usePartial} index={i} />\n        ))\n      }\n      <button onClick={validate}>Validate</button>\n    </div>\n  );\n}\n\nfunction ItemForm({ usePartial, index }) {\n  const { $ } = usePartial({\n    prefix: `items.${index}`,\n    validations: {\n      name: 'presence',\n      count: {\n        rules: [\n          'presence',\n          (value, { attrs }) => {\n            if (attrs.username === 'guest' && +value > 10) {\n              return 'Guests are not allowed that many';\n            }\n          },\n          (value, { attrs }) => {\n            if (attrs.items[index].name === 'rare item' && +value > 1) {\n              return 'Only one rare item is available';\n            }\n          }\n        ],\n        deps: ['username'],\n        partialDeps: ['name']\n      }\n    }\n  });\n\n  return (\n    <div>\n      <Input {...$('name')} />\n      <Input {...$('count')} />\n    </div>\n  );\n}\n```\n\nAs can be seen in example above, `usePartial`'s configuration object should\nspecify attributes prefix, instead of form initial attributes. Also note that\nwhen specifying validation dependencies, full name of dependency should be\nspecified, since partial's validation might depend on \"root\" form attributes.\n\nTo specify \"local\" dependencies that are related only to inputs governed by\n`usePartial` hook, one should use `partialDeps` configuration key. It is only\navailable when used together with `usePartial` hook.\n\nAlso note that \"Dedicated Form Hook\" feature bellow, which appeared later than\nform partials, might provide even more convenient form usage and code organization.\n\nWhen called, `usePartial` hook returns object with following properties:\n`attrs`, `get`, `set`, `getError`, `input`, `$` (alias of `input`). All of them\nare \"scoped\" to prefix of the partial and have similar behavior in terms of usage.\n\n### Dedicated Form Hook\n\nIt is also possible to define a form hook that can be available in any of your\ncomponents without need to pass form helper functions in props. To do this,\none can use `makeForm` helper function:\n\n```js\nconst [FormProvider, useOrderForm] = makeForm({\n  initial: { username: '', items: [{}] },\n  validations: {\n    'username': 'presence',\n    'items.*.name': 'presence',\n    'items.*.count': 'presence'\n  }\n});\n\nfunction OrderForm() {\n  const { $, attrs } = useOrderForm();\n\n  return (\n    <div>\n      <Input {...$('username')} />\n      { attrs.items.map((item, i) => (\n          <ItemForm key={i} index={i} />\n        ))\n      }\n      <FormControls />\n    </div>\n  );\n}\n\nfunction FormControls() {\n  const { reset, validate } = useOrderForm();\n\n  return (\n    <div>\n      <button onClick={reset}>Reset</button>\n      <button onClick={validate}>Validate</button>\n    </div>\n  );\n}\n\nfunction ItemForm({ index }) {\n  const { $ } = useOrderForm();\n\n  return (\n    <div>\n      <Input {...$(`items.${index}.name`)} />\n      <Input {...$(`items.${index}.count`)} />\n    </div>\n  );\n}\n\nfunction OrderEditor() {\n  const { t } = useTranslation('common');\n  const config = useMemo(() => ({\n    validations: {\n      defaultOptions: { t }\n    }\n  }), []);\n\n  return (\n    <FormProvider config={config}>\n      <OrderForm />\n    </FormProvider>\n  );\n}\n```\n\n`makeForm` function accepts configuration object as it's single argument.\nAs can be seen from the example above, generated `FormProvider` component also\naccepts an options `config` object that can be used to append configuration options\nthat cannot be declared during `makeForm` function call (such as values returned\nby other hooks). It is OK to use any configuration object, including additional\nvalidations, alongside with new validation dependencies - everything will be\nmerged into original config. The only dependency of resulting config object is\nthe `config` from props, so make sure to memoize it to prevent unnecessary\nresolving on each render.\n\n### Controlled Form\n\nWhen using dedicated form hook, it is also possible to work with the form in\na controlled fashion:\n\n```jsx\nfunction OrderEditor() {\n  const [attrs, setAttrs] = useState(initial);\n\n  const fillForm = useCallback(() => {\n    setAttrs({\n      username: 'Guest',\n      address: 'Home'\n    });\n  }, []);\n\n  return (\n    <>\n      <FormProvider attrs={attrs} onChange={onChange}>\n        <OrderForm />\n      </FormProvider>\n      <button onClick={fillForm}>Prefill form</button>\n    </>\n  );\n}\n```\n\n#### `FormProvider` props\n\n- `config` - additional config that will be merged into the one specified in\n  `makeForm` call.\n\n- `attrs` - form attributes that are stored and provided from external source.\n\n- `onChange(attrs)` - function that will be called whenever form attributes\n  are requested to be changed (via `set` function call, for instance).\n\n- `onSet(setAttrs, { attrs, nextAttrs })` - function that will be called whenever\n  `attrs` are assigned to the form from external source. This function received\n  `setAttrs` function as first parameter and `{ attrs, nextAttrs }` object as\n  second one. `setAttrs` function has to be called to complete the sync of external\n  attributes and form attributes. This function can be called with additional _options_\n  object. The only supported option is `validate`:\n\n```jsx\nconst onSet = useCallback((setAttrs) => {\n  setAttrs({ validate: false });\n}, []);\n\nreturn (\n  <FormProvider\n    attrs={attrs}\n    onChange={onChange}\n    onSet={onSet}\n  >\n    <OrderForm />\n  </FormProvider>\n);\n````\n\n#### Additional Helpers\n\nIn `makeForm` use-case scenarios there might also be a need in some additional\ncustom form helpers. For this purpose, one can use `helpers` config option.\nIt's value should be a function that accepts existing helpers as it's only\nattributes and returns object with additional helpers that will be merged\nwith existing ones.\n\n```js\nconst [FormProvider, useOrderForm] = makeForm({\n  helpers: ({ attrs }) => ({\n    isNew: !!attrs.id\n  })\n});\n````\n\nAnd then in any of your form components:\n\n```js\nconst { $, isNew } = useOrderForm();\n````\n\n### Internationalized Validation Error Messages\n\nDepending on adopted i18n solution in your application, there are different ways of\ninternationalizing validation error messages. The most common ones would include\nglobal `t` function and hook-based `t` function.\n\n#### Global `t` Function\n\nProjects like [`ttag`](https://ttag.js.org/) give you a global `t` function\nwith gettext-like usage. Probably, this approach provides the most simple and\neasy-to-use way to internationalize error messages:\n\n```js\nimport { defValidation } from 're-use-form';\nimport { t } from 'ttag';\n\ndefValidation('presence', (value, { message }) => {\n  if (!value) {\n    return message || t`Can't be blank`;\n  }\n});\n```\n\n#### Hook-based `t` Function\n\nFrameworks like [`react-i18next`](https://react.i18next.com/) provide translation\nhooks to be used within components themselves. In case of `react-i18next` we have\na `useTranslation` hook, which provides access to `t` function. Since this function\nis locally scoped to component, it should be passed to validation options explicitly.\nLuckily, `useForm` hook allows to provide default validation options to have\nthis `t` function specified only once without need to explicitly mention it\nover and over again:\n\n```js\nimport { defValidation } from 're-use-form';\n\ndefValidation('presence', (value, { t, message }) => {\n  if (!value) {\n    return message || t('errors.cannot_be_blank');\n  }\n});\n```\nAnd then in form:\n```js\nimport { useForm } from 're-use-form';\nimport { useTranslation } from 'react-i18next';\n\nexport function Form() {\n  const { t } = useTranslation('common');\n  const { $ } = useForm({\n    validations: {\n      defaultOptions: { t },\n      rules: {\n        username: 'presence',\n        email: ['presence', 'email']\n      }\n    }\n  });\n\n  // rest of component\n}\n```\n\n### Hook helper object\n\n`useForm` hook returns object with following properties:\n\n- `useConfig(fn, deps)` - helper hook used to declare dynamic form configuration that\n  depends on dynamic values (external variables or form's input values).\n- `$(name)`, `input(name)` - returns a set of properties for input with a given\n  name. `name` is a dot-separated string, i.e. `'foo.bar'` (for `bar` property\n  nested in object under `foo`), or `'foos.1'` (value at index 1 of `foos` array),\n  or `'foos.2.bar'` (`bar` property of object at index 2 of `foos` array).\n- `attrs` - corresponds to form's current attributes.\n- `get(name)` - returns a value for a given name. For example, if you have an\n  attributes like `{foos: [{bar: 'baz'}, {bar: 'bak'}]}`, you might have:\n  - `get('foos')       // => [{bar: 'baz'}, {bar: 'bak'}]`\n  - `get('foos.1')     // => {bar: 'bak'}`\n  - `get('foos.1.bar') // => 'bak'`\n  - `get() // returns whole form's attributes object`\n- `set(name, value)` - sets a `value` for an input with a specified `name`.\n- `set(attrs)` - when object is provided, sets multiple values at once.\n  Each key in the object corresponds to input name, and values are input values.\n- `set(fn)` - uses `fn` to fetch updates. `fn` takes current form attributes\n  as only argument and should return object with updates to be assigned to the\n  form (just like when calling `set(attrs)`).\n- `getError(name)` - returns validation error for an input with a given name.\n- `setErrors(errors)` - sets `errors` (object) as form's errors. Returns a Promise\n  object that is resolved (with errors object) when errors are rendered.\n- `setError(name, error)` - sets an error for a single input with a given name.\n  Just like `setErrors`, returns a promise that is resolved with an errors object\n  with one key-value pair of input name and error message.\n- `dropError(name)` - drops error for a single input with a given name.\n  Essentially calls `setError(name, undefined)`.\n- `isValid` - boolean flag indicating whether or not there are any errors\n  currently set.\n- `isPristine` - boolean flag indicating whether or not form attributes were\n  changed. Gets back to `true` on `reset` helper call.\n- `validate([options])` - performs form validations. Return a promise-like object that\n  responds to `then` and `catch` methods. On successful validation, resolves\n  promise with form attributes. On failed validation, rejects promise with\n  validation errors. It is safe to omit `catch` clause - no exception will\n  leak outside.\n  Optional `options` argument can be used to skip asynchronous validations if\n  one was defined by passing `{ async: false }` as options.\n- `validate(name, [options])` - validates a single input. Just like form validation,\n  can be chained with `then` and `catch` callbacks. On successful validation,\n  resolves promise with input value. On failed, rejects promise with errors\n  object containing single key-value corresponding to input name and error.\n  Just like with full-scaled validation, optional `options` attribute can\n  be used to avoid async validation defined on an input.\n- `validations` - an object of the form `{ inputName: [<Promise>] }` that\n  represents ongoing async validations at the moment. If there are no async\n  validations running, will have value of `null`.\n- `withValidation(callback)` - returns a function that performs form validation\n  and executes a callback if there were no errors.\n- `reset([attrsOrFn])` - clears form errors and sets form attributes provided value.\n  If no value provided, uses object that was passed to initial `useForm` hook call.\n  If function is provided, current form attributes are passed as the only function\n  argument and it is expected to return full object of attributes to be set (unlike\n  `set` method that should return object of updates in similar case). One can use\n  this behavior to amend \"clean\" form attributes without affecting it's pristine state.\n- `usePartial(config)` - helper hook used to define form partials.\n- `setState(fn)` - helper hook that allows update form internal state. `fn` takes\n  current form state as it's only argument and should return new complete form\n  state. For advanced usage only.\n\n### More Convenient Usage\n\nIt is recommended to re-export package functionality from some part of your\napplication, alongside with your inputs. For instance, you might have\n`/components/form/index.js` file with following content:\n\n```js\nexport * from 're-use-form';\nexport * from './inputs';\n```\n\nAnd then in your logic components you might have:\n```js\nimport { useForm, Input } from 'components/form';\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md","repository":{"type":"git","url":"git+https://github.com/akuzko/re-use-form.git"},"bugs":{"url":"https://github.com/akuzko/re-use-form/issues"}}