{"_id":"@7y1o/qreactor","_rev":"4-c828a6c0c7a19ca06b5a79f97b232eb9","name":"@7y1o/qreactor","dist-tags":{"latest":"1.1.5"},"versions":{"1.0.0-0":{"name":"@7y1o/qreactor","version":"1.0.0-0","description":"GraphQL router based on Express","author":{"name":"7y1o"},"license":"MIT","main":"lib/index.js","types":"lib/index.d.ts","private":false,"scripts":{"test":"jest --config jestconfig.json","build":"tsc","format":"prettier --write \"src/**/*.ts\"","lint":"tslint -p tsconfig.json","prepare":"npm run build","prepublishOnly":"npm run test && npm run lint","preversion":"npm run lint","version":"npm run format && git add -A src","postversion":"git push && git push --tags"},"devDependencies":{"@types/cookie-parser":"^1.4.3","@types/cors":"^2.8.12","@types/express":"^4.17.13","@types/jest":"^27.5.1","@types/node":"^17.0.35","axios":"^0.27.2","esbuild":"^0.14.39","jest":"^28.1.0","prettier":"^2.6.2","ts-jest":"^28.0.2","tslint":"^6.1.3","tslint-config-prettier":"^1.18.0","typescript":"^4.6.4"},"dependencies":{"cookie-parser":"^1.4.6","cors":"^2.8.5","express":"^4.18.1","express-graphql":"^0.12.0","graphql":"^15.3.0","reflect-metadata":"^0.1.13"},"gitHead":"a464ff831ab65d4242f766f95d728e80ed5c4fc5","_id":"@7y1o/qreactor@1.0.0-0","_nodeVersion":"16.14.2","_npmVersion":"7.24.0","dist":{"integrity":"sha512-Sy7sKXJk4+X+okTm23Ir54nchLa6y3rDV09bb2zY9HFSMWoWFk97yOezpNyqD52jI+A/wDwSoIDY5mOrNs2feg==","shasum":"f8aedd01b6be5adad107d17446cbd643e5aed938","tarball":"https://registry.npmjs.org/@7y1o/qreactor/-/qreactor-1.0.0-0.tgz","fileCount":16,"unpackedSize":17528,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGDp4pOa5koG3IYTjIcpFGHTl0e8nMsBbYpPMQQ1ZDYOAiAvzhQfkyOgl749ywuTQvEr8jCAfGxX4dG2o42HH9KiSg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiivLSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoiAQ//VNhUZabJf7BBE4yK820RsSX64Rva30Vg53pwItQZ5NsND1OK\r\nx+U9ne157DJptjAle6IZvhR7UYaaPQk/lQ/tIJk8AczdkpOy3tqZI2Y9oToV\r\n1c9UM/+XFJcHMiY6EA7iWDPZCDzn1X+0iOhgA8NndkewXYcsPSPYs1nS67LX\r\ni2LIr/M4Z8rEE/rv69nP4chLNbyrMA4T2ghop584Pv3omXhuAm2+CIthk4y/\r\nMKFiD57MdQOzvmoHROL3e6qn8ip8fdW6kkIGsot88YUCltGK8p4E2cRDn5b1\r\n6buwqyZzzxfe+dWI9qMlH3Wikx+/5zvts9dsMt+37foVini7PdSpk2E2MaMt\r\ng08UbhWXWg+T4OHEsVc8y74vyhHhVYjBaYzqYM8CqHuP9QiNNhkIGM80ECgL\r\nIv1fUMIqNUX0INpdI2/GwKJpoXA//6IF5zJ+oCaavXl3c4zTLEUe1+ZRFRvm\r\ns/CYTZwfkXo/VzkjaHeNTj2yAPk5LCFxMvOUsG0ZhQ1ZlcV/Swg4UT/6i4jI\r\nCACNmk/QX+RG++1MydPKyrUN1pog8VaYkWheqlqLR9Rb0URD0eqywZ+/nlKF\r\n7TvM9SkWQtTHuF0rIb1FZYr5xFwc0qoOUhO0bCjiIC9p62b8dbwTCXsH54iH\r\nBalOZhN97oiUbiZn6Dw6r+dk4su6fZLdPRU=\r\n=7wk8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"7y1o","email":"tylodesu@gmail.com"},"directories":{},"maintainers":[{"name":"7y1o","email":"tylodesu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qreactor_1.0.0-0_1653273297887_0.7764724614218981"},"_hasShrinkwrap":false},"1.1.1":{"name":"@7y1o/qreactor","version":"1.1.1","description":"GraphQL router based on Express","author":{"name":"7y1o"},"license":"MIT","main":"lib/index.js","types":"lib/index.d.ts","private":false,"scripts":{"test":"jest --config jestconfig.json","build":"tsc","format":"prettier --write \"src/**/*.ts\"","lint":"tslint -p tsconfig.json","prepare":"npm run build","prepublishOnly":"npm run test && npm run lint","preversion":"npm run lint","version":"npm run format && git add -A src","postversion":"git push && git push --tags"},"devDependencies":{"@types/cors":"^2.8.12","@types/express":"^4.17.13","@types/express-session":"^1.17.4","@types/jest":"^27.5.1","@types/node":"^17.0.35","axios":"^0.27.2","esbuild":"^0.14.39","jest":"^28.1.0","prettier":"^2.6.2","ts-jest":"^28.0.2","tslint":"^6.1.3","tslint-config-prettier":"^1.18.0","typescript":"^4.6.4"},"dependencies":{"cors":"^2.8.5","express":"^4.18.1","express-graphql":"^0.12.0","express-session":"^1.17.3","graphql":"^15.3.0","reflect-metadata":"^0.1.13"},"gitHead":"f1dec67fd931a82a68fb1133f7a0e033d1328a5d","_id":"@7y1o/qreactor@1.1.1","_nodeVersion":"16.14.2","_npmVersion":"7.24.0","dist":{"integrity":"sha512-n8IlYRy3rWRzReb7dGjCLxMU9kb4xNIvH3Z9NGBFmIDbfel/XPvIPvCMdcYUsY6lB7o9njpF59Aj2GusKIX81Q==","shasum":"226699d39e14b74b6160388b0ed8218aa34fa686","tarball":"https://registry.npmjs.org/@7y1o/qreactor/-/qreactor-1.1.1.tgz","fileCount":16,"unpackedSize":19069,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDkWCkvkpayZvwGkJ8NTDf/8jMEMAydgjwAsFJb+S28nAiEAlMSsL5S4A0bKEEhgDthMMaZ9GnTW5hjEsVhNdjRCaWs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiiwPrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr6iBAAgjx5wzzos4q20bM/bc1xionFpbxDAD0LGMrQSiMhMaCM9Hkn\r\niudIOokx0+uYWy3leq/54vyfnrz7eNmzXdIFOwcGYzVzntWPsa2d5/BIFUjV\r\ndycBDk0UklsKJWs+yjSPIC2AuIsv5aqTEj0C6rSiFVJugobdUO2K9qQe4WG+\r\nzQBhqJWAqbr58oBCpj/uOnR8qVYBxowHFldOkLRiNDV/nEq4pmz1WcmUUFaI\r\navlLkARW0aL4aWwZhy7JVLK/7aayAgbkjcsqAHCDTvYp6r8Ixqh96+j//9Tr\r\nnCPApLJ03VfHhYZ+SLXv5YcWbZqkFWkIx41ZRBl0hhhuhT0BODhKLmM7/rIW\r\ndiOLvXRy5ZsI1mBeDo3+cfqHV4M4IwMcbsK8IJ0T1gtcCcRnUJw0twFYQAiv\r\nSTg+x+G4MRm9WzuNyKN/jGTj7QlfWVUIPginEsa//Fd7smKXFE5E5AJD6sPE\r\nkC1Why+J9h8E1U6Y39JzZXJe/Y+q2k5WM+LIQ2kMiqE9Am8Z6qZKtmfXprS6\r\nVnAcFHlkus+cvvI9ZwoTrWadMivlHCDIfetMtfdyP/W8TgEiQt726xPgQ8qt\r\nhnP3781B8PEMh0avOuyNSlp/JP/QE/IepIASd24G9QO2oNNjAJFQYxQO0T9k\r\nTl6Wy/x0Qu8CaVhU3F7InsJtxobZElEkZug=\r\n=LEy2\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"7y1o","email":"tylodesu@gmail.com"},"directories":{},"maintainers":[{"name":"7y1o","email":"tylodesu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qreactor_1.1.1_1653277675221_0.49866542272933523"},"_hasShrinkwrap":false},"1.1.3":{"name":"@7y1o/qreactor","version":"1.1.3","description":"GraphQL router based on Express","author":{"name":"7y1o"},"license":"MIT","main":"lib/index.js","types":"lib/index.d.ts","private":false,"scripts":{"test":"jest --config jestconfig.json","build":"tsc","format":"prettier --write \"src/**/*.ts\"","lint":"tslint -p tsconfig.json","prepare":"npm run build","prepublishOnly":"npm run test && npm run lint","preversion":"npm run lint","version":"npm run format && git add -A src","postversion":"git push && git push --tags"},"devDependencies":{"@types/cors":"^2.8.12","@types/express":"^4.17.13","@types/express-session":"^1.17.4","@types/jest":"^27.5.1","@types/node":"^17.0.35","axios":"^0.27.2","esbuild":"^0.14.39","jest":"^28.1.0","prettier":"^2.6.2","ts-jest":"^28.0.2","tslint":"^6.1.3","tslint-config-prettier":"^1.18.0","typescript":"^4.6.4"},"dependencies":{"cors":"^2.8.5","express":"^4.18.1","express-graphql":"^0.12.0","express-session":"^1.17.3","graphql":"^15.3.0","reflect-metadata":"^0.1.13"},"peerDependencies":{"express":"^4.18.1"},"gitHead":"d5629ad5b38126da65b9b893f09f35b1d1402571","_id":"@7y1o/qreactor@1.1.3","_nodeVersion":"16.14.2","_npmVersion":"7.24.0","dist":{"integrity":"sha512-64kr68cA0vpmD1xHJ2wpc/1+ZHS/ebaiF/spVkI26VIUKinwLsiOUQjVHTIE0/TeDwuoQefVtCsUCICm7CElAg==","shasum":"75829fe0673c9fdbc1cbc6f3e305942adda0551e","tarball":"https://registry.npmjs.org/@7y1o/qreactor/-/qreactor-1.1.3.tgz","fileCount":16,"unpackedSize":18861,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpK7ITsWOxnFj2HOwi90MajyMAtGBTB9LYX4m4jgH8bwIgPCh8za+K/QzraFNSXyM8g0ZPCq6i/L2filC+CLgShz8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiiwkrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpyCA//UTJqRTwLMfv7ZSliMGvEvMZ6BSt7YS1rL8pI434r3PJkrGNt\r\niqWk65eZJ8UwS5T8jccayQ/Vz7p2QxpzJdaQjxCDq/S0V3+xxeCVOhj+XfST\r\n4rjIoKPreZ3SdeQ3fXI1DA+I41mcBtFAo6rSi6zsmmjSwQHf0jE2j84ED8Nn\r\nE6wypr7Hv4NOhGUIwDx/pQGrKTao4bGkqLrtNflJ7E6iqOf/uDf5UjXLm5xU\r\nlG3BE8KFOmX7ZWgThmq0oig4xakhzuiNRdLrrJpA8VMGnLfzoZ1/eL/PZO1X\r\nmzd2lmTlG0K5pFVwiDYge8a/irpu4vbg4HtM0ne4nmmUsjRs3RBWJbp4Yc6Y\r\n/xGYG4Kb6lle/qpwjLvQl+XAxc4lfZKl2qQekv5hX1nW4TcQLLUDPdsP5zv+\r\nGdOsLUdUgUjElMw90zljbNCl0UrFOIZnyaUC+wxCR3Kfo8QyK5VQd0jSTWSE\r\n7qC+hQUnAgY1m56mi7cB2Et23byZGj0L6D3n6FzhPG6AX11y3fVtL0mUV6Oz\r\n3DYZSxMWrgZX9rn+y0M4LsxvmWgbdkGVvSpldQhugc7uQVzLJtH9SRnRNtgS\r\nY047sIW2n2TG4G21A8KFDiT5AQDXkgp/7CpogaPCaHVitaNTIaM+YZzprioQ\r\nevMCVdA8O1sS9/t5jbpaNDpypbkAVxzh4dg=\r\n=sw3B\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"7y1o","email":"tylodesu@gmail.com"},"directories":{},"maintainers":[{"name":"7y1o","email":"tylodesu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qreactor_1.1.3_1653279019447_0.49675700604488005"},"_hasShrinkwrap":false},"1.1.4":{"name":"@7y1o/qreactor","version":"1.1.4","description":"GraphQL router based on Express","author":{"name":"7y1o"},"license":"MIT","main":"lib/index.js","types":"lib/index.d.ts","private":false,"scripts":{"test":"jest --config jestconfig.json","build":"tsc","format":"prettier --write \"src/**/*.ts\"","lint":"tslint -p tsconfig.json","prepare":"npm run build","prepublishOnly":"npm run test && npm run lint","preversion":"npm run lint","version":"npm run format && git add -A src","postversion":"git push && git push --tags"},"devDependencies":{"@types/cors":"^2.8.12","@types/express":"^4.17.13","@types/express-session":"^1.17.4","@types/jest":"^27.5.1","@types/node":"^17.0.35","axios":"^0.27.2","esbuild":"^0.14.39","jest":"^28.1.0","prettier":"^2.6.2","ts-jest":"^28.0.2","tslint":"^6.1.3","tslint-config-prettier":"^1.18.0","typescript":"^4.6.4"},"dependencies":{"cors":"^2.8.5","express":"^4.18.1","express-graphql":"^0.12.0","express-session":"^1.17.3","graphql":"^15.3.0","pg":"^8.7.3","reflect-metadata":"^0.1.13"},"peerDependencies":{"express":"^4.18.1"},"gitHead":"5b14ee90ed5e592d9187e7912235c2c78052dc3e","_id":"@7y1o/qreactor@1.1.4","_nodeVersion":"16.14.2","_npmVersion":"7.24.0","dist":{"integrity":"sha512-SxDk1QdcPK6NZ+yjIAAb2sARt/3/MPLfCt8RuZ4m5o1GfhjZ205iJo84pON21Dzi4WP8cfn0Y3cupE3RyF5QZQ==","shasum":"d53eb585c389e4614c6a815a5749c5339b6463e4","tarball":"https://registry.npmjs.org/@7y1o/qreactor/-/qreactor-1.1.4.tgz","fileCount":16,"unpackedSize":24949,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEE7YnqZaPOTBn22Q6XXd+oB7iuxs/wOIbaJW3P2i9F9AiEAqIGSFnkrW5r52xyRFFRzy3O7CY1HxWp8T2/Lo0XQ/PU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJikCVGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr0fw//UjQiTPACG/T4b/pzT8ODsvpH3fivg/4pftgm3+QR5Km05dIx\r\ne1t9vRJGwropBAPk0qIZcJ9wqPDUh8z1ckn39X94MXR9oxd97T7bCo/gZuFx\r\ntVfbdmUSVXFpvQYeBOg6R+1HBM//t3o+jofhlvQlbBeprtUzaESxF5gRUhye\r\nHz79gUp/RfsJaCmoxTV1+fKS5MB36YoYOrZzTGlh/11gGwkMPuJIBObfuyiv\r\nO6akhuCyqQInt1w4v+7dNrb9z67YvqgMVXVB4g9Q/LaZ02SBDkFs9nhccaK5\r\nQslgYbaK0JYGlodER99uWgW1hMwkpAtkGTUiuIM0rww02X4fm9gl/HStHrbd\r\nuDOdIqvLbF97SItOtodU8kzAAeXb8ZYJN3UTUMgiwyIpCyd2yLTKu1arb2zj\r\nkZsk3GsNN1AvkrJ5DulyCz4hNsUtRy1YIRCkYmSs33xk9yaLHw64q1RU2fsY\r\nIRfi1cwfiEQ9QzLVghjOfB82ACXf0PbIQKkdn+hqxQ+b8lI+GYcgpzTVWvAe\r\nMOOr0H4oMoc4Ca3lKISrh05w8H05smhEIk61Zm+TQrhNxBQuQgzlzks1xdw5\r\nmHlG3DcbwWHGxvBU5QTISrOfsSVR9fXO7j8fO0j9u6eD6fqfyEP+uZ4RZeRD\r\nP9faFb5BTliQI4ru9KFqVTwvt0C7tD5IVjU=\r\n=SKJ+\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"7y1o","email":"tylodesu@gmail.com"},"directories":{},"maintainers":[{"name":"7y1o","email":"tylodesu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qreactor_1.1.4_1653613894522_0.5295100573535614"},"_hasShrinkwrap":false},"1.1.5":{"name":"@7y1o/qreactor","version":"1.1.5","description":"GraphQL router based on Express","author":{"name":"7y1o"},"license":"MIT","main":"lib/index.js","types":"lib/index.d.ts","private":false,"scripts":{"test":"jest --config jestconfig.json","build":"tsc","format":"prettier --write \"src/**/*.ts\"","lint":"tslint -p tsconfig.json","prepare":"npm run build","prepublishOnly":"npm run test && npm run lint","preversion":"npm run lint","version":"npm run format && git add -A src","postversion":"git push && git push --tags"},"devDependencies":{"@types/cors":"^2.8.12","@types/express":"^4.17.13","@types/express-session":"^1.17.4","@types/jest":"^27.5.1","@types/node":"^17.0.35","axios":"^0.27.2","esbuild":"^0.14.39","jest":"^28.1.0","prettier":"^2.6.2","ts-jest":"^28.0.2","tslint":"^6.1.3","tslint-config-prettier":"^1.18.0","typescript":"^4.6.4"},"dependencies":{"cors":"^2.8.5","express":"^4.18.1","express-graphql":"^0.12.0","express-session":"^1.17.3","graphql":"^15.3.0","pg":"^8.7.3","reflect-metadata":"^0.1.13"},"peerDependencies":{"express":"^4.18.1"},"gitHead":"34379eb0099d2916718067d95dafbfd48e46fa46","_id":"@7y1o/qreactor@1.1.5","_nodeVersion":"16.14.2","_npmVersion":"7.24.0","dist":{"integrity":"sha512-AixbD5hgIIMDgSDk93ScOQMKNRpUj9NuvB5bV2xJY8bobOAb6kWW2pgdKAewDlyVedag5GuvfQS0snsh0eaTpw==","shasum":"8c64532856607c06a6ed24c474e1ed11ca64af61","tarball":"https://registry.npmjs.org/@7y1o/qreactor/-/qreactor-1.1.5.tgz","fileCount":16,"unpackedSize":26413,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHUz2tulonEpX5L8bA9gIFwRoooQJPGnL8LT7ax+CD9sAiEAmNGh/jLBxQ102vK9Qv4INBTcfz2pfhC6LVPU30nMvxo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJik6FbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrj9A//dcmTlB5uq7Jf6yBXuDUtBYAPyVBiNv0cSbZwICT1ZIW16dwe\r\njskMqGu+WW4x3ZbMlUX4xm1EsAKRv3IXsrhah77qIeihRA15rA/kjYSsre3g\r\nOapOmw68aHlQrmhlbdhd1Q+JRp6SoFiumk3oyQBXL41eYPfXS0XexDDLSYa/\r\nV/SPUDb5K6jtZ6VUL3rGags5mXDXmpOPtKdEqO/tiOVInnV6mrmubLrM9cef\r\nfZMXe2ai+JjBO7W1eGSZbxfrTqtMpYwMPMpGrGpeaTwKBspeu6/ZXMryF4a1\r\nrkUbSUxQ7x4FBoezlKZVkOB9jzKpfnLjdxUpbjJ52W/MS/J0Bf2OnDUVTKYk\r\nhjlM0TWZNJlExACH1vHWGGK9AAZAFkOR3In+a/xv+adqzil0T5W3r1LTxfKi\r\n1eWNPvRPcrn9ypQsQI3YgamKVXg6Jtm7st2TIYpLCfAmb5JDqIpFd4o5CTq+\r\n4TVP8nuL32OZETLSme4w3kMFQtnTDPopVPAR8Wvur0wkGfRBak5eIxn3ALaC\r\nYbq4YDsHF7yy+uv83VBMLwjrJzurdB2Xdyvc7fkQVNbwpQqEAx927H2uIEu1\r\nw08QCcVfYF8TaMyQ0hhMuR1j5gFiTPqX0hko/tUryvnymrwNQWDqCFw3l9YR\r\n7A1icG48sbxlDV2HPqCI+bYw7+GxIxKDqV0=\r\n=xAny\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"7y1o","email":"tylodesu@gmail.com"},"directories":{},"maintainers":[{"name":"7y1o","email":"tylodesu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qreactor_1.1.5_1653842267661_0.7846871078038835"},"_hasShrinkwrap":false}},"time":{"created":"2022-05-23T02:34:57.836Z","1.0.0-0":"2022-05-23T02:34:58.080Z","modified":"2022-05-29T16:37:47.859Z","1.1.1":"2022-05-23T03:47:55.387Z","1.1.3":"2022-05-23T04:10:19.578Z","1.1.4":"2022-05-27T01:11:34.721Z","1.1.5":"2022-05-29T16:37:47.799Z"},"maintainers":[{"name":"7y1o","email":"tylodesu@gmail.com"}],"description":"GraphQL router based on Express","author":{"name":"7y1o"},"license":"MIT","readme":"# QReactor\r\nGraphQL server built on top of ExpressJS with support for Cookies, CORS and other useful stuff\r\n\r\n[![Common job](https://github.com/7y1o/qreactor/actions/workflows/main.yml/badge.svg)](https://github.com/7y1o/qreactor/actions/workflows/main.yml)\r\n\r\n## What is QReactor?\r\nQReactor is a library that combines the capabilities of ExpressJS and GraphQL. With the help of decorators, you can configure separate Express controllers and separate ones for GraphQL.\r\n\r\nCookies and CORS are already included in the \"configuration\" of the server. You can also add your middleware using the `use` method, as in Express.\r\n\r\n## How to start?\r\n\r\n### GraphQL example\r\nHere is an example of how to run a small server with GraphQL:\r\n\r\n```graphql\r\n# user.gql\r\n\r\ntype Query {\r\n    searchUser(name: String!): UserSearchResponse!\r\n}\r\n\r\ntype User {\r\n    id: ID!,\r\n    name: String!,\r\n    online: Boolean!\r\n}\r\n\r\ntype UserSearchResponse {\r\n    result: User,\r\n    error: String\r\n}\r\n\r\n```\r\n\r\n```typescript\r\n// controller.ts (for example)\r\nimport { QLController, QLResolve } from '@7y1o/qreactor';\r\n\r\n// Creating a new class with resolvers:\r\n\r\n@QLController('src/schemas/user.gql', { path: '/api/user' })\r\nclass UserController {\r\n\r\n    @QLResolve\r\n    searchUser({name}, {req}) {\r\n        if (!req.cookies['x-access-token']) return {\r\n            error: 'err_no_token'\r\n        };\r\n\r\n        // ... some search ...\r\n\r\n        return { user };\r\n    }\r\n}\r\nexport default UserController;\r\n```\r\n\r\n```typescript\r\n// main.ts\r\nimport QReactor from '@7y1o/qreactor';\r\nimport UserController from './controller';\r\n\r\nconst server = new QReactor({\r\n    port: 7910\r\n});\r\n\r\n// Now we need to register our controller\r\nserver.ql(UserController);  // In this method, you can specify \r\n                            //multiple controllers separated by commas\r\n\r\nserver.start();\r\n```\r\n\r\n### Basic Express example\r\n\r\n```typescript\r\n// controller.ts\r\nimport {Controller, Get, Post} from '@7y1o/qreactor';\r\n\r\n@Controller('/hello') // you can leave empty brackets here\r\nclass GreetsController {\r\n\r\n    @Get('/')\r\n    basicGreets(_, res) {\r\n        return res.send('<h1>Hello! Glad to see you!</h1>');\r\n    }\r\n\r\n    @Post('/:name')\r\n    sendGreets(req, res) {\r\n        return res.send(`<h1>Hello, ${req.params.name}! Glad to see you!</h1>`);\r\n    }\r\n}\r\nexport default GreetsController;\r\n```\r\n\r\n```typescript\r\n// main.ts\r\nimport QReactor from '@7y1o/qreactor';\r\nimport GreetsController from './controller';\r\n\r\nconst server = new QReactor({\r\n    cors: {\r\n        origin: '*'\r\n    }\r\n});\r\n\r\nserver.express(GreetsController);\r\nserver.start();\r\n```\r\n\r\n### Middleware example\r\n\r\n```typescript\r\n// controller.ts\r\nimport {Controller, Post, Middleware} from '@7y1o/qreactor';\r\n\r\nconst testMiddle = (req, res, next) => {\r\n    res.send('sent from middleware');\r\n    next();\r\n}\r\n\r\n@Controller()\r\nclass IdentityController {\r\n\r\n    // IMPORTANT! Write @Middleware over method decorator\r\n    @Middleware(testMiddle)\r\n    @Post('/signin')\r\n    signIn(req, res) {\r\n        req.session.name = req.body.name;\r\n        req.session.save(() => res.send('Hello, ' + req.session.name)); \r\n    }\r\n\r\n}\r\n\r\nexport default IdentityController;\r\n```\r\n\r\n```typescript\r\n// main.ts\r\nimport QReactor from '@7y1o/qreactor';\r\nimport IdentityController from './controller';\r\n\r\nconst server = new QReactor({\r\n    session: {\r\n        secret: 'verysecretcode',\r\n        name: 'access-token'\r\n    }\r\n});\r\n\r\nserver.express(IdentityController);\r\nserver.start();\r\n```\r\n\r\n## TODO:\r\n\r\n### New features:\r\n- [ ] — Add `@Middleware` decorator for using middlewares\r\n- [ ] — Add databases support\r\n- [ ] — Add GraphQL schema generator with decorators\r\n- [ ] — Add async preinitialize function for other libraries preparation (like mongoose or sqlite)\r\n- [ ] — Add log for debug and errors\r\n- [ ] — Make more strong types support\r\n- [ ] — Add request fields validator\r\n\r\n### Bugfixes and similar things:\r\n- [ ] — Optimize methods\r\n- [ ] — Add more tests for better library stability\r\n- [ ] — Fix the types of the GraphiQL field (in @QLController) for its correct operation\r\n- [ ] — Fix some bugs with queries and mutations\r\n\r\n### Other:\r\n_nothing is here_\r\n\r\n## Ready:\r\n- [x] — Express server\r\n- [x] — Express controllers\r\n- [x] — GralhQL controllers\r\n- [x] — Middleware decorator for express controller\r\n\r\nFull change log you can see on [this page](./CHANGELOG.md)","readmeFilename":"README.md"}