{"_id":"@coding4tomorrow/c4t-next","_rev":"11-5be8444a48ca108490fbc653bf38438f","name":"@coding4tomorrow/c4t-next","dist-tags":{"latest":"0.1.6"},"versions":{"0.1.2":{"name":"@coding4tomorrow/c4t-next","version":"0.1.2","keywords":[],"author":"Janick Delot <janick@coding4tomorrow.io>","license":"MIT","_id":"@coding4tomorrow/c4t-next@0.1.2","maintainers":[{"name":"c4t-janick","email":"janick@coding4tomorrow.io"}],"homepage":"https://github.com/your-username/untilted#readme","bugs":{"url":"https://github.com/your-username/untilted/issues"},"dist":{"shasum":"fd050464ee63603e699ec8547c270fc4148aa078","tarball":"https://registry.npmjs.org/@coding4tomorrow/c4t-next/-/c4t-next-0.1.2.tgz","fileCount":60,"integrity":"sha512-yD34xOkdo+B1/nIdjS4/lOXN4zmFZp4xXDg4z1sPsLPc4KcQRqZBmIbGWsu29LLSUpoMOZkfwpEj0NpR+EnMgA==","signatures":[{"sig":"MEUCIQCDSIcEpCqMSSVHrlBEfOpPIeXpA/2+pdqsDI20+gjFBwIgXh8WyuN9nS7hSZIRv4YEgOj9jC6PJFObaiFPzfNT0zU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":839956,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjfJy5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpe0g//eO0cFXSxh8lYWDYuSvo6jrFXscji14QMeUQPvh1c5sHVKwPK\r\nIirsUQRrZwVlhiJyEtu8DxFRI1CILmrdTMDcXi361eZWNBSd+tuE6F9KQcKQ\r\nX/tSHj3+fGKzrWCczlanFTiDfInXlorhEaHsQte075vBPq42ff7xK+KAsKD1\r\nKgFID291X2ZsGmHK98+7cRAbFeas2dUNfuagC6tMDgqcWVYMa3DsHkHxO28o\r\nqm0XkJWzokP+EfXGaot7f7CE7iuW1JTf3EAl4AAwVThODBQiTRXASYcZDq3x\r\nrwXj0u2EMBrVwMW9PSdL2cMBYtQB561gejdwCiyzEfcXzs+ok0gNtZp5GqEq\r\nFs4RY3EEmRR0rcQ6D+Fjszu2kAM1jRFI0i04UD/xPJS9isOz/GY+xWPnw5N/\r\nucwlmgfOrTc0jRdDDpcQNBg4qmFiL9tpRXZkzi1ePn9kjjUA+jMeNOFkXV4o\r\nCBxmTSzUhA3o+aTJtsrVGjuKgCCby3itUPsNzoIN2X4HA3HPaWDwV0UeB9Mz\r\nHEAPP4Datwoi1SHWIoOw1HYhTZYhg1IfvFagUFVM8DWOUoqd3QT6+riLSMHs\r\n7oVOdnY+MYaZvgrJeFUuWzvvUaEovY7+vsfv1sgpU1qAqL1w8LGU4Flw42sI\r\niBQzucFekhdJOuzoSZkK43KWkvag1QylydI=\r\n=Rb7Q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/prod/index.cjs","type":"module","_from":"file:coding4tomorrow-c4t-next-0.1.2.tgz","types":"./dist/types/index.d.ts","module":"./dist/prod/index.modern.js","exports":{"default":"./dist/prod/index.modern.js","require":"./dist/prod/index.cjs","development":"./dist/dev/index.modern.js"},"scripts":{"lint":"eslint --fix \"src/**/\"","test":"jest --verbose --coverage","build":"rm -rf ./dist && pnpm build:dev && pnpm build:prod","local":"pnpm pack --pack-destination=dist","lint:ci":"pnpm lint:check","release":"pnpm run prepublishOnly && pnpm changeset publish","test:ci":"jest --runInBand --ci --coverage --coverageDirectory=coverage","gen:docs":"rm -rf ./docs/api && typedoc --options typedoc.cjs","build:dev":"cross-env NODE_ENV=development microbundle --define process.env.NODE_ENV=development --tsconfig ./tsconfig.json --generateTypes false --format modern --output dist/dev/index.js","build:prod":"cross-env NODE_ENV=production microbundle --tsconfig ./tsconfig.json  --format modern,cjs,umd  --output dist/prod/index.js","lint:check":"eslint \"src/**/\"","test:watch":"jest --watch"},"_npmUser":{},"umd:main":"./dist/prod/index.umd.js","_resolved":"/private/var/folders/z4/3zz2ztnj39v49tpzbnzn9hc80000gn/T/b96b3018f1ef9541488ab72044f0c483/coding4tomorrow-c4t-next-0.1.2.tgz","_integrity":"sha512-yD34xOkdo+B1/nIdjS4/lOXN4zmFZp4xXDg4z1sPsLPc4KcQRqZBmIbGWsu29LLSUpoMOZkfwpEj0NpR+EnMgA==","repository":{"url":"git+https://github.com/your-username/untilted.git","type":"git"},"_npmVersion":"8.3.1","description":"","directories":{},"_nodeVersion":"16.14.0","_hasShrinkwrap":false,"devDependencies":{"zx":"^6.2.5","shx":"^0.3.4","swr":"^1.3.0","antd":"^4.0","jest":"^28.1.1","axios":"^0.27.0","husky":"^8.0.1","react":"^18.2.0","eslint":"^8.17.0","typedoc":"^0.23.0","prettier":"^2.6.2","cross-env":"^7.0.3","deepmerge":"^4.2.2","react-dom":"^18.2.0","lodash.get":"^4.4.2","typescript":"^4.7.3","@babel/core":"^7.18.5","@types/jest":"^28.1.1","@types/node":"^17.0.42","lint-staged":"^13.0.1","lodash.omit":"^4.5.0","lodash.pick":"^4.4.0","microbundle":"^0.15.0","@types/react":"^18.0.25","@changesets/cli":"^2.23.0","lodash.isstring":"^4.0.1","universal-cookie":"^4.0.4","@babel/preset-env":"^7.18.2","@types/lodash.get":"^4.4.7","jest-mock-console":"^2.0.0","lodash.isfunction":"^3.0.9","@types/lodash.omit":"^4.5.7","@types/lodash.pick":"^4.4.7","eslint-plugin-jest":"^26.5.3","eslint-plugin-tsdoc":"^0.2.16","jest-watch-typeahead":"^1.1.0","eslint-plugin-promise":"^6.0.0","@types/lodash.isstring":"^4.0.7","eslint-config-prettier":"^8.5.0","eslint-plugin-prettier":"^4.0.0","typedoc-plugin-markdown":"^3.12.1","@babel/preset-typescript":"^7.17.12","@types/lodash.isfunction":"^3.0.7","@typescript-eslint/parser":"^5.28.0","babel-plugin-dev-expression":"^0.2.3","babel-plugin-transform-define":"^2.0.1","@typescript-eslint/eslint-plugin":"^5.28.0"},"peerDependencies":{"swr":"^1.3.0","antd":"^4.0","axios":"^0.27.0","react":"^18.2.0","react-dom":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/c4t-next_0.1.2_1669110969669_0.9702667958749189","host":"s3://npm-registry-packages"}},"0.1.3":{"name":"@coding4tomorrow/c4t-next","version":"0.1.3","keywords":[],"author":"Janick Delot <janick@coding4tomorrow.io>","license":"MIT","_id":"@coding4tomorrow/c4t-next@0.1.3","maintainers":[{"name":"c4t-janick","email":"janick@coding4tomorrow.io"}],"homepage":"https://github.com/your-username/untilted#readme","bugs":{"url":"https://github.com/your-username/untilted/issues"},"dist":{"shasum":"841259f3c510f3edbd242668680ce47b91fecc7e","tarball":"https://registry.npmjs.org/@coding4tomorrow/c4t-next/-/c4t-next-0.1.3.tgz","fileCount":61,"integrity":"sha512-ZSzjA5j1puQ5rhvRy2sioIkanqp8+iUU5xlhrBUk5hphsnaHcJ680YD2i4dYJ6GHsFgBjluVCWKnmpkozjd66g==","signatures":[{"sig":"MEUCIF8Wi0mBAVpX1848eucGA0aktUbjbjFuMtuW7VNm5jnfAiEA6SR+y/a5q2+EVNGRqfIz5w19GJsLZpqDh1vZXqP30XU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":848193,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjodKjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrc1g/+P6+93Y7uaS6CeYb6uqEnsBtDl9lV/6psc45p+I3vtrhIDX/E\r\nIs3EACgBfJzYZsQvriv4U0OxStwmEsahTSuMSmxjxnqJGnk36wVMCHSKZgRB\r\nlGqkRXKcsynmWXFDD7Eg3M1Aca7/I3LrB4CWnLDzAZjl2mt/z+anPkbirmVs\r\njukFGbMKC0ydcyDJCfaWtNPmukk8ZCxfxp1AzwoCgP0Lx9/pclOCzWRV7cJd\r\n4WvEAt+84d0JhGzP1MdHlpdAU1CPTaGFmlIpn5GmF2+v69x2foeiXSb56/Y4\r\nE1ccHDLG0MSkB302ihWoRXLsxhK+OYT2XK2s/IJZnwnYnMEeeSfbNJHiu7IF\r\ne55JPTPvrbkfwwSRi1jLbBpZe4DdgBBoDq0qhBmBmVbj5BDip9zafEPG86ti\r\nFbtp734s0wcxQorKCUAuvkOIlQmPInoyOw0mAQOjQQdYElD19aVdIYtEcX58\r\npS1YiZtafBzpsvWpS6nnKPdFB5eimQPMtYkN8PgMwUSfJtHRVifdhB7ccgxp\r\nWULYXxQxZejUzrlroQPlPme2zB4BUlsaS1rTxl4GdBlVOfxSb/bbfprDuXmL\r\nywESBFNQlOdq9ATlArZeQ5NZYjtFibDkZUCZO1+K/rDyihZoIC7aplMLYbG4\r\ny//N9qyhguZNPci8K44jb8dsAxC6gs4C9mY=\r\n=fnGr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/prod/index.cjs","type":"module","_from":"file:coding4tomorrow-c4t-next-0.1.3.tgz","types":"./dist/types/index.d.ts","module":"./dist/prod/index.modern.js","exports":{"default":"./dist/prod/index.modern.js","require":"./dist/prod/index.cjs","development":"./dist/dev/index.modern.js"},"scripts":{"lint":"eslint --fix \"src/**/\"","test":"jest --verbose --coverage","build":"rm -rf ./dist && pnpm build:dev && pnpm build:prod","local":"pnpm pack --pack-destination=dist","lint:ci":"pnpm lint:check","release":"pnpm run prepublishOnly && pnpm changeset publish","test:ci":"jest --runInBand --ci --coverage --coverageDirectory=coverage","gen:docs":"rm -rf ./docs/api && typedoc --options typedoc.cjs","build:dev":"cross-env NODE_ENV=development microbundle --define process.env.NODE_ENV=development --tsconfig ./tsconfig.json --generateTypes false --format modern --output dist/dev/index.js","build:prod":"cross-env NODE_ENV=production microbundle --tsconfig ./tsconfig.json  --format modern,cjs,umd  --output dist/prod/index.js","lint:check":"eslint \"src/**/\"","test:watch":"jest --watch"},"_npmUser":{"name":"c4t-janick","email":"janick@coding4tomorrow.io"},"umd:main":"./dist/prod/index.umd.js","_resolved":"/private/var/folders/z4/3zz2ztnj39v49tpzbnzn9hc80000gn/T/a5bf0c0ce7e0ac92311a4b206da10120/coding4tomorrow-c4t-next-0.1.3.tgz","_integrity":"sha512-ZSzjA5j1puQ5rhvRy2sioIkanqp8+iUU5xlhrBUk5hphsnaHcJ680YD2i4dYJ6GHsFgBjluVCWKnmpkozjd66g==","repository":{"url":"git+https://github.com/your-username/untilted.git","type":"git"},"_npmVersion":"8.3.1","description":"","directories":{},"_nodeVersion":"16.14.0","_hasShrinkwrap":false,"devDependencies":{"zx":"^6.2.5","shx":"^0.3.4","swr":"^1.3.0","antd":"^4.0","jest":"^28.1.1","axios":"^0.27.0","husky":"^8.0.1","react":"^18.2.0","eslint":"^8.17.0","typedoc":"^0.23.0","prettier":"^2.6.2","cross-env":"^7.0.3","deepmerge":"^4.2.2","react-dom":"^18.2.0","lodash.get":"^4.4.2","typescript":"^4.7.3","@babel/core":"^7.18.5","@types/jest":"^28.1.1","@types/node":"^17.0.42","lint-staged":"^13.0.1","lodash.omit":"^4.5.0","lodash.pick":"^4.4.0","microbundle":"^0.15.0","@types/react":"^18.0.25","@changesets/cli":"^2.23.0","lodash.isstring":"^4.0.1","universal-cookie":"^4.0.4","@babel/preset-env":"^7.18.2","@types/lodash.get":"^4.4.7","jest-mock-console":"^2.0.0","lodash.isfunction":"^3.0.9","@types/lodash.omit":"^4.5.7","@types/lodash.pick":"^4.4.7","axios-mock-adapter":"^1.21.2","eslint-plugin-jest":"^26.5.3","@babel/preset-react":"^7.18.6","eslint-plugin-tsdoc":"^0.2.16","jest-watch-typeahead":"^1.1.0","eslint-plugin-promise":"^6.0.0","@testing-library/react":"^13.4.0","@types/lodash.isstring":"^4.0.7","eslint-config-prettier":"^8.5.0","eslint-plugin-jest-dom":"^4.0.3","eslint-plugin-prettier":"^4.0.0","jest-environment-jsdom":"^29.3.1","typedoc-plugin-markdown":"^3.12.1","@babel/preset-typescript":"^7.17.12","@types/lodash.isfunction":"^3.0.7","@testing-library/jest-dom":"^5.16.5","@typescript-eslint/parser":"^5.28.0","babel-plugin-dev-expression":"^0.2.3","babel-plugin-transform-define":"^2.0.1","eslint-plugin-testing-library":"^5.9.1","@typescript-eslint/eslint-plugin":"^5.28.0"},"peerDependencies":{"swr":"^1.3.0","antd":"^4.0","axios":"^0.27.0","react":"^18.2.0","react-dom":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/c4t-next_0.1.3_1671549602922_0.7466456348828339","host":"s3://npm-registry-packages"}},"0.1.4":{"name":"@coding4tomorrow/c4t-next","version":"0.1.4","keywords":[],"author":"Janick Delot <janick@coding4tomorrow.io>","license":"MIT","_id":"@coding4tomorrow/c4t-next@0.1.4","maintainers":[{"name":"c4t-janick","email":"janick@coding4tomorrow.io"}],"homepage":"https://github.com/your-username/untilted#readme","bugs":{"url":"https://github.com/your-username/untilted/issues"},"dist":{"shasum":"ffb8e1ca9888d595912bd63a07ee53b6bc3acf5c","tarball":"https://registry.npmjs.org/@coding4tomorrow/c4t-next/-/c4t-next-0.1.4.tgz","fileCount":61,"integrity":"sha512-b+nrvFPr6sy0sdxEyvY0Jfc9VXt0y0jrOB8wRFkPUXjbXegfC3ZyzpiFgQ/STSQtTt6O0iXxYg8ZvLYbAiZ8Ag==","signatures":[{"sig":"MEQCIDSUEJGKF1XhcUTPBrzhOptvepu0/ftuecRrFUCz+5/HAiBVhkZsd6Dpalv72nEC8ghowVUvAdzw2zKqIgv70nw5vA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":850684,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjv/FeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpsvw//XRh9d9ndZwqjYlFO5d77SbVh9J9QMb7reAieX1SszsBzDExk\r\n2RgWx0O/F98P/JS8DYxZtlI9bU3UKNS5RzSKZXQMaVH5bCJ0BcXcCLKas8Re\r\nEpDnNDTUcEEyWJvJZhzALmjWj56TqOVyHl2gHei6UJIBWf55RBPxC8oXtdri\r\n76hvRUJR9awVjfpas+pbFcR6qQvAaVQhVVD5IXk3SM8Lnn81MPztbCXkK9w+\r\nwgsDJ+qSNTZ5HIZo3Qo78NlF+SDtNLXpNGl+QiI21bsruGLuE5Rv/3gzYEIf\r\nd9dZuUpbIw0Mkf1Nv9hbT3IjLEKeXYQVTFAtFbLwfCW+pADkn5SSmwTQ5nKs\r\nbmMMntTFtH232Z+aetcyaHPJwbtFaeABdt+Pn8do5knznTgFRwvHKwJBfJxd\r\nV+b/JQFAbcRzbMtOx8kEmdTz2pyvhRBfe25MqAn6Ri2vRhZWXJqAYsZ02Bq6\r\nWRlnyKCadIABKB1wvWGwTes4syuXkyjkvGYNyhjxWjHZs/o6B9vfRwvvhIak\r\n+3ytMjFI5Li3aYy773sVQo0RJSTnq5EpYx3kNVaX4bMAt7qPh8i5wBbXw8k+\r\noNAnFouY5Mtq9gsYwWG7T9aTWQFE9J6VxYt8lvkDXCZQAm/HnuLn1jlEjPwq\r\nF4ixJrT6A1QDN+jGI5LGo8b1nv76CLg3ZqA=\r\n=9f9a\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/prod/index.cjs","type":"module","_from":"file:coding4tomorrow-c4t-next-0.1.4.tgz","types":"./dist/types/index.d.ts","module":"./dist/prod/index.modern.js","exports":{"default":"./dist/prod/index.modern.js","require":"./dist/prod/index.cjs","development":"./dist/dev/index.modern.js"},"scripts":{"lint":"eslint --fix \"src/**/\"","test":"jest --verbose --coverage","build":"rm -rf ./dist && pnpm build:dev && pnpm build:prod","local":"pnpm pack --pack-destination=dist","lint:ci":"pnpm lint:check","release":"pnpm run prepublishOnly && pnpm changeset publish","test:ci":"jest --runInBand --ci --coverage --coverageDirectory=coverage","gen:docs":"rm -rf ./docs/api && typedoc --options typedoc.cjs","build:dev":"cross-env NODE_ENV=development microbundle --define process.env.NODE_ENV=development --tsconfig ./tsconfig.json --generateTypes false --format modern --output dist/dev/index.js","build:prod":"cross-env NODE_ENV=production microbundle --tsconfig ./tsconfig.json  --format modern,cjs,umd  --output dist/prod/index.js","lint:check":"eslint \"src/**/\"","test:watch":"jest --watch"},"_npmUser":{"name":"c4t-janick","email":"janick@coding4tomorrow.io"},"umd:main":"./dist/prod/index.umd.js","_resolved":"/private/var/folders/z4/3zz2ztnj39v49tpzbnzn9hc80000gn/T/0fd2dadae95426bfc6b210157551faa7/coding4tomorrow-c4t-next-0.1.4.tgz","_integrity":"sha512-b+nrvFPr6sy0sdxEyvY0Jfc9VXt0y0jrOB8wRFkPUXjbXegfC3ZyzpiFgQ/STSQtTt6O0iXxYg8ZvLYbAiZ8Ag==","repository":{"url":"git+https://github.com/your-username/untilted.git","type":"git"},"_npmVersion":"8.3.1","description":"","directories":{},"_nodeVersion":"16.14.0","_hasShrinkwrap":false,"devDependencies":{"zx":"^6.2.5","shx":"^0.3.4","swr":"^1.3.0","antd":"^4.0","jest":"^28.1.1","axios":"^0.27.0","husky":"^8.0.1","react":"^18.2.0","eslint":"^8.17.0","typedoc":"^0.23.0","prettier":"^2.6.2","cross-env":"^7.0.3","deepmerge":"^4.2.2","react-dom":"^18.2.0","lodash.get":"^4.4.2","typescript":"^4.7.3","@babel/core":"^7.18.5","@types/jest":"^28.1.1","@types/node":"^17.0.42","lint-staged":"^13.0.1","lodash.omit":"^4.5.0","lodash.pick":"^4.4.0","microbundle":"^0.15.0","@types/react":"^18.0.25","@changesets/cli":"^2.23.0","lodash.isstring":"^4.0.1","universal-cookie":"^4.0.4","@babel/preset-env":"^7.18.2","@types/lodash.get":"^4.4.7","jest-mock-console":"^2.0.0","lodash.isfunction":"^3.0.9","@types/lodash.omit":"^4.5.7","@types/lodash.pick":"^4.4.7","axios-mock-adapter":"^1.21.2","eslint-plugin-jest":"^26.5.3","@babel/preset-react":"^7.18.6","eslint-plugin-tsdoc":"^0.2.16","jest-watch-typeahead":"^1.1.0","eslint-plugin-promise":"^6.0.0","@testing-library/react":"^13.4.0","@types/lodash.isstring":"^4.0.7","eslint-config-prettier":"^8.5.0","eslint-plugin-jest-dom":"^4.0.3","eslint-plugin-prettier":"^4.0.0","jest-environment-jsdom":"^29.3.1","typedoc-plugin-markdown":"^3.12.1","@babel/preset-typescript":"^7.17.12","@types/lodash.isfunction":"^3.0.7","@testing-library/jest-dom":"^5.16.5","@typescript-eslint/parser":"^5.28.0","babel-plugin-dev-expression":"^0.2.3","babel-plugin-transform-define":"^2.0.1","eslint-plugin-testing-library":"^5.9.1","@typescript-eslint/eslint-plugin":"^5.28.0"},"peerDependencies":{"swr":"^1.3.0","antd":"^4.0","axios":"^0.27.0","react":"^18.2.0","react-dom":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/c4t-next_0.1.4_1673523550276_0.06275380348169701","host":"s3://npm-registry-packages"}},"0.1.5":{"name":"@coding4tomorrow/c4t-next","version":"0.1.5","keywords":[],"author":{"name":"Janick Delot","email":"janick@coding4tomorrow.io"},"license":"MIT","_id":"@coding4tomorrow/c4t-next@0.1.5","maintainers":[{"name":"c4t-janick","email":"janick@coding4tomorrow.io"}],"homepage":"https://github.com/your-username/untilted#readme","bugs":{"url":"https://github.com/your-username/untilted/issues"},"dist":{"shasum":"0e83623a9dd82d68b85fbbe18ab77c97660cf2b3","tarball":"https://registry.npmjs.org/@coding4tomorrow/c4t-next/-/c4t-next-0.1.5.tgz","fileCount":61,"integrity":"sha512-a+7zBYN8ioK6UqsQIWcLTrdxv5/m/XxH9klnBlRx7zmmbUKBDwyah8NdfGWFQSlhSdp+20Y5V2xw0X1JCPxz8g==","signatures":[{"sig":"MEYCIQD4gNsXpHPqh8HRLNyJxA6Mjv8cgsmH7d/WqZu7Xjoe+QIhAPCvU7V/EtjT/Z/AJBbJ0p/qfO4ppU/TQryqqr+4lvOU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":850420},"main":"./dist/prod/index.cjs","type":"module","_from":"file:coding4tomorrow-c4t-next-0.1.5.tgz","types":"./dist/types/index.d.ts","module":"./dist/prod/index.modern.js","exports":{"default":"./dist/prod/index.modern.js","require":"./dist/prod/index.cjs","development":"./dist/dev/index.modern.js"},"scripts":{"lint":"eslint --fix \"src/**/\"","test":"jest --verbose --coverage","build":"rm -rf ./dist && pnpm build:dev && pnpm build:prod","local":"pnpm pack --pack-destination=dist","lint:ci":"pnpm lint:check","release":"pnpm run prepublishOnly && pnpm changeset publish","test:ci":"jest --runInBand --ci --coverage --coverageDirectory=coverage","gen:docs":"rm -rf ./docs/api && typedoc --options typedoc.cjs","build:dev":"cross-env NODE_ENV=development microbundle --define process.env.NODE_ENV=development --tsconfig ./tsconfig.json --generateTypes false --format modern --output dist/dev/index.js","build:prod":"cross-env NODE_ENV=production microbundle --tsconfig ./tsconfig.json  --format modern,cjs,umd  --output dist/prod/index.js","lint:check":"eslint \"src/**/\"","test:watch":"jest --watch"},"_npmUser":{"name":"c4t-janick","email":"janick@coding4tomorrow.io"},"umd:main":"./dist/prod/index.umd.js","_resolved":"/private/var/folders/z4/3zz2ztnj39v49tpzbnzn9hc80000gn/T/a37d350d22a51e9a7305cdf448f72aeb/coding4tomorrow-c4t-next-0.1.5.tgz","_integrity":"sha512-a+7zBYN8ioK6UqsQIWcLTrdxv5/m/XxH9klnBlRx7zmmbUKBDwyah8NdfGWFQSlhSdp+20Y5V2xw0X1JCPxz8g==","repository":{"url":"git+https://github.com/your-username/untilted.git","type":"git"},"_npmVersion":"8.19.3","description":"## TODO","directories":{},"_nodeVersion":"16.19.0","_hasShrinkwrap":false,"devDependencies":{"zx":"^6.2.5","shx":"^0.3.4","swr":"^2.2.4","antd":"^4.0","jest":"^28.1.1","axios":"^0.27.0","husky":"^8.0.1","react":"^18.2.0","eslint":"^8.17.0","typedoc":"^0.23.0","prettier":"^2.6.2","cross-env":"^7.0.3","deepmerge":"^4.2.2","react-dom":"^18.2.0","lodash.get":"^4.4.2","typescript":"^4.7.3","@babel/core":"^7.18.5","@types/jest":"^28.1.1","@types/node":"^17.0.42","lint-staged":"^13.0.1","lodash.omit":"^4.5.0","lodash.pick":"^4.4.0","microbundle":"^0.15.0","@types/react":"^18.0.25","@changesets/cli":"^2.23.0","lodash.isstring":"^4.0.1","universal-cookie":"^4.0.4","@babel/preset-env":"^7.18.2","@types/lodash.get":"^4.4.7","jest-mock-console":"^2.0.0","lodash.isfunction":"^3.0.9","@types/lodash.omit":"^4.5.7","@types/lodash.pick":"^4.4.7","axios-mock-adapter":"^1.21.2","eslint-plugin-jest":"^26.5.3","@babel/preset-react":"^7.18.6","eslint-plugin-tsdoc":"^0.2.16","jest-watch-typeahead":"^1.1.0","eslint-plugin-promise":"^6.0.0","@testing-library/react":"^13.4.0","@types/lodash.isstring":"^4.0.7","eslint-config-prettier":"^8.5.0","eslint-plugin-jest-dom":"^4.0.3","eslint-plugin-prettier":"^4.0.0","jest-environment-jsdom":"^29.3.1","typedoc-plugin-markdown":"^3.12.1","@babel/preset-typescript":"^7.17.12","@types/lodash.isfunction":"^3.0.7","@testing-library/jest-dom":"^5.16.5","@typescript-eslint/parser":"^5.28.0","babel-plugin-dev-expression":"^0.2.3","babel-plugin-transform-define":"^2.0.1","eslint-plugin-testing-library":"^5.9.1","@typescript-eslint/eslint-plugin":"^5.28.0"},"peerDependencies":{"swr":"^1.3.0","antd":"^4.0","axios":"^0.27.0","react":"^18.2.0","react-dom":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/c4t-next_0.1.5_1698075737951_0.37800151660639125","host":"s3://npm-registry-packages"}},"0.1.6":{"name":"@coding4tomorrow/c4t-next","version":"0.1.6","description":"# Installation","keywords":[],"author":{"name":"Janick Delot","email":"janick@coding4tomorrow.io"},"license":"MIT","type":"module","main":"./dist/prod/index.cjs","module":"./dist/prod/index.modern.js","umd:main":"./dist/prod/index.umd.js","exports":{"require":"./dist/prod/index.cjs","development":"./dist/dev/index.modern.js","default":"./dist/prod/index.modern.js"},"types":"./dist/types/index.d.ts","repository":{"type":"git","url":"git+https://github.com/your-username/untilted.git"},"bugs":{"url":"https://github.com/your-username/untilted/issues"},"homepage":"https://github.com/your-username/untilted#readme","devDependencies":{"@babel/core":"^7.18.5","@babel/preset-env":"^7.18.2","@babel/preset-react":"^7.18.6","@babel/preset-typescript":"^7.17.12","@changesets/cli":"^2.23.0","@testing-library/jest-dom":"^5.16.5","@testing-library/react":"^13.4.0","@types/jest":"^28.1.1","@types/lodash.get":"^4.4.7","@types/lodash.isfunction":"^3.0.7","@types/lodash.isstring":"^4.0.7","@types/lodash.omit":"^4.5.7","@types/lodash.pick":"^4.4.7","@types/node":"^17.0.42","@types/react":"^18.0.25","@typescript-eslint/eslint-plugin":"^5.28.0","@typescript-eslint/parser":"^5.28.0","axios":"^1.6.5","axios-mock-adapter":"^1.21.2","babel-plugin-dev-expression":"^0.2.3","babel-plugin-transform-define":"^2.0.1","cross-env":"^7.0.3","deepmerge":"^4.2.2","eslint":"^8.17.0","eslint-config-prettier":"^8.5.0","eslint-plugin-jest":"^26.5.3","eslint-plugin-jest-dom":"^4.0.3","eslint-plugin-prettier":"^4.0.0","eslint-plugin-promise":"^6.0.0","eslint-plugin-testing-library":"^5.9.1","eslint-plugin-tsdoc":"^0.2.16","husky":"^8.0.1","jest":"^28.1.1","jest-environment-jsdom":"^29.3.1","jest-mock-console":"^2.0.0","jest-watch-typeahead":"^1.1.0","lint-staged":"^13.0.1","lodash.get":"^4.4.2","lodash.isfunction":"^3.0.9","lodash.isstring":"^4.0.1","lodash.omit":"^4.5.0","lodash.pick":"^4.4.0","microbundle":"^0.15.0","prettier":"^2.6.2","react":"^18.2.0","react-dom":"^18.2.0","react-hook-form":"^7.49.3","shx":"^0.3.4","swr":"^2.2.4","typedoc":"^0.23.0","typedoc-plugin-markdown":"^3.12.1","typescript":"^4.7.3","universal-cookie":"^4.0.4","zx":"^6.2.5"},"peerDependencies":{"axios":"^1.6.5","react":"^18.2.0","react-dom":"^18.2.0","swr":"^2.2.4","react-hook-form":"^7.49.3"},"scripts":{"lint":"eslint --fix \"src/**/\"","lint:check":"eslint \"src/**/\"","lint:ci":"pnpm lint:check","test":"jest --verbose --coverage","test:watch":"jest --watch","test:ci":"jest --runInBand --ci --coverage --coverageDirectory=coverage","build:prod":"cross-env NODE_ENV=production microbundle --tsconfig ./tsconfig.json  --format modern,cjs,umd  --output dist/prod/index.js","build:dev":"cross-env NODE_ENV=development microbundle --define process.env.NODE_ENV=development --tsconfig ./tsconfig.json --generateTypes false --format modern --output dist/dev/index.js","build":"rm -rf ./dist && pnpm build:dev && pnpm build:prod","gen:docs":"rm -rf ./docs/api && typedoc --options typedoc.cjs","release":"pnpm run prepublishOnly && pnpm changeset publish","local":"pnpm pack --pack-destination=dist"},"_id":"@coding4tomorrow/c4t-next@0.1.6","_integrity":"sha512-drhpGfTeo3ZDyycK0BFKJsfC9hIm5At4kVKkrTR3nGblqjwFukFNmpfj0MIfwlkD2UXM8hYlge6kwLHk82It2A==","_resolved":"/private/var/folders/z4/3zz2ztnj39v49tpzbnzn9hc80000gn/T/bdb18b300450f455461a4a9da7203712/coding4tomorrow-c4t-next-0.1.6.tgz","_from":"file:coding4tomorrow-c4t-next-0.1.6.tgz","_nodeVersion":"16.19.0","_npmVersion":"8.19.3","dist":{"integrity":"sha512-drhpGfTeo3ZDyycK0BFKJsfC9hIm5At4kVKkrTR3nGblqjwFukFNmpfj0MIfwlkD2UXM8hYlge6kwLHk82It2A==","shasum":"082cc50a8f11fb41a0b3c708ab3860e09801a798","tarball":"https://registry.npmjs.org/@coding4tomorrow/c4t-next/-/c4t-next-0.1.6.tgz","fileCount":55,"unpackedSize":504544,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/vczZNvGruSh8Q7JWiDM4wUJy8pLHT2LFkj7ihSIoTwIgcgO9VNABNUjosUdSXujoXQC66tc9mW/jD0/9sytTYsI="}]},"_npmUser":{"name":"c4t-janick","email":"janick@coding4tomorrow.io"},"directories":{},"maintainers":[{"name":"c4t-janick","email":"janick@coding4tomorrow.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/c4t-next_0.1.6_1727518413102_0.6565889419256195"},"_hasShrinkwrap":false}},"time":{"created":"2022-11-22T09:56:09.597Z","modified":"2024-09-28T10:13:33.609Z","0.1.0":"2022-11-21T21:32:49.835Z","0.1.1":"2022-11-21T21:38:11.072Z","0.1.2":"2022-11-22T09:56:09.845Z","0.1.3":"2022-12-20T15:20:03.424Z","0.1.4":"2023-01-12T11:39:10.536Z","0.1.5":"2023-10-23T15:42:18.455Z","0.1.6":"2024-09-28T10:13:33.397Z"},"bugs":{"url":"https://github.com/your-username/untilted/issues"},"author":{"name":"Janick Delot","email":"janick@coding4tomorrow.io"},"license":"MIT","homepage":"https://github.com/your-username/untilted#readme","keywords":[],"repository":{"type":"git","url":"git+https://github.com/your-username/untilted.git"},"description":"# Installation","maintainers":[{"name":"c4t-janick","email":"janick@coding4tomorrow.io"}],"readme":"# Coding 4 Tomorrow Next\n\n# Installation\n\n```sh\nyarn add @coding4tomorrow/c4t-next\n```\n\n# Getting started\n\nTo use the library you'll have to call the `useSetup` hook first thing when your React app is loaded.\n\n`_app.js` for NextJS\n\n```js\n// complete configuration\nimport { useSetup } from '@coding4tomorrow/c4t-next'\nimport { apiRoutes } from './api-routes'\n\nconst App = ({ Component, pageProps }) => {\n  useSetup({\n    api: {\n      baseURL: 'http://localhost:5000',\n      routes: apiRoutes,\n    },\n  })\n\n  return <Component {...pageProps} />\n}\n\nexport default App\n```\n\nYou can check all the available options for `useSetup` [below](#useSetup).\n\n# Examples\n\nYou can find some examples in the folder `/examples` of the project.\n\n# Hooks Documentation\n\n## useSetup\n\nThis hook configure the whole library.\n\nThe main parts are:\n\n- API calls\n- Authentication (cookies, tokens)\n- Automatic token refresh when expired\n\n### Hook options\n\n```js\nimport apiRoutes from './apiRoutes'\n\nuseSetup({\n  api: {\n    // required, this is the base URL of the API\n    baseURL: 'http://localhost:4000',\n    // required if you want to use the API\n    routes: apiRoutes,\n    // optional\n    headers: {\n      // custom headers which will be appended on each request\n      'X-API-Key': '...',\n    },\n  },\n})\n```\n\n---\n\n## apiRoutes\n\nThis is where all the API routes are defined.\n\nYou can then use them in combinaison with `useApiQuery` or `useApiRequest` or `useFormApi` etc...\n\n```tsx\nimport { type RouteTypes } from 'c4t-react'\n\nconst apiRoutes = ({ get, post, patch, put, del }: RouteTypes) => ({\n  users: {\n    me: get('/v1/users/me'),\n  },\n  books: {\n    getAll: get('/v1/books'),\n    delete: del('/v1/books/:id'),\n    update: patch('/v1/books/:id'),\n    override: put('/v1/books/:id'),\n    create: post('/v1/books'),\n  },\n  auth: {\n    login: post('/v1/auth/login'),\n    refreshToken: post('/v1/auth/refresh-token'),\n  },\n})\n\nexport default apiRoutes\n```\n\n---\n\n## useApiQuery\n\nThis hook is an implementation of [swr](https://swr.vercel.app/docs/getting-started) to work with our api system, so we keep all the benefits of using `swr` while having an easy api integration system.\n\nIt's useful when doing a simple request that has to be executed right away.\n\n```tsx\n// api-routes.ts\nimport { type RouteTypes } from 'c4t-react'\n\nconst apiRoutes = ({ post }: RouteTypes) => ({\n  books: {\n    get: get('/books/:id'),\n  },\n})\n\n// MyComponent.tsx\nimport { useApiQuery } from 'c4t-react'\n\nconst MyComponent = () => {\n  const { data, isLoading, error } = useApiQuery<MyDataType>('myApiEndpoint')\n\n  if (isLoading) return <div>Loading...</div>\n  if (error) return <div>Error: {error.message}</div>\n\n  return <div>{data && <DisplayComponent data={data} />}</div>\n}\n```\n\n### API Refrence\n\n`useApiQuery<T>(path, queryParams?, options?): useApiQueryResult<T>`\n\n#### Parameters\n\n- `path`: `string | [string, RouteParamsType] | null` - The API endpoint or a tuple containing the endpoint and route parameters.\n- `queryParams`: `QueryParams | null` - (Optional) An object containing query parameters.\n- `options`: `object` - (Optional) SWR configuration options.\n\n#### Return Value\n\n`useApiQuery` returns an object containing the following properties:\n\n- `data`: `T | undefined | null` - The data returned from the API, will be `undefined`.\n- `isLoading`: `boolean` - Indicates if the request is in the loading state.\n- `isValidating`: `boolean` - Indicates if the request is being revalidated.\n- `error`: `Error | ApiError | undefined | null` - Any error that occurred during the request.\n- `mutate`: `KeyedMutator<any>` - A function to manually trigger a revalidation.\n\n### Advanced Usage\n\n#### Handling Route Parameters\n\nFor endpoints requiring route parameters:\n\n```tsx\nconst UserDetails = ({ userId }) => {\n  const { data, isLoading, error } = useApiQuery<UserType>([\n    'user.details',\n    { userId },\n  ])\n\n  // Render logic\n}\n```\n\n#### Using Query Parameters\n\nFor endpoints with query parameters:\n\n```tsx\nconst SearchResults = ({ query }) => {\n  const { data, isLoading } = useApiQuery<SearchResultsType>('search', {\n    query,\n  })\n\n  // Render logic\n}\n```\n\n#### Custom SWR Options\n\n`useApiQuery` leverages SWR under the hood, allowing you to pass custom SWR options:\n\n```tsx\nconst PollingComponent = () => {\n  const { data } = useApiQuery<PollDataType>('poll', null, {\n    refreshInterval: 5000, // Polls every 5 seconds\n  })\n\n  // Render logic\n}\n```\n\n### Error Handling\n\nThe hook provides an `error` object which can be used to render error messages or perform actions based on the error:\n\n```tsx\nconst MyComponent = () => {\n  const { error } = useApiQuery<MyDataType>('endpoint')\n\n  if (error) {\n    console.error(error)\n    return <div>An error occurred: {error.message}</div>\n  }\n\n  // Render logic\n}\n```\n\n### Mutating Data\n\nThe `mutate` function allows you to update the local data programmatically, which is useful for optimistic UI updates:\n\n```tsx\nconst UpdateComponent = () => {\n  const { mutate } = useApiQuery<MyDataType>('endpoint')\n\n  const updateData = async (newData) => {\n    await mutate(newData, false) // Update the local data without re-fetching\n  }\n\n  // Render logic\n}\n```\n\n### TypeScript Support\n\n`useApiQuery` is fully compatible with TypeScript, offering type safety for your API data and responses. You can define the expected data type as a generic parameter to the hook:\n\n```tsx\ninterface UserData {\n  id: number\n  name: string\n  email: string\n}\n\nconst UserComponent = ({ userId }) => {\n  const { data, isLoading } = useApiQuery<UserData>([\n    'user.details',\n    { userId },\n  ])\n\n  if (isLoading) return <div>Loading user data...</div>\n  if (!data) return <div>No user data found.</div>\n\n  return (\n    <div>\n      <h1>{data.name}</h1>\n      <p>Email: {data.email}</p>\n    </div>\n  )\n}\n```\n\nThis ensures that you can work with your API data in a type-safe manner, leveraging TypeScript's capabilities to catch errors at compile time.\n\n### useSWR\n\nThis hook is an implementation of `swr` (https://swr.vercel.app/docs/getting-started) to work with our api system, so we keep all the benefits of using `swr` while having an easy api integration system.\n\nIt's useful when doing a simple request that has to be executed right away.\n\n```js\n// apiRoutes.js\nconst apiRoutes = ({ post }) => ({\n  books: {\n    get: get('/books/:id'),\n  },\n})\n\n// useSWRExample.js\nimport { useSWR } from '@coding4tomorrow/c4t-next'\n\n//...\nconst { data: book, isLoading } = useSWR('books.get', { id: 1 })\n\nif (isLoading) {\n  return <p>Loading...</p>\n}\n\nreturn (\n  <div>\n    <h2>{book.title}</h2>\n    <h3>{book.author}</h3>\n    <p>{book.description}</p>\n  </div>\n)\n```\n\n#### Hook options\n\n```js\nconst {\n  data, // the loaded data\n  error, // the error if there is\n  isLoading, // used to\n  mutate, // used to mutate the cached version of the resource\n} = useSWR(apiRoute, params, options)\n```\n\n**data**\n\n`data` is `null` until loaded.\n\nIf `data` had results before a second call, it'll keep its current value until the new value is loaded.\n\n---\n\n**error**\n\n`error` holds the error returned from the call, if there is.\n\n`data` will equal `null` if there's an error.\n\n---\n\n**isLoading**\n\nWhile `isLoading` is true, `data` is null.\n\n---\n\n**apiRoute**\n\nThis is the route path to our API call, for example `books.getAll`\n\n---\n\n**params**\n\nThis is the params for the apiRoute, for example if your URL is: `/v1/books/:id` you'll have to pass `{ id: 1 }` to transform it to `/v1/books/1`.\n\n---\n\n**options**\n\nThis is the options of `swr`.\n\nMore information at https://swr.vercel.app/docs/options#options\n\n---\n\n### useApi\n\nSometimes you need to defer the api request, for example to send information after a `click`.\n\nThis is where `useApi` comes in play.\n\n```js\n// apiRoutes.js\nconst apiRoutes = ({ post }) => ({\n  books: {\n    like: post('/books/:id/like'),\n  },\n})\n\n// useApiExample.js\nimport { useApi } from '@coding4tomorrow/c4t-next'\n\n//...\nconst { request, loading } = useApi('books.like', { id: 1 })\n\nreturn (\n  <div>\n    <a\n      onClick={() => {\n        const [err, response] = request({\n          fieldName: 'some field infos',\n        })\n\n        if (err) {\n          // display error somewhere\n          return\n        }\n\n        if (response.success) {\n          // show feedback to the user\n        }\n      }}\n    >\n      Like\n    </a>\n  </div>\n)\n```\n\n---\n\n### useFormApi\n\nThis hook is useful when working with Ant Design forms.\n\nIt's taking care of:\n\n- API call on submission\n- Automatic error handling based on fields name\n\nSimple example:\n\n```js\nimport { useFormApi } from '@coding4tomorrow/c4t-next'\nimport { useForm, Form, Input, Button } from 'antd'\n\nconst [form] = useForm()\n\nconst { ErrorComponent, onSubmit, isLoading } = useFormApi({\n  api: 'auth.login', // path as found in apiRoutes\n  form, // instance to ant design form\n})\n\nreturn (\n  <Form form={form} onSubmit={onSubmit}>\n    <ErrorComponent />\n    <Form.Item name=\"username\">\n      <Input />\n    </Form.Item>\n    <Form.Item name=\"password\">\n      <Input.Password />\n    </Form.Item>\n    <Button type=\"primary\" htmlType=\"submit\" loading={isLoading}>\n      Sign in\n    </Button>\n  </Form>\n)\n```\n\nIn this example, when the user submit the form, it'll send to the API a post request with the following fields:\n\n```js\n{\n  username: '...',\n  password: '...',\n}\n```\n\nIf the API returns any error in the username or in the password, they will be displayed under the corresponding field like Ant Design would do.\nIf it's a global error (not related to a field), it'll use the `<ErrorComponent />` from the library.\n\nYou can learn more about errors handling here [link]\n\n#### Hook options\n\n```js\nuseFormApi({\n  api,\n  form,\n  beforeApiCall = values => values,\n  afterApiCall = response => response,\n  beforeErrorsHandling = errors => errors,\n})\n```\n\n**api**\n\nThis parameter can be a string, an object or a function depending on the use case.\n\n**A string is used for simple routes**\n\n```js\n// apiRoutes.js\nconst apiRoutes = ({ post }) => ({\n  auth: {\n    login: post('/auth/login'),\n  },\n})\n\n// useFormApiExample.js\nconst { onSubmit } = useFormApi({\n  api: 'auth.login', // will call POST /auth/login\n})\n```\n\n**An object is used for routes with params**\n\n```js\n// apiRoutes.js\nconst apiRoutes = ({ patch }) => ({\n  users: {\n    patch: patch('/users/:name'),\n  },\n})\n\n// useFormApiExample.js\nconst { onSubmit } = useFormApi({\n  api: {\n    // will call PATCH /users/janick\n    path: 'users.patch',\n    params: { name: 'janick' },\n  },\n})\n```\n\n**A function is used when you need to resolve the path just before the request**\n\n```js\nconst apiRoutes = ({ patch }) => ({\n  users: {\n    patch: patch('/users/:name'),\n  },\n})\n\n...\n\nconst [form] = useForm()\n\n// here form.getFieldValue('name') is evaluated at\n// the creation of the hook, returning an undefined value\nconst {\n  onSubmit,\n} = useFormApi({\n  api: { // no function\n    path: 'users.patch', // will call PATCH /users/undefined\n    params: { name: form.getFieldValue('name') }, // form.getFieldValue('name') = undefined\n  },\n})\n\n// --------------------------------\n\nconst {\n  onSubmit,\n} = useFormApi({\n  api: () => ({ // note the function here\n    path: 'users.patch', // will call PATCH /users/janick if form.getFieldValue('name') = 'janick'\n    params: { name: form.getFieldValue('name') },\n  }),\n})\n```\n\n---\n\n**form**\n\nThis parameter is the form variable generated by useForm from Ant Design.\n\n```js\nimport { useForm } from 'antd'\n\nconst [form] = useForm()\n\nconst { onSubmit } = useFormApi({\n  form,\n})\n```\n\nIt is used to manage fields related errors.\n\n---\n\n**beforeApiCall**\n\nThis parameter is used to transform the data before it is sent to the API.\n\n```js\nconst { onSubmit } = useFormApi({\n  beforeApiCall: (values) => {\n    // some processing\n\n    return {\n      ...values,\n      name: 'Overriden name',\n    }\n  },\n})\n```\n\n---\n\n**afterApiCall**\n\nThis parameter is usually used to add an action after the API call is successful.\n\n```js\nconst router = useRouter()\n\nconst { onSubmit } = useFormApi({\n  afterApiCall: (response) => {\n    // redirects to user's profile after editing\n    router.push(`/users/${response.id}`)\n  },\n})\n```\n\n---\n\n**beforeErrorsHandling**\n\nThis parameter is called just before dispatching the errors between the form and the `<ErrorComponent />`, this is the best time to do any needed transformation.\n\n```js\nconst { onSubmit } = useFormApi({\n  beforeErrorsHandling: (errors) => {\n    // do something with errors\n  },\n})\n```\n","readmeFilename":"README.md"}