{"_id":"@astahmer/entity-routes","_rev":"7-cab453d1ed8f38334d29c3eb5ed99f91","name":"@astahmer/entity-routes","dist-tags":{"latest":"0.1.8"},"versions":{"0.1.2":{"name":"@astahmer/entity-routes","version":"0.1.2","description":"Design your API around your entities in minutes","source":"src/index.ts","main":"dist/index.js","module":"dist/index.js","unpkg":"dist/index.umd.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"scripts":{"test":"jest --runInBand --detectOpenHandles","test:clear":"jest --clearCache","test:watch":"jest --runInBand --detectOpenHandles --watch --no-watchman","test:coverage":"jest --coverage --runInBand --detectOpenHandles","tsc":"tsc","commit":"git-cz","prettier":"prettier --write \"./{src,tests}/**/*.ts\"","dev":"webpack --env.hmr","build":"webpack --env.prod","watch":"webpack --env.prod --env.hmr","start":"node -r ts-node/register dist/index","release":"npm test && standard-version","prepare":"npm run build","prepublishOnly":"npm test","tags":"npm test && git push && git push --tags"},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"dependencies":{"@astahmer/entity-validator":"^0.1.1","class-validator":"^0.12.2","reflect-metadata":"^0.1.13","typedi":"^0.8.0","typeorm":"^0.2.25","uuid":"^8.2.0"},"devDependencies":{"@babel/core":"^7.10.5","@babel/plugin-proposal-optional-chaining":"^7.10.3","@babel/preset-env":"^7.10.4","@types/body-parser":"^1.19.0","@types/jest":"^26.0.3","@types/koa":"^2.11.3","@types/koa-bodyparser":"^4.3.0","@types/koa-router":"^7.4.1","@types/uuid":"^8.0.0","@zerollup/ts-transform-paths":"^1.7.18","axios":"^0.19.2","babel-loader":"^8.1.0","body-parser":"^1.19.0","clean-webpack-plugin":"^3.0.0","commitizen":"^4.1.2","express":"^4.17.1","husky":"^4.2.5","jest":"^26.1.0","jest-diff":"^26.1.0","jest-extended":"^0.11.5","koa":"^2.13.0","koa-bodyparser":"^4.3.0","koa-router":"^9.0.1","prettier":"^2.0.5","pretty-quick":"^2.0.1","sql.js":"^1.3.0","standard-version":"^8.0.0","ts-jest":"^26.1.1","ts-loader":"^7.0.5","ts-node":"^8.10.2","tsconfig-paths":"^3.9.0","tsconfig-paths-webpack-plugin":"^3.2.0","typescript":"^3.9.5","webpack":"^4.43.0","webpack-cli":"^3.3.12","webpack-loader-helper":"^1.0.0","webpack-node-externals":"^1.7.2"},"keywords":["entity","routes","entity-routes","api","typescript","model","typeorm","koa"],"author":{"name":"Alexandre Stahmer","email":"alexandre.stahmer@gmail.com"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/astahmer/entity-routes.git"},"gitHead":"618a08ed9d65204074bb697f1e8a9d965917ead1","bugs":{"url":"https://github.com/astahmer/entity-routes/issues"},"homepage":"https://github.com/astahmer/entity-routes#readme","_id":"@astahmer/entity-routes@0.1.2","_nodeVersion":"12.16.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-8u0X1DAdbW63ML0UNdx7tN51v50IMdMzUZRzlpa5o72cwg+sLdEsgXYV0vJalj1LNxMSwWNDxvxkbSLXvfCPtA==","shasum":"5aa7e9de9e06c6c42d99b4597800c0b4e33530fd","tarball":"https://registry.npmjs.org/@astahmer/entity-routes/-/entity-routes-0.1.2.tgz","fileCount":163,"unpackedSize":772670,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJqB5CRA9TVsSAnZWagAA/oEQAJh0vNkZrKnRbERGdST1\nv7ML4KsukmxtHuX0vQtWsUNnu/n2s8JbGT0ySChuk4fTo6kn1GXlpaxdhrzF\nyi+lOvUNs34qN17kwjwjDBd9a0Dbd458BqJMOmfsH8r8tjEtczIeq7tnu/rH\nakiWkYihetS6pILwmSU2pJMeGabtP8KkQMQZz8srx0C5CM2RUbro9/YF3NoQ\nSvCCo/JzGawhPCDir+G552vx3UWEJBpDdigEQjzez/BhHY2ZvpeV+d4q5nDk\nDKJAuG3qiS5VAn0+UJYxp7sLkjsG0r5bY8DlRDDcv/dRO+gEmA/KI0u0S5mW\n3Fxouo2z0Ikc+L92XLGAiM82mF52OeIZvK2LcXU4X7xtvuAOFKW14/fYXejC\nai5a10ILXcfoXEYXRmACQv4UzMqxD03OkueyXJm1t0dluB5ePYUIedNiEQZf\nmrPCTkye2I3evgtXrQQsuYZRLXmgORpTBQShJb0tlVWzrF8OoQHg5DveWGhp\n0/OIfxLiRamXwdEJ8KI24deUV9k9Z5vBmG03ebLkuXz5SJ/Ydw/Z+dZKh+wC\nNovwtkNR2u2pAwOA1y34i3FYO8bvejKMxmVv0IY+ijiNRkXJ/l9A2tvER1+K\nRE2ayKPc3ewjNJiBa5LBErDDLSbP+VaQxwIutvsYleIypx7b1PkhE3yMSZTL\nH5dm\r\n=Te+c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGgaaV7RvRMfa+A1Nxt7VCX1ADe6i5fmtI8/xCLChDT5AiAfCsE8S1+L2//HFU3nmnLrEd/2eBHa+IMELs3AnNx+Aw=="}]},"maintainers":[{"name":"astahmer","email":"alexandre.stahmer@gmail.com"}],"_npmUser":{"name":"astahmer","email":"alexandre.stahmer@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/entity-routes_0.1.2_1596366968990_0.6652688413406822"},"_hasShrinkwrap":false},"0.1.3":{"name":"@astahmer/entity-routes","version":"0.1.3","description":"Design your API around your entities in minutes","source":"src/index.ts","main":"dist/index.js","module":"dist/index.js","unpkg":"dist/index.umd.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"scripts":{"test":"jest --runInBand --detectOpenHandles","test:clear":"jest --clearCache","test:watch":"jest --runInBand --detectOpenHandles --watch --no-watchman","test:coverage":"jest --coverage --runInBand --detectOpenHandles","tsc":"tsc","commit":"git-cz","prettier":"prettier --write \"./{src,tests}/**/*.ts\"","dev":"webpack --env.hmr","build":"webpack --env.prod","watch":"webpack --env.prod --env.hmr","start":"node -r ts-node/register dist/index","release":"standard-version","prepare":"npm run build","prepublishOnly":"npm test","tags":"git push && git push --tags"},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"dependencies":{"@astahmer/entity-validator":"^0.1.1","class-validator":"^0.12.2","reflect-metadata":"^0.1.13","typedi":"^0.8.0","typeorm":"^0.2.25","uuid":"^8.2.0"},"devDependencies":{"@babel/core":"^7.10.5","@babel/plugin-proposal-optional-chaining":"^7.10.3","@babel/preset-env":"^7.10.4","@types/body-parser":"^1.19.0","@types/jest":"^26.0.3","@types/koa":"^2.11.3","@types/koa-bodyparser":"^4.3.0","@types/koa-router":"^7.4.1","@types/uuid":"^8.0.0","@zerollup/ts-transform-paths":"^1.7.18","axios":"^0.19.2","babel-loader":"^8.1.0","body-parser":"^1.19.0","clean-webpack-plugin":"^3.0.0","commitizen":"^4.1.2","express":"^4.17.1","husky":"^4.2.5","jest":"^26.1.0","jest-diff":"^26.1.0","jest-extended":"^0.11.5","koa":"^2.13.0","koa-bodyparser":"^4.3.0","koa-router":"^9.0.1","prettier":"^2.0.5","pretty-quick":"^2.0.1","sql.js":"^1.3.0","standard-version":"^8.0.0","ts-jest":"^26.1.1","ts-loader":"^7.0.5","ts-node":"^8.10.2","tsconfig-paths":"^3.9.0","tsconfig-paths-webpack-plugin":"^3.2.0","typescript":"^3.9.5","webpack":"^4.43.0","webpack-cli":"^3.3.12","webpack-loader-helper":"^1.0.0","webpack-node-externals":"^1.7.2"},"peerDependencies":{"express":"^4.17.1","koa":"^2.13.0"},"keywords":["entity","routes","entity-routes","api","typescript","model","typeorm","koa"],"author":{"name":"Alexandre Stahmer","email":"alexandre.stahmer@gmail.com"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/astahmer/entity-routes.git"},"gitHead":"9a61cce1dc8282114d4c3a46dc36a04f1655f1fc","bugs":{"url":"https://github.com/astahmer/entity-routes/issues"},"homepage":"https://github.com/astahmer/entity-routes#readme","_id":"@astahmer/entity-routes@0.1.3","_nodeVersion":"12.16.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-t/LsZRaHi4HNB0ETb7PvGMjIdRyj2Ge+sah2I4KrExOuNDaTVtwxcTy4K0EGkYhsfTRNHmx8skwCHVbZafAxJg==","shasum":"ed38c65fffb0b6a015abb5a61adaf340251cff71","tarball":"https://registry.npmjs.org/@astahmer/entity-routes/-/entity-routes-0.1.3.tgz","fileCount":163,"unpackedSize":772977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJqW2CRA9TVsSAnZWagAAUuAP/0NBl1vTxT0z7UhPIivL\nF9iOJ5CGd6cFiC1acpkFQ9tPlwch0QM1Y09TjBM+Uvm5uEDXnjUomQbPm/sU\nR25Y3sViEfisNHsKy4RWimmAEosprcKb+QrziutCpN4MIxPkqy/8eIIEspNG\n66hZi1sCL+0ED41CxD61F1fVWNCWpuOCHKX7sXREFZBch+p/xPy/7kXcEzlR\nmsBq/tg4ILh3QINHkq0UaGSGf/jcSGu3/r+LnTUaz6Hmj5Q59F7MovkzrNd0\nKigaIcToYAdrtJ7tt8dgm1L8Ed+eKaI56uDlMndEGHu6U3cQWRS8ydRQH0df\nuvaomNB0zxp35qKUldeVaYNh2fJVqNO+qDEOsMHNwwRI08mMq+7DiL6RrP0a\nJ3rhuB++N/piiTSfBun6fhyZyZzAikI0PAVcxPPKBV4cqrCAfx4w2DbQ1k7j\nEb0NTvgf3ZAmCzuKxrz48W6HX9CsfGlgO7nx7xEdOOrgEYivEcZke+W+ZLqK\n65SerPkeVXgVWQXGsMxNYjcdi/3ZDh4QCdmgRtNPWXOkQOyqHjuCIQysWxGs\nJjqL0Y0uVBBEEfAUecZrlKub52k186eQLBg+JWXaH26hT3d/eOZHS3XCVehx\n7Ra+mPHBCJ1xALwYa63COMhA1bpGUEtrgyDTONtrJBIeXCFo/oQEXPmAucBM\nES7s\r\n=8TBx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFW71Xzvc0o8m9yH4pkU3qq0D+f7xSqqrDz3IH9nnNQmAiB4dPqO4VIFj52HAGvl9O5UJ1vCyh2AIEu1/u08BixNVw=="}]},"maintainers":[{"name":"astahmer","email":"alexandre.stahmer@gmail.com"}],"_npmUser":{"name":"astahmer","email":"alexandre.stahmer@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/entity-routes_0.1.3_1596368310149_0.4454052127010222"},"_hasShrinkwrap":false},"0.1.4":{"name":"@astahmer/entity-routes","version":"0.1.4","description":"Design your API around your entities in minutes","source":"src/index.ts","main":"dist/index.js","module":"dist/index.js","unpkg":"dist/index.umd.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"scripts":{"test":"jest --runInBand --detectOpenHandles","test:clear":"jest --clearCache","test:watch":"jest --runInBand --detectOpenHandles --watch --no-watchman","test:coverage":"jest --coverage --runInBand --detectOpenHandles","tsc":"tsc","commit":"git-cz","prettier":"prettier --write \"./{src,tests}/**/*.ts\"","dev":"webpack --env.hmr","build":"webpack --env.prod","watch":"webpack --env.prod --env.hmr","start":"node -r ts-node/register dist/index","release":"standard-version","prepare":"npm run build","prepublishOnly":"npm test","release-publish":"npm run release && npm publish && git push --follow-tags origin develop"},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"dependencies":{"@astahmer/entity-validator":"^0.1.1","class-validator":"^0.12.2","express":"^4.17.1","koa":"^2.13.0","reflect-metadata":"^0.1.13","typedi":"^0.8.0","typeorm":"^0.2.25","uuid":"^8.2.0"},"devDependencies":{"@babel/core":"^7.10.5","@babel/plugin-proposal-optional-chaining":"^7.10.3","@babel/preset-env":"^7.10.4","@types/body-parser":"^1.19.0","@types/jest":"^26.0.3","@types/koa":"^2.11.3","@types/koa-bodyparser":"^4.3.0","@types/koa-router":"^7.4.1","@types/uuid":"^8.0.0","@zerollup/ts-transform-paths":"^1.7.18","axios":"^0.19.2","babel-loader":"^8.1.0","body-parser":"^1.19.0","clean-webpack-plugin":"^3.0.0","commitizen":"^4.1.2","husky":"^4.2.5","jest":"^26.1.0","jest-diff":"^26.1.0","jest-extended":"^0.11.5","koa-bodyparser":"^4.3.0","koa-router":"^9.0.1","prettier":"^2.0.5","pretty-quick":"^2.0.1","sql.js":"^1.3.0","standard-version":"^8.0.0","ts-jest":"^26.1.1","ts-loader":"^7.0.5","ts-node":"^8.10.2","tsconfig-paths":"^3.9.0","tsconfig-paths-webpack-plugin":"^3.2.0","typescript":"^3.9.5","webpack":"^4.43.0","webpack-cli":"^3.3.12","webpack-loader-helper":"^1.0.0","webpack-node-externals":"^1.7.2"},"peerDependencies":{"express":"^4.17.1","koa":"^2.13.0"},"keywords":["entity","routes","entity-routes","api","typescript","model","typeorm","koa"],"author":{"name":"Alexandre Stahmer","email":"alexandre.stahmer@gmail.com"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/astahmer/entity-routes.git"},"gitHead":"1e84889396700c08fad48936701c0598d3f47a76","bugs":{"url":"https://github.com/astahmer/entity-routes/issues"},"homepage":"https://github.com/astahmer/entity-routes#readme","_id":"@astahmer/entity-routes@0.1.4","_nodeVersion":"12.16.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-fr93lFYtTOuv3pTWS2k1iVfiv21vDEkh92xY/O7WIncrcb8vfddAErF5HU3uAqV7XXyk/e1kPZztfoWOUnsgig==","shasum":"15e51c472b797528c7d4f003b1cb60497581c465","tarball":"https://registry.npmjs.org/@astahmer/entity-routes/-/entity-routes-0.1.4.tgz","fileCount":163,"unpackedSize":773290,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJqhICRA9TVsSAnZWagAAeBEP/iFLKeWgmGc52CC19cBr\nPZnGXgg3oWho/9V7fDLVtdGRNnRBYST7u1lDmB9bmuwAReB0piFq8vRwZG9/\nbNI0zmkvHGWdaLpP4o9PHI6mBV3TuyTm7QnqahvmTopBCG4eDFesl+wCsSbm\nen+TxNL1304cH0dwZfwdz4EKF+LlCIyfjb7TPIf0JxN5ryIoeCnglCU1v+ps\nkiOtVgoWiNeI1eJkfPWLecTkhK1ogFlzI9wiVPa9VRq+ddDFHBS5MyQtJbuR\nva7MPdPo3ovxhlnox6/cV4Sp1Z7KGG0fLn96As66QWvRhOdPiuATxxFd/Ope\nfz7c6T+o+LuPHpagIRGer6yUTAs7IegYFBzco0Poos8Jodz1V7CzHAubz3vg\naIXEGpljybnyAdmARuNvkVLjp+W7SjCVVlOCIihycwA3E43b1Cz9mvdwahvU\n3+uPIRvCg+hU9Te/qH+vBv2T1J/3Mk70H1Kva/x7ycxOMifbVGyJCIKaiCz9\nJd9hV+bY2yS8r4HtWetezflRi8VB+wVFn4dbgxXkWLDJqpbgF/+FURMBnD6v\nkyKGpev7c2QYa4vRWtcS+0U7NHaEgDhmo72URDwOUnCrIypChmGLd8aNmu/+\nDZup4xZrk29bjrH8CFudmkPd9ZZqoiINdxwu/uVLSqJJrFhiJWsS9lsuCkI5\nt3k2\r\n=4MBt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRMhbIGdjr/yZh8YTxMjATvtm/PETuTcKOHXRzIzM3qgIhAIskyvDH2Yilk8WSPS3WeDCNaNmWm3OCSiVJ9xucf/bb"}]},"maintainers":[{"name":"astahmer","email":"alexandre.stahmer@gmail.com"}],"_npmUser":{"name":"astahmer","email":"alexandre.stahmer@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/entity-routes_0.1.4_1596368967841_0.4747005234707051"},"_hasShrinkwrap":false},"0.1.5":{"name":"@astahmer/entity-routes","version":"0.1.5","description":"Design your API around your entities in minutes","source":"src/index.ts","main":"dist/index.js","module":"dist/index.js","unpkg":"dist/index.umd.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"scripts":{"test":"jest --runInBand --detectOpenHandles","test:clear":"jest --clearCache","test:watch":"jest --runInBand --detectOpenHandles --watch --no-watchman","test:coverage":"jest --coverage --runInBand --detectOpenHandles","tsc":"tsc","commit":"git-cz","prettier":"prettier --write \"./{src,tests}/**/*.ts\"","dev":"webpack --env.hmr","build":"webpack --env.prod","watch":"webpack --env.prod --env.hmr","start":"node -r ts-node/register dist/index","release":"standard-version","prepare":"npm run build","prepublishOnly":"npm test","release-publish":"npm run release && git push --follow-tags origin develop && npm publish"},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"dependencies":{"@astahmer/entity-validator":"^0.1.1","class-validator":"^0.12.2","express":"^4.17.1","koa":"^2.13.0","reflect-metadata":"^0.1.13","typedi":"^0.8.0","typeorm":"^0.2.25","uuid":"^8.2.0"},"devDependencies":{"@babel/core":"^7.10.5","@babel/plugin-proposal-optional-chaining":"^7.10.3","@babel/preset-env":"^7.10.4","@types/body-parser":"^1.19.0","@types/jest":"^26.0.3","@types/koa":"^2.11.3","@types/koa-bodyparser":"^4.3.0","@types/koa-router":"^7.4.1","@types/uuid":"^8.0.0","@zerollup/ts-transform-paths":"^1.7.18","axios":"^0.19.2","babel-loader":"^8.1.0","body-parser":"^1.19.0","clean-webpack-plugin":"^3.0.0","commitizen":"^4.1.2","husky":"^4.2.5","jest":"^26.1.0","jest-diff":"^26.1.0","jest-extended":"^0.11.5","koa-bodyparser":"^4.3.0","koa-router":"^9.0.1","prettier":"^2.0.5","pretty-quick":"^2.0.1","sql.js":"^1.3.0","standard-version":"^8.0.0","ts-jest":"^26.1.1","ts-loader":"^7.0.5","ts-node":"^8.10.2","tsconfig-paths":"^3.9.0","tsconfig-paths-webpack-plugin":"^3.2.0","typescript":"^3.9.5","webpack":"^4.43.0","webpack-cli":"^3.3.12","webpack-loader-helper":"^1.0.0","webpack-node-externals":"^1.7.2"},"peerDependencies":{"express":"^4.17.1","koa":"^2.13.0"},"keywords":["entity","routes","entity-routes","api","typescript","model","typeorm","koa"],"author":{"name":"Alexandre Stahmer","email":"alexandre.stahmer@gmail.com"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/astahmer/entity-routes.git"},"gitHead":"dc196d6acee41949e7c14628bf440f6c0fc0ea65","bugs":{"url":"https://github.com/astahmer/entity-routes/issues"},"homepage":"https://github.com/astahmer/entity-routes#readme","_id":"@astahmer/entity-routes@0.1.5","_nodeVersion":"14.7.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-DurljFuBEdh5cmQrJSHawEHB1gu1BjB/Gj7yIlLWDopUKZkbJThgo+YB4YwsvUtMpfpzW9EIFFBeEnrMQzSycQ==","shasum":"c6a947f21d8935cb1484b69d2febda54a859e81a","tarball":"https://registry.npmjs.org/@astahmer/entity-routes/-/entity-routes-0.1.5.tgz","fileCount":163,"unpackedSize":771779,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNwe3CRA9TVsSAnZWagAA0AIQAIUSNBACV4mMwLnpktP5\n4433Jmx6QVaVrVC2QssNeo+39sHhZYflNGVf4i3eLmsSIybCAOMlhyXbMXbM\nkpClEAnjj5Y+yiipPyeG57pThP0wKjLhoWu4bEalI/RbSv7cmtlY4xMKeCmV\nQgM1ny1kjvzDMaKfyLgABz1+ls6mBf/EFb/kq+giaBf1qpwZKYmb/lYWqjCY\nME3R402kNi74LDWQVZnwlQIMdvthWwTF/mn4I5ZQDDcwztlYwhdu7DzFnHDg\nI04s8075BYphlQPUwVGrhG7+rEDpqfIYHXH+e+z5Yd3Q+N/ps3bSJouYrsPZ\nVVAaUjf1JAud+ToXnijlynQTs67Vqu9y0ECYXL0lxONoibIjR6KbdJiIasx1\nTCbnzedwzwsb/amCEr103isKnHn4HCN9Orzy09Kg7qfSE2X6q0xhx1Z4mc4n\n/USf4fUsbolWdNbL399UDV9FGe6NsB3R4k7dUjFh7WHbGcCHVgMUBRBwYng2\n82Ofy6O0KDhvfseN7a/+qT5yDduDQTMaV70ik3ClxQD6SPkCTHN2kVLZOoNg\nYny5WDeclCCMcCLpf68Uiz4elFL9JVU7caw6PUmaXsGiQvbpuHVMw49qvNlN\nGAySOCigFWkjSis6QiMAOF2NFohq9pKgsUHbhnrbwKdFSwb28yUBNaCfWY6d\nP1qm\r\n=dv9R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB7mmWzaDFPpJPX110r1JmfbgWsOnin7WHFp89LLw9+WAiEAksEZowc1nyu9wzdjFnVWmjqBXIr+R0243rAlDTdq008="}]},"maintainers":[{"name":"astahmer","email":"alexandre.stahmer@gmail.com"}],"_npmUser":{"name":"astahmer","email":"alexandre.stahmer@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/entity-routes_0.1.5_1597441974220_0.5773898166770854"},"_hasShrinkwrap":false},"0.1.6":{"name":"@astahmer/entity-routes","version":"0.1.6","description":"Design your API around your entities in minutes","source":"src/index.ts","main":"dist/index.js","module":"dist/index.js","unpkg":"dist/index.umd.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"scripts":{"test":"jest --runInBand --detectOpenHandles","test:clear":"jest --clearCache","test:watch":"jest --runInBand --detectOpenHandles --watch --no-watchman","test:coverage":"jest --coverage --runInBand --detectOpenHandles","tsc":"tsc","commit":"git-cz","prettier":"prettier --write \"./{src,tests}/**/*.ts\"","dev":"webpack --env.hmr","build":"webpack --env.prod","watch":"webpack --env.prod --env.hmr","start":"node -r ts-node/register dist/index","release":"standard-version","prepare":"npm run build","prepublishOnly":"npm test","release-publish":"npm run release && npm publish && git push --follow-tags origin main"},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"dependencies":{"@astahmer/entity-validator":"^0.1.1","class-validator":"^0.12.2","express":"^4.17.1","koa":"^2.13.0","reflect-metadata":"^0.1.13","typedi":"^0.8.0","typeorm":"^0.2.26","uuid":"^8.2.0"},"devDependencies":{"@babel/core":"^7.10.5","@babel/plugin-proposal-optional-chaining":"^7.10.3","@babel/preset-env":"^7.10.4","@types/body-parser":"^1.19.0","@types/jest":"^26.0.3","@types/koa":"^2.11.3","@types/koa-bodyparser":"^4.3.0","@types/koa-router":"^7.4.1","@types/uuid":"^8.0.0","@zerollup/ts-transform-paths":"^1.7.18","axios":"^0.19.2","babel-loader":"^8.1.0","body-parser":"^1.19.0","clean-webpack-plugin":"^3.0.0","commitizen":"^4.1.2","husky":"^4.2.5","jest":"^26.1.0","jest-diff":"^26.1.0","jest-extended":"^0.11.5","koa-bodyparser":"^4.3.0","koa-router":"^9.0.1","prettier":"^2.0.5","pretty-quick":"^2.0.1","sql.js":"^1.3.0","standard-version":"^8.0.0","ts-jest":"^26.1.1","ts-loader":"^7.0.5","ts-node":"^8.10.2","tsconfig-paths":"^3.9.0","tsconfig-paths-webpack-plugin":"^3.2.0","typescript":"^3.9.5","webpack":"^4.43.0","webpack-cli":"^3.3.12","webpack-loader-helper":"^1.0.0","webpack-node-externals":"^1.7.2"},"peerDependencies":{"express":"^4.17.1","koa":"^2.13.0"},"keywords":["entity","routes","entity-routes","api","typescript","model","typeorm","koa"],"author":{"name":"Alexandre Stahmer","email":"alexandre.stahmer@gmail.com"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/astahmer/entity-routes.git"},"gitHead":"919ea6983ad292f9b0628f12213564a3f67d3fa6","bugs":{"url":"https://github.com/astahmer/entity-routes/issues"},"homepage":"https://github.com/astahmer/entity-routes#readme","_id":"@astahmer/entity-routes@0.1.6","_nodeVersion":"14.7.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-B8D/3zsn/HsyxLmLRzYsxeDizumWK6ExxnoZeo/AwYp1PCMnlf89VCJUF/nliahLyjgVxf9gOCnJWX64C6KH4w==","shasum":"b1ffa918997b848d6d5fcafa172914f426e3e8dc","tarball":"https://registry.npmjs.org/@astahmer/entity-routes/-/entity-routes-0.1.6.tgz","fileCount":268,"unpackedSize":3741401,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfZ9NqCRA9TVsSAnZWagAAbI0P/iKYhqXjkY+deqv6RS/v\nxKBEIefauVBKUhaNF8UBs70C+ajKqFeyWgugYkmanL+HXYwud/gCiOncNexE\nL98z7eK3J7Pv3FFuCc1U4MFgS6ayAQuNaJpQ9qY2yzIeBJCqba+NNgwTMa0l\n1pXrVH7PkSyfa6n25XOYBxfRz6HJHQRwMnDLsGrYgy4Vy0nuea05tCr00xRl\nCB74ayPtEbiUwAniHfQ6nmmwC5BcCSAcp4Ontl/uX8EnmyZONZwrJCZVYUQa\nCM/56kFNvQTSpicu53wRP+pdlu+QHWKIk4m+ZKDoRf1BLl0U9nNvN88almNN\nrw2wVDrPkk3bfwzyQfgMpImYg0Z3vp8kgK8DIn9REctqolGWrQABDYd3XgXk\neY7HnH6rcrLzz75v3285X6lwlSZvAf8g6LrRrvickXPu9oQ1b4wl0HNFDXNZ\nRa9xf7aN+s2T4yf1NIhYcDwytyyiAcxFBDGSlGVmQhVrEsWYP9pZyZE9HA+V\nlOUMnDsSR63fwMxSclB7z2+QSlJe4qqHOCDe9G6bu8CiHAh3ujtyWgilCYmk\n1HIXqVOH73mwB6eQ7gWMS0zMY/sHfEXkH7o46yp6THTXImNQyh6s1HhlmVZM\nEQiaybIyec022JktEsPGw/1GfPL8OnePumEdt0J5M+uWpJnXdUMv5lN4LtBf\ndlI4\r\n=t0z6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBNGlRz4NXoAbL4tqYJx2U2yePmvO67CxWMKz5Nhoe+QAiAE8lK29T8mbr/g/heRYEHYudzNuh+eaUqw5MkZbxi57g=="}]},"maintainers":[{"name":"astahmer","email":"alexandre.stahmer@gmail.com"}],"_npmUser":{"name":"astahmer","email":"alexandre.stahmer@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/entity-routes_0.1.6_1600639849750_0.8921851796675382"},"_hasShrinkwrap":false},"0.1.7":{"name":"@astahmer/entity-routes","version":"0.1.7","description":"Design your API around your entities in minutes","source":"src/index.ts","main":"dist/index.js","module":"dist/index.js","unpkg":"dist/index.umd.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"scripts":{"test":"jest --runInBand --detectOpenHandles","test:clear":"jest --clearCache","test:watch":"jest --runInBand --detectOpenHandles --watch --no-watchman","test:coverage":"jest --coverage --runInBand --detectOpenHandles","tsc":"tsc","commit":"git-cz","prettier":"prettier --write \"./{src,tests}/**/*.ts\"","dev":"webpack --env.hmr","build":"webpack --env.prod","watch":"webpack --env.prod --env.hmr","start":"node -r ts-node/register dist/index","release":"standard-version","prepare":"npm run build","prepublishOnly":"npm test","release-publish":"npm run release && npm publish && git push --follow-tags origin main"},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"dependencies":{"@astahmer/entity-validator":"^0.1.1","class-validator":"^0.12.2","express":"^4.17.1","koa":"^2.13.0","reflect-metadata":"^0.1.13","typedi":"^0.8.0","typeorm":"^0.2.26","uuid":"^8.2.0"},"devDependencies":{"@babel/core":"^7.10.5","@babel/plugin-proposal-optional-chaining":"^7.10.3","@babel/preset-env":"^7.10.4","@trivago/prettier-plugin-sort-imports":"^1.2.0","@types/body-parser":"^1.19.0","@types/jest":"^26.0.3","@types/koa":"^2.11.3","@types/koa-bodyparser":"^4.3.0","@types/koa-router":"^7.4.1","@types/uuid":"^8.0.0","@zerollup/ts-transform-paths":"^1.7.18","axios":"^0.19.2","babel-loader":"^8.1.0","body-parser":"^1.19.0","clean-webpack-plugin":"^3.0.0","commitizen":"^4.1.2","husky":"^4.2.5","jest":"^26.1.0","jest-diff":"^26.1.0","jest-extended":"^0.11.5","koa-bodyparser":"^4.3.0","koa-router":"^9.0.1","openapi3-ts":"^2.0.0","prettier":"^2.0.5","pretty-quick":"^2.0.1","sql.js":"^1.3.0","standard-version":"^8.0.0","ts-jest":"^26.1.1","ts-loader":"^7.0.5","ts-node":"^8.10.2","tsconfig-paths":"^3.9.0","tsconfig-paths-webpack-plugin":"^3.2.0","typescript":"^3.9.5","webpack":"^4.43.0","webpack-cli":"^3.3.12","webpack-loader-helper":"^1.0.0","webpack-node-externals":"^1.7.2"},"peerDependencies":{"express":"^4.17.1","koa":"^2.13.0"},"keywords":["entity","routes","entity-routes","api","typescript","model","typeorm","koa"],"author":{"name":"Alexandre Stahmer","email":"alexandre.stahmer@gmail.com"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/astahmer/entity-routes.git"},"gitHead":"989c1ef6fdb30f741b331de54962c0f30de94e35","bugs":{"url":"https://github.com/astahmer/entity-routes/issues"},"homepage":"https://github.com/astahmer/entity-routes#readme","_id":"@astahmer/entity-routes@0.1.7","_nodeVersion":"14.7.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XIBjJELTWrYmmd2DGfwkDMs9hPzZmF1sfHaDLQa6ntN73bMWpeeESrEybEaXpWWQSYO3TEEy/QHJJUgXPrOC0Q==","shasum":"b45d32a681ccc65517ecdd7f27e597f8894e1019","tarball":"https://registry.npmjs.org/@astahmer/entity-routes/-/entity-routes-0.1.7.tgz","fileCount":303,"unpackedSize":3899686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkufsCRA9TVsSAnZWagAAWTEQAIGWtOb7459LvK4Hi0As\nueIEkn0FNRXd91Y2adjx1VWuvPq8+eZYvDy8TUEwjBpYZ9YNv0Xpj9MwnoU4\nDkZFhdTyR1le6QKGCuZAgY6luO56sMnrCdznMRK5cRV3rJTvLT1UK84R0AST\ncyRKH+ObR4GGO97d2E9fkoHVxDa+pfejBnUNMilc8jvKy/4EdDB/vcH9A2Dz\nhzNUYBYN6QKnRh+OKxNrsf8Oe4e5JIaMJ8MBba9hlnDAU4Rwo7L2ITnDj0tT\nP8U90hkk6P/BudROq4P9njKeal9TJTjx0vZrh2JeCj/x+RQRLdqStgUuyyf5\nf0G6NmX7oV6Adxwdgg4A9BMM1g7ATcWKCfEo1u2mLdNJQy2FagRvokkjytvT\nHtVbjjOAXMlGW8umRvRTwCIt6aPlcM1KOlAVQfIry0/5QIDpZrNfZrY6gzAk\n64BJ5L3Hh825nVpMTTpwfwLr/JQrd4QR9rpAu06VN8gBOI59deYwOO1SkcGH\nvTqyXHyr+Gc5z/rroUjGiyHtgxmP8I/fpynlKR6f2pzerTMfHOD2oSFlWCOh\n0/iZRN3LBQLyhydZB+nHbVbIGwqbauBecvql3aol2xF9rkpCchj5o8YnFjrK\nrIXvu1vx/pzNjc8VjOvJWMFnWH0V53GHW9eMNUvb2Tc7TVwkwfz5u3jUP3es\nEtIL\r\n=zQId\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzlmA88V/04d2rhLe8FFgmFovT6fHwjTdUqnHBkIpM/AIgXDQTu10ux5GlAyj6uU2VsfVJrr019dFpZbdgzzhx21g="}]},"maintainers":[{"name":"astahmer","email":"alexandre.stahmer@gmail.com"}],"_npmUser":{"name":"astahmer","email":"alexandre.stahmer@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/entity-routes_0.1.7_1603463148267_0.7398477062872972"},"_hasShrinkwrap":false},"0.1.8":{"name":"@astahmer/entity-routes","version":"0.1.8","description":"Design your API around your entities in minutes","source":"src/index.ts","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{"require":"./index-cjs.js","import":"./index-esm.js","default":"./index-esm.js"},"publishConfig":{"access":"public"},"scripts":{"test":"jest --runInBand --detectOpenHandles","test:clear":"jest --clearCache","test:watch":"jest --runInBand --detectOpenHandles --watch --no-watchman","test:coverage":"jest --coverage --runInBand --detectOpenHandles","commit":"git-cz","prettier":"prettier --write \"./{src,tests}/**/*.ts\"","ttsc":"ttsc","dev":"ttsc --watch --incremental","build:cjs":"ttsc -p tsconfig.cjs.json","build:esm":"ttsc -p tsconfig.json","build":"concurrently \"npm run build:cjs\" \"npm run build:esm\"","start":"node -r ts-node/register dist/index","release":"standard-version","prebuild":"rimraf dist","prepare":"npm run build","prepublishOnly":"npm test","release-publish":"npm run release && npm publish && git push --follow-tags origin main"},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"dependencies":{"@astahmer/entity-validator":"^0.1.1","class-validator":"^0.12.2","express":"^4.17.1","koa":"^2.13.0","reflect-metadata":"^0.1.13","typedi":"^0.8.0","typeorm":"^0.2.26","uuid":"^8.2.0"},"devDependencies":{"@types/body-parser":"^1.19.0","@types/jest":"^26.0.3","@types/koa":"^2.11.3","@types/koa-bodyparser":"^4.3.0","@types/koa-router":"^7.4.1","@types/uuid":"^8.0.0","@zerollup/ts-transform-paths":"^1.7.18","axios":"^0.19.2","body-parser":"^1.19.0","commitizen":"^4.1.2","concurrently":"^5.3.0","husky":"^4.2.5","jest":"^26.1.0","jest-diff":"^26.1.0","jest-extended":"^0.11.5","koa-bodyparser":"^4.3.0","koa-router":"^9.0.1","openapi3-ts":"^2.0.0","prettier":"^2.1.2","prettier-plugin-sorted":"^2.0.0","pretty-quick":"^2.0.1","sql.js":"^1.3.0","standard-version":"^8.0.0","ts-jest":"^26.1.1","ts-node":"^8.10.2","ttypescript":"^1.5.12","typescript":"^3.9.5"},"peerDependencies":{"express":"^4.17.1","koa":"^2.13.0"},"keywords":["entity","routes","entity-routes","api","typescript","model","typeorm","koa"],"author":{"name":"Alexandre Stahmer","email":"alexandre.stahmer@gmail.com"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/astahmer/entity-routes.git"},"importSort":{".js, jsx, .ts, .tsx":{"options":{"ignoreTsConfig":true,"extraAliases":["@/*","@#/*"]}}},"gitHead":"ca927080dd9ed349cad4cb5435f1c6c1a0e10e48","bugs":{"url":"https://github.com/astahmer/entity-routes/issues"},"homepage":"https://github.com/astahmer/entity-routes#readme","_id":"@astahmer/entity-routes@0.1.8","_nodeVersion":"14.7.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-s/fkM7bfXi4M4c1gE7zCN+wgcHnx6BOQdgP5MFqN+pHtaVYbBc+yW8o9QXhn14LscEsN8UNNy4rawYcx6p8uCw==","shasum":"ca72e3d9fd08dcaa6c0936b30e6c7cab421df286","tarball":"https://registry.npmjs.org/@astahmer/entity-routes/-/entity-routes-0.1.8.tgz","fileCount":452,"unpackedSize":1111679,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfuQsmCRA9TVsSAnZWagAAjzUP/irlMoBs7jr3Eqk2bnSx\nR2JfKWLOAfquIRXmMbmGmtz8mxnvyPc6agTC761MXCfZrV1/n/oR7IRS2f8T\n/SKwpPi8ecXwHfd5AVrglOC9RMk90rEx8iIdtO97ECZA6H4YadNkGGpSjoki\nKIA1eCXzuj2WmSvMC1QT7vB+feu25MZuJtK3F01CSzuIelH366nEvu56vCMx\nQtr3JJfJmb6BR0pBakvnjYfmvWMdwSo/zIWKv3On15HYQvS2AMsFpcLUMorf\nwJKsyBQETO7D9Z4ycRC3A0OzBWsXSklhOeRcO/+ZID/cT5hofXFIS9METnPE\n7plx6nVxn3jMjZSBcsn/+9cZAZ0qOHzpTj7t0EXu8Kzo3+r/q4dFEKDSB5bu\nAgEl7H7xYTVQW+igH1q3G2eSFtCOdE1JS2ZoLcy1+9vl1LomU8VorlglD5DR\n/REsfszptPv40CanmyihXjQyUGgBodi87itPYDUeojwOg8f0+fMb5rd4+pKR\nziHTFQ5SsacXYnFTS4oAhzaHJE+H2zEWFyg54eunqtVAlV0tZa/l8lrm29O5\nhk6spUsHOtl7LCROcZWMyqFAwbj1E+/5+SC251RifDStQ+PuX2exeIwUKFeD\nhrOCDaAHMlsVttYsnBeBwD/7x5rOeltuZzwnbq1lPWYUckfM8iKGWhS8UPgf\nuVCl\r\n=UEyI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE80mZ7Xtj0sD8lV8Jz1IqnilO3x0iASSG6NPTK6jFIdAiBEEsWW8/GODhJ037xC9WbzyYgyX8y8z2BW7zUVtkM17Q=="}]},"_npmUser":{"name":"astahmer","email":"alexandre.stahmer@gmail.com"},"directories":{},"maintainers":[{"name":"astahmer","email":"alexandre.stahmer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/entity-routes_0.1.8_1605962534361_0.645821508306341"},"_hasShrinkwrap":false}},"time":{"created":"2020-08-02T11:16:08.951Z","0.1.2":"2020-08-02T11:16:09.230Z","modified":"2022-04-04T15:51:58.659Z","0.1.3":"2020-08-02T11:38:30.270Z","0.1.4":"2020-08-02T11:49:27.991Z","0.1.5":"2020-08-14T21:52:54.476Z","0.1.6":"2020-09-20T22:10:49.934Z","0.1.7":"2020-10-23T14:25:48.509Z","0.1.8":"2020-11-21T12:42:14.616Z"},"maintainers":[{"name":"astahmer","email":"alexandre.stahmer@gmail.com"}],"description":"Design your API around your entities in minutes","homepage":"https://github.com/astahmer/entity-routes#readme","keywords":["entity","routes","entity-routes","api","typescript","model","typeorm","koa"],"repository":{"type":"git","url":"git+https://github.com/astahmer/entity-routes.git"},"author":{"name":"Alexandre Stahmer","email":"alexandre.stahmer@gmail.com"},"bugs":{"url":"https://github.com/astahmer/entity-routes/issues"},"license":"ISC","readme":"<p align=\"center\">\n  <a href=\"https://github.com/astahmer/entity-routes\">\n    <img\n      src=\"https://github.com/astahmer/entity-routes/blob/main/docs/public/logo-full.png?raw=true\"\n      alt=\"Logo\"\n      width=\"300\"\n    />\n  </a>\n</p>\n\n<h1 align=\"center\">\n  ⚡️ Design your API around your\n  <a href=\"https://github.com/typeorm/typeorm/\">TypeORM</a> entities in minutes.\n  ⏱\n</h1>\n\n<br />\n\n<p align=\"center\">\n  <a href=\"https://codecov.io/gh/astahmer/entity-routes\">\n    <img\n      alt=\"Code coverage\"\n      src=\"https://codecov.io/gh/astahmer/entity-routes/branch/main/graph/badge.svg?token=N0YDUEVIWJ\"\n    />\n  </a>\n  <a href=\"https://twitter.com/astahmer_dev\">\n    <img\n      alt=\"astahmer_dev Twitter\"\n      src=\"https://img.shields.io/twitter/follow/astahmer_dev?label=%40astahmer_dev&style=social\"\n    />\n  </a>\n</p>\n<br />\n\n`entity-routes` allows you to make an instant CRUD with a single @EntityRoute decorator. Compatible with Koa/Express/Next/Nuxt.\n\n_No boilerplate controllers. No code generation. No custom schema._\n\n## Documentation\n\n[Check the docs here.](https://entity-routes.vercel.app/)\n\n## Motivation\n\nBasically this is a **Node / Typescript** route handler tightly coupled with **[TypeORM](https://github.com/typeorm/typeorm/)** entities.\n\nI wanted to get rid of writing the same boring controllers again & again for each entities and I could not find a NodeJS project that would fit my needs : being simple enough not to require any configuration (or controllers), yet easily customizable when needed.\n\n## Table of Contents\n\n-   [Core Features](#core-features)\n-   [Installation](#installation)\n-   [Quick start](quick-start)\n    -   [Using Koa](#using-koa)\n    -   [Using Express/Next/Nuxt](#using-expressnextnuxt)\n-   [Benefits](#benefits)\n-   [What/why ?](#whatwhy-)\n-   [License](#license)\n\n## Core Features\n\n-   Instant CRUD with a simple @EntityRoute decorator\n-   Independant service components (Database Reader, Persister, RelationManager etc...)\n-   Built-in validation using [class-validator](https://github.com/typestack/class-validator)/[entity-validator](https://github.com/astahmer/entity-validator) decorators on your entities\n-   Granular control over which properties are exposed (with @Groups) in which context\n-   (nestable) Subresources (Entity properties that have dedicated endpoints)\n-   Inferred entity route mappings (with generated endpoints to get the summary of an entity exposed properties for each contexts)\n-   (async?) Computed properties (methods exposed as properties)\n-   @MaxDepth decorator for entity/properties\n-   Optimized SQL queries with only exposed properties selected\n-   Soft delete/restoration supported (also for Subresources)\n-   Built-in powerful filters for lists (Search/Pagination) that should fit well for 99% use cases\n-   Custom filters if you find yourself in the 1%\n-   Hooks to alter a request handling at any point in the process\n-   Standardized REST responses\n\n## Installation\n\nSince this library depends on TS Decorators just like typeorm, we need to install ReflectMetadata.\n\n```bash\nnpm i @astahmer/entity-routes reflect-metadata typeorm\n```\n\nDon't forget to import ReflectMetadata in your **app entrypoint**.\n\n```typescript\nimport \"reflect-metadata\";\n```\n\nYou also need this in your `tsconfig.json`\n\n```json\n{\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true\n}\n```\n\n> Learn about typescript decorators [here](https://www.typescriptlang.org/docs/handbook/decorators.html).\n\n## Quick start\n\n### Make your entities\n\nYou're just gonna have to create your TypeORM entities just like you always did.\nThen there are 2 @ decorators that are specific to entity-routes :\n\n-   @EntityRoute which is a class decorator, must be placed at the top of it so that your entities can be exposed through an EntityRouter.\n-   @Groups which is a property decorator, must be placed at the top of every properties you want to expose through your routes, more details on it later\n\nHere is a simple example.\n\n```typescript\nexport class AbstractEntity {\n    @Groups(\"all\")\n    @PrimaryGeneratedColumn()\n    id: number;\n}\n\n@EntityRoute({ path: \"/users\", operations: [\"create\", \"update\", \"details\", \"list\", \"delete\"] })\n@Entity()\nexport class User extends AbstractEntity {\n    @Groups(\"basic\")\n    @Column()\n    name: string;\n\n    @Subresource(() => Article)\n    @OneToMany(() => Article, (article) => article.author)\n    articles: Article[];\n}\n\n@EntityRoute()\n@Entity()\nexport class Article extends AbstractEntity {\n    @Groups(\"basic\")\n    @Column()\n    title: string;\n\n    @Groups(\"basic\")\n    @Column()\n    content: string;\n\n    @Groups(\"basic\")\n    @ManyToOne(() => User, (user) => user.articles)\n    author: User;\n}\n```\n\nIt will automatically generate those routes :\n\n```typescript\n[\n    \"/users : post\",\n    \"/users/mapping : post\",\n    \"/users/:id(\\\\d+) : put\",\n    \"/users/:id(\\\\d+)/mapping : put\",\n    \"/users/:id(\\\\d+) : get\",\n    \"/users/:id(\\\\d+)/mapping : get\",\n    \"/users : get\",\n    \"/users/mapping : get\",\n    \"/users/:id(\\\\d+) : delete\",\n    \"/users/:UserId(\\\\d+)/articles : post\",\n    \"/users/:UserId(\\\\d+)/articles : get\",\n    \"/users/:UserId(\\\\d+)/articles/:id(\\\\d+) : delete\",\n];\n```\n\n### Register your Entity Routes\n\n#### Using Koa\n\n```typescript\nimport { AddressInfo } from \"net\";\nimport { makeKoaEntityRouters } from \"@astahmer/entity-routes\";\nimport * as Koa from \"koa\";\nimport * as bodyParser from \"koa-bodyparser\";\nimport { Connection } from \"typeorm\";\nexport async function setupKoaApp(connection: Connection) {\n    const entities = connection.entityMetadatas.map((meta) => meta.target) as Function[];\n    const bridgeRouters = await makeKoaEntityRouters({ connection, entities, options });\n    const app = new Koa();\n    app.use(bodyParser());\n    / Register all routes on koa server\n    bridgeRouters.forEach((router) => app.use(router.instance.routes()));\n    / Always validate when no groups are passed on validators\n    setEntityValidatorsDefaultOption(entities);\n    const server = app.listen(); / random port\n    const baseURL = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;\n    const client = axios.create({ baseURL });\n    return { baseURL, server, client };\n}\n```\n\n#### Using Express/Next/Nuxt\n\n```typescript\nimport { AddressInfo } from \"net\";\nimport { makeExpressEntityRouters } from \"@astahmer/entity-routes\";\nimport * as bodyParser from \"body-parser\";\nimport * as express from \"express\";\nimport { Connection } from \"typeorm\";\nexport async function setupExpressApp(connection: Connection) {\n    const entities = connection.entityMetadatas.map((meta) => meta.target) as Function[];\n    const bridgeRouters = await makeExpressEntityRouters({ connection, entities, options });\n    const app = express();\n    app.use(bodyParser.json());\n    app.use(bodyParser.urlencoded({ extended: true }));\n    / Register all routes on Express server\n    bridgeRouters.forEach((router) => app.use(router.instance));\n    const server = app.listen(); / random port\n    const baseURL = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;\n    const client = axios.create({ baseURL });\n    return { baseURL, server, client };\n}\n```\n\n### Final step\n\nThat's it. There is no final step. Your routes are ready.\n\n## Benefits\n\n-   0 config required\n-   Compatible with Express, Koa, Next, Nuxt and any other middleware-based framework using adapters\n-   Out-of-the-box support for Koa/Express integrations\n-   Type-safe API\n-   Almost complete code coverage (95%+)\n-   Everything (types included) is exported so you can use it your own way\n\n## License\n\nMIT © 2020 Alexandre Stahmer\n\n_Inspired by an internal project made at [ACSEO](https://acseo.fr/) with ApiPlatform (Symfony/PHP)_\n","readmeFilename":"README.md"}