{"_id":"qwebs-http","_rev":"104-dd859e6ad020fd2bf607da73888e1af6","name":"qwebs-http","description":"Http/https server for Qwebs","dist-tags":{"latest":"1.0.0-beta.5","beta":"1.0.0-beta.51"},"versions":{"0.1.53":{"name":"qwebs-http","version":"0.1.53","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.53"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"5075010c9eba72df388ebd7790bd562935549c40","_id":"qwebs-http@0.1.53","_shasum":"a9d43f2e6a4e98b0e06beed2ec56c748e2e4cccc","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"a9d43f2e6a4e98b0e06beed2ec56c748e2e4cccc","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.53.tgz","integrity":"sha512-WcxBv7S6Ch7LO5To1lYAH81ro+t7aW8wzwrO4HAPnLm/LX7lXSSdGspc32MCWa8PBoU+RSU9OQIv0QkKIH+Juw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhJhAWscd7pYdEBiVNcin6+7wzsv26ZVS9ospd1x3vtwIhAOLpKJtbSt10nwWaNgssHrWIpy5R5deyEQuZ+isBqQFV"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.53.tgz_1485943438499_0.6194485465530306"},"directories":{}},"0.1.54":{"name":"qwebs-http","version":"0.1.54","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.54"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"75dd90fe2602a951647abc7ac2e2a0a04753683e","_id":"qwebs-http@0.1.54","_shasum":"9df44e762f28ffa49f8ea4b3b9218c2d151758b5","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"9df44e762f28ffa49f8ea4b3b9218c2d151758b5","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.54.tgz","integrity":"sha512-6SJv+vzfGZ28JVZFwQD4TNyMqUEo5vLv0VImx/tpQ2oe8JN2X6tLLuvSew7NpGUKtbml7NhOXroYHJoD+dBdWw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAv6qzq0+qyCSplOVC1iDkaHJP5nMC6dX+3d9S38ZxKdAiEAxxiykESsQN+fNvNNK6XcEvbuanzs2A4jLRoUZfpwvnA="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.54.tgz_1485944470894_0.8329439039807767"},"directories":{}},"0.1.55":{"name":"qwebs-http","version":"0.1.55","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.55"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"7dcc7ae31a3bea54dcd3b4bbd1726f5871e1b21a","_id":"qwebs-http@0.1.55","_shasum":"c2a6aaa69bbd9b991d6aaee9167c3147bd769a29","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"c2a6aaa69bbd9b991d6aaee9167c3147bd769a29","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.55.tgz","integrity":"sha512-PiJcln384lq9fzfyFaanBegjico9jauq+8wSl7JlXNogZscjQj527mBQske0ZWEuCfBktKAZBFqA1BGZLqGepA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUQIMeOMV1NpJfmfiOlyfvsccsBl5IxE2ncQ+Yg43OzgIgVVzIjwElH6Ekubaj99kF6pPajjc7IcIe4ZKpaxK9UJo="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.55.tgz_1485946156402_0.40151541912928224"},"directories":{}},"0.1.56":{"name":"qwebs-http","version":"0.1.56","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.56"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"b27f074d07cce69f360990f30769afc5e60f48ee","_id":"qwebs-http@0.1.56","_shasum":"8d167a544ac9645777572ca294d0b109fee338b8","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"8d167a544ac9645777572ca294d0b109fee338b8","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.56.tgz","integrity":"sha512-3M/zTz+Hsk270F31yk+EuDHAuoNszFbJq6YCZiSSogdKYEZDb6ecOybU1+Tjwk30lehCmwSTQmJqcVQhzA91xA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGFiBCp84hI7SlfVWm2y9aL+rEkEjeHPL8xgsysKK7qMAiEA/RC/9HEh44e818oYBhdEiiFQG7HIN+vl4VAo7+GSNsA="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.56.tgz_1485947943791_0.8218174884095788"},"directories":{}},"0.1.57":{"name":"qwebs-http","version":"0.1.57","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.57"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"c8debdf2384679cff9f0f13bce12dce1a1bb0a7b","_id":"qwebs-http@0.1.57","_shasum":"e9e7aa4431bd5b78e2839bc8e409e2383a08796e","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"e9e7aa4431bd5b78e2839bc8e409e2383a08796e","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.57.tgz","integrity":"sha512-YJjZKOqbnG3x5Xzs/JNOZLYUYGXfDTg77/Ja/piZpQB9s2CHK7z3VNTaIhCYG9LiKCWfd1a/CCkcCoe8c/KMrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG9TegH4H1AWFfPTv6xjh5cusKu7UiTOaSGkJGc3kW05AiEA3wBWDnl02MywmYpKuu5R3vM0EZhldBgjf0jriEGKBk8="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.57.tgz_1485957509214_0.486314267385751"},"directories":{}},"0.1.58":{"name":"qwebs-http","version":"0.1.58","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.58"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"0d52526fde83b9eab867fafddc82567194c01c87","_id":"qwebs-http@0.1.58","_shasum":"c9dac6092396e61d8466d3a315190c53e3662b67","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"c9dac6092396e61d8466d3a315190c53e3662b67","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.58.tgz","integrity":"sha512-ZhlpwUCd+qgdILcVzzRExVtpb8xfyKDIAJqAYNMwaLxTViP8tplwqxwL85p/ZDtOfu0C4YzmBDTMzRhKyz8urw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBCTRkG7qoPCi1YxkSosZtU7EmbbSp1HbZ7h3JfExRbZAiEAojJNO4iLVTjk3WvlFjiJ0bYQvm6UDBYW+xf+P90hb4I="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.58.tgz_1485960049986_0.30868626246228814"},"directories":{}},"0.1.59":{"name":"qwebs-http","version":"0.1.59","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.59"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"3e1d5f6996807f7bb065a7d6371d5ce83c0e6c07","_id":"qwebs-http@0.1.59","_shasum":"f082bf681c172ea73e81b370f279805b17efe31d","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"f082bf681c172ea73e81b370f279805b17efe31d","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.59.tgz","integrity":"sha512-39uaS/Qxi2Hyz4dc92HAEs1IxMzr7wMvUjnC/k1mFIDiAZuBTTIUsL+zTet4T1exJ3F9DPG2ZFrLAXd+K5dD4A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdmAH+NnlxBHHgBIhE4n5g4TP6b2B8n9fi9q5CEwX4egIgIfd8tgVrE8eE49YwdZenujc74MdKPY00dSPffviXpgI="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.59.tgz_1485964337432_0.024867370957508683"},"directories":{}},"0.1.60":{"name":"qwebs-http","version":"0.1.60","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.60"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"c5a253b812a2116a8b4ea897f9ab95f9fee876b0","_id":"qwebs-http@0.1.60","_shasum":"0a0522066782f75c05c2af8218d4c6b40e251a03","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"0a0522066782f75c05c2af8218d4c6b40e251a03","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.60.tgz","integrity":"sha512-OjRbKhQhqDZz3wfM2g15mbApAl78+ZD2RCw/RmOQ/ZG56H6oZri9WPaEWNZkySiowa7WErUaBTr+NLkgVYfdAA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDqBgB57ZED8DLkAhUY3w3WlTPBv3kYtC30Velc8cB8UAiB5dW8C2ODzsWOvzi0xMm2nWkZnFWmjA/chitbgDu1+yg=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.60.tgz_1485970493895_0.6890300766099244"},"directories":{}},"0.1.62":{"name":"qwebs-http","version":"0.1.62","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.62"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"a87347c4f839e26bea68350214b5aa11d21e2bbf","_id":"qwebs-http@0.1.62","_shasum":"0651b5acdb270b334e1c914c65bfe802a8be3262","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"0651b5acdb270b334e1c914c65bfe802a8be3262","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.62.tgz","integrity":"sha512-XN6U1Q/K+wx/hC+gL6oo+zu0aYKyFmRvufPqaTtIJQdu5WlLrP1998JKY8dKc/2nfOmk9B2Z/IYjnR0BCGs38w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEjvFCNC2mDWWrkum8aclV9f21pLvqnq1jarDHP6PFUjAiEAvKtO3N52aqESYtyZNcZLm8+pKqNkZZNyoz2WJxBaNVI="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.62.tgz_1486042443801_0.573810264468193"},"directories":{}},"0.1.63":{"name":"qwebs-http","version":"0.1.63","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.63"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"3087b6af1eeafcbfe13042289c882770f582bc36","_id":"qwebs-http@0.1.63","_shasum":"5c26e8251b715b74f57dcd37dcd1fa2c9a088ed8","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"5c26e8251b715b74f57dcd37dcd1fa2c9a088ed8","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.63.tgz","integrity":"sha512-3dFGFlxG8ow/AVWH4IM40b9m3t87BB46UNt6l1PE4nsWv4/NAPjisatalkK97Ixey3drxnNGpOvoYgVaq+ConA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzYK3BQYzyXITfLSg6r1Psk0BvTqtrDxGWPYQ9+X8ZcwIgZLRzI41tl7dQufY+QK6Jh3qRX6VdSoU/ATvcStde4HA="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.63.tgz_1486074532107_0.6765576007310301"},"directories":{}},"0.1.65":{"name":"qwebs-http","version":"0.1.65","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.65"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"d7447bf3db3c658db51ae824a5e17f088e7bc0e6","_id":"qwebs-http@0.1.65","_shasum":"947b76fa140939f355b1f411c00ab572344ecb36","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"947b76fa140939f355b1f411c00ab572344ecb36","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.65.tgz","integrity":"sha512-CPY37L1XiZA57el4JpDA604GNKtheA4uxYmJT1Jo7O73XuzQM0Sw+iYJjTr4Yhzpo5wduYe2X81WMQ3ziqStTQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2VvSr4Ilafgrhiczh+9ykujXUDNQXGwbg1+ngXGuHhgIgYvGW4aj9iXmE2yquH2O0+wMrQ4QC3S8BOJYsjYTFxxw="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.65.tgz_1486977574632_0.0809294490609318"},"directories":{}},"0.1.66":{"name":"qwebs-http","version":"0.1.66","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.66"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"de4791834137cedf30069bc2966b0d59f5df34da","_id":"qwebs-http@0.1.66","_shasum":"fb90f6238c4e47032d8d7d6c00a9dfb7dfeecbfb","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"fb90f6238c4e47032d8d7d6c00a9dfb7dfeecbfb","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.66.tgz","integrity":"sha512-7MqCPGfPyWNBmv+VIuu3I1++kNhXhDmN/tVKk4VEPBFkbOcD9Je1SxJJpVMUXP+M5B9lVS1pDhcTB0qZ9Iih4w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDMz20eS1ucsMlKUPo8mtlIC10aPtVnkBO9eHmpNIYGYAiEA/gpkKp1VYf/De2l7p9ncNKaWCECjr7PyZUqa5ldE9lQ="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.66.tgz_1486984161679_0.49542820057831705"},"directories":{}},"0.1.67":{"name":"qwebs-http","version":"0.1.67","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.67"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"a4354d9eaac452e4cc4d7889705bac1281063050","_id":"qwebs-http@0.1.67","_shasum":"872b882b9280fa0513faa414648ba0ac6d1b18ab","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"872b882b9280fa0513faa414648ba0ac6d1b18ab","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.67.tgz","integrity":"sha512-U27qh+qhPBmw1lEd7cdBgDsZNA8F17neOldPnaZM6jT7UwLCk0VE2/pwNOep99PcSls/B5/pl4x9bx498Cfw6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHiiU/Anobu1Jvn2gjToYNb/9TUOU1Tu1lc0ABM9b9spAiEAtI770WhpC/wlo4W9/Bzxts60H/NFgcDgQ4GHATc9h2o="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.67.tgz_1487005557330_0.6606035891454667"},"directories":{}},"0.1.68":{"name":"qwebs-http","version":"0.1.68","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.68"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"b232bd66ac930ef14dfaddca280e8d3fa89ade40","_id":"qwebs-http@0.1.68","_shasum":"c1409bcab4c6c2fd0e7c4e317455b3cb8606db2a","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"c1409bcab4c6c2fd0e7c4e317455b3cb8606db2a","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.68.tgz","integrity":"sha512-VIobHARZhaT6HC1J+LZQEbLHI0Z+4IkUjkgWzclf7CzZnT/au9uU1GSRvoXYJeNyoUeKcMiquKJNiTVbWbH1ZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1wxrnpDiQHHpZSCB91D8gTMMh9roGcAHQAuP7rhA5FAIgCt51eYYN3uXJcxTcdflTrsbIByh2A9eavcndQDZrbQY="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.68.tgz_1487006510552_0.04534560930915177"},"directories":{}},"0.1.69":{"name":"qwebs-http","version":"0.1.69","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.69"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"0595e4fe3245feed6d554d1ed53b610d3727d6da","_id":"qwebs-http@0.1.69","_shasum":"e7d61fe83097a0d4eef18aa246be1f54f7bf7284","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"e7d61fe83097a0d4eef18aa246be1f54f7bf7284","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.69.tgz","integrity":"sha512-rVhr1hEvRBafRc+5WMWD0DOpkRHsqXhnr6abrRLGN8p4/v+suyUYSUvEwa6PauvKcFHMYLLIRXH9cJc/J7qqxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDvYbH8JRAkQPRTSf/E1ygxsFbk8V9pdIjckmHgQk4NZAiEAwhaapeF6gobMevNp4ZbM+1GVDf4ncHUi2I+rBn1eSTI="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.69.tgz_1487007980463_0.41153377015143633"},"directories":{}},"0.1.70":{"name":"qwebs-http","version":"0.1.70","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.70"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"321671a7e854e487e3b556e35cc9379079586ed1","_id":"qwebs-http@0.1.70","_shasum":"4c4ded36c1aa648b4aeec40c50e1381cac3e640b","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"4c4ded36c1aa648b4aeec40c50e1381cac3e640b","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.70.tgz","integrity":"sha512-WQY/L4EYTaZ7buRYFdwalSjg7FhFxmlOJ5g0KZ4vAPyQcZ1SMkGdgFFv+QYj/f+txmQzAAqixbc87XQ6mXu+Qw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCG9a1Hyvr8AEkNaFMYhJfMzU+J9/Rb8t1RPm1dRRO59wIgJu3vp0OBtQbOS6DV79o9VbGWVmcg0eUtHCoucQ+FMOE="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.70.tgz_1487008731816_0.961053419392556"},"directories":{}},"0.1.71":{"name":"qwebs-http","version":"0.1.71","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.71"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"0cc63f06d39d9a6e5d0f4547aa29d70375f11c7d","_id":"qwebs-http@0.1.71","_shasum":"3f87472f8df6a8e285f0ded8a895601e0ce89e16","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"3f87472f8df6a8e285f0ded8a895601e0ce89e16","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.71.tgz","integrity":"sha512-u385l4WsSVrvCdZrsKUT1klMZBf1W2xb5q8tGtqYZbeXYdA3bWZiH8jmfwEh9SDwwKMNVuKjWCIQbHDaDQU3IQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+/5N1rQmxkN4HGLcLFUVEbWe4cBfcrgYq569H0xLGUgIgG4ETLTfBnc6CRNm2Hxd5CaTw2r2SfCcjOAZPmYGYu+4="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.71.tgz_1487065572673_0.16572188446298242"},"directories":{}},"0.1.72":{"name":"qwebs-http","version":"0.1.72","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.72"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"cc9f15b4018fc3668e662e85e668d0f608dcc615","_id":"qwebs-http@0.1.72","_shasum":"ce90e126eeada34c63a6c56b6611ef3eb25b4f98","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"ce90e126eeada34c63a6c56b6611ef3eb25b4f98","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.72.tgz","integrity":"sha512-UjuRRL2D1mCCkTz5PHxuiB/D5+8gChZThYiooZ+nzPrc96s2fkAPxjsaTbW9s67r7lUS9Z4bc8RXdwUtQ78YuQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC4Ubqdb8g/AyOp/0e3GPGM/J+RaO1iUnPPE1/CnuYiSAiBrrITlFfs+IRi7v9LH760fJlT46A3XqRu/J/rUwoIS/w=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.72.tgz_1487066547445_0.3515972248278558"},"directories":{}},"0.1.73":{"name":"qwebs-http","version":"0.1.73","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.73"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"acbae2bb9e7685179de1cb5cb7e425c8ea4c328d","_id":"qwebs-http@0.1.73","_shasum":"4b38f8742191db2c114e4f805d02c5baf387507b","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"4b38f8742191db2c114e4f805d02c5baf387507b","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.73.tgz","integrity":"sha512-RxKJJeO8jR2wCSYGErfmmlL1M0/iqeWEqtiB1cCLhkkmzL5Pa0s3HgqPGYd23hIDH95tkGEayK1KaVd19YI7Dw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFGN7BMjimJagtyXXJi/8PqvVzHC1PPMJBRkDwUeN823AiEAsj0TTepFIbZOOBls9dKmCocBO3Kl+b49kvMEFTm61Bk="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.73.tgz_1487154991242_0.4650023353751749"},"directories":{}},"0.1.74":{"name":"qwebs-http","version":"0.1.74","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.74"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"a5007e3d90b202e613bd573202076b4234e40245","_id":"qwebs-http@0.1.74","_shasum":"582d4a9c074221e21c2ce36e04505d4a06453faa","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"582d4a9c074221e21c2ce36e04505d4a06453faa","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.74.tgz","integrity":"sha512-tIRrc2uoJOAPsTo+pvANlTD8Aym/s524DypxTNr+v65fti9ZkCLnNcQGED637cf9tJl9TOwQ3Yeqma1aDAaYjw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFgz4Rhu2aODH6FpJf3uO/4G9b2fHL39FPkGeydNVMH5AiAolmBoNNzB0Re41//yP26AaEd7/W/xPn0w04OCsqYW/Q=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.74.tgz_1487339679913_0.5208695009350777"},"directories":{}},"0.1.75":{"name":"qwebs-http","version":"0.1.75","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.75"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"50545e3a7c822cdfb71aaf6d5424001ff8453561","_id":"qwebs-http@0.1.75","_shasum":"ca871129397d50e2eda1b3709ca7a23a661b06f1","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"ca871129397d50e2eda1b3709ca7a23a661b06f1","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.75.tgz","integrity":"sha512-rDYW6J43l1PFabPpZoPFuVZp4Qr07VUqvyvWYfteyYqzYP3K7OOhPv0icQ4IUpz1215VYDYRbfNssw1WIZmQzg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnF6RkZK6gg0C6jS1nqWfHjTH9Fu7BOg/8Fd7SvlpICAIgHzGRAEbHH87cODM+hwRHUZfZhq1muK0l2y6L4lzFIM8="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.75.tgz_1487606236518_0.08350581815466285"},"directories":{}},"0.1.76":{"name":"qwebs-http","version":"0.1.76","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.76"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"bcbe8ad08527a55107be0f8c15aab31abac89575","_id":"qwebs-http@0.1.76","_shasum":"517d2445c018b262769dfc43a68ce847f6ea54b3","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"517d2445c018b262769dfc43a68ce847f6ea54b3","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.76.tgz","integrity":"sha512-bkrHM3fSuYIa8TSky49GT9VsWPiXwU/A2FyRqC4FlwinyC339/e7Ni/dNU0U9/rDJeD5eQBxRpLIEe69dLSDBQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHfTupl/NaJNTJJRSaTGSHYwGIljK6401/UOQuTNLhwTAiEAoy0G4QftGMsMNTcIn59mHe18V8Z8YW+pBUyTnADkHj4="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.76.tgz_1487772494853_0.17931366548873484"},"directories":{}},"0.1.77":{"name":"qwebs-http","version":"0.1.77","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.77"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"54d6d95735b64c0f3358b48c04f540551a920689","_id":"qwebs-http@0.1.77","_shasum":"57c0c02e7a0ebe2a016e342106c154e872909f86","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"57c0c02e7a0ebe2a016e342106c154e872909f86","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.77.tgz","integrity":"sha512-/M+BxyHG2W0vx6swT8KTJ1CNDfgd1PnRtShsAq88dK3ynulEI7ElfHwxSwZ62Tos9XixAuTVZBa0IpDN2aUARw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7+yR6i2kAqy7dBbhii8CONyZAIk1Dbw7zySRpXyoWMQIhAOwDMb98OZOnM9rQsb0+PXY/ReCgWjYUZzIOzAYrSHns"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.77.tgz_1487924336894_0.6376690152101219"},"directories":{}},"0.1.78":{"name":"qwebs-http","version":"0.1.78","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.78"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"64750f3242a70094da6cc3d883664738323041a4","_id":"qwebs-http@0.1.78","_shasum":"ce27c8250ad152c24b428e8ccbd1c23e3737e4a9","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"ce27c8250ad152c24b428e8ccbd1c23e3737e4a9","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.78.tgz","integrity":"sha512-Nln+zRdnkc7B2kWkSNLRJpRYLf03yen2rZm7ouBoTbcGjm+EPBXMriKCmgDVa4mgV5g4y+C5NNpLpk8b30rgWg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICcLhXYFHB11NkZrKgE8uRIq7oiH5USDivN6M4oAiUM9AiAB9lN+4ZBw8HhyjmRGoVORKnvHtTxvHrI2ck4455KA7Q=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.78.tgz_1488304149231_0.6246131143998355"},"directories":{}},"0.1.79":{"name":"qwebs-http","version":"0.1.79","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.79"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"695938eb70ee90c447232de64f741ae26170e448","_id":"qwebs-http@0.1.79","_shasum":"8312fdaabe2cf539cf252be387a29adb6d9dabc5","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"8312fdaabe2cf539cf252be387a29adb6d9dabc5","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.79.tgz","integrity":"sha512-rYugwqh7jt4+Fw5pCiLRcjPbVk1f16LIyTQyVOUXkTuPj4tC3XIAXWz3gGmx9EFIAHfAOjauXNo3O0HynKf4dg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDD7RWpCpNXo3giuPOlMHpii3pAxJqs447TrBHdzCQ5mAIgb+yZDYQSTYus/gih4QFzCmC3z+R49TGgqY2K/Nxo/e4="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.79.tgz_1488362011609_0.37899275589734316"},"directories":{}},"0.1.80":{"name":"qwebs-http","version":"0.1.80","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.80"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"bf3429c2069cd5a080f6b98b983b599bfa0ae8ae","_id":"qwebs-http@0.1.80","_shasum":"314d40b36153b17f8ec792b4bcaabf3ca00d6831","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"314d40b36153b17f8ec792b4bcaabf3ca00d6831","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.80.tgz","integrity":"sha512-pbeJbu9EQBESatu+iEiHKvNHLN5bTbgPZXpdQ/XR+DQRsxd8ARep1fXN2PI6fEKhDl96x3bm53cAubI+zDkamA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAbOOE1BUfH5T5ZtyPjYZseITuarQrcGtAInqAwptXYkAiBpWPgOp0kkaGT1R5ehyt1JkcKVtjurtOLGsyG2z9xqvQ=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.80.tgz_1488789984449_0.6366797727532685"},"directories":{}},"0.1.81":{"name":"qwebs-http","version":"0.1.81","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.81"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"eac3e8380edd117df55695e1e8eb5b2c9ba47208","_id":"qwebs-http@0.1.81","_shasum":"93daedf1723c4a3f02cc4974be5158fd335db86d","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"93daedf1723c4a3f02cc4974be5158fd335db86d","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.81.tgz","integrity":"sha512-UZOH01TG3wUp1FzniU+qEpBmG/bB11263Gny6PZE+rxBQzBSGxqloUchs2rmMNf/m8LehHtt10N66Pow7e7jAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEUnoSLNPHlqtch4NihLxCxlGfPas/S+l0+mjMU5uzJVAiEAuCkCErbWMDarfO/Cin+PJ8IJUaxO9RU9KJVvWslrRRk="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.81.tgz_1488791030617_0.8718012424651533"},"directories":{}},"0.1.82":{"name":"qwebs-http","version":"0.1.82","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.82"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"c2cda7d148004c8fcb7271ba4a8e00c28d15bda0","_id":"qwebs-http@0.1.82","_shasum":"d7e138a90305eb1c6e56d98fec54737e5c051708","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"d7e138a90305eb1c6e56d98fec54737e5c051708","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.82.tgz","integrity":"sha512-d7i87Hi0NZLJlca02iMLcXyl4pvUgD1EYE2g28NQHTkkL4LEDXER8SJFeb7dK7w3+kFZA1nb+yhaoZl2ciS1YQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCM6GqEFRPpu9o+fNs3hxf5Whu9nAL9zHfUt+/JcSiKJAIhAPkLX5CYUIYZ2ux0SSlgnhZauA+znf0vg4xfKIscP3Yd"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.82.tgz_1488797263641_0.395206936635077"},"directories":{}},"0.1.83":{"name":"qwebs-http","version":"0.1.83","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.83"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"47dcb1fd5a6a5f4070e27769ab38f1dc548c764b","_id":"qwebs-http@0.1.83","_shasum":"287f9554fc2bd1e5baf2d5c8bf6d31b6bfd5f267","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"287f9554fc2bd1e5baf2d5c8bf6d31b6bfd5f267","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.83.tgz","integrity":"sha512-otdFTTgcyXMjFP8pVqXbirXgxzb/L8CG7KVfbF3p3+QksLikvqAE15EhQyZE4l3Zo5oSSI4Vo1Cf3C0TX01ZBQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXA+z/XW4GEsqW1LEIBU3MXcOSu2o2ELWWbIhETPrUqQIhAJ08mqR2DLS/qpk4fxaGMgLyvYvfWl1k0hER319my+L0"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.83.tgz_1489068964700_0.23181034438312054"},"directories":{}},"0.1.84":{"name":"qwebs-http","version":"0.1.84","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.84"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"ba1001ef5bd829334382cb9439a926f95f31345a","_id":"qwebs-http@0.1.84","_shasum":"2ac049f1d7da4c9f85a5c693f7f1d68117748620","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"2ac049f1d7da4c9f85a5c693f7f1d68117748620","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.84.tgz","integrity":"sha512-KgNamguE5mZWvzFWtkC3LiouTQ5aL6p64BzSSRDDC/0RZCr/QheQOfbpVeZApthLv8h674kSUihEJjuMB030Xw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAb2VCq7Jf9m4Mnhgu2/mzZNeke119Kl2dfXw0dPmyXKAiEAjc2O+jjY0+LR2dRHShFwXDHKnC64yd0xYZoudHISK7s="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.84.tgz_1489069129987_0.7797249171417207"},"directories":{}},"0.1.85":{"name":"qwebs-http","version":"0.1.85","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.85"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"e2581f269f215acf0dcdb944293e8e89acf61947","_id":"qwebs-http@0.1.85","_shasum":"74775e25291fdd5a05ba4f53b6d789f3bd32f189","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"74775e25291fdd5a05ba4f53b6d789f3bd32f189","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.85.tgz","integrity":"sha512-UIipz7bndVvrN8NyqssjLFrP3yEuyJlVJbKh7q790hI8hgjf3Hpi84QQyMRV/3ETKJdoyHe/4hmR9Mui9darJg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHwabuypFFMV3yKiNyOc2zXfeqLUZKM60Bve/wiHSkfeAiEAv54zg+AxergTAY/Bj/Led0wu/ikeYOuP5jzy78Af3iw="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.85.tgz_1489165661981_0.08793570753186941"},"directories":{}},"0.1.86":{"name":"qwebs-http","version":"0.1.86","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.86"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"07c367be47784c3adb54dedb2405f52ed7072875","_id":"qwebs-http@0.1.86","_shasum":"47d2a5bbd44e336b1c51c4a2e2088a29fd27c7ec","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"47d2a5bbd44e336b1c51c4a2e2088a29fd27c7ec","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.86.tgz","integrity":"sha512-TsyzC+hgbUWKsLxEBIGmCDP6VchoZwe+8ECjNKimdOQXtwYXGqQdJ7IDoKIAfGVhsrN71TMobCloMyKrpn+/QQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfQ/flJXsWT3J53dJoKswNBglssCzTOemHTqoBD27KnQIhAIoVO025NXH3JNgqH9tm1vCnRzGcHLiWZ9PQ1ccHHotF"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.86.tgz_1489166217726_0.7089874667581171"},"directories":{}},"0.1.87":{"name":"qwebs-http","version":"0.1.87","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.87"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"ef2e49430ae086b0c6d19c57c329e4d2726ea167","_id":"qwebs-http@0.1.87","_shasum":"2be39b28c998a10c9879bc21f6f13fddc914ada8","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"2be39b28c998a10c9879bc21f6f13fddc914ada8","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.87.tgz","integrity":"sha512-b8UCIeqGSMyKXAB7fvha8yzpq+nyF8NML9HJve/ch6BK/HWEQ2KBlDHFs5kB0Ecf0r2Y6bm1Zgmp9JLgawBbsw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICuAc6kMgY53QLJ8IQkNEDY1LMnlCqX0j6KiAu5jktLHAiAu5feZggiYh6v3kkts9ytOoowWiq9ySEsz5xM3Jy2fgQ=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.87.tgz_1489166878570_0.304631732404232"},"directories":{}},"0.1.88":{"name":"qwebs-http","version":"0.1.88","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.88"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"830fbdba5c1d4649411065131c67a7303298c1ae","_id":"qwebs-http@0.1.88","_shasum":"c22c80254d0388e9bac9c157b213d380e902e15a","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"c22c80254d0388e9bac9c157b213d380e902e15a","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.88.tgz","integrity":"sha512-v6NbB2bF5A1vLgDOxdpez1zlNr7PfJf0W2wK6bdl1GK9qLOyqUPsODGGYub2vjMQ5LLDedow3GaIhELh1zPGoA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFZmK3A5tIc0aOofe6zOekIwVWmyQBSF2LV7zMaIjmdcAiAaUEfJldukBXaoR3e0VFcvDuUATFpzA8KC9DYxsRfcyQ=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/qwebs-http-0.1.88.tgz_1489167283531_0.8983309026807547"},"directories":{}},"0.1.89":{"name":"qwebs-http","version":"0.1.89","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.89"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"a8599aa9fa3157d32353cb7be7129a9b55cc295c","_id":"qwebs-http@0.1.89","_shasum":"86c6fac27b953e4d84bfee576142b74d430823c5","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"86c6fac27b953e4d84bfee576142b74d430823c5","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.89.tgz","integrity":"sha512-5g5iWC7zp3ltFZ32T/yTEmjwYfw4b6t/fNczJ8TkLbpGUvLr/esqHvU8udEDc3iDMwMzxGfKvYuh51kxTLGpVg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID1W8og8FoeXw/8hmK+SViIfOvh5gB6vht9UOFqPJ+RxAiBoaRHDUvyCbm4B2aETmwSAN7m12YWkfk/NTA10cdyLcw=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.1.89.tgz_1495397133079_0.21085936320014298"},"directories":{}},"0.1.91":{"name":"qwebs-http","version":"0.1.91","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.91"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"b33e68f7ffa54077860446c77f6b078006cb6e97","_id":"qwebs-http@0.1.91","_shasum":"5b98de62c5cb30ed40279a4c901cc31c60a7d192","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"5b98de62c5cb30ed40279a4c901cc31c60a7d192","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.91.tgz","integrity":"sha512-GAGIO0tqnGN6kDmtUDUJYEeMbWKJZUxJjVjvbody+WwEnCWSPh/Or0Y9VgFpiCOGHgJSK7FV/Q70aI4Ch13uSg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHqrwZpfIdDm02XhyoAseBaBnOx5tc2yn0V7ATkicAKAAiBeaq+P45rrvgOPNenzAaU7H535YuuLyRsmDOvWz8DyhQ=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.1.91.tgz_1495398328295_0.275994080118835"},"directories":{}},"0.1.92":{"name":"qwebs-http","version":"0.1.92","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.92"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"d966880f701702cbf23b6d7da409f46ab31aaa9b","_id":"qwebs-http@0.1.92","_shasum":"f2374d0fd8d06c5912e0bef8cb434ef42a622dc0","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"f2374d0fd8d06c5912e0bef8cb434ef42a622dc0","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.92.tgz","integrity":"sha512-ngA66fIITlK8zQWYZjJVm4pyckTk5XqGLH5WlCjgHEeZepyfLHjMHh1U7/H2ckVqdt1yYU57jcJ/6ngs5PYYOA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtgmNf816pyBflWt+nj3rLzA2agRLuKPi0r8W2pEmEbQIhAKvtFsgfFR5O8wD5EbT0SboGKYKFV+VoLv/3vZra6OLq"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.1.92.tgz_1495401652692_0.7065866533666849"},"directories":{}},"0.1.93":{"name":"qwebs-http","version":"0.1.93","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.93"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"626c4b17223c7e2cbe737706bb2a3a0a28cea7b4","_id":"qwebs-http@0.1.93","_shasum":"15c83fde448179fe74df01f0c92430255012ef81","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"15c83fde448179fe74df01f0c92430255012ef81","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.93.tgz","integrity":"sha512-IxK/EzmG4v5AjZAjZXPy3MPbDIZjFn/LQ/yi+Sb5IAgQD7SQLBA8hzEEdzG5X4p9MHFNnrVRFl7cmtNq078MnA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGY94HQPB35TEnjDs3/87gIt4ZkvfVoirxUYY4Hdn/p/AiACiFqI1Ti8GM/VYncJN6lD0DhevJKbAxaz3IV9dOamcA=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.1.93.tgz_1495661981218_0.07190373120829463"},"directories":{}},"0.1.94":{"name":"qwebs-http","version":"0.1.94","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.94"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"f11f2ba886762e53889d8a1d97ad5e9c7fdba550","_id":"qwebs-http@0.1.94","_shasum":"3bdcd0f5b3900ec0d660652cc39ce89981f2a333","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"3bdcd0f5b3900ec0d660652cc39ce89981f2a333","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.94.tgz","integrity":"sha512-udQV2RYGgj4u4T7t7WFc+7hBnk93oGhk+p0JnF/wEIn/uvY7Md/kkbYdIGOIdAVBGVmnsRDUgwoZTNWGkGcDxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRQ9EboHWC+D19jHlmOtszCQsRY+L3CoIP3TJSliGvewIgLl1cYcbkfmDANRXTzCh3sAAQJQDZ7YTOL7lEN58IXao="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.1.94.tgz_1495905594089_0.7253451880533248"},"directories":{}},"0.1.95":{"name":"qwebs-http","version":"0.1.95","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.95"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"9222a84ed3e692294da7fe8ecb3587accdfc290b","_id":"qwebs-http@0.1.95","_shasum":"e2762e4f5b7fd21d955dca496bea470d38d42abb","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"e2762e4f5b7fd21d955dca496bea470d38d42abb","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.95.tgz","integrity":"sha512-wxj/2y0ovdIWmVm3Lbl1seVvzkMCTygUC2Yydj/ZuQ8nT5trtVYOjHcikMV9LkjwFhkD+5z7IrEf7S7mDEP7SQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgCCkhZpohRi63uShARDnNDV8wdb0UtjU02M1tX0tr3wIhAJiT37mEUooejXV/rquUaZl1jgWXq/pCDDQRLMzD2ivv"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.1.95.tgz_1495921721499_0.04526586947031319"},"directories":{}},"0.1.96":{"name":"qwebs-http","version":"0.1.96","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.1.96"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"3c2600d98271d55b28899f60202a911234844c28","_id":"qwebs-http@0.1.96","_shasum":"3346b18950ece5330b879045c7f372cb4dc4539b","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"3346b18950ece5330b879045c7f372cb4dc4539b","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.1.96.tgz","integrity":"sha512-o4gq2GBiMfIk4QtzoeSWl+6qmyIMQLpuiSuq//d3bNxYEfZaGX/bmhTRJZW4+6PGkR6Fyi2EXnRa/w48nrS5Og==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1YI3YP5K7FRpyvMkpYROgR8Qran5yQWPUY8cSP7GHugIgffmr727rGvt335h7E9dUcBpwAROKK4WeI/966hNyzOI="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.1.96.tgz_1496005236290_0.9851180554833263"},"directories":{}},"0.2.15":{"name":"qwebs-http","version":"0.2.15","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.2.15"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"7ce3c5d4165fb3e9e3d9b66c428206cba4778509","_id":"qwebs-http@0.2.15","_shasum":"9472f271ceab1c597a16fd3e6433b134054db8e2","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"9472f271ceab1c597a16fd3e6433b134054db8e2","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.2.15.tgz","integrity":"sha512-IKlmwnUM4ZHgh3TSU3mPKDiqFU/yyPwrfH6JKbtaegueq5r8zyOd92h0hzF/cSYjfonieKjgD+dfdKFFheYsLQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDeLvn/bNCsE9j4sO6L2CBvnd1Gsv2FkYLeLmiNDokeCQIgAanWdbqqJNfzc+VVQS8pNTc/o24o3gOMPQVDcpdYPCg="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.2.15.tgz_1500322772690_0.4150335565209389"},"directories":{}},"0.2.16":{"name":"qwebs-http","version":"0.2.16","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.2.16"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"dc19b37de469eda6ba683e74ba4ad0ca73e4276a","_id":"qwebs-http@0.2.16","_shasum":"a54fab39e7f7af41fd6ba07a70e5b7045a083e50","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"a54fab39e7f7af41fd6ba07a70e5b7045a083e50","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.2.16.tgz","integrity":"sha512-j84i6dJjnrSgYZ0YzmNtBtk/6RpxFEokYiNXFbU9jPbpf+K/JsfH09rWb75VO6OgAWE1tzOs/wSz9c/dWOOGvA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSgjfyad5e8HluwdhfH5yywLnFGMQ43SNPFsduNYFXMgIhAIBs0ab0bYgi7AN9rsz6qHR/U6teTBv3hSl4nMMOz0MT"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.2.16.tgz_1500324695798_0.3974574583116919"},"directories":{}},"0.2.17":{"name":"qwebs-http","version":"0.2.17","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.2.17"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"8939d3d37c3c150140075c8ffa16c91b99180eae","_id":"qwebs-http@0.2.17","_shasum":"3d33008685db7494b67e7719902e1182d61ea24a","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"3d33008685db7494b67e7719902e1182d61ea24a","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.2.17.tgz","integrity":"sha512-W46H+vDJoNd2gkgzyJtSCK7mZBFvUqqpnSGFcvfPUDeAu44DT2OAdpimWf2s/UjNHKXfDdRBzdm48+kzy6ln0w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEtXLTJBJZVMtwu6JSO98KneX7H0ZHwk6bNP8+5bVp3VAiBQkN9Lqq0icXILzM3R4yoCwtyBFVULNXXv9vYMyYG4dA=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.2.17.tgz_1500328440762_0.40575766703113914"},"directories":{}},"0.2.18":{"name":"qwebs-http","version":"0.2.18","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.2.18"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"9be316cbb44fbabd7f666c9496a7a878a034e9d4","_id":"qwebs-http@0.2.18","_shasum":"e103227000dbc6d0d0b0a6c414c987dd0e86dc23","_from":".","_npmVersion":"3.10.8","_nodeVersion":"7.0.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"e103227000dbc6d0d0b0a6c414c987dd0e86dc23","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.2.18.tgz","integrity":"sha512-s4W/Oe9Qp0kmZOfSY5S5wkLR1ko9314ZoKFD53CxXT4Qj1yjbo9nW5YSAEygvxRgsSOWjun3XRZma60IlBNUxA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4JE2uR/23ufQp5c7hGM+5nNfXaXh4cWaxVvnVjGLoLwIgWUSsKFz4xRcS8bbJbvz//BIg6d1h7xEPbLm4VyuSXZo="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.2.18.tgz_1500328669337_0.8707724574487656"},"directories":{}},"0.3.0":{"name":"qwebs-http","version":"0.3.0","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.2.18"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"632f14958c960d8d6abb9276a5f03acb8bef4385","_id":"qwebs-http@0.3.0","_shasum":"63a46e757f614b8f9e0ade26f058085cce309e40","_from":".","_npmVersion":"4.6.1","_nodeVersion":"7.9.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"63a46e757f614b8f9e0ade26f058085cce309e40","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.3.0.tgz","integrity":"sha512-IbEMrnCvVYXqGITl61sBCRb5jKyK+j3jLCNC9OqLH9RQKz7v4kN668H5nvmN9dNVRKfqD3NhhE1hMzXUId/erQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEvw6obHRjQjk02ffaxek3Yolm2he3UmBw0jaukgPX8OAiBdgdaP0NLXMJJ7FNsKrcprtCWNoAyf4rc6IxqFoVb/0w=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.3.0.tgz_1506070960608_0.30767314601689577"},"directories":{}},"0.3.1":{"name":"qwebs-http","version":"0.3.1","description":"Http server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.2.18"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"cabd2e167ad2839c7295034d38f93b7be5ef7205","_id":"qwebs-http@0.3.1","_shasum":"58557c54d3f175f429cce9ba8250a311acccb8c8","_from":".","_npmVersion":"4.6.1","_nodeVersion":"7.9.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"58557c54d3f175f429cce9ba8250a311acccb8c8","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.3.1.tgz","integrity":"sha512-00io78lFc1URcuh6GWlxcP+Wjs1oX6wF6M1+l3CELAyY/0zk9Ha2Z8womT4HPLfWS7ZmOlWKjt07AkndajWMOA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC0/MoUsE3MjbxnR0OdEbtYUy/36Px1dTAyP37umtiEQAiEAg3/0kBf2W5l/6nxujX+CXU8owXyLG+ugTfh1iJa3CHM="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.3.1.tgz_1506071260080_0.9830198676791042"},"directories":{}},"0.3.2":{"name":"qwebs-http","version":"0.3.2","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"qwebs":"^0.2.18"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"4944781226dab807fd357fa82d83f68f402de5b6","_id":"qwebs-http@0.3.2","_shasum":"5f4bbabe186d50aeca1523b699c593cca2fcafc7","_from":".","_npmVersion":"4.6.1","_nodeVersion":"7.9.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"5f4bbabe186d50aeca1523b699c593cca2fcafc7","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.3.2.tgz","integrity":"sha512-ZIR+l6loUbPqRuPISzpxl20L+gLXvp9vqOU3rhPHquESRqPBJ4K0PIwdzfhs5/sVoCdL1bxxKnsXpI15qNJ1bw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICJCI0H7biaS5NUuz5rcVyMcPZw3WdMGuCMlNsbnm+rcAiEA+MpgBWa60+CMb2U9LG3/UkN4k4BruZR6Ecob5gicUrw="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.3.2.tgz_1506073688964_0.7594862836413085"},"directories":{}},"0.3.3":{"name":"qwebs-http","version":"0.3.3","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"qwebs":"latest"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"e93c95877f8bd42e73647a56c404729e5c80605f","_id":"qwebs-http@0.3.3","_npmVersion":"5.3.0","_nodeVersion":"8.5.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"integrity":"sha512-LgSBJS4fd2DFzo9rR1FH/QGjsXF4FMct7BB61pJEPOF8l+YJhMEQ+qopG19p7ck4X8VJ0WaK2zykLQZc86IgBQ==","shasum":"18ab24fcc7c516ddbad759cdf272d262e76c9736","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.3.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdKvfN70lVuRgXEs3hReKun3/kIPJE/9PrqOill97nlgIhAIXCgNUydtTmG3Yv8tO2BRm9zNLq92riMlewOr635mJM"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.3.3.tgz_1506185686602_0.7939835607539862"},"directories":{}},"0.3.4":{"name":"qwebs-http","version":"0.3.4","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"qwebs":"latest"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"cb1c179f65c3803e6463732ae48ca315283c08f0","_id":"qwebs-http@0.3.4","_shasum":"6f56dfaca1ea4c626fbda989c54702afab20614b","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.6.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"6f56dfaca1ea4c626fbda989c54702afab20614b","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.3.4.tgz","integrity":"sha512-1WJoWRQW1hCiAid4l/vCGx3WufmMbPyEezYlHvQ0WTzQ60Mr/MWqnk8NwXGT9Up927A6ijWe+D17KvQmhot2Fw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA2I81Hr9RUcn8Dj0S+h3t/YFKP09OFTNH7fWOG2TmVJAiAyTBKbpviqdJThdL6vNr3xCEQ2Jxeiqhmbuw6tuehenA=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.3.4.tgz_1507194919719_0.27748878672719"},"directories":{}},"0.3.5":{"name":"qwebs-http","version":"0.3.5","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"qwebs":"latest"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"3b9279b7c16f5aa0ece6566baf4e654c9930b6be","_id":"qwebs-http@0.3.5","_shasum":"7c1f6050a3e3d7dc9b20443a751fb6aba0ebe6e1","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.6.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"7c1f6050a3e3d7dc9b20443a751fb6aba0ebe6e1","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-0.3.5.tgz","integrity":"sha512-tbUWXmC9f7yB4EImKVqQCA4Ygz5hmflgPLYqTiOi2iqjKQWMbC0nxB/ZFTReFxhqYbgbp8CiXLSN9OWj01SSvw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAzTIB21xrUu98hbSVGcqQnCEDN/Bwp8Q5BIs+vUMydeAiEAzLNnQpKl/9EghOzE9k/ZRiM9+uoIWUSQ7mGtRICOyXU="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-0.3.5.tgz_1507196794903_0.7910608374513686"},"directories":{}},"1.0.0-beta.1":{"name":"qwebs-http","version":"1.0.0-beta.1","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha tests","test-cover":"istanbul cover node_modules/mocha/bin/mocha tests && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"3a98a487562ab1ba3c92720bec60208408e8f7d8","_id":"qwebs-http@1.0.0-beta.1","_shasum":"1159e1c57d3ac2d1702d8047c0abbc161af06342","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"1159e1c57d3ac2d1702d8047c0abbc161af06342","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.1.tgz","integrity":"sha512-q4nCMgwxs4C/l8f+ZqaaO0QbEu7raCkOB5f/bmdWF8sj01015n4eXG4PIG2gP9dYzCTDb0TphYMXlTP830ZUqA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCV1lj68OUds8ZE0EJuHju+aL+B1tJtr+yNo673SoFERwIhAMoLX3Nma98zOVOw576wWy/ssBeDH5gqZYO0aQub1BSz"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.1.tgz_1511774989574_0.8417306714691222"},"directories":{}},"1.0.0-beta.2":{"name":"qwebs-http","version":"1.0.0-beta.2","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","through2":"latest","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha tests","test-cover":"istanbul cover node_modules/mocha/bin/mocha tests && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"5d1ebc8227cf61224084b5662c3dd9d6334d8dfe","_id":"qwebs-http@1.0.0-beta.2","_shasum":"08e48b2c94efa43e1919b43433e24a2f6ed9784e","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"08e48b2c94efa43e1919b43433e24a2f6ed9784e","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.2.tgz","integrity":"sha512-niWip83pE+7jin22jmbaPyAU427VEQbUCO6Q0RGUELCD/fWa9M/ajI2Jh1tjUcij8HDjudKu4Kr9nHgEJ5Me1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEIivn5DwfRjtbwATtSLMkvaXJUF3zCFi3jeIp2wfDmgAiBrfExTcObJeV9HIWo2F30h8egSLxb2JZYqIFr3TumpeA=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.2.tgz_1511858922321_0.68754932587035"},"directories":{}},"1.0.0-beta.3":{"name":"qwebs-http","version":"1.0.0-beta.3","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha tests","test-cover":"istanbul cover node_modules/mocha/bin/mocha tests && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"c89800f0c51e85f5eda06a99294e09b57f7a8188","_id":"qwebs-http@1.0.0-beta.3","_shasum":"a84322b1653e6c396dfc1fa64fe2773bc375af1d","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"a84322b1653e6c396dfc1fa64fe2773bc375af1d","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.3.tgz","integrity":"sha512-CQb6PRDrVwVwIa9c8X/Jf7+ngntoEm3ffQDhuEPUiDGMUX4gPHfJVkDWgzEEM0NHplXXhwW7aD9bkDy40JdjNQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgUFebGXd2ZMVR9dwFZ0hzHab2DnNKfS95/jx1Pr/91wIhAJc5mm7MYQPd8tUTzlogjFC3Upe9oyRHYO/IQ9Mg+QOv"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.3.tgz_1511868304073_0.9298822688870132"},"directories":{}},"1.0.0-beta.5":{"name":"qwebs-http","version":"1.0.0-beta.5","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha tests","test-cover":"istanbul cover node_modules/mocha/bin/mocha tests && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"c3d84a345cb4439a8baf66091d292205c216e48a","_id":"qwebs-http@1.0.0-beta.5","_shasum":"aa23aa7f7d7668509cb1ffc7cb7abd20de86d762","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"aa23aa7f7d7668509cb1ffc7cb7abd20de86d762","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.5.tgz","integrity":"sha512-v1WDFJiCOk+EnF/bLqLC6xpRQGzbG+hmCovGdOLYHL6Tqeaeg0R0sXiklRBMYFZattkpgutSDuJXBGqybqagPg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGoLvo0k/gkljt+5XgN6hMIIMT4QnLfzwB/XnxQjBemwIhANs0eqWccxdTS7HCbiWExQrXMjkxootIwX3r7EnADQ62"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.5.tgz_1512381463716_0.6616515503264964"},"directories":{}},"1.0.0-beta.6":{"name":"qwebs-http","version":"1.0.0-beta.6","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha tests","test-cover":"istanbul cover node_modules/mocha/bin/mocha tests && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"e7e6fd947eca7c70cdebfc599458e5fd814c6835","_id":"qwebs-http@1.0.0-beta.6","_shasum":"bb1b0a22523d314151617e293b430a0f1fd28610","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"bb1b0a22523d314151617e293b430a0f1fd28610","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.6.tgz","integrity":"sha512-PVmStxEGV38pdYNQijr/yxeGB3oqrgm3qITXymt4C44N5UfuQtz4yMkKfNjwHWgAVb+YhdonvBx9FaWB83T58w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG7LhI73NPV/aqOUK5ggI92TipEEBUOkpw70xr4B1UDwAiA4Y2ED425jseRagPutvce/MYHTIc8AB9tuMWpT3QJm7g=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.6.tgz_1512489927961_0.06878450093790889"},"directories":{}},"1.0.0-beta.7":{"name":"qwebs-http","version":"1.0.0-beta.7","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"9d796e29893067da0a2174152b2111740ca6156b","_id":"qwebs-http@1.0.0-beta.7","_shasum":"4c5ac9d34b0fedcd248f929b1b05c8b754ebe1df","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"4c5ac9d34b0fedcd248f929b1b05c8b754ebe1df","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.7.tgz","integrity":"sha512-y4zBkzwvpDVNk+A5HcMaVInCT8ZnqlYZxnBmEj9gAz2btY6MHe7jcnFj3jPYnMJ64+8/O2bVGRTJDTuZHdUFGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBd0nhJ3mCflIKGmcwSxwllhufEP7LGVi4oomzQdnQGEAiAx5UDOBBKxb/aajA+iA37B4vuwmzGsEND9hUr7T4OSXQ=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.7.tgz_1512572438080_0.07927201339043677"},"directories":{}},"1.0.0-beta.8":{"name":"qwebs-http","version":"1.0.0-beta.8","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"0bfbaecc5bb561c9e3a34b4905e187194d6f95ae","_id":"qwebs-http@1.0.0-beta.8","_shasum":"d0d14a09320d703a614c5fed55935827e0e85009","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"d0d14a09320d703a614c5fed55935827e0e85009","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.8.tgz","integrity":"sha512-5isSgIuqqvB5uMHsrzw1jUkkR3jfwF0ITHQMiXoX2a1khV2oVUvwyNYRCRPBbTnUxch8FvnacmnFQlR1Ji56Hg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3O8OM2qxA6psDPs54NMeTmt7SwAK334AxJcHt4YXtUAIgbm71xut11k/PSooGqCtIl1fnqQutP2VKrbaUtiQ8ero="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.8.tgz_1512655767368_0.9798071426339447"},"directories":{}},"1.0.0-beta.9":{"name":"qwebs-http","version":"1.0.0-beta.9","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"ff77849ac4c5f2ab7d38bb03dadc192d62540da1","_id":"qwebs-http@1.0.0-beta.9","_shasum":"d10e6fe81240f2a2db8cbca935c3feab561c6f90","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"d10e6fe81240f2a2db8cbca935c3feab561c6f90","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.9.tgz","integrity":"sha512-UnxN30lYLg8hCOPOO8k4lTV2NotPUM3QLFSDpjaCLu02zKft0azIedGOuB80m+wYVP/xQET4X8eFF0ezdyYFeA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBYoiJDTCBeUZpvgNmrEoGhnd5BNgxTuEgncGApfaBhOAiABfKLPtL9tNPv9KGyHRo7dhRKJvHXxVvsOWYeWN88c+g=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.9.tgz_1512725014147_0.1915683902334422"},"directories":{}},"1.0.0-beta.10":{"name":"qwebs-http","version":"1.0.0-beta.10","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"180903e0def4afcd6c448fd5493803b626cbc3e1","_id":"qwebs-http@1.0.0-beta.10","_shasum":"50c3d01db96fd83a76d1420b3831731146bead3f","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"50c3d01db96fd83a76d1420b3831731146bead3f","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.10.tgz","integrity":"sha512-fAgLU8oYznoRRo9Ea/4/+goM42kO0dQO9Nma0oIl+K3dndz74jkcUjRdclQY/mlCkftBB98XBECvLB6wlKqfbg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIED9/BPYT7MJQ4OUcSbw1bxzyMbCcH/RzvEwLCNkP5W+AiAECvnuMAvhQBtd+CIoSKn9tJb5hGISqHPEiZVEOE216Q=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.10.tgz_1512752192833_0.38776856753975153"},"directories":{}},"1.0.0-beta.11":{"name":"qwebs-http","version":"1.0.0-beta.11","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"3e30a9aa18be7a38a6197f12066203c679daced6","_id":"qwebs-http@1.0.0-beta.11","_shasum":"e36f04afd25b63291f25384dd2f88d70ccafc3af","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"e36f04afd25b63291f25384dd2f88d70ccafc3af","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.11.tgz","integrity":"sha512-9xICFmi+fMbfHNywo9sEobQ7nHq2MuFpGW6F3zH5CFV8eKRCJxzV8C4n66JEvIR/R+Qt/7jTtTUnlahzPp/3Lg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDB8VeIvvS/ymUwNoERXn2cv5U/o8DFClyAxSpIlA/4xQIgMihK5vcvIhTHgsNKauA/UWV7WJHTRLSZNOrgt8w8lTM="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.11.tgz_1513013495516_0.21122361905872822"},"directories":{}},"1.0.0-beta.12":{"name":"qwebs-http","version":"1.0.0-beta.12","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"9335cd70d4d132521e92c552cf0094834ec7b1de","_id":"qwebs-http@1.0.0-beta.12","_shasum":"697e6f475a9642fdc855314a6a1a0443123f50e8","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"697e6f475a9642fdc855314a6a1a0443123f50e8","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.12.tgz","integrity":"sha512-wBHIaXeQv4vMpa408/Q33rEM5Gw+JglmQgIKC+sU+VUMUXz7FT6icXVepLa3nJAVVCPbToTDblcl+pQFh4Hr/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrpd4FBfARH6GJxq1VcJ7gQMeKEryT2TVZBEHeOgtFeQIgYoI3gf4aolbEXW0Tcf+Z/VxXZacEldQKrXuFS14VAkM="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.12.tgz_1513157075528_0.19299564487300813"},"directories":{}},"1.0.0-beta.13":{"name":"qwebs-http","version":"1.0.0-beta.13","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"48c314ccf90ae054a116403dfaac2ae6038c29d9","_id":"qwebs-http@1.0.0-beta.13","_shasum":"fb6a0361febd7b8312a61796c81254e772d6b157","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"fb6a0361febd7b8312a61796c81254e772d6b157","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.13.tgz","integrity":"sha512-gUKtmX9uOr8IX9JvkHNFerQWRs5DPYd72SSWYiHxBMLunIG1o8PB01crpwyc3Uj1eDFP25CTz6+SkwWqdvws9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHvh9fRb1FVOTHiBnKZ7oHLU+8LUfWS/1O9dPpZ/LvOnAiAOg1wLJiQL6sPXNPf5nWvFPQJaFC0GEvTrcdVvT5ERfw=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.13.tgz_1513184760773_0.47016807505860925"},"directories":{}},"1.0.0-beta.14":{"name":"qwebs-http","version":"1.0.0-beta.14","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"35f6a78e7804126189da7f4a92cdb3f21c8a5dc7","_id":"qwebs-http@1.0.0-beta.14","_shasum":"76eb6420bb3f16a3358c0bcfc63a8970f0be1877","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"76eb6420bb3f16a3358c0bcfc63a8970f0be1877","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.14.tgz","integrity":"sha512-pw0I2FEfVzTbpk6tC2WdgGYgBlMnxDmkfB2uiHIal1pSG0go5GvjGjGibzhY8gNVNplCX5iGrR1qF630Jwz6EA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCd0zAFzDrHKekxxeCRNCeNghdsliZvhFsFJSf+0bHx5QIgJ2fIQb+Jj64X9KgvUt7BxgdiW8Jb/z8ppBhn2KshsXY="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.14.tgz_1513184896413_0.007194588193669915"},"directories":{}},"1.0.0-beta.15":{"name":"qwebs-http","version":"1.0.0-beta.15","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"c0e1b31f24aa16180852f8b9682663a4ac37bae3","_id":"qwebs-http@1.0.0-beta.15","_shasum":"1f87d3be58b6d9f205449c6d1c60c6058502d976","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"1f87d3be58b6d9f205449c6d1c60c6058502d976","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.15.tgz","integrity":"sha512-jIoDbGubxabGNXo8WJ6YyN9OT6MUoRLY5NSP5wWrn6qjNDGj2E/mCEVzoscCk2iFpc9C5jZIMSShg7La7YvTRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEk/FGjP+Qx1Jy1NzBiL3bfLM3jcs1wqIyxBi5tzD5MnAiAFRpDeB8BmL1k0pcJFM2uuROQdw3v/Pa19F9agkEujxQ=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.15.tgz_1513267821084_0.09885531640611589"},"directories":{}},"1.0.0-beta.16":{"name":"qwebs-http","version":"1.0.0-beta.16","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"9cbf51db119e0d4de96dfed01da5b2d8ad6fcdc4","_id":"qwebs-http@1.0.0-beta.16","_shasum":"4726d4c1c491a6b83ca60d84e1b85496c37ebae8","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"4726d4c1c491a6b83ca60d84e1b85496c37ebae8","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.16.tgz","integrity":"sha512-TzbZop2wZgqiRVrSjKcFuLmVfebyaZxC33oOxP/+V9d98Cxg3yvRY/ma43xpGrH6evYZy6KH8IMnpuX6q7OZ4Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE7mWkYwV+l54uZsmB0buCkM1Yi+ete5XonmTJfuntYGAiADrkEC4rKidpP9pbFRcFTVWr11XGfhlZ43iTONdXkd4g=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.16.tgz_1513268551651_0.06336057907901704"},"directories":{}},"1.0.0-beta.17":{"name":"qwebs-http","version":"1.0.0-beta.17","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"b0de9bbb22c11090d2a3f78dfe42e5a39e9a7e55","_id":"qwebs-http@1.0.0-beta.17","_shasum":"24a552bf7b173f3c5ec06f47d2e7eb542d200b00","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"24a552bf7b173f3c5ec06f47d2e7eb542d200b00","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.17.tgz","integrity":"sha512-sVgI9Rle3PA1kTx8HKHTZTol0IWx/n9j6IrJzeG5/5EwNsAYynDYdH/CX/KF6ztab7EBPljRIpk7XqEqSP7Xkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF2e34GQP6Giu6nGcABQNj5By+bHKm1VUp1zKUjXtKUoAiAucFJtNzEGUQ7xl2SABi4GdbTEXyuhQr7nkGSOxLv0aQ=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.17.tgz_1513356184666_0.5642147460021079"},"directories":{}},"1.0.0-beta.18":{"name":"qwebs-http","version":"1.0.0-beta.18","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"b43ef90a1a285278605db8c648a45ed250b28f85","_id":"qwebs-http@1.0.0-beta.18","_shasum":"6114da6d4ff7b079c9234c7b7c941b9f9c8127c7","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"6114da6d4ff7b079c9234c7b7c941b9f9c8127c7","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.18.tgz","integrity":"sha512-nTRFsg1IGUCEBHa4eTFPhcEWDC8R2Akw5a5AbUHVDjSIjGJxFvJTeW1vN+LpMhHNbznuNXWJYbpXv0FkhEzjIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4YX1E9AiiYqORbnOT/zGwQim0Dv+daLnrdKRvXWGCpQIgMbMdFbyqyDU9wJDNBunrKvFMphVrMNxtF0K7aDqz6uM="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.18.tgz_1513613879194_0.9898939949925989"},"directories":{}},"1.0.0-beta.19":{"name":"qwebs-http","version":"1.0.0-beta.19","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"7e893a5171df187a5e48baa962096324684a0367","_id":"qwebs-http@1.0.0-beta.19","_shasum":"61c37ab62eecb1eaea8313b2d1a7a52a42440081","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"61c37ab62eecb1eaea8313b2d1a7a52a42440081","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.19.tgz","integrity":"sha512-t/UPAIz3rFRRiV+JoK4wnBb9y/pImOzDSbVIuUxOz82xwNumN3v+3HUO5mDB4STfUfERQJgr2U334kKnJlkTUw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2bmXxZpj5UW8uCzLX6ynyuUywhFPR3FSQb6BXMZBFFQIgSbNWW6Z7D1/5pKqs8wMqIS7h0YWBPeC5szHNQf2rzgE="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.19.tgz_1513698320619_0.7980949461925775"},"directories":{}},"1.0.0-beta.20":{"name":"qwebs-http","version":"1.0.0-beta.20","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"4dc04ec35c9170b5748f39705e4522505c5c167b","_id":"qwebs-http@1.0.0-beta.20","_shasum":"ab1cd18bb41035cefeb0fb13cbc4fde455e4dfae","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"ab1cd18bb41035cefeb0fb13cbc4fde455e4dfae","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.20.tgz","integrity":"sha512-M3ht1AVNyTon5vw4IF9O0/hOCQGN6rFZNIfXdLRsCkOtefrQ8euzSUvmMcfmTNQoPkrf9iVJq84FbsI+PlNUKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIATaG9Z991OyBWl+zC29s3DHf1rRGBTe9GW9IV6AuqiaAiEA0PcjXLXdeNZc7Mc4lhYkVqhot2Ec4LjtkTyw92Xy/3E="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.20.tgz_1513953865220_0.11761366249993443"},"directories":{}},"1.0.0-beta.21":{"name":"qwebs-http","version":"1.0.0-beta.21","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"3b06a7095f6f6abcca61d9424d9ed5b8a101eb5e","_id":"qwebs-http@1.0.0-beta.21","_shasum":"7851d403954ea8b1048f28939c37b272dfc3b413","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"7851d403954ea8b1048f28939c37b272dfc3b413","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.21.tgz","integrity":"sha512-Rx8FRRKdjIMG6q7a7kfC/hTB6kFVdcnGnA6TOR/ArjFYoHqtSNuVMbK5UsoUHumiYHMARlLTENl432VNDNv3uw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBYKfuSr3Qp86Idk4SNxQp7lQYSq3UsEtQjElquTeM8tAiEA52bqbV8kS7ikiR1uA6Wad0qhM+8Zb2vPTImqYhsOCKQ="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.21.tgz_1513959185023_0.11132591916248202"},"directories":{}},"1.0.0-beta.22":{"name":"qwebs-http","version":"1.0.0-beta.22","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"10a2f09026acc76e2b83baebb5856d502f7359f0","_id":"qwebs-http@1.0.0-beta.22","_npmVersion":"5.4.2","_nodeVersion":"8.8.1","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"integrity":"sha512-9GM7jwQFG2lKPEj6PvWtAXgRmUFlMnttNxz4NuVmX/fR9dZ2WMWI7uVOVv/dQbpS8si4O62uNyYW7PIdNEo9lg==","shasum":"03f2df0145ba54472f6e19c367facd04edda3ec9","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.22.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDwj+Uo5nFgg+QIpDR+dZBzDH1TYeMr1lB32STV8i/D9AiAZHh7VyAXxetzCX4ySU/zPz8s8eT44M/0sk8zQf4GY6A=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.22.tgz_1515245811459_0.12736106594093144"},"directories":{}},"1.0.0-beta.23":{"name":"qwebs-http","version":"1.0.0-beta.23","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"7736fa5b7a857514c44eac29d6b0653f428058be","_id":"qwebs-http@1.0.0-beta.23","_shasum":"26853a071f0b994309dd5b5d2aa7f3947dcbb000","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"26853a071f0b994309dd5b5d2aa7f3947dcbb000","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.23.tgz","integrity":"sha512-yF51FInvlh+zf/dyaoA1c9OjvwFAEyqfd1iwn4A692j16exABBrQ2sBbtso7sIMA7ogd031QTKwclBIPGo9oqQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQBfzt56sduQFUpf6tcx8tFhIGe+KWCqwNkgSIDbyACgIhAK5HPmfxjah13wIrEndpsoH0A+hnkXVtrOcibgQsMndD"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.23.tgz_1516360193173_0.5521741188131273"},"directories":{}},"1.0.0-beta.24":{"name":"qwebs-http","version":"1.0.0-beta.24","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"c0909309b14a3cb43a37011200d1378b557fd3c5","_id":"qwebs-http@1.0.0-beta.24","_shasum":"c81e14c75137eccf2a7471bad9e6d54cfeaae2ad","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"c81e14c75137eccf2a7471bad9e6d54cfeaae2ad","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.24.tgz","integrity":"sha512-4n01MKJKMX3TZgReKlEH/CTO8UUdzQvz1uZh6nbIP8uC766M/7FRT63CNgShrphJ0XdDTR/3BXZRKrPmAcqTZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEVl/9qAbJWveQSFpDd9NgZVq1CD+lEmS7kldZVl+8zzAiEA4rKFjAIFsYIKwplzMskqXNwje2gvFGCQJTRDRmFKmz4="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.24.tgz_1516360694507_0.38782814936712384"},"directories":{}},"1.0.0-beta.25":{"name":"qwebs-http","version":"1.0.0-beta.25","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"74d74eb7a90abf7afd3aa686f4830f5d28891252","_id":"qwebs-http@1.0.0-beta.25","_shasum":"b7e23ce35f4a5153c5197d6c69a74c36b73c4ef9","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"b7e23ce35f4a5153c5197d6c69a74c36b73c4ef9","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.25.tgz","integrity":"sha512-oiFnGVPe4taZVoeX4mfhsEJK/fpXzh7+IMI40ml4mhhNivJyI2d4Pt+gJ4bJtOf6fO5+xyrKOgGBtyl6bxSNVg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDluLsYDK18f/rtw+61JGfoYn7lwcPqWg8cnEInYw4ptQIgKOKZ3JNdKoVdBGEeOIugEDAy117p9l8/BET4bfuk+wU="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.25.tgz_1516382886944_0.4981425660662353"},"directories":{}},"1.0.0-beta.26":{"name":"qwebs-http","version":"1.0.0-beta.26","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"ca7de62f68e400ea9adf63debbc3a651531d1469","_id":"qwebs-http@1.0.0-beta.26","_shasum":"caaaa15255e91ad5e7aa331f963ea9f629b1e794","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"caaaa15255e91ad5e7aa331f963ea9f629b1e794","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.26.tgz","integrity":"sha512-BCmhYrWqMHbYAUPomgEYd+CUpJ3Ro12PNjHIVlm/lY71rxqOFWhD5SpoP6DjG7u8/LRxNHTtAPLDPwUmrlCocg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCw60suaQO5YiBSBfnb0pwFfPBcYTu7+ciqdlb4swfL9gIhAO/ms41W26a7s7+zy0rHIPzuNZJbz9Jk7MM18MNfuBgx"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.26.tgz_1516619706187_0.8886100724339485"},"directories":{}},"1.0.0-beta.27":{"name":"qwebs-http","version":"1.0.0-beta.27","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"02f3e561b876d92912aae1bee43427c1bd62340d","_id":"qwebs-http@1.0.0-beta.27","_shasum":"481b33b6817daa0c050131c3fef6154c7626fe6e","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"481b33b6817daa0c050131c3fef6154c7626fe6e","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.27.tgz","integrity":"sha512-Ok7kg7wn1pJsDImokp/AaJfSPGaXdNd2QaQ+ZKQfGO7zOwdOY5HbFVBugKZhGQlFAHq8XByF3smcjPfKql85zA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDk2zB4ddPqkcGQh7HkOGrpuBWHXTLiwvLjo4E1IsymHwIhAPnqAt3kGDkMuhJLtJ7hI+5MAbuR72V9w7WtyqCky7Dk"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.27.tgz_1516638187633_0.18623626860789955"},"directories":{}},"1.0.0-beta.28":{"name":"qwebs-http","version":"1.0.0-beta.28","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"9703fb889882172c922c6c19ce2310715d0e120a","_id":"qwebs-http@1.0.0-beta.28","_shasum":"9523f0ec6b352a5f5c4a0523a7f801799c0599e9","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"9523f0ec6b352a5f5c4a0523a7f801799c0599e9","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.28.tgz","integrity":"sha512-XJ/5nBErPM7W5i+KVqz8WaU4KZyI9p/EzjMBAtaRFAPJy72S17Lhytl648HatMyB/gVFRL2T1PeFSO9SzVZgGA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQvzvtEnC1E1F+WqPt3Bi3r8TrQBbLS1Qf5Am2pbI90AIgMQ0cNRXMolJEQHD7hX/bu6/Mrepo7s98s0KMEbF4R2I="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.28.tgz_1516638649988_0.9331500774715096"},"directories":{}},"1.0.0-beta.29":{"name":"qwebs-http","version":"1.0.0-beta.29","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"4c0b9fb15178e51e633f568f6b1ad0b58a9e9579","_id":"qwebs-http@1.0.0-beta.29","_shasum":"8ff1f7f41e42e6da351c3e54ff47bf668087c3cd","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"8ff1f7f41e42e6da351c3e54ff47bf668087c3cd","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.29.tgz","integrity":"sha512-PHJVTWixh3u/8Ddafa7pOQIDVXT2jtwsK9c/6SL81ggtd2rqGWfKjiDUdaorvTLZ0jIqMKPvJ9acIDRRKUezJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICDtJN7BJ+zvdFkwpkcAxkUJOoOcrwkgDtFqyfX/cFXvAiB5Gbyve7FhGE/JzTkRJsjysnrm3Jeoi0lrosEeIs8Gqg=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.29.tgz_1516641394455_0.8123322962783277"},"directories":{}},"1.0.0-beta.30":{"name":"qwebs-http","version":"1.0.0-beta.30","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest","through2":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"e1e27d74927e2e55b2b1bad07dda9b60a6c7a0ee","_id":"qwebs-http@1.0.0-beta.30","_shasum":"3da1a5e9b83017ecfe37351e6c471e88b13a705a","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.7.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"3da1a5e9b83017ecfe37351e6c471e88b13a705a","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.30.tgz","integrity":"sha512-uGMjFxpNpMRFWyanW3+LxWQR3Qmt/diHiwLdkUKRja9SAHaP51myINJMABNo0EgQpXzs/ifoT3c39ftSgX8Ehg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuhaDVvn9VZ82+VvYUKTFl5X3hwGi2mayiH/t0IWhQYgIhAMaztKX5LuF41Xg6QiAUX9cVqr1eGcsDWOY2f/DkOEWs"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.30.tgz_1516722555386_0.35211243270896375"},"directories":{}},"1.0.0-beta.31":{"name":"qwebs-http","version":"1.0.0-beta.31","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"5ac45e27feb03783f47e41e527aa97adf458bb70","_id":"qwebs-http@1.0.0-beta.31","_shasum":"a41af9aa161e3057dc22d6a38259e20e5dab8a12","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"a41af9aa161e3057dc22d6a38259e20e5dab8a12","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.31.tgz","integrity":"sha512-Ku1jSr/OvLgxzny+kc3HQBZa4HP+oXPRZTfxy6J0YbcHjrZ4hGsqp3B2vWKwCum/HBkERKVbbMQSHisyMwIYtQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFLM6OQgHr060WarHNl0oRn+N/X1IDoMqBtribtTkBIlAiAyMgmyQtnKEyn2bmynb7/jsdxgQ5ULcLXf3zQKl1cnKg=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.31.tgz_1516809249692_0.41943196626380086"},"directories":{}},"1.0.0-beta.32":{"name":"qwebs-http","version":"1.0.0-beta.32","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"370f183d2bdaa169f6c0a0f7926345be767499a0","_id":"qwebs-http@1.0.0-beta.32","_shasum":"bc555492d839d8fedd5b7259993c21ae1240b8fc","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"bc555492d839d8fedd5b7259993c21ae1240b8fc","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.32.tgz","integrity":"sha512-7qrOt4jJ7QAerJfkTwD30iw4Al/ixGKxcxNCFVZFaRtKCXGnf9/L8DRqglJWlEkey8Cqbt2E+sdGHnAi+MXGnA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVDas3RTFIwfnUQI9JWOmk3c3GCtsVF0lGoB0Z08H68wIgCftYzqHn8XIY8PjvzdOLscDWRZ/l5um83Bw11gFzqPU="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.32.tgz_1517503683574_0.5345096727833152"},"directories":{}},"1.0.0-beta.33":{"name":"qwebs-http","version":"1.0.0-beta.33","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"421faadbac2a35f69f4ee52fe83847dd522adf9c","_id":"qwebs-http@1.0.0-beta.33","_shasum":"f0317b40b0b371a143b85b7cda447324e7016204","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"f0317b40b0b371a143b85b7cda447324e7016204","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.33.tgz","integrity":"sha512-UvckIvA+D87UeL+MvHfhKp3uB/f0bq7rROXCWqOMnUyrqRfAeBEJvQ7XlR42raDztqd4gTXUIrl2b3zKiZLzJg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHAi7ZRojHSpotQtHk85ePPEjG43ZiMHGv4ISy5AO7x7AiEAmU7Wn8Y/OjozTds12DHYmI1S/ayYvorHd1g0NPBO2v8="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.33.tgz_1517505991584_0.6432810220867395"},"directories":{}},"1.0.0-beta.34":{"name":"qwebs-http","version":"1.0.0-beta.34","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"a55ff7df62240d2e6038ff518d5e7cb350671dfa","_id":"qwebs-http@1.0.0-beta.34","_shasum":"d56ca208d4194daa3c3e0e98a37cb8e7e951a9d6","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"d56ca208d4194daa3c3e0e98a37cb8e7e951a9d6","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.34.tgz","integrity":"sha512-DHpOfK4idaHdqDpxCbD+k/+xjoOtrc/Gm6zpEtCSmCEHGoFrWRUNVACKCq6Y4LWFbznuds5vINQ2GYe3we5bFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHZHt9kWoriOnkl1oiMKrdjgJBkoYAqmLx8z9TEaUdi5AiAvS7C6X+rE3Xbl3d3ApkFEzGadnh3gC2OY0MorMGDkgQ=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.34.tgz_1517584423490_0.6973798617254943"},"directories":{}},"1.0.0-beta.35":{"name":"qwebs-http","version":"1.0.0-beta.35","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","oups":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest","jwt-simple":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"0c4ed283d0f54a0c376df3ff467475a88f73c6d9","_id":"qwebs-http@1.0.0-beta.35","_shasum":"28bcb9b53e58c6e1a856a726d7579c32fdc05528","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"28bcb9b53e58c6e1a856a726d7579c32fdc05528","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.35.tgz","integrity":"sha512-LsOzMpSu3MiNVg7p/SpqVczezclJ1E4+Ls8au78ajjdnPMM8qMQJzkFnvH3T9DZ4U3Okv3KuRsEqFX/PvukfhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIApCKMGfwjTgG/xRn74QqoltkOdzOWcWtvj/m4f8kxBgAiEAn3Dkl/cWvwiDcBY9h/pNig75iLsSTlO9t5rV2JG+eMI="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http-1.0.0-beta.35.tgz_1517908753602_0.3838679308537394"},"directories":{}},"1.0.0-beta.36":{"name":"qwebs-http","version":"1.0.0-beta.36","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"^3.0.0","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"fa3c2a7108cb74bd0bd14f4a30bb74ecac351c29","_id":"qwebs-http@1.0.0-beta.36","_shasum":"ef157ffcdd55f524dd0f2c705e35eac5a83afe93","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"ef157ffcdd55f524dd0f2c705e35eac5a83afe93","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.36.tgz","fileCount":60,"unpackedSize":1299480,"integrity":"sha512-WQhVcXEnHxEZI8AQijzmV+27uXwu+A5ioxYjdD0ckYQxcmXhoxbuuCWA4P1X8a9joZWgPfu9Sm7rZO5gqWwJgA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGgmi/RPnAZrLCDfY33MxXhMbvwc3gaPY7I8sK+LVDKlAiA2ToMBEjPiBekLOBIgtJZyAGcvgW+9WUNzv1bcMNcK9A=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.36_1518082226581_0.4507037055784917"},"_hasShrinkwrap":false},"1.0.0-beta.37":{"name":"qwebs-http","version":"1.0.0-beta.37","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"^3.0.0","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"49776eb1d80da0364f3cd7bf34c9bfb5cfeeb4a4","_id":"qwebs-http@1.0.0-beta.37","_shasum":"8f594e3fb811cbc3a43f8301b5bf454f03747db6","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"8f594e3fb811cbc3a43f8301b5bf454f03747db6","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.37.tgz","fileCount":60,"unpackedSize":1301113,"integrity":"sha512-fa9PpMV32+ZU/BnhsFEJfixLzJfHA+fUijM1TuCqLNI7kDyQGVVRPrcamsynEtOvGKr+WTMBnOszpLJ2f77RAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDD48NcWML8N7Zqc9qDdhW+P8ULp/9SQHnw66BrvYJr1AIhAPZ5wzN/RczdB6inUpSelaKAH2jT8AO0dN1MoSKrvp0s"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.37_1518615632206_0.8569997757462193"},"_hasShrinkwrap":false},"1.0.0-beta.38":{"name":"qwebs-http","version":"1.0.0-beta.38","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"github:BenoitClaveau/pump","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"9865bf571f23793c3799cb8f3ed544cf7ac7a418","_id":"qwebs-http@1.0.0-beta.38","_shasum":"20ea568a8ff15d1339ae75209eb18871e93a800e","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"20ea568a8ff15d1339ae75209eb18871e93a800e","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.38.tgz","fileCount":60,"unpackedSize":1301132,"integrity":"sha512-kHD6ivMQpVTTp1zs3Yzc3Y69efYzNiZFAUbJu7p5AtYjREj+wa4wkIr/gmWxAxkJPNhkwyxBqdsVy99bh3H+Gw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbD0HlBOgHYBBWr6pqEzMmS3skvQPiTXG2V7HseEEojwIhAMD1NBJNynqFeQYoQEkL6i/tMajM3LmOBSYM015/T8n0"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.38_1518616256270_0.8962696055414834"},"_hasShrinkwrap":false},"1.0.0-beta.39":{"name":"qwebs-http","version":"1.0.0-beta.39","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"70e6a776449a40b03be2b9c4b01f59928dd5c620","_id":"qwebs-http@1.0.0-beta.39","_shasum":"abb65fac0ba27d16ef93e923023dbafd18a22428","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"abb65fac0ba27d16ef93e923023dbafd18a22428","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.39.tgz","fileCount":60,"unpackedSize":1302716,"integrity":"sha512-eFPQR26IoZfc+Qb4JisptyPKfRG5j4JkRJR1NSBUbwPr/sWmAzZc0JjxGYlmDMMCVrKiB5ENrhKxh4wqA6pY+A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAJj+qpTZO0jXLa5STKM8prdOt9qP4y4p2tPo7tUVpvgIhAN8L4xHvkr17nk3XwLCT0dLqcjdNkmXs7QPGffHlInQN"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.39_1518690478216_0.7742576779409893"},"_hasShrinkwrap":false},"1.0.0-beta.40":{"name":"qwebs-http","version":"1.0.0-beta.40","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"90fc1695679d87398810c438ab4b8fcf0e38f372","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","_id":"qwebs-http@1.0.0-beta.40","_shasum":"dc771510aa9b8efc8d39aca442ac1630d34b1265","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"dc771510aa9b8efc8d39aca442ac1630d34b1265","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.40.tgz","fileCount":60,"unpackedSize":1302531,"integrity":"sha512-6IEO2CHAC5Ursxh0wbpJyReSGeVfE2kuqk86fXBO0D6h5iflRjuvmkVnS0BwXNZIhfdIIt7x28bYZp/H9Kuq6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBUzHHYTRtU2FuikQMlnCsqqrE0ltOg6UKvWUDUlDdswIgceRvpb0YqgFnzOp4WnLangfs7jTgU1wvlCUlPla/eSU="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.40_1518771854007_0.5271405593524223"},"_hasShrinkwrap":false},"1.0.0-beta.41":{"name":"qwebs-http","version":"1.0.0-beta.41","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"b4d57183d779d8ea803b84c1b0673beb75df5ce5","_id":"qwebs-http@1.0.0-beta.41","_shasum":"de919bb5baff9fa4ba7bdab19547220b18da71cc","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"de919bb5baff9fa4ba7bdab19547220b18da71cc","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.41.tgz","fileCount":60,"unpackedSize":1302563,"integrity":"sha512-kx0yFzxims4qRrqFKyY8kGRpORDgVLi7jk+tb+jxD96PHWm5FCQ7jBpHW/KdkUv5oK00ANQkA6C0SIrnkFCQMQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9FW963iosV9rgeo+eFUdv9Rv47P0LCtTnVZisk2JJlwIgIa5gchyghwyh1avQtSMzaepppkfsfUuJSPSii0MKoQw="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.41_1519818634411_0.4129364630680945"},"_hasShrinkwrap":false},"1.0.0-beta.42":{"name":"qwebs-http","version":"1.0.0-beta.42","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"0615a35dbe7efdba226772269240c015abd3ab05","_id":"qwebs-http@1.0.0-beta.42","_shasum":"b7575793ba775a5bc42aa305d4fa183e0e34cc2d","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"b7575793ba775a5bc42aa305d4fa183e0e34cc2d","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.42.tgz","fileCount":60,"unpackedSize":1303374,"integrity":"sha512-RFC5xubAhdlUjtqJhzydBWTZNWuDShokWn7cR7f8hMB707TV+axfOSy/sWC5tQNSaZYGXSei78aYz+oqJn/zbw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCs/hJrMXokwlJ++kucw8eJ5ngoY5tFBjksEyr+97ZtxAIhAJP06AB9yeqMpjXtZJAO909T65ZuO2iytpsuupKvCITk"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.42_1519827073898_0.05137023818294417"},"_hasShrinkwrap":false},"1.0.0-beta.43":{"name":"qwebs-http","version":"1.0.0-beta.43","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"4f5edc3b6f092c2bca651b75cb1b2ef815a2432e","_id":"qwebs-http@1.0.0-beta.43","_shasum":"8fef57ad78ff94278d1501873589fee73789976e","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"8fef57ad78ff94278d1501873589fee73789976e","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.43.tgz","fileCount":60,"unpackedSize":1302574,"integrity":"sha512-gc8hus9Z9q/RgL0nk8+v+sS/ArKHf9t/fo7OfdIVXHRGA7kbY69SqQ4CSi5fzBgmPKuorsX7UU7hBeGoxPu2vg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGd6t86DCUXPi5KZWJMSW+jW973EnKVXFVWIQIiZyij9AiEAgHIpu1h9RzeHieJphbOx4qICFzs6U4cxQPFxWjJ5q6k="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.43_1519835296460_0.9312659385978679"},"_hasShrinkwrap":false},"1.0.0-beta.44":{"name":"qwebs-http","version":"1.0.0-beta.44","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"5cc7e963aa80e86090f2674d375f5c73e928195c","_id":"qwebs-http@1.0.0-beta.44","_npmVersion":"5.4.2","_nodeVersion":"8.8.1","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"integrity":"sha512-/cmC2WOXt9FYyIXLSDJztkwzv0iUgSxOnbrXnApTd4Ss8jL0REKbvArpQKrNU9oF4R5otGI+kghZ3XoSnTDmmQ==","shasum":"24f0c2f197e6f1b6f0599c55500b26b23ceef7ec","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.44.tgz","fileCount":25,"unpackedSize":58056,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoR5iPTJMRBO/c6hDav9dP3lc5LIoC4HgKYTJ/f7sQpAIhANzuTlUcyPzC3sJYB2AUrq5UI1wWK3cvrGkt3RjBpT45"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.44_1519853407889_0.694766102866974"},"_hasShrinkwrap":false},"1.0.0-beta.45":{"name":"qwebs-http","version":"1.0.0-beta.45","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"791a896b45d192a69ac8262b899203cef8ef6ce7","_id":"qwebs-http@1.0.0-beta.45","_shasum":"612f8119abbb48b52d27fa65d236dabda04e8f8a","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"612f8119abbb48b52d27fa65d236dabda04e8f8a","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.45.tgz","fileCount":60,"unpackedSize":1304443,"integrity":"sha512-eaM1vf+w2+wkLTKFR/qxwjS6z7X4CPRWoS5Pf2u5i6QClsjkAOfT7DT7eVB1Ci5csXtRrqt51/EV79AroGwHJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFk+ZP9ZQYUtVm9vuaavNy5ZPc12CN7nAYRDQeNj5tbvAiAZsy7zSaxQvKMHZPLF/23ej573YkjB3JK5TGJkkZu0Ug=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.45_1519986322414_0.08056475263014518"},"_hasShrinkwrap":false},"1.0.0-beta.46":{"name":"qwebs-http","version":"1.0.0-beta.46","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"0ac407496ff4f426e83a2c7dd283f5ac05950c57","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","_id":"qwebs-http@1.0.0-beta.46","_shasum":"aff8e9c451655671ad104ea400f8ebe671d2ea6a","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"aff8e9c451655671ad104ea400f8ebe671d2ea6a","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.46.tgz","fileCount":60,"unpackedSize":1304367,"integrity":"sha512-G/ghCrFYale4UcmhY+N5LHdmk+k1yeL1zHfp1tz5sI8fUvKWOqqGaqTZEM+IiNn80EqcXE9kkEVqBtOCnLa40A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTO6PaWpP3aS5q5EZhRfYbey9K37cW5Df1JS2+q5LK4wIgQXD2DOyMuAmxfUNMlHQ5kniSRYAd7UItc4NmK1ejC5A="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.46_1519991150928_0.5883689190868624"},"_hasShrinkwrap":false},"1.0.0-beta.47":{"name":"qwebs-http","version":"1.0.0-beta.47","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"b1358ac059840c6ce24081b8fe373a33fa9a318c","_id":"qwebs-http@1.0.0-beta.47","_shasum":"07d62de2f95b7401733491d7c1d4327dcf4b9fc0","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"07d62de2f95b7401733491d7c1d4327dcf4b9fc0","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.47.tgz","fileCount":60,"unpackedSize":1304371,"integrity":"sha512-KcuX3qv1cYkrCT+UoSZiAz+DoGQsPVEaqc99piqVBjBo0CaFFrjQkbZZdmwfSmNUx1y6+MPFXekdiPlWGhIxyQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfUfzvMpStMzSpH0M4B3QccVb2QZtWw2yG+KNilt0tiwIhAM9gEkpd6dg5Tl0XTbQoD6I6WupOL/oTfPlodBgSYNpS"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.47_1519991935601_0.6538897475608816"},"_hasShrinkwrap":false},"1.0.0-beta.48":{"name":"qwebs-http","version":"1.0.0-beta.48","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"f30195a915a65c3f3988ad7dffbea26a612730f1","_id":"qwebs-http@1.0.0-beta.48","_shasum":"8b652d861b25f238b4f93e394a30988801cc756d","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"8b652d861b25f238b4f93e394a30988801cc756d","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.48.tgz","fileCount":60,"unpackedSize":1304552,"integrity":"sha512-P568Bj4B3AJ0e7vqBJCISbvIH8ACjCOU+PEcJoB1EWgsJTFMQLa/Hm5pop9YXoLuZoP1SobMIx377pWvebPOPw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID8PzSC+5BYZ4GHqeUZe0tyapF3FnkelWkhOApbjWn6OAiBsPYrjbhJQoCOHsJ0YYRzCuexq+Hs43nFgrKA2nPXPtQ=="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.48_1519998432071_0.3443764084537313"},"_hasShrinkwrap":false},"1.0.0-beta.49":{"name":"qwebs-http","version":"1.0.0-beta.49","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"d9cbc151ca2616ba463edc7f41706859d0245cc3","_id":"qwebs-http@1.0.0-beta.49","_shasum":"e2e3d805b85f3b9a0626ab7e5498bcf29dd48aab","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"e2e3d805b85f3b9a0626ab7e5498bcf29dd48aab","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.49.tgz","fileCount":60,"unpackedSize":1304058,"integrity":"sha512-CZN1lmuNqiQjwMFZic4GpFsG4gnH6jLOtbf4rWMHswggao7Bh1B4F3DOnFLglwENDabNSq2/pox4tAKHW8sSXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBizrcCec3UKSox1b0U62r3Wf/6+1C2Ie8XlV23BsogwIhAIrYQurlOFE+CHWS+mSQjFLp4gFEyIRQE+dKXW5tRw8K"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.49_1520250503211_0.3494067324597674"},"_hasShrinkwrap":false},"1.0.0-beta.50":{"name":"qwebs-http","version":"1.0.0-beta.50","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","gitHead":"1342642e0b3c59b12d115fcc8ccd0c9118f76afc","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","_id":"qwebs-http@1.0.0-beta.50","_npmVersion":"5.4.2","_nodeVersion":"8.8.1","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"integrity":"sha512-1QL79I63bqNMcjwoa4yhucb7pYXuxwsIBHo37pPph6uvENrwmRTJRsX8AmTPl4TyVdc70fCDbZ1JvosSXti6/w==","shasum":"6b1a53331255ce3b3c1272399f44ce9acf325d7d","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.50.tgz","fileCount":25,"unpackedSize":60986,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAV7vnzvJcuAOxuBQtC6iIS5IIs6VsrrPPQDP9eHEyHPAiEAnFAFxBuqhhIP9pHitWy+JYWZ/1UGTQeNATZLq2GO7z4="}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.50_1520765970277_0.8982836410063681"},"_hasShrinkwrap":false},"1.0.0-beta.51":{"name":"qwebs-http","version":"1.0.0-beta.51","description":"Http/https server for Qwebs","main":"index.js","dependencies":{"busboy":"latest","chalk":"latest","file-type":"latest","isitforme":"latest","jwt-simple":"latest","oups":"latest","pump":"latest","qwebs":"^1.0.0-beta.3","uuid":"latest","vinyl":"latest"},"devDependencies":{"JSONStream":"latest","coveralls":"latest","expect.js":"latest","istanbul":"latest","mocha":"latest"},"scripts":{"test":"node node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js","test-cover":"istanbul cover node_modules/mocha/bin/mocha --recursive tests/**/*.spec.js"},"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"keywords":["https","qwebs","config","webserver","promise"],"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","readme":"# Qwebs\r\n Web application framework with native promise, dependency-injection and bundle.\r\n\r\n [![NPM][npm-image]][npm-url]\r\n [![Build Status][travis-image]][travis-url]\r\n [![Coverage Status][coveralls-image]][coveralls-url]\r\n [![NPM Download][npm-image-download]][npm-url]\r\n [![Dependencies Status][david-dm-image]][david-dm-url]\r\n\r\n Discover our [starter kit](https://www.npmjs.com/package/qwebs-starter-kit-polymer) with [Polymer](https://www.polymer-project.org/).\r\n\r\n# Features\r\n\r\n  * [Promise](#promise) \r\n  * [Separate services](#service) \r\n  * [Dependency injection](#di) \r\n  * [Object oriented programming (OOP)](#oop) \r\n  * [Compression & minification](#bundle) \r\n  * [0 disk access at runtime](#disk) \r\n  * [Bundle](#bundle) css, [sass](https://www.npmjs.com/package/node-sass)\r\n  * [Configuration](#config)\r\n  * [Security](https://github.com/shieldfy/API-Security-Checklist)\r\n\r\n# Installation\r\n\r\n```shell\r\nnpm install $qwebs --save\r\nnpm install $qwebs-http --save\r\n```\r\n\r\n## Create a service.js\r\n\r\n```service.js\r\n\"use strict\";\r\n\r\nclass Service {\r\n\tconstructor() {\t\r\n};\r\n\r\nindex(request, response) {\r\n let content = {\r\n  text: `hello ${request.params.name}`\r\n };\r\n return response.send({ request: request, content: content });\r\n};\r\n\r\nexports = module.exports = Service;\r\n```\r\n\r\n## Define services.json\r\n\r\n```services.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$http\", \"location\": \"qwebs-http\"},\r\n        { \"name\": \"$service\", \"location\": \"./service\"}\r\n    ]\r\n}\r\n```\r\n\r\n## Create config.json\r\n\r\n```config.json\r\n{\r\n    \"services\": \"./services.json\",\r\n    \"http\": {\r\n        \"port\": 3000\r\n    }\r\n}\r\n```\r\n\r\n## Enjoy\r\n\r\nCreate a server.js\r\n\r\n```server.js\r\n\"use strict\";\r\n\r\nconst Qwebs = require(\"qwebs\");\r\nnew Qwebs().load();\r\n```\r\n\r\nRun server on http://localhost:3000\r\n\r\n```shell\r\nnode server.js\r\n```\r\n\r\n# Routing\r\n\r\nOur goal is to find the final route as fast as possible.\r\nWe use a tree data structure to represent all routes.\r\n\r\n  * get(route, service, method)\r\n  * post(route, service, method)\r\n  * put(route, service, method)\r\n  * patch(route, service, method)\r\n  * delete(route, service, method)\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/info.es6\"}\r\n    ],\r\n    \"locators\": [\r\n        { \"get\": \"/user/:id\", \"service\": \"$user\", \"method\": \"get\" },\r\n        { \"post\": \"/user\", \"service\": \"$user\", \"method\": \"save\" }\r\n    ]\r\n}\r\n```\r\n\r\n```or in javascript\r\nqwebs.get(\"/user/:id\", \"$users\", \"get\"); \r\nqwebs.post(\"/user\", \"$users\", \"save\");\r\n...\r\n```\r\n\r\n# Services\r\n<a name=\"service\"/>\r\n\r\nQwebs is deigned for POO.\r\nCreate service, define a route and attached them in routes.json.\r\nQwebs has an dependency injector for easier integration. \r\n\r\n```service.js\r\nclass ApplicationService {\r\n    //$config service is automatically injected\r\n    constructor($config) {\r\n        if ($config.verbose) console.log(\"ApplicationService created.\");\r\n    };\r\n\r\n    //send javascript object\r\n    get(request, response) {\r\n        let content = { message: \"Hello World\" };   \r\n        return response.send({ request: request, content: content });\r\n    };\r\n\r\n    //send stream\r\n    stream(request, response, reject) {\r\n        let stream = fs.createReadStream('file.txt')\r\n                       .on(\"error\", reject)           //reject Promise\r\n                       .pipe(new ToUpperCase())       //transform\r\n                       .on(\"error\", reject)           //reject Promise\r\n        return response.send({ request: request, stream: stream });\r\n    };\r\n};\r\n\r\nexports = module.exports = ApplicationService;\r\n```\r\n\r\n<a name=\"di\"/>\r\n## Dependency injection\r\n\r\nJust declare the service name in your constructor.\r\n\r\n```services/user.js\r\nclass UserService {\r\n    //Config service wil be created as a singleton and injected when UserService will be created\r\n    constructor($config)\r\n```\r\n\r\nQwebs will create your service with its dependencies.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$user\", \"location\": \"../services/user\"}\r\n        ...\r\n```\r\n\r\n```on server.js\r\n//server.js\r\nqwebs.inject(\"$user\", \"./services/user\");\r\n```\r\n\r\n<a name=\"response\"/>\r\n## Response\r\n\r\nHttp response are automatically extended to compressed with Gzip or Deflate.\r\n\r\n  * response.send({request, statusCode, headers, content, stream})\r\n    - [request](https://nodejs.org/api/http.html#http_class_http_clientrequest)\r\n    - [statusCode](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1)\r\n    - [headers](http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.2) \r\n    - content: js, html, json, ... *(call response.write(content))*\r\n    - or\r\n    - [stream](https://nodejs.org/api/stream.html) *(call stream.pipe(response))*\r\n\r\nYou could override this default behaviour with POO. Override the default response service and inject the new one in Qwebs.\r\n\r\n<a name=\"oop\"/>\r\n##### How override response.send ?\r\n```services/my-response.js\r\n\"use strict\";\r\n\r\nconst ResponseService = require(\"qwebs/lib/services/response\");\r\n\r\nclass MyResponseService extends ResponseService {\r\n    constructor() {\r\n        super();\r\n    };\r\n\r\n    send(response, dataToSend) {\r\n        return new Promise((resolve, reject) => {\r\n            if (dataToSend == undefined) reject(new Error(\"No data.\"));\r\n\r\n            dataToSend.headers = data.headers || {};\r\n            dataToSend.headers[\"Cache-Control\"] = \"private\";\r\n            dataToSend.headers[\"Expires\"] = new Date(Date.now() + 3000).toUTCString();\r\n            return super.send(response, dataToSend).then(resolve).catch(reject);\r\n        });\r\n    };\r\n};\r\n\r\nexports = module.exports = MyResponseService;\r\n```\r\n\r\nThen replace $response service in $injector.\r\n\r\n```routes.json\r\n{\r\n    \"services\": [\r\n        { \"name\": \"$response\", \"location\": \"../services/my-response\"}\r\n    ]\r\n}\r\n```\r\n\r\n```or server.js\r\nqwebs.inject(\"$response\", \"./services/my-response\");\r\n```\r\n\r\n<a name=\"disk\"/>\r\n## Avoid disk access at runtime\r\n\r\nAll assets are loaded in memory at startup.\r\nUploaded images are not saved in temporary files. $qjimp service is designed to read, manipulate image stream.\r\n\r\n<a name=\"bundle\"/>\r\n## Bundle (bundle.json)\r\n\r\nYou could create your own css or js bundle without WebPack.\r\nQwebs includes a [Sass](https://www.npmjs.com/package/node-sass) preprocessor. You don't need to compile your sass via an external program.\r\n\r\n```bundle.json\r\n{\r\n    \"/app.js\":[\r\n        \"bower_components/angular-material/angular-material.js\",\r\n        \"bower_components/angular-route/angular-route.js\",\r\n        \"bower_components/angular-aria/angular-aria.js\",\r\n        \"bower_components/angular-sanitize/angular-sanitize.js\",\r\n        \"bower_components/angular-i18n/angular-locale_fr-fr.js\",\r\n        \"bower_components/angular-animate/angular-animate.js\",\r\n        \"web/app.js\"\r\n    ],\r\n    \"/app.css\":[\r\n        \"assets/mixins.scss\",\r\n        \"bower_components/angular-material/angular-material.css\",\r\n        \"assets/master.scss\"\r\n    ]   \r\n}\r\n```\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <link rel=stylesheet type=\"text/css\" href=\"/app.css\">\r\n    </head>\r\n    <body>\r\n        <script src=\"/app.js\"></script>\r\n    </body>\r\n</html>\r\n```\r\n\r\n\r\n<a name=\"promise\"/>\r\n## Promise\r\n\r\n  * Easier to read\r\n  * Easier to maintain in the future\r\n  * Easier error handling\r\n\r\n## Services\r\n\r\n  * $config: your configuration.\r\n  * $qwebs: qwebs instance.\r\n  * $injector: resolve services at runtime.\r\n  * $responseProxy: extand http.ServerResponse.\r\n  * $response: default response extension.\r\n  * $qjimp: convert and manipulate images.\r\n  \r\n## Others Services\r\n  \r\n  * [$http](https://www.npmjs.com/package/qwebs-http)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$http-to-https](https://www.npmjs.com/package/qwebs-http-to-https)\r\n  * [$mongo](https://www.npmjs.com/package/qwebs-mongo)\r\n  * [$authentication](https://www.npmjs.com/package/qwebs-auth-jwt)\r\n  * [$https](https://www.npmjs.com/package/qwebs-https)\r\n  * [$nodemailer](https://www.npmjs.com/package/qwebs-nodemailer)\r\n  * [$bitbucket](https://www.npmjs.com/package/qwebs-bitbucket-deploy)\r\n  * [$aws-s3](https://www.npmjs.com/package/qwebs-aws-s3)\r\n  * [$aws-ses](https://www.npmjs.com/package/qwebs-aws-ses)\r\n  * [aws api gateway](https://www.npmjs.com/package/qwebs-aws-api-gateway)\r\n\r\n## Examples\r\n\r\nTo run our examples, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd exemples/helloworld\r\n$ node server.js\r\n```\r\n\r\n## Test\r\n\r\nTo run our tests, clone the Qwebs repo and install the dependencies.\r\n\r\n```bash\r\n$ git clone https://github.com/BenoitClaveau/qwebs --depth 1\r\n$ cd qwebs\r\n$ npm install\r\n$ cd tests\r\n$ node.exe \"../node_modules/mocha/bin/mocha\" .\r\n```\r\n\r\n[npm-image]: https://img.shields.io/npm/v/qwebs.svg\r\n[npm-image-download]: https://img.shields.io/npm/dm/qwebs.svg\r\n[npm-url]: https://npmjs.org/package/qwebs\r\n[travis-image]: https://travis-ci.org/BenoitClaveau/qwebs.svg?branch=master\r\n[travis-url]: https://travis-ci.org/BenoitClaveau/qwebs\r\n[coveralls-image]: https://coveralls.io/repos/BenoitClaveau/qwebs/badge.svg?branch=master&service=github\r\n[coveralls-url]: https://coveralls.io/github/BenoitClaveau/qwebs?branch=master\r\n[david-dm-image]: https://david-dm.org/BenoitClaveau/qwebs/status.svg\r\n[david-dm-url]: https://david-dm.org/BenoitClaveau/qwebs\r\n","readmeFilename":"README.md","gitHead":"89df7ecb83952880c74bf3fa8ec81d3892bb549e","_id":"qwebs-http@1.0.0-beta.51","_shasum":"a599548df289b08e0738719591b56d32bae17192","_from":".","_npmVersion":"4.6.1","_nodeVersion":"9.4.0","_npmUser":{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"},"dist":{"shasum":"a599548df289b08e0738719591b56d32bae17192","tarball":"https://registry.npmjs.org/qwebs-http/-/qwebs-http-1.0.0-beta.51.tgz","fileCount":60,"unpackedSize":1304858,"integrity":"sha512-OS2JGNDlLr4dsjbU4gtlXYgQZv4pfub0Zqzx662oQpO+ge0TW6uA6emzK0I+c7XTYFfSE+9LCkxa6STJ5J0onw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCw4fb1qrtXrDZYGrEOTo3HtrxeIkWQQk0HWCRt0AP5fAIhAIPaoqcG1vXKj7v5FAiBHS5AgBnMXm7dVUivrEBy8YW5"}]},"maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/qwebs-http_1.0.0-beta.51_1521729146816_0.4756971670448289"},"_hasShrinkwrap":false}},"readme":"","maintainers":[{"name":"benoit.claveau","email":"benoit.claveau@gmail.com"}],"time":{"modified":"2022-06-25T08:20:23.222Z","created":"2017-02-01T10:03:59.101Z","0.1.53":"2017-02-01T10:03:59.101Z","0.1.54":"2017-02-01T10:21:12.766Z","0.1.55":"2017-02-01T10:49:18.174Z","0.1.56":"2017-02-01T11:19:04.408Z","0.1.57":"2017-02-01T13:58:31.127Z","0.1.58":"2017-02-01T14:40:50.601Z","0.1.59":"2017-02-01T15:52:19.315Z","0.1.60":"2017-02-01T17:34:55.744Z","0.1.62":"2017-02-02T13:34:04.469Z","0.1.63":"2017-02-02T22:28:52.752Z","0.1.65":"2017-02-13T09:19:35.193Z","0.1.66":"2017-02-13T11:09:23.578Z","0.1.67":"2017-02-13T17:05:57.948Z","0.1.68":"2017-02-13T17:21:51.762Z","0.1.69":"2017-02-13T17:46:21.094Z","0.1.70":"2017-02-13T17:58:53.794Z","0.1.71":"2017-02-14T09:46:14.600Z","0.1.72":"2017-02-14T10:02:28.030Z","0.1.73":"2017-02-15T10:36:31.877Z","0.1.74":"2017-02-17T13:54:40.522Z","0.1.75":"2017-02-20T15:57:17.210Z","0.1.76":"2017-02-22T14:08:15.512Z","0.1.77":"2017-02-24T08:18:58.749Z","0.1.78":"2017-02-28T17:49:09.865Z","0.1.79":"2017-03-01T09:53:32.192Z","0.1.80":"2017-03-06T08:46:26.319Z","0.1.81":"2017-03-06T09:03:52.303Z","0.1.82":"2017-03-06T10:47:44.221Z","0.1.83":"2017-03-09T14:16:06.612Z","0.1.84":"2017-03-09T14:18:50.635Z","0.1.85":"2017-03-10T17:07:43.814Z","0.1.86":"2017-03-10T17:16:58.281Z","0.1.87":"2017-03-10T17:28:00.293Z","0.1.88":"2017-03-10T17:34:44.126Z","0.1.89":"2017-05-21T20:05:33.985Z","0.1.91":"2017-05-21T20:25:29.194Z","0.1.92":"2017-05-21T21:20:53.738Z","0.1.93":"2017-05-24T21:39:42.056Z","0.1.94":"2017-05-27T17:19:55.117Z","0.1.95":"2017-05-27T21:48:42.502Z","0.1.96":"2017-05-28T21:00:37.261Z","0.2.15":"2017-07-17T20:19:33.627Z","0.2.16":"2017-07-17T20:51:36.693Z","0.2.17":"2017-07-17T21:54:01.691Z","0.2.18":"2017-07-17T21:57:50.351Z","0.3.0":"2017-09-22T09:02:41.451Z","0.3.1":"2017-09-22T09:07:41.001Z","0.3.2":"2017-09-22T09:48:09.826Z","0.3.3":"2017-09-23T16:54:47.471Z","0.3.4":"2017-10-05T09:15:20.673Z","0.3.5":"2017-10-05T09:46:35.754Z","1.0.0-beta.1":"2017-11-27T09:29:51.397Z","1.0.0-beta.2":"2017-11-28T08:48:44.042Z","1.0.0-beta.3":"2017-11-28T11:25:04.457Z","1.0.0-beta.5":"2017-12-04T09:57:45.368Z","1.0.0-beta.6":"2017-12-05T16:05:28.300Z","1.0.0-beta.7":"2017-12-06T15:00:39.846Z","1.0.0-beta.8":"2017-12-07T14:09:29.010Z","1.0.0-beta.9":"2017-12-08T09:23:35.664Z","1.0.0-beta.10":"2017-12-08T16:56:34.396Z","1.0.0-beta.11":"2017-12-11T17:31:37.086Z","1.0.0-beta.12":"2017-12-13T09:24:37.103Z","1.0.0-beta.13":"2017-12-13T17:06:02.753Z","1.0.0-beta.14":"2017-12-13T17:08:18.254Z","1.0.0-beta.15":"2017-12-14T16:10:23.410Z","1.0.0-beta.16":"2017-12-14T16:22:34.095Z","1.0.0-beta.17":"2017-12-15T16:43:05.628Z","1.0.0-beta.18":"2017-12-18T16:18:00.596Z","1.0.0-beta.19":"2017-12-19T15:45:22.075Z","1.0.0-beta.20":"2017-12-22T14:44:26.798Z","1.0.0-beta.21":"2017-12-22T16:13:06.419Z","1.0.0-beta.22":"2018-01-06T13:36:52.494Z","1.0.0-beta.23":"2018-01-19T11:09:53.313Z","1.0.0-beta.24":"2018-01-19T11:18:14.648Z","1.0.0-beta.25":"2018-01-19T17:28:08.894Z","1.0.0-beta.26":"2018-01-22T11:15:07.867Z","1.0.0-beta.27":"2018-01-22T16:23:07.748Z","1.0.0-beta.28":"2018-01-22T16:30:50.139Z","1.0.0-beta.29":"2018-01-22T17:16:34.591Z","1.0.0-beta.30":"2018-01-23T15:49:16.914Z","1.0.0-beta.31":"2018-01-24T15:54:11.223Z","1.0.0-beta.32":"2018-02-01T16:48:05.363Z","1.0.0-beta.33":"2018-02-01T17:26:33.140Z","1.0.0-beta.34":"2018-02-02T15:13:45.070Z","1.0.0-beta.35":"2018-02-06T09:19:15.352Z","1.0.0-beta.36":"2018-02-08T09:30:27.888Z","1.0.0-beta.37":"2018-02-14T13:40:33.431Z","1.0.0-beta.38":"2018-02-14T13:50:57.700Z","1.0.0-beta.39":"2018-02-15T10:27:59.717Z","1.0.0-beta.40":"2018-02-16T09:04:14.162Z","1.0.0-beta.41":"2018-02-28T11:50:34.644Z","1.0.0-beta.42":"2018-02-28T14:11:13.995Z","1.0.0-beta.43":"2018-02-28T16:28:16.626Z","1.0.0-beta.44":"2018-02-28T21:30:08.135Z","1.0.0-beta.45":"2018-03-02T10:25:22.644Z","1.0.0-beta.46":"2018-03-02T11:45:51.162Z","1.0.0-beta.47":"2018-03-02T11:58:55.801Z","1.0.0-beta.48":"2018-03-02T13:47:12.225Z","1.0.0-beta.49":"2018-03-05T11:48:23.277Z","1.0.0-beta.50":"2018-03-11T10:59:30.336Z","1.0.0-beta.51":"2018-03-22T14:32:27.025Z"},"homepage":"https://github.com/BenoitClaveau/qwebs-http","keywords":["https","qwebs","config","webserver","promise"],"repository":{"type":"git","url":"git+https://github.com/BenoitClaveau/qwebs-http.git"},"author":{"name":"Benoît Claveau","email":"benoit.claveau@gmail.com"},"bugs":{"url":"https://github.com/BenoitClaveau/qwebs-http/issues"},"license":"MIT","readmeFilename":""}