{"_id":"kettle","_rev":"62-b94f48f6d760690b31fd0c414e56d7c0","name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","dist-tags":{"latest":"2.3.0","dev":"1.12.0-dev.20200709T180050Z.3070cd0.KETTLE-86"},"versions":{"0.0.1":{"name":"kettle","description":"a scrolling content widget based on drag.js","keywords":["ender","drag","drop","microjs"],"version":"0.0.1","homepage":"https://logicalparadox.github.com/kettle.js","authors":["Jake Luer <@jakeluer>"],"repository":{"type":"git","url":"git://github.com/logicalparadox/kettle.js.git"},"dependencies":{"bean":">= 0.2.7","drag":">= 0.0.3"},"devDependencies":{"smoosh":"0.3.x"},"main":"./kettle.js","ender":"./src/ender.js","scripts":{"builder":"node make/build.js"},"_npmJsonOpts":{"file":"/Users/jakeluer/.npm/kettle/0.0.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"kettle@0.0.1","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.26","_nodeVersion":"v0.4.11","_defaultsLoaded":true,"dist":{"shasum":"0683061fad55277c61ea62a52a83bdcf23e07bd9","tarball":"https://registry.npmjs.org/kettle/-/kettle-0.0.1.tgz","integrity":"sha512-gZgDl3AJJq8tYnPBcrxVwtKYXOtOEHnTic/ToVJlTuWRkrjNPVWzjHT/YqzJ+ssYIXI/xj9Kf8VRPxfnvKtf0w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDb4PJuRFZg8wbNwGxVElFRr4z3uS5SDcXU9cq8NIebywIgGRAGa+vOhUYN8GlLFyAxNqTFhvwWBorVf0te3Z36g1c="}]},"maintainers":[{"name":"jakeluer","email":"jake.luer@incatern.com"}],"directories":{}},"1.0.0-dev.20151203T203010Z.ea93d24":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.0.0-dev.20151203T203010Z.ea93d24","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"~4.13.3","body-parser":"~1.13.3","cookie-parser":"~1.3.5","express-session":"~1.11.3","serve-static":"1.10.0","ws":"~0.8.0","infusion":"2.0.0-dev.20151130T180545Z.18ee3f8","jsonlint":"1.6.0","resolve":"~1.1.6","node-uuid":"~1.4.0","path-to-regexp":"0.1.7"},"devDependencies":{"node-jqunit":"~1.1.3","grunt-shell":"0.6.4","grunt-contrib-jshint":"0.9.0","grunt-jsonlint":"1.0.4","grunt-gpii":"1.0.0","grunt":"0.4.5"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"ea93d243bba32a9f7a98de43dafa651a874ef57c","_id":"kettle@1.0.0-dev.20151203T203010Z.ea93d24","scripts":{},"_shasum":"abb76ec44b829f2b8ee0fc9a7ae5714ce8d3b241","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"abb76ec44b829f2b8ee0fc9a7ae5714ce8d3b241","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.0.0-dev.20151203T203010Z.ea93d24.tgz","integrity":"sha512-XIEckOvfyNdj8p+lM8HEsfGzmt2vzhQ/5T4UOPZQNEyseP9O1XafVIAF+kT/3akuptNMH+nA4uB9ugKFqR2D6Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBJuplip1o3PdwgL6OCtYL9nP2bKoYC+VAaqNcWDsZlQAiEAy/urk2UnhsRJySgU+fOH7/uPGPdagsX9Q8pPIlZ3zcE="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"}],"directories":{}},"1.0.0-dev.20160525T225235Z.938ffbd":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.0.0-dev.20160525T225235Z.938ffbd","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"~4.13.3","body-parser":"~1.13.3","cookie-parser":"~1.3.5","express-session":"~1.11.3","serve-static":"1.10.0","ws":"~0.8.0","infusion":"2.0.0-dev.20160519T222603Z.754d2c6","jsonlint":"1.6.0","resolve":"~1.1.6","node-uuid":"~1.4.0","path-to-regexp":"0.1.7"},"devDependencies":{"node-jqunit":"~1.1.3","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#5e13a1b6556e70261b3dc204fde67743f1e3ebf1","gpii-express":"git://github.com/GPII/gpii-express.git#218d42f2f27d4da92c3eb8b0149daa7a5a0faa88","grunt-shell":"0.6.4","grunt-contrib-jshint":"0.9.0","grunt-jsonlint":"1.0.4","grunt-gpii":"1.0.0","grunt":"0.4.5"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"938ffbdbb25a079ff2d044d0a6e939d87673f51d","_id":"kettle@1.0.0-dev.20160525T225235Z.938ffbd","_shasum":"5bd0cb671fbfb27e62dade1a23ba5cdd1e6b16c0","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"colinbdclark","email":"colinbdclark@gmail.com"},"dist":{"shasum":"5bd0cb671fbfb27e62dade1a23ba5cdd1e6b16c0","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.0.0-dev.20160525T225235Z.938ffbd.tgz","integrity":"sha512-eZVqmIfe/vkuIJm0+/CeojaH0lDxrta1vfPspZaAXKr8B56wCqwsb7vIj4m9HnRQ9XirbcnwuOfzbi8SsTn6Zw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDawuG8MPQ14bqRfRm+j/9PJbZ/DQ2dLHx7dO8LMnR+DAiAC004Neiu1ybbPqRcP4VtEKEc1ZbylmBZmVdcFmFQw4Q=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/kettle-1.0.0-dev.20160525T225235Z.938ffbd.tgz_1464217047950_0.6383914339821786"},"directories":{}},"1.0.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.0.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"~4.13.3","body-parser":"~1.13.3","cookie-parser":"~1.3.5","express-session":"~1.11.3","serve-static":"1.10.0","ws":"~0.8.0","infusion":"2.0.0-dev.20160519T222603Z.754d2c6","jsonlint":"1.6.0","resolve":"~1.1.6","node-uuid":"~1.4.0","path-to-regexp":"0.1.7"},"devDependencies":{"node-jqunit":"~1.1.3","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#5e13a1b6556e70261b3dc204fde67743f1e3ebf1","gpii-express":"git://github.com/GPII/gpii-express.git#218d42f2f27d4da92c3eb8b0149daa7a5a0faa88","grunt-shell":"0.6.4","grunt-contrib-jshint":"0.9.0","grunt-jsonlint":"1.0.4","grunt-gpii":"1.0.0","grunt":"0.4.5"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"938ffbdbb25a079ff2d044d0a6e939d87673f51d","_id":"kettle@1.0.0","_shasum":"33116ae98f0e3dfbb91668bc25ba1c9f6a914627","_from":".","_npmVersion":"2.14.8","_nodeVersion":"4.2.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"33116ae98f0e3dfbb91668bc25ba1c9f6a914627","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.0.0.tgz","integrity":"sha512-5+pMcLfjRh2ybP94BRgOkdI4WcgH/8YMUb2nfQMMGgrX79ENw/HF3sUsVzOYni723jZU5Y90IzF5xmXGsoQZ9w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDGsd5JXmLFCjiYxEj9tpStvFWVTgW6QkaVGMBrdxpieAiAMsAjOK8b9goolpiSBU0uWKmOXZy5TNO7zH7Zf7ISk/g=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/kettle-1.0.0.tgz_1464224936487_0.2157885553315282"},"directories":{}},"1.0.1":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.0.1","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.13.3","body-parser":"1.13.3","cookie-parser":"1.3.5","express-session":"1.11.3","serve-static":"1.10.0","ws":"0.8.0","infusion":"2.0.0-dev.20160519T222603Z.754d2c6","jsonlint":"1.6.0","resolve":"1.1.6","node-uuid":"1.4.0","path-to-regexp":"0.1.7"},"devDependencies":{"fluid-grunt-eslint":"18.1.1","gpii-express":"git://github.com/GPII/gpii-express.git#218d42f2f27d4da92c3eb8b0149daa7a5a0faa88","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#5e13a1b6556e70261b3dc204fde67743f1e3ebf1","grunt":"1.0.1","grunt-jsonlint":"1.0.4","grunt-shell":"1.3.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"c10bfc28de78c3dec6bd82b1b88026d5a0eaeb69","_id":"kettle@1.0.1","_shasum":"38f02901d93401caa939f8b1f0b48848522326fe","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"38f02901d93401caa939f8b1f0b48848522326fe","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.0.1.tgz","integrity":"sha512-0FC4V6kgvCjQRTYiobcOGMMvEMGgUh4slnFeyoPGdtkuPQ//Ctx/IDgidd9R7YCzTZa74hboZol1mtm7StHTdg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjT2U5U8xrdTwibf8BL72Ky9SWbHvRUYTep8ApPeqy9AIgaUknoCnfgjIUhCWnE0uwdt60ZltW5DeIDZkbz6jL+b0="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/kettle-1.0.1.tgz_1468613724554_0.14064148371107876"},"directories":{}},"1.1.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.1.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.14.0","body-parser":"1.15.2","cookie-parser":"1.4.3","express-session":"1.14.0","serve-static":"1.11.1","ws":"1.1.1","infusion":"2.0.0-dev.20160519T222603Z.754d2c6","jsonlint":"1.6.0","resolve":"1.1.6","node-uuid":"1.4.7","path-to-regexp":"1.5.3"},"devDependencies":{"fluid-grunt-eslint":"18.1.1","gpii-express":"git://github.com/GPII/gpii-express.git#218d42f2f27d4da92c3eb8b0149daa7a5a0faa88","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#5e13a1b6556e70261b3dc204fde67743f1e3ebf1","grunt":"1.0.1","grunt-jsonlint":"1.0.4","grunt-shell":"1.3.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"6d9c3a46d0c74075cce891d717ca719ab09fd9e0","_id":"kettle@1.1.0","_shasum":"9fe868c0c73a364f5ac5c7859dcb15663c29f8cb","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"9fe868c0c73a364f5ac5c7859dcb15663c29f8cb","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.1.0.tgz","integrity":"sha512-O38lCBwPSihfTtkE23V1DeMEYJcyKnsUlKPiZsHNd3w/JdeHEaNbahWZZQk92TWqdEBzVXoNbHBOh/ZxjKV/JA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHihefDX//LpVEvyhggZ6fPr8nmRk9pMSg560M2GIFqMAiB0T1YNpJcC0+eIlBF0SxC6pX/S3WRESNXaK1x0wYVOsg=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/kettle-1.1.0.tgz_1468613960652_0.9252659142948687"},"directories":{}},"1.1.1":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.1.1","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.14.0","body-parser":"1.15.2","cookie-parser":"1.4.3","express-session":"1.14.0","serve-static":"1.11.1","ws":"1.1.1","infusion":"2.0.0-dev.20160519T222603Z.754d2c6","jsonlint":"1.6.0","resolve":"1.1.6","node-uuid":"1.4.7","path-to-regexp":"1.5.3"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.0.4","grunt-shell":"1.3.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"83c5bff61d03d091f9ef5a302007aedf24551d20","_id":"kettle@1.1.1","_shasum":"4e94d1e9d5d3b8c684f89ab77c3458f4946e6a9e","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.6.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"4e94d1e9d5d3b8c684f89ab77c3458f4946e6a9e","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.1.1.tgz","integrity":"sha512-9AHN079gRjZGPDj17JI/Uetv/c/+RuoyqxY1Pw29BadJtn/yeqRn4XXbPE8nwVkoOsKfK2Q6O1dsqTv6YkU2Gg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEE7U9cE15We8xJ7brLfOoYKSVKPitoLfNc0qm/AIACSAiEAmXA2FYm3AzapFtnDVUougMx/A6YPmlDWwPudOKKC8n8="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/kettle-1.1.1.tgz_1477970043289_0.5617460964713246"},"directories":{}},"1.2.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.2.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.14.0","body-parser":"1.15.2","cookie-parser":"1.4.3","express-session":"1.14.0","serve-static":"1.11.1","ws":"1.1.1","infusion":"2.0.0-dev.20160519T222603Z.754d2c6","jsonlint":"1.6.0","resolve":"1.1.6","node-uuid":"1.4.7","path-to-regexp":"1.5.3","json5":"0.5.0"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.0.4","grunt-shell":"1.3.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"775a60789038b9f449f10a46dc0e813cbe30134d","_id":"kettle@1.2.0","_shasum":"caba6f175792f8c06af3fb9d34f9397fbf1936ab","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.6.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"caba6f175792f8c06af3fb9d34f9397fbf1936ab","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.2.0.tgz","integrity":"sha512-+Z3b4O3iFfoP3Q54nWuN098T0IBa+Xt9a7zWq2kjIUiPCUJ+Q19kqCkExgOueUwh5edRwjYqt/RZQHBPJiJL9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCF52s+9iIWB26S4In88ogstY8Wq7MHA0hOk/qJQUEFmgIhAOaovgPBd5poMOMdWaNkmS+BdppNNEShW+4xLTj4Tt8f"}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/kettle-1.2.0.tgz_1478194353539_0.6274594352580607"},"directories":{}},"1.2.1":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.2.1","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.14.0","body-parser":"1.15.2","cookie-parser":"1.4.3","express-session":"1.14.0","serve-static":"1.11.1","ws":"1.1.1","infusion":"2.0.0-dev.20160519T222603Z.754d2c6","jsonlint":"1.6.0","resolve":"1.1.6","node-uuid":"1.4.7","path-to-regexp":"1.5.3","json5":"0.5.0"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.0.0","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.0.4","fluid-grunt-json5lint":"1.0.0","grunt-shell":"1.3.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"262d15d2a18a8dfb0511cf52d16aedba9f791f95","_id":"kettle@1.2.1","_shasum":"32283905fc78add8d3ff3b5b12e9008e004756f1","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.6.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"32283905fc78add8d3ff3b5b12e9008e004756f1","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.2.1.tgz","integrity":"sha512-QZLVXq4yYNl/HO57NhJDTAhdpaF+Rs545EvqW8KtsB1vIxRDsxVRUt4AqF1TKpqEF05wLmj611EBWGTlupuQfQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEbjBSS8CvBMft5II6gnhlIGG3icjmnQ2/FIHTsCjXkAAiBbcQbi+s9rd16ewNTCoUEBD2clUU/KivLQUaoIcitOJw=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/kettle-1.2.1.tgz_1479092838714_0.7469989382661879"},"directories":{}},"1.2.2":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.2.2","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.14.0","body-parser":"1.15.2","cookie-parser":"1.4.3","express-session":"1.14.0","serve-static":"1.11.1","ws":"1.1.1","infusion":"2.0.0-dev.20160519T222603Z.754d2c6","jsonlint":"1.6.0","resolve":"1.1.6","path-to-regexp":"1.5.3","json5":"0.5.0"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.0.0","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.0.4","fluid-grunt-json5lint":"1.0.0","grunt-shell":"1.3.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"401a626d50e12201be7ffd018c749c471424c138","_id":"kettle@1.2.2","_shasum":"169cf6948da181170e56ae7c33b36f77ef7eb339","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.6.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"169cf6948da181170e56ae7c33b36f77ef7eb339","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.2.2.tgz","integrity":"sha512-6OXxYwqVVOVMXm609B6BAlXEh8Ob6WVrf2kddENZaCIoLmSifRryJPt5L1oTqvK0Jb/jyW8Mb347uGuuY7+jNw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHO9wA0M6NBEaM486Bh2840Oo2LYdtvVnKcIiVhgyDVTAiB9lfGqWzDmlndHVfYQZH6e3yGXCHju60MI24VWeMrXtQ=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/kettle-1.2.2.tgz_1479918078210_0.6066241424996406"},"directories":{}},"1.2.2-dev.20170103T231035Z.becc1e1":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.2.2-dev.20170103T231035Z.becc1e1","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.14.0","body-parser":"1.15.2","cookie-parser":"1.4.3","express-session":"1.14.0","serve-static":"1.11.1","ws":"1.1.1","infusion":"2.0.0-dev.20160519T222603Z.754d2c6","jsonlint":"1.6.0","resolve":"1.1.6","path-to-regexp":"1.5.3","json5":"0.5.0"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.0.0","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.0.4","fluid-grunt-json5lint":"1.0.0","grunt-shell":"1.3.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"becc1e1726be114477f4a77b252a3b4cad47a6e7","_id":"kettle@1.2.2-dev.20170103T231035Z.becc1e1","_shasum":"dbe17d60a18b84c91756d5b29872352b16d2aa8e","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"dbe17d60a18b84c91756d5b29872352b16d2aa8e","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.2.2-dev.20170103T231035Z.becc1e1.tgz","integrity":"sha512-89au1w0UwRVrDdOP1kTDOLIeYREEeh9Pr04X7jeMo54VMwDUn9BCF0xnS1BKB7CIfJmGcu8vs3NPi2yw6mHQ/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH+5QSkcWG+bAdGqCRBU9y9L3KkVM+RNVyP266Hu01EwAiAH96Qp7spFLvRpY41Nako/UvthovPEq11r4G3eVvwaFA=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/kettle-1.2.2-dev.20170103T231035Z.becc1e1.tgz_1483642479727_0.921052043326199"},"directories":{}},"1.3.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.3.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.14.0","body-parser":"1.15.2","cookie-parser":"1.4.3","express-session":"1.14.0","serve-static":"1.11.1","ws":"1.1.1","infusion":"2.0.0-dev.20161219T170555Z.5778f7e","jsonlint":"1.6.0","fluid-resolve":"1.2.0","path-to-regexp":"1.5.3","json5":"0.5.0"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.0.0","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.0.4","fluid-grunt-json5lint":"1.0.0","grunt-shell":"1.3.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"d54d88ab08883eadb208b2c98bc01a7aa45f5bcc","_id":"kettle@1.3.0","_shasum":"ac3e63d10f0b31ac6edf4abfd4ed6ba78e96a541","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"ac3e63d10f0b31ac6edf4abfd4ed6ba78e96a541","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.3.0.tgz","integrity":"sha512-Nk/yzXkqN8meJGOTC/zrDn3G6DTjEkuKHLj+8/pl1ytIcSQfTE6L9BCpfX+6JeDCzaG5llHWUQt1SlnO9ASgdQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEfhXjj0VmwVVaPjmGS+UBv/XtrOOsGTsw3rmZ9u0bLqAiAQF+fEfWJlmK78fiLh0N5HSd9i2NBLj5Y7NyNMZ5hrMQ=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/kettle-1.3.0.tgz_1483664659196_0.7310655775945634"},"directories":{}},"1.3.1":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.3.1","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.14.0","body-parser":"1.16.0","cookie-parser":"1.4.3","express-session":"1.15.0","serve-static":"1.11.2","ws":"1.1.1","infusion":"3.0.0-dev.20170127T130413Z.103de6e","jsonlint":"1.6.2","fluid-resolve":"1.2.0","path-to-regexp":"1.7.0","json5":"0.5.1"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.1.0","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.1.0","fluid-grunt-json5lint":"1.0.0","grunt-shell":"2.1.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"a0b7df2245606ad5ba7bc2765761a1a2ebe168b3","_id":"kettle@1.3.1","_shasum":"3477c6767f9a06048f28becfe809348e02ba2b0d","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"3477c6767f9a06048f28becfe809348e02ba2b0d","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.3.1.tgz","integrity":"sha512-eku50VetA9t0nm1IH1EOFH/SzTkHJoiAHcD56c7zlLs0z2UoQDghjxLuB5a5m0tMGXL4WZR2gl43cTqE1Ak5XQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEiw4VpVdODCtowbTt2h/DI4/QxaELyBPoIrl8JupzacAiAC7+WhXQVLLcz9IEmUrJvVEPVD5ClD3IRCBLoU5h9hoQ=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/kettle-1.3.1.tgz_1485530348432_0.4606772889383137"},"directories":{}},"1.3.2":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.3.2","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.14.0","body-parser":"1.16.0","cookie-parser":"1.4.3","express-session":"1.15.0","serve-static":"1.11.2","ws":"1.1.1","infusion":"3.0.0-dev.20170131T153243Z.6aab53a","jsonlint":"1.6.2","fluid-resolve":"1.2.0","path-to-regexp":"1.7.0","json5":"0.5.1"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.1.0","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.1.0","fluid-grunt-json5lint":"1.0.0","grunt-shell":"2.1.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.2.1"},"gitHead":"2070cb666f02010d8353c30a3773ffdcc78a42bd","_id":"kettle@1.3.2","_shasum":"fecf522e290c93a7e50dbd4a9fabf9b57d4ade3f","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"fecf522e290c93a7e50dbd4a9fabf9b57d4ade3f","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.3.2.tgz","integrity":"sha512-8CvZenpl8MxBJCi2Dt6UHXtbkZZCLjC443j5TYetmX1bvVczY/xlDUGXk/4w3FQAO6cBZxqxviuEuuj7oOqPfw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgj4G3c7QP3pt6hufPRsy5tKIFSUuFFUAVIbDK2rg3+AIgUv4HgDuk++GRYeF4rVo/PX4PyTAHYV9KzpJvQkogPvM="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/kettle-1.3.2.tgz_1485880652264_0.09316313778981566"},"directories":{}},"1.4.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.4.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.14.1","body-parser":"1.16.1","cookie-parser":"1.4.3","express-session":"1.15.1","serve-static":"1.11.2","ws":"2.0.3","infusion":"3.0.0-dev.20170214T161720Z.6126724","jsonlint":"1.6.2","fluid-resolve":"1.2.0","path-to-regexp":"1.7.0","json5":"0.5.1"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.1.0","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.1.0","fluid-grunt-json5lint":"1.0.0","grunt-shell":"2.1.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"gitHead":"75f42cac700a4bd91ad54263feb5b1d662c7fe89","_id":"kettle@1.4.0","_shasum":"fcc67df08796be2c9c2a71dc744012691fc607e6","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"fcc67df08796be2c9c2a71dc744012691fc607e6","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.4.0.tgz","integrity":"sha512-j/0PUKvl9VRA9yaGbWN2+nNtBPKqm/yxhp3tZ4s0j9Ia5Fm1IIKh1IFYbG6aYyTc25ZLki2KaULOLy2IhzLPAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFx9ag6Ie9C+xFRy547pGRIOsKMpjOqP21B+OqdeXWY1AiEAzhasjiawy2hcXCNvKSotr9bk0FockMMN09557QtSgq8="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/kettle-1.4.0.tgz_1487386863934_0.610337664373219"},"directories":{}},"1.4.1":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.4.1","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.14.1","body-parser":"1.16.1","cookie-parser":"1.4.3","express-session":"1.15.1","serve-static":"1.11.2","ws":"2.0.3","infusion":"3.0.0-dev.20170322T234120Z.278de35","jsonlint":"1.6.2","fluid-resolve":"1.2.0","path-to-regexp":"1.7.0","json5":"0.5.1"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.1.0","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.1.0","fluid-grunt-json5lint":"1.0.0","grunt-shell":"2.1.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"gitHead":"9f05e1feb673e54a4e3e74999f764860fa5e7cd6","_id":"kettle@1.4.1","_shasum":"167e8bc505e850eb64014039e9bd84f629da942c","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"167e8bc505e850eb64014039e9bd84f629da942c","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.4.1.tgz","integrity":"sha512-tT+S+/PBQuYSNbDaTIpk966XMsqwkwsi7c4JH5eaufUnuSMJg9lEzy1XA9kunebVypUhTt0H2kKDdHYdyZdTlg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYT4azjc4JMRAmTGxw5QuFNM/YDUv9RZA2qIHTrKV6cQIhAJ2iud1NW2sPwcS69pPepUAdmbfSjGTMalNdJZprWph8"}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/kettle-1.4.1.tgz_1492607919646_0.7637079863343388"},"directories":{}},"1.5.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.5.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.15.2","body-parser":"1.17.1","cookie-parser":"1.4.3","express-session":"1.15.2","serve-static":"1.12.2","ws":"2.3.1","infusion":"3.0.0-dev.20170322T234120Z.278de35","jsonlint":"1.6.2","fluid-resolve":"1.2.0","path-to-regexp":"1.7.0","json5":"0.5.1"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.1.0","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.1.0","fluid-grunt-json5lint":"1.0.0","grunt-shell":"2.1.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"gitHead":"23720ce8375b399708035ec000abbf74a3108875","_id":"kettle@1.5.0","_shasum":"0048b99fea9e0c10f0ff1ae91a3ae78bd2335f67","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.10.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"0048b99fea9e0c10f0ff1ae91a3ae78bd2335f67","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.5.0.tgz","integrity":"sha512-ARbsnN25scJyXAnbxyR5DbsS3G7sohTQCH5IDbTTi5xR7XAhZVnI1jWaFDBmhA5PhUWAv4QiKUs4+ZBLolivWQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMxuA1DuMlIZq0Uram6ZAv5s23DooWxv/3hXCGAg4h5gIhAIpF8WR+xd2QvTDk5Zn9ymD9h5A7Nn0i2ayoR3dTgzu9"}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/kettle-1.5.0.tgz_1493677330674_0.7651485132519156"},"directories":{}},"1.6.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.6.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.15.3","body-parser":"1.17.2","cookie-parser":"1.4.3","express-session":"1.15.3","serve-static":"1.12.3","ws":"3.0.0","infusion":"3.0.0-dev.20170322T234120Z.278de35","jsonlint":"1.6.2","resolve":"1.3.3","path-to-regexp":"1.7.0","json5":"0.5.1"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.1.0","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.1.0","fluid-grunt-json5lint":"1.0.0","grunt-shell":"2.1.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"gitHead":"743d9b2cedb0105bfc7dca9032cd7097fd65a0c5","_id":"kettle@1.6.0","_shasum":"194c10b7d4ef7771fddac18bb6815d9858a890ee","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.10.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"194c10b7d4ef7771fddac18bb6815d9858a890ee","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.6.0.tgz","integrity":"sha512-k0od3rjpYgBqBN3M24KfZzMmCycB3zs85I1E7Xxv5OaMsPoVK6AdluHRzzrY+GOR6pnIlRCVm5ByMAKAVI7Ijg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICjSB4yavwBqFCKec2l8c++YHhEdGp1GGnZVwHZ2BcuQAiAfvWQo9zAYiKfA1PC9zkJZtlE5ZoRdnE13dqaOoLEpLg=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle-1.6.0.tgz_1497624507103_0.4241904818918556"},"directories":{}},"1.6.1":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.6.1","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.15.3","body-parser":"1.17.2","cookie-parser":"1.4.3","express-session":"1.15.3","serve-static":"1.12.3","ws":"3.0.0","infusion":"3.0.0-dev.20170713T172705Z.330ed53","jsonlint":"1.6.2","resolve":"1.3.3","path-to-regexp":"1.7.0","json5":"0.5.1"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.1.0","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.1.0","fluid-grunt-json5lint":"1.0.0","grunt-shell":"2.1.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"gitHead":"81049828a71bde0f88c7749e25c223a3b86bc2de","_id":"kettle@1.6.1","_shasum":"d477a9e791427a0e7a5becafbe7bc6711930405e","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"d477a9e791427a0e7a5becafbe7bc6711930405e","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.6.1.tgz","integrity":"sha512-ttdRnW05PMKOqcrAlEvNhg06FWZhFOcZwf21JtqvFIAe95mOVY/hymabio6idtkAZTEX0/rwMEqKQ7ZRjZo7qg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC26k4yA7YZCIIi3V2U9NW+P3NS44XeDep6gJd5gvjzvQIhANRvwkCQoM7G3LzSXjOswjuMP2lH7WyDRbI6oFIR9Aug"}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle-1.6.1.tgz_1499968356633_0.342357685090974"},"directories":{}},"1.6.2":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.6.2","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.15.3","body-parser":"1.17.2","cookie-parser":"1.4.3","express-session":"1.15.3","serve-static":"1.12.3","ws":"3.0.0","infusion":"3.0.0-dev.20170713T172705Z.330ed53","jsonlint":"1.6.2","fluid-resolve":"1.2.0","path-to-regexp":"1.7.0","json5":"0.5.1"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.1.0","gpii-express":"git://github.com/GPII/gpii-express.git#58a2f3fc1699a4e14735673d3c43edde7b705666","gpii-pouchdb":"git://github.com/GPII/gpii-pouchdb.git#a6a3322fdf059b8a1109f0763454b3f7d8839105","grunt":"1.0.1","grunt-jsonlint":"1.1.0","fluid-grunt-json5lint":"1.0.0","grunt-shell":"2.1.0","node-jqunit":"1.1.4"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"gitHead":"abc9512bee18f9fad80179cb029ef4756a637e10","_id":"kettle@1.6.2","_shasum":"65892c8b97f0ab1504330956716d2e135c4a689d","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"65892c8b97f0ab1504330956716d2e135c4a689d","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.6.2.tgz","integrity":"sha512-IiMgxi/dik9/DZBCzahny8ab2xKDHuV7ah+9ftjbvziLh7fn2JBHf8/CltAmiHN5LsfwJmqp4G1kOAT3IlWuwg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC+amvNFtZAM0iW2+lDhWYHDSrYE/PGJkYjVCxg6j+mnAiA94yx+dv+AuUUbuhVfKlrwxe6dqF5SPVVX6SEemx7pYw=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle-1.6.2.tgz_1500029969905_0.23378385556861758"},"directories":{}},"1.6.3":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.6.3","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.15.3","body-parser":"1.17.2","cookie-parser":"1.4.3","express-session":"1.15.4","serve-static":"1.12.3","ws":"3.0.0","infusion":"3.0.0-dev.20170724T165035Z.eee50c1","jsonlint":"1.6.2","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","json5":"0.5.1"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.1.0","gpii-express":"1.0.8","gpii-pouchdb":"1.0.4","grunt":"1.0.1","grunt-jsonlint":"1.1.0","fluid-grunt-json5lint":"1.0.0","grunt-shell":"2.1.0","node-jqunit":"1.1.6"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"gitHead":"aef4b4faf3917a5aea966cd9ab4a16669967d4ad","_id":"kettle@1.6.3","_shasum":"a397e1bcd289feac6f04d1bad323ff51cf1b4778","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"a397e1bcd289feac6f04d1bad323ff51cf1b4778","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.6.3.tgz","integrity":"sha512-0Zxex6rAI/UmGJO04zBWWt/PXh1ItEhYLE92tTDT1/vGtbR10b244yFpE5fpGHzrz1/OY4qh1+lW4TPQu1n48w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzmN6uE4DG8gEk/8FjkNyg8HVdPCbdlGPo0fcwyQuNxwIgFOA+7XAO9BULBU+BGFvHVvCv8/cgVNCYthsr2TYKdBw="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle-1.6.3.tgz_1500916138816_0.9931909109000117"},"directories":{}},"1.6.4":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.6.4","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.15.3","body-parser":"1.17.2","cookie-parser":"1.4.3","express-session":"1.15.4","serve-static":"1.12.3","ws":"3.0.0","infusion":"3.0.0-dev.20170724T165035Z.eee50c1","jsonlint":"1.6.2","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","json5":"0.5.1"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.1.0","gpii-express":"1.0.9","gpii-pouchdb":"1.0.5","grunt":"1.0.1","grunt-jsonlint":"1.1.0","fluid-grunt-json5lint":"1.0.0","grunt-shell":"2.1.0","node-jqunit":"1.1.6"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"gitHead":"9a30b33fe9386ec9bda894bea5f52cdccd2278e4","_id":"kettle@1.6.4","_shasum":"f179c741cc9ac3680a788d61c2fa2f60ac239756","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"f179c741cc9ac3680a788d61c2fa2f60ac239756","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.6.4.tgz","integrity":"sha512-c+IBCtGm6H3zji3yaxd0Avtj+YYClzuiJzkh0Nj9ubrSl8u0ZnsibwTAxcFnGMiGi7omwDObCgulp+AZoF9blw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICED3PbTVyYLo7zp9TcrdDoaw/6Vy3xC0Is7HjohqDF5AiAEX9IHzdfmuEzcL7o9HU2tsayWFg0+1YlpDaafSqq2nA=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle-1.6.4.tgz_1500917279577_0.23036355362273753"},"directories":{}},"1.7.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.7.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.15.4","body-parser":"1.17.2","cookie-parser":"1.4.3","express-session":"1.15.5","serve-static":"1.12.3","ws":"3.1.0","infusion":"3.0.0-dev.20170830T182157Z.392b2f8","jsonlint":"1.6.2","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","json5":"0.5.1"},"devDependencies":{"fluid-grunt-eslint":"18.1.2","eslint-config-fluid":"1.1.0","gpii-express":"1.0.9","gpii-pouchdb":"1.0.7","grunt":"1.0.1","grunt-jsonlint":"1.1.0","fluid-grunt-json5lint":"1.0.0","grunt-shell":"2.1.0","node-jqunit":"1.1.7"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"gitHead":"980b5347d42bd62de9186a9b5e02bad67789b32d","_id":"kettle@1.7.0","_shasum":"61be34486eaba762ce57f30a47570247c648caf2","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.3.1","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"61be34486eaba762ce57f30a47570247c648caf2","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.7.0.tgz","integrity":"sha512-17wFDsEdRGlkJXFkhJ1wFhnZVWS0mzZbGr6dsaV305Vg1nR25MUYV7/w5Yy7IT3Tdmb2tB//N/6e141oz8nOBw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFK8huIqvoRca4zTV9ijFNGd+z+v5idO1bQxwhB2LLWwIhAP7URqD2ufBb8qjlRoQdnGyply6yURvgXK5GSOQlMpzW"}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle-1.7.0.tgz_1504200284189_0.9930902468040586"},"directories":{}},"1.7.1":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.7.1","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"test":"node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.16.2","body-parser":"1.18.2","cookie-parser":"1.4.3","express-session":"1.15.6","serve-static":"1.13.1","ws":"3.3.1","infusion":"3.0.0-dev.20171117T095227Z.67ff934","jsonlint":"1.6.2","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","json5":"0.5.1"},"devDependencies":{"eslint-config-fluid":"1.2.0","fluid-grunt-eslint":"18.1.2","fluid-grunt-json5lint":"1.0.0","gpii-express":"1.0.11","gpii-pouchdb":"1.0.7","grunt":"1.0.1","grunt-jsonlint":"1.1.0","grunt-markdownlint":"1.0.43","grunt-shell":"2.1.0","node-jqunit":"1.1.8"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"gitHead":"7609e018c995c8ef1e175b1d738a7c5512e37356","_id":"kettle@1.7.1","_shasum":"4f4509b3dca6aa3b9f1bdf6d4ee708ffe0bd3fbe","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.3.1","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"shasum":"4f4509b3dca6aa3b9f1bdf6d4ee708ffe0bd3fbe","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.7.1.tgz","integrity":"sha512-EA91YWJXxgoauQCOfl9ZkSeyR6qu0G8y1++9RmDeosmDXjE3GJvsLuiX9ackXrlw2DuvYllXA7fPARt9KuWtlg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIANl9cVfu8rNQTzaKoODTvhHRqG4S1UD6BBAYfNNVmQFAiEA6mLvh3if9ZlYUHLCEogegmeOV2i7WdYlhRlZKXhFtms="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle-1.7.1.tgz_1510913792088_0.4152849577367306"},"directories":{}},"1.7.2-dev.20180601T220005Z.7af2dae.KETTLE-67":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.7.2-dev.20180601T220005Z.7af2dae.KETTLE-67","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/rimraf coverage/* reports/*","test":"node node_modules/istanbul/lib/cli.js cover tests/all-tests.js --print summary"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.16.3","body-parser":"1.18.3","cookie-parser":"1.4.3","express-session":"1.15.6","serve-static":"1.13.2","ws":"5.2.0","infusion":"3.0.0-dev.20180222T160835Z.6e1311a","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","json5":"1.0.1"},"devDependencies":{"eslint-config-fluid":"1.3.0","fluid-grunt-eslint":"18.1.2","fluid-grunt-json5lint":"1.0.0","gpii-express":"1.0.14","gpii-pouchdb":"1.0.12","grunt":"1.0.2","grunt-jsonlint":"1.1.0","grunt-markdownlint":"1.1.6","istanbul":"0.4.5","grunt-shell":"2.1.0","node-jqunit":"1.1.8","rimraf":"2.6.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"readme":"# Kettle\n\nKettle is an integration technology which promotes the expression of servers handling HTTP and WebSockets endpoints.\nWith a few exceptions, Kettle implements no primary functionality of its own, but aggregates the facilities of\n[express](http://expressjs.com/) and [ws](https://github.com/websockets/ws), as well as middleware held in the wider [pillarjs](https://github.com/pillarjs)\n\"Bring your own HTTP Framework Framework\" ecosystem. Kettle applications can easily incorporate any express-standard middleware, as well as coexisting with standard express apps targeted at the same\nnode.js <a href=\"https://nodejs.org/api/http.html#http_class_http_server\"><code>http.Server</code></a>. Since Kettle applications are expressed declaratively, in the JSON format encoding [Infusion](https://github.com/fluid-project/infusion)'s component trees, it is possible to adapt existing\napplications easily, as well as inserting middleware and new handlers anywhere in the pipeline without modifying the original application's code. This makes\nKettle suitable for uses where application functionality needs to be deployed flexibly in a variety of different configurations.\n\nIn fact, Kettle's dependency on express itself is minimal, since the entirety of the Kettle request handling pipeline is packaged\nas a single piece of express-compatible middleware – Kettle could be deployed against any other consumer of middleware or even a raw node.js HTTP server.\n\n## Contents of this repository\n\n### Core Kettle implementation\n\nThis is packaged as Infusion [grades](http://docs.fluidproject.org/infusion/development/ComponentGrades.html) derived from [`kettle.server`](./docs/Servers.md#kettle.server),\n[`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) and [`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app). The first two of these exist in variants specialized both for plain\nHTTP (with the `.http` suffix) and for WebSockets (with the `.ws` suffix) – `kettle.app` does not specialize.\n\n### Contents - Testing\n\nAs well as the integration technology implementing Kettle itself, this repository also contains functionality helpful for testing HTTP and WebSockets\nservers written in arbitrary technologies. This is accessed by running `kettle.loadTestingSupport()` after having called `require(\"kettle\")`. Kettle testing\nsupport allows HTTP and WebSockets client requests to be packaged as [Infusion](https://github.com/fluid-project/infusion) components, suitable for use with Infusion's\n[IoC Testing Framework](http://docs.fluidproject.org/infusion/development/IoCTestingFramework.html). Any user of Kettle's testing support needs to have [node-jqunit](https://github.com/fluid-project/node-jqunit)\nregistered as a member of their own project's `devDependencies` in their own package.json.\n\nKettle runs on [node.js](https://nodejs.org) version 4.x (see [package.json](package.json) for current dependency profile).\n\n### Contents - DataSources\n\nThe Kettle repository also contains a few implementations of the simple `DataSource` contract for read/write access to data with a simple semantic (broadly the same as that\nencoded in [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) although the current DataSource semantic does not provide explicitly for deletion). See the documentation section\non [DataSources](./docs/DataSources.md) for details of this contract, the available implementations and how to use them.\n\nThis repository contains DataSource implementations suitable for HTTP endpoints (with a particular variety specialised for accessing CouchDB databases with CRUDlike semantics) as well as the filesystem, with\nan emphasis on JSON payloads.\n\n## Getting Started and Community\n\n### Installation instructions\n\nFirstly, install node and npm by running a standard installer from [node.js](https://nodejs.org). Clone this repository and then run `npm install`.\n\n### Issue Tracking\n\nIssue tracking is at [http://issues.fluidproject.org/browse/KETTLE](http://issues.fluidproject.org/browse/KETTLE).\n\n### IRC\n\nVisit `#fluid-work` on Freenode – community resources are linked at [Fluid's IRC Channels](https://wiki.fluidproject.org/display/fluid/IRC+Channel).\n\n### Mailing list\n\nContact us on the [fluid-work](https://wiki.fluidproject.org/display/fluid/Mailing+Lists) mailing list with any problems or comments.\n\n### Uses of Kettle and related projects\n\nThe primary user of Kettle is the [GPII](http://gpii.net/)'s autopersonalisation infrastructure, held at [GPII/universal](https://github.com/GPII/universal). Kettle is used\nto provide a flexible means of deploying the GPII's \"Flow Manager\" and related components distributed across multiple local and remote installations.\n\nA closely related project to Kettle is [gpii-express](https://github.com/GPII/gpii-express) which is used in other GPII projects such as the [terms registry](https://github.com/GPII/common-terms-registry) and\n[unified listing](https://github.com/GPII/ul-api). This is similar in architecture to Kettle (wrapping express primitives such as servers and requests into dynamically constructed Infusion components)\nbut slightly different in emphasis –\n\n* gpii-express allows independently mounted application units with nested routing, in the Express 4.x style – whereas Kettle is currently limited to flat Express 3.x-style routing\n* Kettle incorporates support for WebSockets endpoints, whereas gpii-express does not\n* Kettle incorporates support for DataSources (see [DataSources](./docs/DataSources.md) )\n\nThe request handling architecture for gpii-express and Kettle is quite similar and the projects will probably converge over time. gpii-express currently already depends on Kettle to get access to its\nHTTP [testing](./docs/KettleTestingFramework.md) support.\n\n## Documentation\n\nDocumentation and sample code for working with Kettle is contained in the [docs](./docs) directory. Kettle is based on Fluid [Infusion](http://fluidproject.org/infusion.html)'s\n[component model](http://docs.fluidproject.org/infusion/development/HowToUseInfusionIoC.html). If you aren't familiar\nwith the syntax and meaning of Infusion component trees, it is a good idea to browse the documentation, tutorials and examples at the\nInfusion [documentation site](http://docs.fluidproject.org/infusion/development/).\n\nIt contains the following topics:\n\n1. Defining top-level [Kettle applications using \"config\" files](docs/ConfigsAndApplications.md).\n2. Defining HTTP and Websockets servers using the grades [`kettle.server`](./docs/Servers.md#kettle.server) and [`kettle.server.ws`](./docs/Servers.md#kettle.server.ws).\n3. Defining Kettle request handlers derived from grades [`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) grouped into app units derived from [`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app)\n4. Working with standard express [middleware](./docs/Middleware.md) –  incorporating any standard middleware from the express community and registering it into a Kettle application\n5. Working with [DataSources](./docs/DataSources.md) to abstract over asynchronous access to (primarily JSON-formatted) data stored locally or remotely\n6. Defining conversational, asynchronous test fixtures against HTTP and WebSockets servers using the [Kettle testing framework](./docs/KettleTestingFramework.md)\n\nOf these elements of this module, those described in topics 1, 5 and 6 (configs, DataSources and the testing framework) are portable and do not depend specifically on the\nKettle server and request handling infrastructure –   they can be used together with any technologies defining node.js HTTP and WebSockets servers (or in the case of configs,\nany node.js enabled [Infusion](http://fluidproject.org/infusion.html) application).\n","readmeFilename":"README.md","gitHead":"7af2daeca583509274da1adaa3be04a1635330e4","_id":"kettle@1.7.2-dev.20180601T220005Z.7af2dae.KETTLE-67","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-8fU9Vd8rdfsTBcffNgUFUxpWbjqleNgJnodsCyB5W2fKFJl7oYwrLhfqsdrvQRNz+Z9Qwd5wWPLyR5rAQHfe6w==","shasum":"d36d9f488ca0bb27def2c692e083fa013ea3bb11","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.7.2-dev.20180601T220005Z.7af2dae.KETTLE-67.tgz","fileCount":111,"unpackedSize":425499,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEcJTCRA9TVsSAnZWagAANsEP/31k7DRUDP/CXAcjqPOH\npFq3MjbqkmIVPx90ys3XW770Q/rd0O16cH7TNuV5fiWASrGeU5BZAdOC1Fht\nEPJq96Bk9mnnkK3kx1TQWCyVxv/Z48Q11CI1XREK4OwImIOS+LVF3q5iOiWC\nticoT0BSQHg74pdfCX03/2agFd341haYyqUxnexOoix7dyYlYps5AENpcEFr\nvgnjUKPBIm6flMpZykhPo4eTTLI8RupSsmiMOfI39h89INLkqEPmdSluwABM\nIx7RB2Q0NcQnbDWvvjYs2dOigjEd/tXTsw3AvQfTg38GMuXl3wGim0dy5+xJ\ne/H7sndSF1D0ml1BfTbqG/Enwxwc8TwZVlOOJ8cHtvlyDQFE7wyEEXxsUxeO\nsDWreh9OZDUhaBrOPp6uRxavueHjOqIxV0pAYom+ofVQV0TJ0AarSE1ZCsop\nzozPf6Q0QDi5WwFrcATyZTEvEYI6WQ2A0MthZME55evBAy5BX49P6cvThesp\n0KoSGHVfuIaBR9XCTq1y/DrGFpk4iSwiKQmoJycS+mT7a/V2d33dDUTVQH8s\n3MS8xIZngpBM4mvJ9rNNMTA06FZPEXzsgRy7I9kAoDIudTIpMQu98yg7Zrwl\nit+hotxW/vYWbb+lAbyNiU5YKUikFOZjbt4I8w6xzBxmh4NdgWKCslE9YjC1\ns4gx\r\n=/kxF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1tSbojoJhwZZOwSnduOWDILJGubZdd0B+nN/kta/aagIhAJXVMNQ2FQN0ScOvK0qVNFUer5f0BZ1jQxAdU8nLnQxu"}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.7.2-dev.20180601T220005Z.7af2dae.KETTLE-67_1527890514539_0.8042602407467732"},"_hasShrinkwrap":false},"1.7.3":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.7.3","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.16.3","body-parser":"1.18.3","cookie-parser":"1.4.3","express-session":"1.15.6","serve-static":"1.13.2","ws":"5.2.0","infusion":"3.0.0-dev.20180222T160835Z.6e1311a","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","json5":"1.0.1"},"devDependencies":{"eslint-config-fluid":"1.3.0","fluid-grunt-eslint":"18.1.2","fluid-grunt-json5lint":"1.0.0","gpii-express":"1.0.14","gpii-pouchdb":"1.0.12","grunt":"1.0.3","grunt-jsonlint":"1.1.0","grunt-markdownlint":"1.1.6","nyc":"12.0.2","grunt-shell":"2.1.0","node-jqunit":"1.1.8","rimraf":"2.6.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"142016b5f8ea327ab74628e8e4a1c371a1cd3f8a","_id":"kettle@1.7.3","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-2xjYcas+35Sv6E66rVUiiSYghelefqdln3JyivyT2736ulTD5XuRliLYT+qkv1gMrkUQv61HxXbv/52vY4JjPA==","shasum":"f25c9c55839ce599725ef055dc6177da55f8d9f0","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.7.3.tgz","fileCount":111,"unpackedSize":426826,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbF8N0CRA9TVsSAnZWagAAYZ0P/23TUovJp58lPRHttEuC\nvMXYYvqu+6D9uSG38id4H5oe7XRNgOQz1CuurfDGrsTaQCQIKtOsYeHg/+wp\nxSDbSrVin5KXmjKBWcMYgczVCKyu0JwDP4sUDd0KXanKetBv+XQqSv6uNRVp\nmpa1SYy0blS4NSu2FIoXOmwKMedoIAyxMBYRZ1r7BWFtGHg8f9Kz4o4IiOCi\n2UPoDeP24BUoLp69pHRQ8Xy7Qek+N2bGkqQIeGp0QjijwsUE4Oik0ELnUfjP\nKSuAO5UrFcUPxyOPF847Sj+LhOEsnkiNLJsUNswSL6rcL+ONc4HfoEvSAoXP\nYGKZBWl6Q0rmPaN13rFp4Y2NrBnsdDGX/cDIlBoqs9s8h9hp8YtrfOs2wu0s\nW8K8BiqDcDuO8omd1I8raZQdE07xgx0SAtRttLh/WRrk3pMeMI5aPyDHXjUV\n0fetFyFKnj9l/yDqnAuITXOWNeXbPZX8bg9+mQufO76faGr602CQ0tIwpoL3\nIJShKLr3uNySGnRfCTylYEnrT3sHDG2RX5+cD3eVKmB6ynF0+TjSgAk6om9w\n9QoDipSrp+hkI3e8FbMQSfUF8p7Buo6DuUEMoBkenWxnFLSof1wZqUhWXvtY\nEN1ZZB88OTRBBPVGbmbZYoxQYmMAaPzbacglohIIz9+tFRzSdOSgQSosAyNa\niK+B\r\n=z76S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICLeKVMnR4RT5NNilqmqu3bgu3rzsTWEEpvZOP5BunEwAiAvcNIG4VrQxr17/MpWT5iIJYHQ3yFJWHFs8+ByRaNFgg=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.7.3_1528284019269_0.6999520913961941"},"_hasShrinkwrap":false},"1.8.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.8.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.16.3","body-parser":"1.18.3","cookie-parser":"1.4.3","express-session":"1.15.6","serve-static":"1.13.2","ws":"6.0.0","infusion":"3.0.0-dev.20180222T160835Z.6e1311a","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.3.1","json5":"1.0.1"},"devDependencies":{"eslint-config-fluid":"1.3.0","gpii-grunt-lint-all":"1.0.4","gpii-express":"1.0.14","gpii-pouchdb":"1.0.12","grunt":"1.0.3","nyc":"12.0.2","grunt-shell":"2.1.0","node-jqunit":"1.1.8","form-data":"2.3.2","rimraf":"2.6.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"670396acbf4be31be009b2b2dee48373134ea94d","_id":"kettle@1.8.0","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-UUexv9bi7k0xX6FyCe3h/MgTQh6PvsIorjQkz2lhLt5gwcstq3hFiPdQVWGM+9yjIOYk/BQas/u/uNsvd04few==","shasum":"216c3e47bc061b38917f435acfa97c8a5ec6c571","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.8.0.tgz","fileCount":122,"unpackedSize":481928,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdNVOCRA9TVsSAnZWagAAs2QP/RAgvoEl1xvwcI1371HA\noiafV7bo5p/RQgRoAmFMpkfjhbDA4Vw2BY4IYpQxXxK0UwE5x0/2u9FggDkQ\nsFJn+U5qpzMljG6VtA85ZDlZdxfKi+KnwQwGRESj6Riw15ywxh4ajZxmxPr+\n4Ni25IAlrsHZv0rek8RPuafs0HtIufr/S5ewEkVS/kTrZA6qP30g+Wvm3iq5\n+ixZOVPht/AssB8dlVSkctQOURFHKf5fFo84oJv7mCZqbkdhqTSfcsZlalU8\nswyjrLG3ykgJ/HT2jts77vJ6dDFYt6DBI4WIP6PzLbgFTTYKc4mhAxXsTsGO\nY3H1ZvMa1ZWaeBF3ampjqDrLvZDcAOlXDDnSiGjlNHhSmxbx9tcMIO3VCpEs\nQzuIx2Y3YnCkuFBhD3f4eKcwh4H04urz8nBT1sARgShddrZiwEF45xIzelaS\nvMjI2rCZSiH5bTdrp4rfgLJKzRCK4kGedS0pQzBsIxhnbaBW9tinjG/8BpXK\nOUCJCZ086gFCwgmdak7RLu+t3SJDIWqgLzECaz2z1NpYtiV5E9lpVjt7qbVK\n3Z4n8A4OkxvuAD34To/qYjJUfjHIaoIvPn9cle/xxXTiR6S6HPf9aD6XjqkU\nMEFtmP0skwcgunyMwuBrVt5rTOCwwXvJPvR7/KQGloa593KZTWRb+FhzihOy\ntOX+\r\n=8rGQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBZlD6sQj9jeoFt3z1cI8/dWNq1YrwFNe1e8/w5w2pwwIhAKXPP203tOpTZ5+QsEbdZ1vL/tRIoJPvOiuZX7ARfkz/"}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.8.0_1534383437559_0.5439578162396612"},"_hasShrinkwrap":false},"1.8.1":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.8.1","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.16.3","body-parser":"1.18.3","cookie-parser":"1.4.3","express-session":"1.15.6","serve-static":"1.13.2","ws":"6.0.0","infusion":"3.0.0-dev.20180222T160835Z.6e1311a","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.0","form-data":"2.3.2","json5":"2.1.0"},"devDependencies":{"eslint-config-fluid":"1.3.0","gpii-grunt-lint-all":"1.0.5","gpii-express":"1.0.14","gpii-pouchdb":"1.0.12","grunt":"1.0.3","nyc":"13.0.1","grunt-shell":"2.1.0","node-jqunit":"1.1.8","rimraf":"2.6.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"0bd06034e9fbef9803c054009121aaeea788c9fb","_id":"kettle@1.8.1","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-aVQ5jIiwH0qssBqIXSAeH0DFlaqwKQlU16Hzv0MRBRXrMTOtFJNSKGsfIHvmRlI0kusXWTlBbAd0s6mEpWcXuA==","shasum":"b2391c88d99b4dc13607c0e7b03f0f43ceb074ba","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.8.1.tgz","fileCount":122,"unpackedSize":485045,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbthT6CRA9TVsSAnZWagAA+3sQAJrl7AESscXq6X9zfGCI\nqYWFJPBrC/j05fJz2fWoFeo/D5RtxXw2REmDxZqLb6ZWXwV8aD/Sa0KW3hJ9\nmhlTJ0XID8J4YHUD+scrCJjEqULDOzpM3pyiaRz/OTUVTIlNZzTuaDtHYrUv\nhX8GlSFnzeJZols5Jw4yBbEH38qS6KQe78ndhO7rFhoeZ851wpMiomNhMFql\nTBQG3BlmepiP5NxeLxGBi43bMod9KDyzbkWFCnTj80lN6R1rj7Rrm6oMeulw\nWEUJ6l5tvqHlSuSk8vBxC0MlQO6mzNoBqWuDdJ+iUAD5qPdAgPlfzA1Qryh+\nHDPv1swD36PWlYCiDBYXEuuLpxifix1XoZLW+mm3uo0Ki3RDMZBuK8Kyswu1\ni59hx7h/OBnuyh8fzFAfsuvKiORBwKezw+3x56jR1K3YrX1oEAR9R6lQ7yqw\nweF3bHL226wVXVoRgCcdqIPxLJEfam9f3vOp9i0v/S1zgQHJhBPDKgjQ+Fw6\nSSq3+9rz11/1ay950qgY0PogNhp5TXvZPeAMe0t9ZoVmvyYct672JIW2IQRr\nWX5CrPEIA4k6U2RM4yCQq6OUGoWdBSMOXtwpLm30HBRTnTTtpK5mSzb49yAj\n8TtIY2puB/qi/0qg1naRK4jQ5P411WreyVMXoDoWitplIouer0Ry2DJny/YT\noKsd\r\n=3dbz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5PpU6nrzWj3CuZKctaDDnUXldnjYoeeLx4r58ahxcBgIhAKPeVSmlvQpCVFZSFfFya6qs96/n5Ph9Rk3Me9Y92Tud"}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.8.1_1538659577993_0.37785756389625247"},"_hasShrinkwrap":false},"1.9.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.9.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.16.4","body-parser":"1.18.3","cookie-parser":"1.4.3","express-session":"1.15.6","serve-static":"1.13.2","ws":"6.1.2","infusion":"3.0.0-dev.20181017T162149Z.787f7d5e5","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.1","form-data":"2.3.3","json5":"2.1.0"},"devDependencies":{"eslint-config-fluid":"1.3.0","gpii-grunt-lint-all":"1.0.5","gpii-express":"1.0.15","gpii-pouchdb":"1.0.12","grunt":"1.0.3","nyc":"13.1.0","grunt-shell":"2.1.0","node-jqunit":"1.1.8","rimraf":"2.6.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"281d9aa34463092df2a75ab2c8c1af0d8ed0c385","_id":"kettle@1.9.0","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-Hcw6KY3UeKTO0NvkarzbI/6HajcJ5ISp97DM85vm7AB5A9ogyh5j5Z20kM8mDg+/kEiOfN3CvkEWNUFsitO24g==","shasum":"e3dd79315c41cf1ba8db98e7e77c32293bcdc719","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.9.0.tgz","fileCount":123,"unpackedSize":767175,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCE4SCRA9TVsSAnZWagAAgUoQAJXOg+EXBneVecWi6zL/\nsHUIsEL7bSv5lSaNrR7wSmfNqohPTdFIRp3vZp8ox2ekVjt7ApkVCE8rrIeN\ni3SJJyrHS5loOiiDsEO22nu/Rvxh0f8IOqlbYZjIwd37c81sKxOo/MiMUpXQ\nw+aREdqxrZ/Be3XgNDHSp0xa0iCuaYMSBqA1rIkQX14SJvfmiIJNIFIV9s6j\nbW8WLwPa0o8nOsoZ0az12c7ncawZ7mvw+ypSydeOjIo2NhX7bua5OKV9SfVu\nzR/r4WhR2bFT3tQYzPlMfTdL/blGg515B98QFnRpcZjHuR7/dGqgQm5m2xw1\n9bxTBf64AuKfR1zw4Dx46gsIkqhvUv0mzab7FkCC/xneYkZsBuohPodF0dho\nacgkUWMo0PhNvUsUr7NsmADt+oPfOqbXCYGSAxdvdh0niCHRIp4PuChZu+uw\nsJeljNdno4ktNBfcaPFePORFQD966Ig+zNUg06JrBSPRZYiNXX/yjGivYXy1\nJC6nYP06jXGgHz9wRR9QhKWi9r3HQtkn6pvlzVwwseVAetFoeRFWrvjWHQWC\n0q5SruQ3PrZ/67jikdYIx7nsoMqxpAPtx0dhH8tAyC+FAUj24rn/mVGuxAI1\neXF901yReWnv9cgINnG54VMPidaLtsBYO8lOL3K48DHb+i3ymDusuqdPkO6B\nYUt3\r\n=8q0n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgcjIeFg24B3rdweOyzESjiMNt+lFk58J4nTNqmPqgAgIgWfxzuTDdwCZW1MBlrgRns2EekX31c/ihKSxPXkI4gJw="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.9.0_1544048145529_0.5756694489727872"},"_hasShrinkwrap":false},"1.10.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.10.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.16.4","body-parser":"1.18.3","cookie-parser":"1.4.3","express-session":"1.15.6","serve-static":"1.13.2","ws":"6.1.3","infusion":"3.0.0-dev.20181017T162149Z.787f7d5e5","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.1","form-data":"2.3.3","json5":"2.1.0"},"devDependencies":{"eslint-config-fluid":"1.3.0","gpii-grunt-lint-all":"1.0.5","gpii-express":"1.0.15","gpii-pouchdb":"1.0.14","grunt":"1.0.3","nyc":"13.1.0","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"2.6.3"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"113aed42c9449e86e2f9666cc43bcc3b6e46eb16","_id":"kettle@1.10.0","_npmVersion":"5.6.0","_nodeVersion":"10.13.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-YPBtsjGfpEORKD+rbsHh3JPjBv91tt/QPDZcwxxhPyn33/2JaG1RIX1bo7G4eWDoVIgXHPeEDrYEZnVgVFKTGg==","shasum":"9eebc71e1e923f6802d334722c39d2c506c50bec","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.10.0.tgz","fileCount":122,"unpackedSize":492232,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWMGSCRA9TVsSAnZWagAAh9gP/ix2wi2flkDMHul2cz67\nm+areWS48aoIqSoDwaZSYLzEEPWvu8b3352BaKLRY+6ZHMYMxkoPBcx9IrS2\n5o3rEmEe5IDmpv2dHayAfodf9ff0Rv8ovk/f97xV5H5e1TFlohEUGe8EfjJe\nA+RhOuEdlBq8uVFu++U7Gt1ki6c7bOJNmD97aPTU5nIsiKafomaUlZMywYA2\nyYjZkBZU9ydzZwweCfqsKlwLWkj8CC+Xxj83mMqQwUumlxoH8oip1BqBk2tJ\nUnZV9bp1YGxvwGaduKMKC/INaRuhfAGgB+UNQB9cWROv3kmqf93k5uG4Tpm/\nzO7p4/4kn3os3tR7S4F0L3nbfdfqsze4gnFqBX9K0d6SgkM2Nkwby6a8+58J\nhFBedkYHWLdzv4o4DbKGHL0/WIMTYRduGng6vM0pgoRrp1QBLW2DBQZY9fuE\nWQVGhLaxo2j7ruqFzTa1IfWWjY3seFNH0BpBOEF1VHrdxBMx1TMdLelPoMVd\n7YhTAKEVc3ViYV29yCAfMF3mINSxdXkoBz9iStTCnlJPYggAQeKDfWRJrA+a\nOk3LIROBvrPRSMq2lON4qa41QNJob5WeqDiV450tnE1w2fiLFsaQDrmVwvXu\nFlY7V5POaP5KYeBk9lwVQROd894894+LZ/hznYAcr4zvL/o9gaOMI55sKH8H\ncezO\r\n=bvQv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHPXp/5up4cA5yOllq9o8Z7JdJ6032xKKbL8vzItCKY6AiEAtE6kLC0UnWhaMNOkxf+0a0xU/QCuJBCgu3/ttUMhQEY="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.10.0_1549320594258_0.7653958703938848"},"_hasShrinkwrap":false},"1.10.1":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.10.1","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.16.4","body-parser":"1.18.3","cookie-parser":"1.4.3","express-session":"1.15.6","serve-static":"1.13.2","ws":"6.1.3","infusion":"3.0.0-dev.20181017T162149Z.787f7d5e5","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.1","form-data":"2.3.3","json5":"2.1.0"},"devDependencies":{"eslint-config-fluid":"1.3.0","gpii-grunt-lint-all":"1.0.5","gpii-express":"1.0.15","gpii-pouchdb":"1.0.14","grunt":"1.0.3","nyc":"13.1.0","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"2.6.3"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"a9323f3b960d0912658431cc26fdbb1f4d401cc0","_id":"kettle@1.10.1","_npmVersion":"5.6.0","_nodeVersion":"10.13.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-YmCMMJia4D1c6wrKlO54+T0JvBCb1Uc04x4JeA2DRfF/1pNn1pU8ZU7YSwbmIaJwhroTN0W9T6RGg6zaawTllw==","shasum":"5664051e79136ed3c0261b18d93dd107fd5796c3","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.10.1.tgz","fileCount":122,"unpackedSize":492462,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWXzHCRA9TVsSAnZWagAAEIYP/0gC+ZcNMVTFJX6Kifc8\nlJz63tNwSCMtPzxAcDXJ9gzh56fbsZgrpWhinsf0ESBe1HD3CoTH76OvPI3D\njnHnHY3+s2P+Y9uP7QaRIhpMd2vBs6zXLBJ2l+IGzAmUWLLi+m6uf49XqTHq\nHDMeYYFt7t3JVia45RoTR3d9wHXVKxGc5V+5PorNWIuTqRnmnZcoO+pDJqp2\nefjD7OJsb4KG/F/VZvlSMLNlH2lpyx1QzPd2e1Tu3onT36E6W35U0zbYyY9b\nL0CspKaoInszoiiF4vnRurBo0piYH7dImy0m0ZTxvMoVx6e55gujp6nqTJ9O\nWlDcEtCWuKp+w7k2De5heuS3SZrCyIHNWqaz2nzFuJ7aki5iKYXzGJoexXd1\nmMicAB8AfZjxo7KQrsw7KSRp6z3LMh7h4+rsggv6wvGtq+rudpp/8as+p4GW\nylYHXjw2z2Pk51KhWJkQxNImLjY3HSzP9frMl3ohT1cw3sy9TBW8BAFnGV5w\np0H78+sHuP3LG8UXP+LkT+P3tD2/x6mfyk87Ii/KMfdON8RlNmE2heoTmmOX\n+caABKzNeBeMBgODsEL5++tUMezYzQ52/1IXXmmdRPpn6WxDpi9WEyahls8s\nA/i6wHjNIoiwD+1Wocqi7XVqmMISrdQ3Gjv3YrcTTbd3qTI4xRlutgFPrUZH\n7/3D\r\n=p6/A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0CurwPNioD3qqHZWd+GpDSYtgAk6AuisnEzCooP7t8QIgLP9l0ZLKAEJ+sYDSxRZEu8QvVk5GKAELZ8rZFD2xMFk="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.10.1_1549368518725_0.49069714514863394"},"_hasShrinkwrap":false},"1.11.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.11.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.0","body-parser":"1.19.0","cookie-parser":"1.4.4","express-session":"1.16.1","serve-static":"1.14.1","ws":"7.0.0","infusion":"3.0.0-dev.20190328T144119Z.ec44dbfab","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.1","form-data":"2.3.3","json5":"2.1.0"},"devDependencies":{"eslint-config-fluid":"1.3.0","gpii-grunt-lint-all":"1.0.5","gpii-express":"1.0.15","gpii-pouchdb":"1.0.14","grunt":"1.0.4","nyc":"14.1.1","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"2.6.3"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"7f27d3627210e00408ad6d0456d3c7f93747cbb3","_id":"kettle@1.11.0","_npmVersion":"5.6.0","_nodeVersion":"10.13.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-ZFTMg1eD0NHpbdFXzzd9oNIEt7Q65X6MILA+4bFOySi5YwdvbcfmiZRO0Eu5m7xl1FF69lKrOqYzrrSMepxSoQ==","shasum":"31fd04e76614b01539411de5b3511ec0c5c05ec3","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.11.0.tgz","fileCount":123,"unpackedSize":521999,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5dbKCRA9TVsSAnZWagAAi4UP/RFCsygg221++HFL8XhE\ngOYPrn6hBrYno7EhGIPCmoUXNnfTJBmYNBmb0zJLwXhHPFr/OPKdEQGEFu+d\nn3AjRD86oCnZMvOmhg9oaCHmXS4uuGPY95EhGp5PEIR6nPrvNTmswBOX+uUt\nHnMg4k64CWRh7rGELYfUAQZqBhKZXHtzNSbFiMFQhGWQY831yOZt4NSc+3jw\nb0n1IwtzKfZCi+4yHrdg9+TelndUexMzrOa01isccdShLIjAgSq/PFA3t2pO\n39pOSLUuOoce4o1nZorbrtCWYQe5sCmPAbxUXeVEXF+tyZA8TRIUY16oQLGc\nxgBS8oTi/9PxScUvUB4FijxsYe9NUM1lEUkAQ/Z0dzZoSkV0xlvlesgnuhyj\nrE8R0JVqO6Y4Rf4mcjJ2dCpxxzxjoc1w4koCiCVB7sodSiAqFvqwXBllMQUY\nA27/QPW22QkeJtT/LMG/a3WavuzkEdVOVVsae7eUxa8scplu/y99qilOV7f1\nVXYNjHK6XMqQMTbpYgv91cAv900Q0yADfZlMORYeKBA5bnx6kjpsCuBxCRoR\noTRCqlJXjitS5swo7sbZDX8PO5ea8HLago/W+/dkmyxY6aOAeXHP4jLr0kjm\n50vgYTq4Np2+b1YO5vg46hYJeLlBaVhBUc45pc1ATFY7QU3FEbTzYGSR90pK\n7TzV\r\n=OgCX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC1Jt0W0QBQXLGfMMGVcIl9ixtv1urkzecgPqMDYKfXSAiEAmsr6KoXZqAJysV7B2xfueKogGRE2T/z2Z8R2oLwzlIk="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.11.0_1558566601663_0.3974402508168322"},"_hasShrinkwrap":false},"1.12.0-dev.20191024T094429Z.41cce95.KETTLE-80":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.12.0-dev.20191024T094429Z.41cce95.KETTLE-80","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.0","body-parser":"1.19.0","cookie-parser":"1.4.4","express-session":"1.16.1","serve-static":"1.14.1","ws":"7.0.0","infusion":"3.0.0-dev.20190328T144119Z.ec44dbfab","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.1","form-data":"2.3.3","json5":"2.1.0"},"devDependencies":{"eslint-config-fluid":"1.3.0","gpii-grunt-lint-all":"1.0.5","gpii-express":"1.0.15","gpii-pouchdb":"1.0.14","grunt":"1.0.4","nyc":"14.1.1","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"2.6.3"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"readme":"# Kettle\n\n[![Build status](https://badge.buildkite.com/8715d7bc790b1c2702109d3ce2b777fe5322c858465e587478.svg)](https://buildkite.com/fluid-project/kettle)\n\nKettle is an integration technology which promotes the expression of servers handling HTTP and WebSockets endpoints.\nWith a few exceptions, Kettle implements no primary functionality of its own, but aggregates the facilities of\n[express](http://expressjs.com/) and [ws](https://github.com/websockets/ws), as well as middleware held in the wider\n[pillarjs](https://github.com/pillarjs) \"Bring your own HTTP Framework Framework\" ecosystem. Kettle applications can\neasily incorporate any express-standard middleware, as well as coexisting with standard express apps targeted at the\nsame node.js <a href=\"https://nodejs.org/api/http.html#http_class_http_server\"><code>http.Server</code></a>. Since\nKettle applications are expressed declaratively, in the JSON format encoding\n[Infusion](https://github.com/fluid-project/infusion)'s component trees, it is possible to adapt existing\napplications easily, as well as inserting middleware and new handlers anywhere in the pipeline without modifying the\noriginal application's code. This makes Kettle suitable for uses where application functionality needs to be deployed\nflexibly in a variety of different configurations.\n\nIn fact, Kettle's dependency on express itself is minimal, since the entirety of the Kettle request handling pipeline\nis packaged as a single piece of express-compatible middleware – Kettle could be deployed against any other consumer\nof middleware or even a raw node.js HTTP server.\n\n## Contents of this repository\n\n### Core Kettle implementation\n\nThis is packaged as Infusion [grades](http://docs.fluidproject.org/infusion/development/ComponentGrades.html) derived\nfrom [`kettle.server`](./docs/Servers.md#kettle.server),\n[`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) and\n[`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app). The first two of these exist in variants specialized both\nfor plain HTTP (with the `.http` suffix) and for WebSockets (with the `.ws` suffix) – `kettle.app` does not specialize.\n\n### Contents - Testing\n\nAs well as the integration technology implementing Kettle itself, this repository also contains functionality helpful\nfor testing HTTP and WebSockets servers written in arbitrary technologies. This is accessed by running\n`kettle.loadTestingSupport()` after having called `require(\"kettle\")`. Kettle testing support allows HTTP and\nWebSockets client requests to be packaged as [Infusion](https://github.com/fluid-project/infusion) components, suitable\nfor use with Infusion's\n[IoC Testing Framework](http://docs.fluidproject.org/infusion/development/IoCTestingFramework.html).\nAny user of Kettle's testing support needs to have [node-jqunit](https://github.com/fluid-project/node-jqunit)\nregistered as a member of their own project's `devDependencies` in their own package.json.\n\nKettle runs on [node.js](https://nodejs.org) version 4.x (see [package.json](package.json) for current dependency\nprofile).\n\n### Contents - DataSources\n\nThe Kettle repository also contains a few implementations of the simple `DataSource` contract for read/write access to\ndata with a simple semantic (broadly the same as that encoded in\n[CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) although the current DataSource semantic does not\nprovide explicitly for deletion). See the documentation section on [DataSources](./docs/DataSources.md) for details of\nthis contract, the available implementations and how to use them.\n\nThis repository contains DataSource implementations suitable for HTTP endpoints (with a particular variety specialised\nfor accessing CouchDB databases with CRUDlike semantics) as well as the filesystem, with an emphasis on JSON payloads.\n\n## Getting Started and Community\n\n### Installation instructions\n\nFirstly, install node and npm by running a standard installer from [node.js](https://nodejs.org). Clone this repository\nand then run `npm install`.\n\n### Issue Tracking\n\nIssue tracking is at [http://issues.fluidproject.org/browse/KETTLE](http://issues.fluidproject.org/browse/KETTLE).\n\n### IRC\n\nVisit `#fluid-work` on Freenode – community resources are linked at\n[Fluid's IRC Channels](https://wiki.fluidproject.org/display/fluid/IRC+Channel).\n\n### Mailing list\n\nContact us on the [fluid-work](https://wiki.fluidproject.org/display/fluid/Mailing+Lists) mailing list with any\nproblems or comments.\n\n### Uses of Kettle and related projects\n\nThe primary user of Kettle is the [GPII](http://gpii.net/)'s autopersonalisation infrastructure, held at\n[GPII/universal](https://github.com/GPII/universal). Kettle is used to provide a flexible means of deploying the\nGPII's \"Flow Manager\" and related components distributed across multiple local and remote installations.\n\nA closely related project to Kettle is [gpii-express](https://github.com/GPII/gpii-express) which is used in other\nGPII projects such as the [terms registry](https://github.com/GPII/common-terms-registry) and\n[unified listing](https://github.com/GPII/ul-api). This is similar in architecture to Kettle (wrapping express\nprimitives such as servers and requests into dynamically constructed Infusion components) but slightly different in\nemphasis –\n\n* gpii-express allows independently mounted application units with nested routing, in the Express 4.x style – whereas\n  Kettle is currently limited to flat Express 3.x-style routing\n* Kettle incorporates support for WebSockets endpoints, whereas gpii-express does not\n* Kettle incorporates support for DataSources (see [DataSources](./docs/DataSources.md) )\n\nThe request handling architecture for gpii-express and Kettle is quite similar and the projects will probably converge\nover time. gpii-express currently already depends on Kettle to get access to its HTTP\n[testing](./docs/KettleTestingFramework.md) support.\n\n## Documentation\n\nDocumentation and sample code for working with Kettle is contained in the [docs](./docs) directory. Kettle is based on\nFluid [Infusion](http://fluidproject.org/infusion.html)'s\n[component model](http://docs.fluidproject.org/infusion/development/HowToUseInfusionIoC.html). If you aren't familiar\nwith the syntax and meaning of Infusion component trees, it is a good idea to browse the documentation, tutorials and\nexamples at the Infusion [documentation site](http://docs.fluidproject.org/infusion/development/).\n\nIt contains the following topics:\n\n1. Defining top-level [Kettle applications using \"config\" files](docs/ConfigsAndApplications.md).\n2. Defining HTTP and Websockets servers using the grades [`kettle.server`](./docs/Servers.md#kettle.server) and\n   [`kettle.server.ws`](./docs/Servers.md#kettle.server.ws).\n3. Defining Kettle request handlers derived from grades\n   [`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) grouped into app units derived from\n   [`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app)\n4. Working with standard express [middleware](./docs/Middleware.md) –  incorporating any standard middleware from the\n   express community and registering it into a Kettle application\n5. Working with [DataSources](./docs/DataSources.md) to abstract over asynchronous access to (primarily JSON-formatted)\n   data stored locally or remotely\n6. Defining conversational, asynchronous test fixtures against HTTP and WebSockets servers using the [Kettle testing\n   framework](./docs/KettleTestingFramework.md)\n\nOf these elements of this module, those described in topics 1, 5 and 6 (configs, DataSources and the testing framework)\nare portable and do not depend specifically on the Kettle server and request handling infrastructure –   they can be\nused together with any technologies defining node.js HTTP and WebSockets servers (or in the case of configs,\nany node.js enabled [Infusion](http://fluidproject.org/infusion.html) application).\n","readmeFilename":"README.md","gitHead":"41cce95f22775b80fe6d3a22ebfa80ac6bef8d6c","_id":"kettle@1.12.0-dev.20191024T094429Z.41cce95.KETTLE-80","_npmVersion":"5.6.0","_nodeVersion":"10.13.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-n7IY9fhwGPI3hEbgYSN0wZyZEk/29wGNPGM9362SwG5DGm1sUwyCadURcg5Amz265dVrej3orm1qlnVnuwlTdA==","shasum":"5dc09492c10fd129d354d950aca1a3d042e9f547","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.12.0-dev.20191024T094429Z.41cce95.KETTLE-80.tgz","fileCount":123,"unpackedSize":522416,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsXLcCRA9TVsSAnZWagAAplsP/AmotV+Ki2vycxLD08MD\n9/+atTzGwRxMW9Hpm5XnZJg8nBGIZUM3K6eiDjg0vvFejmMi2T+UGC3iN75F\n+N39QAZ9oHXEZ3cdjQJqvKrbt/jihgMBxbC6/eO0ZzK0AznEAaYrW+exQL94\nRNo+SXaM8ASyL/Rs4dEPlONbeQ1RHa48sgBzHK62o8tcgPO3LKC3VnI7B2j0\nBA+JltJAC6BCvXTFuoIfWQ4XqOTrw9oyIbHmsq3I3ejwqKEfZdOYAaP1tZVq\nLaxHPU7vZZ7jcGUmiQCdT97Xrf7KcsjzZ0+mrurr1IITvLsxk5VLf3gPclkI\nqUIaNc/OeOdx/FXwo/rp3X5LdLguWpAGIIxIF1Mk97LQODtlp6IMKq5WyIZu\n5SvIS1dXzhFb4pOqfQoto2ILXi9J0mWjTlSxqSrGRmg8TlsgEJi8EF12+U64\nfSpnBZUsbm9zW1/iJGmEpeiU9sPyEUh2e1vAUzPBw70qARQ9BUOGs8fzwAhJ\n/bXw2aGKgH5uH7FePHOCVhGDMxSAWM+usFiQuT225Iq6bmtR3V2n4VNGtx0d\nua5d/vWq+OZwCx24kGEWjzrpIgqRgSDF0Wb1OflBpzX92bnNCZw2CxPssiGy\nlHo520qVe1yN+3k2XxAkRQlz4VHf1/I+yFF7hT4pvK5ml3G4dQANh6yLS2ua\ncjPu\r\n=bVhx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbe6+oNdaOemfsNxD7Q8fSv2tzDorcKeMJqWzQud5fMQIhAIewEjB9T6F0HrjWSKUmJhL2KEceKZmI15P4TpadBEI3"}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.12.0-dev.20191024T094429Z.41cce95.KETTLE-80_1571910364044_0.1151189536316033"},"_hasShrinkwrap":false},"1.12.0-dev.20191024T124425Z.59643ce.KETTLE-80":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.12.0-dev.20191024T124425Z.59643ce.KETTLE-80","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.0","body-parser":"1.19.0","cookie-parser":"1.4.4","express-session":"1.16.1","serve-static":"1.14.1","ws":"7.0.0","infusion":"3.0.0-dev.20190328T144119Z.ec44dbfab","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.1","form-data":"2.3.3","json5":"2.1.0"},"devDependencies":{"eslint-config-fluid":"1.3.0","gpii-grunt-lint-all":"1.0.5","gpii-express":"1.0.15","gpii-pouchdb":"1.0.14","grunt":"1.0.4","nyc":"14.1.1","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"2.6.3"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"readme":"# Kettle\n\n[![Build status](https://badge.buildkite.com/8715d7bc790b1c2702109d3ce2b777fe5322c858465e587478.svg)](https://buildkite.com/fluid-project/kettle)\n\nKettle is an integration technology which promotes the expression of servers handling HTTP and WebSockets endpoints.\nWith a few exceptions, Kettle implements no primary functionality of its own, but aggregates the facilities of\n[express](http://expressjs.com/) and [ws](https://github.com/websockets/ws), as well as middleware held in the wider\n[pillarjs](https://github.com/pillarjs) \"Bring your own HTTP Framework Framework\" ecosystem. Kettle applications can\neasily incorporate any express-standard middleware, as well as coexisting with standard express apps targeted at the\nsame node.js <a href=\"https://nodejs.org/api/http.html#http_class_http_server\"><code>http.Server</code></a>. Since\nKettle applications are expressed declaratively, in the JSON format encoding\n[Infusion](https://github.com/fluid-project/infusion)'s component trees, it is possible to adapt existing\napplications easily, as well as inserting middleware and new handlers anywhere in the pipeline without modifying the\noriginal application's code. This makes Kettle suitable for uses where application functionality needs to be deployed\nflexibly in a variety of different configurations.\n\nIn fact, Kettle's dependency on express itself is minimal, since the entirety of the Kettle request handling pipeline\nis packaged as a single piece of express-compatible middleware – Kettle could be deployed against any other consumer\nof middleware or even a raw node.js HTTP server.\n\n## Contents of this repository\n\n### Core Kettle implementation\n\nThis is packaged as Infusion [grades](http://docs.fluidproject.org/infusion/development/ComponentGrades.html) derived\nfrom [`kettle.server`](./docs/Servers.md#kettle.server),\n[`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) and\n[`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app). The first two of these exist in variants specialized both\nfor plain HTTP (with the `.http` suffix) and for WebSockets (with the `.ws` suffix) – `kettle.app` does not specialize.\n\n### Contents - Testing\n\nAs well as the integration technology implementing Kettle itself, this repository also contains functionality helpful\nfor testing HTTP and WebSockets servers written in arbitrary technologies. This is accessed by running\n`kettle.loadTestingSupport()` after having called `require(\"kettle\")`. Kettle testing support allows HTTP and\nWebSockets client requests to be packaged as [Infusion](https://github.com/fluid-project/infusion) components, suitable\nfor use with Infusion's\n[IoC Testing Framework](http://docs.fluidproject.org/infusion/development/IoCTestingFramework.html).\nAny user of Kettle's testing support needs to have [node-jqunit](https://github.com/fluid-project/node-jqunit)\nregistered as a member of their own project's `devDependencies` in their own package.json.\n\nKettle runs on [node.js](https://nodejs.org) version 4.x (see [package.json](package.json) for current dependency\nprofile).\n\n### Contents - DataSources\n\nThe Kettle repository also contains a few implementations of the simple `DataSource` contract for read/write access to\ndata with a simple semantic (broadly the same as that encoded in\n[CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) although the current DataSource semantic does not\nprovide explicitly for deletion). See the documentation section on [DataSources](./docs/DataSources.md) for details of\nthis contract, the available implementations and how to use them.\n\nThis repository contains DataSource implementations suitable for HTTP endpoints (with a particular variety specialised\nfor accessing CouchDB databases with CRUDlike semantics) as well as the filesystem, with an emphasis on JSON payloads.\n\n## Getting Started and Community\n\n### Installation instructions\n\nFirstly, install node and npm by running a standard installer from [node.js](https://nodejs.org). Clone this repository\nand then run `npm install`.\n\n### Issue Tracking\n\nIssue tracking is at [http://issues.fluidproject.org/browse/KETTLE](http://issues.fluidproject.org/browse/KETTLE).\n\n### IRC\n\nVisit `#fluid-work` on Freenode – community resources are linked at\n[Fluid's IRC Channels](https://wiki.fluidproject.org/display/fluid/IRC+Channel).\n\n### Mailing list\n\nContact us on the [fluid-work](https://wiki.fluidproject.org/display/fluid/Mailing+Lists) mailing list with any\nproblems or comments.\n\n### Uses of Kettle and related projects\n\nThe primary user of Kettle is the [GPII](http://gpii.net/)'s autopersonalisation infrastructure, held at\n[GPII/universal](https://github.com/GPII/universal). Kettle is used to provide a flexible means of deploying the\nGPII's \"Flow Manager\" and related components distributed across multiple local and remote installations.\n\nA closely related project to Kettle is [gpii-express](https://github.com/GPII/gpii-express) which is used in other\nGPII projects such as the [terms registry](https://github.com/GPII/common-terms-registry) and\n[unified listing](https://github.com/GPII/ul-api). This is similar in architecture to Kettle (wrapping express\nprimitives such as servers and requests into dynamically constructed Infusion components) but slightly different in\nemphasis –\n\n* gpii-express allows independently mounted application units with nested routing, in the Express 4.x style – whereas\n  Kettle is currently limited to flat Express 3.x-style routing\n* Kettle incorporates support for WebSockets endpoints, whereas gpii-express does not\n* Kettle incorporates support for DataSources (see [DataSources](./docs/DataSources.md) )\n\nThe request handling architecture for gpii-express and Kettle is quite similar and the projects will probably converge\nover time. gpii-express currently already depends on Kettle to get access to its HTTP\n[testing](./docs/KettleTestingFramework.md) support.\n\n## Documentation\n\nDocumentation and sample code for working with Kettle is contained in the [docs](./docs) directory. Kettle is based on\nFluid [Infusion](http://fluidproject.org/infusion.html)'s\n[component model](http://docs.fluidproject.org/infusion/development/HowToUseInfusionIoC.html). If you aren't familiar\nwith the syntax and meaning of Infusion component trees, it is a good idea to browse the documentation, tutorials and\nexamples at the Infusion [documentation site](http://docs.fluidproject.org/infusion/development/).\n\nIt contains the following topics:\n\n1. Defining top-level [Kettle applications using \"config\" files](docs/ConfigsAndApplications.md).\n2. Defining HTTP and Websockets servers using the grades [`kettle.server`](./docs/Servers.md#kettle.server) and\n   [`kettle.server.ws`](./docs/Servers.md#kettle.server.ws).\n3. Defining Kettle request handlers derived from grades\n   [`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) grouped into app units derived from\n   [`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app)\n4. Working with standard express [middleware](./docs/Middleware.md) –  incorporating any standard middleware from the\n   express community and registering it into a Kettle application\n5. Working with [DataSources](./docs/DataSources.md) to abstract over asynchronous access to (primarily JSON-formatted)\n   data stored locally or remotely\n6. Defining conversational, asynchronous test fixtures against HTTP and WebSockets servers using the [Kettle testing\n   framework](./docs/KettleTestingFramework.md)\n\nOf these elements of this module, those described in topics 1, 5 and 6 (configs, DataSources and the testing framework)\nare portable and do not depend specifically on the Kettle server and request handling infrastructure –   they can be\nused together with any technologies defining node.js HTTP and WebSockets servers (or in the case of configs,\nany node.js enabled [Infusion](http://fluidproject.org/infusion.html) application).\n","readmeFilename":"README.md","gitHead":"59643ce87280f0948f888b356422aeca78065667","_id":"kettle@1.12.0-dev.20191024T124425Z.59643ce.KETTLE-80","_npmVersion":"5.6.0","_nodeVersion":"10.13.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-p/0Y2Z1G2mNhkOMq89UAD7yxCfNqaMpZZMkpHnObc0kh0EGC4PcU28B5kmchv+9IJq1r30AAqyx/ZYqlATkATg==","shasum":"fa623318f790166dfe621aecc27c298273c203b5","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.12.0-dev.20191024T124425Z.59643ce.KETTLE-80.tgz","fileCount":123,"unpackedSize":523125,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdsZzBCRA9TVsSAnZWagAAEQ0P/2wRuCtp7vIpDmklPzBz\nFMzYkE3FazqRjoMA/bY4dV++oyW+g+AajKDqSio+PSIIEkQu8T/Civ8+Gy2j\nFTScEkB7ZfAQZfzlDcQM5NvQeLir5MORA/WCdBcCVmshe75ZYXVj3Nz43/Sk\neSCkD91ceAzGHNxMqDt6olXa6ivfVy50HMNLd+CVYTFb4bokefAZ/rKpuVtY\nlMd5xQDBGego8KlTi5rIozhgdYWHagqCXNCcJyq4DKc7g8pHXnLICEzkVy98\nFCndEJG1KYfhRoWjbV/eytbBFKOWiUN4WX5oopsf0Nrw/EC52jpKaVfOrnwJ\n+SISAK2/B2hQkqvi93MngEvOLw7Sf8aoRfnhYuzd9SALKEfcjMj3VGqHvW9X\ne2VB63lSJzVp8w/ue9kUuDjiiWkgxHmvC+aLd59qu9uEWOIbR+kSY1srHz2G\n3x89O+4LJUOTNtGZX2ncO9V1XTnZoan0M1hw4KALwPZyimd+20EqPK3/aq4+\nd6FlCqj4Kexu18B62rvEsOMUT+GgBCKrb4OBY4cLDnmwAHdpP+UuL41mOBFU\nUlcG+/6nbpGr+9+yYDT0GkmSSs5piPELhOy2SGrBsCLJw6XMC7zdzDePQ6Yy\nvKW3uteZbKstn5Xxx3X6SCtCL2UwkJVXhF2d5H+5EeHBASwDk6fxgY+da4+w\nxSUg\r\n=MxH6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCUMv81UGDVhBKVEqot4Bg5ZjkBBwtJkPzaGP2A2WoeeQIhAMwwPbETPYXnHdFR3pGfpXmm7PonRO8LLry6bWslvwgv"}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.12.0-dev.20191024T124425Z.59643ce.KETTLE-80_1571921089058_0.560297444208705"},"_hasShrinkwrap":false},"1.12.0-dev.20191125T152958Z.c571ba7.FLUID-6145":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.12.0-dev.20191125T152958Z.c571ba7.FLUID-6145","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.1","body-parser":"1.19.0","cookie-parser":"1.4.4","express-session":"1.17.0","serve-static":"1.14.1","ws":"7.2.0","infusion":"3.0.0-dev.20191123T235705Z.4cd1b9d90.FLUID-6426","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.2","form-data":"3.0.0","json5":"2.1.1"},"devDependencies":{"eslint-config-fluid":"1.3.0","gpii-grunt-lint-all":"1.0.5","gpii-express":"1.0.15","gpii-pouchdb":"1.0.15","grunt":"1.0.4","nyc":"14.1.1","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"3.0.0"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"readme":"# Kettle\n\n[![Build status](https://badge.buildkite.com/8715d7bc790b1c2702109d3ce2b777fe5322c858465e587478.svg)](https://buildkite.com/fluid-project/kettle)\n\nKettle is an integration technology which promotes the expression of servers handling HTTP and WebSockets endpoints.\nWith a few exceptions, Kettle implements no primary functionality of its own, but aggregates the facilities of\n[express](http://expressjs.com/) and [ws](https://github.com/websockets/ws), as well as middleware held in the wider\n[pillarjs](https://github.com/pillarjs) \"Bring your own HTTP Framework Framework\" ecosystem. Kettle applications can\neasily incorporate any express-standard middleware, as well as coexisting with standard express apps targeted at the\nsame node.js <a href=\"https://nodejs.org/api/http.html#http_class_http_server\"><code>http.Server</code></a>. Since\nKettle applications are expressed declaratively, in the JSON format encoding\n[Infusion](https://github.com/fluid-project/infusion)'s component trees, it is possible to adapt existing\napplications easily, as well as inserting middleware and new handlers anywhere in the pipeline without modifying the\noriginal application's code. This makes Kettle suitable for uses where application functionality needs to be deployed\nflexibly in a variety of different configurations.\n\nIn fact, Kettle's dependency on express itself is minimal, since the entirety of the Kettle request handling pipeline\nis packaged as a single piece of express-compatible middleware – Kettle could be deployed against any other consumer\nof middleware or even a raw node.js HTTP server.\n\n## Contents of this repository\n\n### Core Kettle implementation\n\nThis is packaged as Infusion [grades](http://docs.fluidproject.org/infusion/development/ComponentGrades.html) derived\nfrom [`kettle.server`](./docs/Servers.md#kettle.server),\n[`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) and\n[`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app). The first two of these exist in variants specialized both\nfor plain HTTP (with the `.http` suffix) and for WebSockets (with the `.ws` suffix) – `kettle.app` does not specialize.\n\n### Contents - Testing\n\nAs well as the integration technology implementing Kettle itself, this repository also contains functionality helpful\nfor testing HTTP and WebSockets servers written in arbitrary technologies. This is accessed by running\n`kettle.loadTestingSupport()` after having called `require(\"kettle\")`. Kettle testing support allows HTTP and\nWebSockets client requests to be packaged as [Infusion](https://github.com/fluid-project/infusion) components, suitable\nfor use with Infusion's\n[IoC Testing Framework](http://docs.fluidproject.org/infusion/development/IoCTestingFramework.html).\nAny user of Kettle's testing support needs to have [node-jqunit](https://github.com/fluid-project/node-jqunit)\nregistered as a member of their own project's `devDependencies` in their own package.json.\n\nKettle runs on [node.js](https://nodejs.org) version 4.x (see [package.json](package.json) for current dependency\nprofile).\n\n### Contents - DataSources\n\nThe Kettle repository also contains a few implementations of the simple `DataSource` contract for read/write access to\ndata with a simple semantic (broadly the same as that encoded in\n[CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) although the current DataSource semantic does not\nprovide explicitly for deletion). See the documentation section on [DataSources](./docs/DataSources.md) for details of\nthis contract, the available implementations and how to use them.\n\nThis repository contains DataSource implementations suitable for HTTP endpoints (with a particular variety specialised\nfor accessing CouchDB databases with CRUDlike semantics) as well as the filesystem, with an emphasis on JSON payloads.\n\n## Getting Started and Community\n\n### Installation instructions\n\nFirstly, install node and npm by running a standard installer from [node.js](https://nodejs.org). Clone this repository\nand then run `npm install`.\n\n### Issue Tracking\n\nIssue tracking is at [http://issues.fluidproject.org/browse/KETTLE](http://issues.fluidproject.org/browse/KETTLE).\n\n### IRC\n\nVisit `#fluid-work` on Freenode – community resources are linked at\n[Fluid's IRC Channels](https://wiki.fluidproject.org/display/fluid/IRC+Channel).\n\n### Mailing list\n\nContact us on the [fluid-work](https://wiki.fluidproject.org/display/fluid/Mailing+Lists) mailing list with any\nproblems or comments.\n\n### Uses of Kettle and related projects\n\nThe primary user of Kettle is the [GPII](http://gpii.net/)'s autopersonalisation infrastructure, held at\n[GPII/universal](https://github.com/GPII/universal). Kettle is used to provide a flexible means of deploying the\nGPII's \"Flow Manager\" and related components distributed across multiple local and remote installations.\n\nA closely related project to Kettle is [gpii-express](https://github.com/GPII/gpii-express) which is used in other\nGPII projects such as the [terms registry](https://github.com/GPII/common-terms-registry) and\n[unified listing](https://github.com/GPII/ul-api). This is similar in architecture to Kettle (wrapping express\nprimitives such as servers and requests into dynamically constructed Infusion components) but slightly different in\nemphasis –\n\n* gpii-express allows independently mounted application units with nested routing, in the Express 4.x style – whereas\n  Kettle is currently limited to flat Express 3.x-style routing\n* Kettle incorporates support for WebSockets endpoints, whereas gpii-express does not\n* Kettle incorporates support for DataSources (see [DataSources](./docs/DataSources.md) )\n\nThe request handling architecture for gpii-express and Kettle is quite similar and the projects will probably converge\nover time. gpii-express currently already depends on Kettle to get access to its HTTP\n[testing](./docs/KettleTestingFramework.md) support.\n\n## Documentation\n\nDocumentation and sample code for working with Kettle is contained in the [docs](./docs) directory. Kettle is based on\nFluid [Infusion](http://fluidproject.org/infusion.html)'s\n[component model](http://docs.fluidproject.org/infusion/development/HowToUseInfusionIoC.html). If you aren't familiar\nwith the syntax and meaning of Infusion component trees, it is a good idea to browse the documentation, tutorials and\nexamples at the Infusion [documentation site](http://docs.fluidproject.org/infusion/development/).\n\nIt contains the following topics:\n\n1. Defining top-level [Kettle applications using \"config\" files](docs/ConfigsAndApplications.md).\n2. Defining HTTP and Websockets servers using the grades [`kettle.server`](./docs/Servers.md#kettle.server) and\n   [`kettle.server.ws`](./docs/Servers.md#kettle.server.ws).\n3. Defining Kettle request handlers derived from grades\n   [`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) grouped into app units derived from\n   [`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app)\n4. Working with standard express [middleware](./docs/Middleware.md) –  incorporating any standard middleware from the\n   express community and registering it into a Kettle application\n5. Working with [DataSources](./docs/DataSources.md) to abstract over asynchronous access to (primarily JSON-formatted)\n   data stored locally or remotely\n6. Defining conversational, asynchronous test fixtures against HTTP and WebSockets servers using the [Kettle testing\n   framework](./docs/KettleTestingFramework.md)\n\nOf these elements of this module, those described in topics 1, 5 and 6 (configs, DataSources and the testing framework)\nare portable and do not depend specifically on the Kettle server and request handling infrastructure –   they can be\nused together with any technologies defining node.js HTTP and WebSockets servers (or in the case of configs,\nany node.js enabled [Infusion](http://fluidproject.org/infusion.html) application).\n","readmeFilename":"README.md","gitHead":"c571ba7a851518a5133550f7dfd1296e9552674c","_id":"kettle@1.12.0-dev.20191125T152958Z.c571ba7.FLUID-6145","_npmVersion":"5.6.0","_nodeVersion":"10.13.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-WHwhAe3M22UeZtnlaTPnhs1FzKG9t79fuv6FP5LtJflZxvp9CFlIUK/YOOoEYecnXBi0z1E5KGVRyNPBxDtcKQ==","shasum":"5b7bd672887ba94748d3f1be9fdedb01acb58b56","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.12.0-dev.20191125T152958Z.c571ba7.FLUID-6145.tgz","fileCount":123,"unpackedSize":522588,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd3TQGCRA9TVsSAnZWagAAidQP/i86OJdVT+NngL8cF96C\nszrr0bLqwpPzizApbakJzKP8U1RUCMgf/iI+4+aeK+9OSsxsHhJyceYsxW1G\ncmtesYJZRjevTViOf3YqVbQw2/+cqA2ppiJc+0ewvjHxZF4gkbfZpGqgSrdI\noJEoNWaoo+84mQb0XiKsm2F8Kec0NHrWYTtcZ2fZYKoveEHJv9XJpweQWOOY\nuOcrKbBmWCLgg2x/Tf3u22fjFSNW0jICS6oeLOKXp4Edasc3buUd7b/Rc5kh\nxQ31bhadvtNw5djlfY/D4ONy8ShA52pMqvW5qHhuZxad52FbgKqzwBPjjeWR\n2NY+I6tKuvTsYMOqTiEtOFy8B5oomN97jqGbrP0z3zhX4FSwc47u4jaVs6+u\nc5EXoXaKY+QLfwrOAOlYQqtyzqNGAqnkBscbaFWGtRzRnk2W8cfEcccmMcZf\nrDkXBXCRhzayBtXomWugzHmlQVHtrmnY1Mp891csJ6u2lntsC7/iAX9mwiSl\nvzvAuaSy7HS9O1RQzsrXLHAsgpXi2q761FqhvR5FEPDgEFbq8vwv7oe0UbbJ\nZncNXYscPFhE86GwIOWXDd8t1YUMnoRUfYsR15eN8WXccQcfLZDWnfTo5fcm\nmezRLnkRzYA/xACjbGCrk2f5Tas0JAnT5OtubIKuDqNBD11WdBYOuEekKaii\n1vIo\r\n=2I+7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAKi3txIChdiP1YWCSmPmLVXI85e1f0VdFS5OmbwPhCaAiA0+3GN5Yo2yS+aZrfZ4AvH8cb0eOPKWLBE4r0AKaawLA=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.12.0-dev.20191125T152958Z.c571ba7.FLUID-6145_1574777862371_0.18676808721851357"},"_hasShrinkwrap":false},"1.12.0-dev.20191220T164344Z.f1fef17.FLUID-6145":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.12.0-dev.20191220T164344Z.f1fef17.FLUID-6145","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.1","body-parser":"1.19.0","cookie-parser":"1.4.4","express-session":"1.17.0","serve-static":"1.14.1","ws":"7.2.0","infusion":"3.0.0-dev.20191220T163226Z.db83ce0ef.FLUID-6145","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.2","form-data":"3.0.0","json5":"2.1.1"},"devDependencies":{"eslint-config-fluid":"1.4.0","gpii-grunt-lint-all":"1.0.7","gpii-express":"1.0.15","gpii-pouchdb":"1.0.15","grunt":"1.0.4","nyc":"14.1.1","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"3.0.0"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"readme":"# Kettle\n\n[![Build status](https://badge.buildkite.com/8715d7bc790b1c2702109d3ce2b777fe5322c858465e587478.svg)](https://buildkite.com/fluid-project/kettle)\n\nKettle is an integration technology which promotes the expression of servers handling HTTP and WebSockets endpoints.\nWith a few exceptions, Kettle implements no primary functionality of its own, but aggregates the facilities of\n[express](http://expressjs.com/) and [ws](https://github.com/websockets/ws), as well as middleware held in the wider\n[pillarjs](https://github.com/pillarjs) \"Bring your own HTTP Framework Framework\" ecosystem. Kettle applications can\neasily incorporate any express-standard middleware, as well as coexisting with standard express apps targeted at the\nsame node.js <a href=\"https://nodejs.org/api/http.html#http_class_http_server\"><code>http.Server</code></a>. Since\nKettle applications are expressed declaratively, in the JSON format encoding\n[Infusion](https://github.com/fluid-project/infusion)'s component trees, it is possible to adapt existing\napplications easily, as well as inserting middleware and new handlers anywhere in the pipeline without modifying the\noriginal application's code. This makes Kettle suitable for uses where application functionality needs to be deployed\nflexibly in a variety of different configurations.\n\nIn fact, Kettle's dependency on express itself is minimal, since the entirety of the Kettle request handling pipeline\nis packaged as a single piece of express-compatible middleware – Kettle could be deployed against any other consumer\nof middleware or even a raw node.js HTTP server.\n\n## Contents of this repository\n\n### Core Kettle implementation\n\nThis is packaged as Infusion [grades](http://docs.fluidproject.org/infusion/development/ComponentGrades.html) derived\nfrom [`kettle.server`](./docs/Servers.md#kettle.server),\n[`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) and\n[`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app). The first two of these exist in variants specialized both\nfor plain HTTP (with the `.http` suffix) and for WebSockets (with the `.ws` suffix) – `kettle.app` does not specialize.\n\n### Contents - Testing\n\nAs well as the integration technology implementing Kettle itself, this repository also contains functionality helpful\nfor testing HTTP and WebSockets servers written in arbitrary technologies. This is accessed by running\n`kettle.loadTestingSupport()` after having called `require(\"kettle\")`. Kettle testing support allows HTTP and\nWebSockets client requests to be packaged as [Infusion](https://github.com/fluid-project/infusion) components, suitable\nfor use with Infusion's\n[IoC Testing Framework](http://docs.fluidproject.org/infusion/development/IoCTestingFramework.html).\nAny user of Kettle's testing support needs to have [node-jqunit](https://github.com/fluid-project/node-jqunit)\nregistered as a member of their own project's `devDependencies` in their own package.json.\n\nKettle runs on [node.js](https://nodejs.org) version 4.x (see [package.json](package.json) for current dependency\nprofile).\n\n### Contents - DataSources\n\nThe Kettle repository also contains a few implementations of the simple `DataSource` contract for read/write access to\ndata with a simple semantic (broadly the same as that encoded in\n[CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) although the current DataSource semantic does not\nprovide explicitly for deletion). See the documentation section on [DataSources](./docs/DataSources.md) for details of\nthis contract, the available implementations and how to use them.\n\nThis repository contains DataSource implementations suitable for HTTP endpoints (with a particular variety specialised\nfor accessing CouchDB databases with CRUDlike semantics) as well as the filesystem, with an emphasis on JSON payloads.\n\n## Getting Started and Community\n\n### Installation instructions\n\nFirstly, install node and npm by running a standard installer from [node.js](https://nodejs.org). Clone this repository\nand then run `npm install`.\n\n### Issue Tracking\n\nIssue tracking is at [http://issues.fluidproject.org/browse/KETTLE](http://issues.fluidproject.org/browse/KETTLE).\n\n### IRC\n\nVisit `#fluid-work` on Freenode – community resources are linked at\n[Fluid's IRC Channels](https://wiki.fluidproject.org/display/fluid/IRC+Channel).\n\n### Mailing list\n\nContact us on the [fluid-work](https://wiki.fluidproject.org/display/fluid/Mailing+Lists) mailing list with any\nproblems or comments.\n\n### Uses of Kettle and related projects\n\nThe primary user of Kettle is the [GPII](http://gpii.net/)'s autopersonalisation infrastructure, held at\n[GPII/universal](https://github.com/GPII/universal). Kettle is used to provide a flexible means of deploying the\nGPII's \"Flow Manager\" and related components distributed across multiple local and remote installations.\n\nA closely related project to Kettle is [gpii-express](https://github.com/GPII/gpii-express) which is used in other\nGPII projects such as the [terms registry](https://github.com/GPII/common-terms-registry) and\n[unified listing](https://github.com/GPII/ul-api). This is similar in architecture to Kettle (wrapping express\nprimitives such as servers and requests into dynamically constructed Infusion components) but slightly different in\nemphasis –\n\n* gpii-express allows independently mounted application units with nested routing, in the Express 4.x style – whereas\n  Kettle is currently limited to flat Express 3.x-style routing\n* Kettle incorporates support for WebSockets endpoints, whereas gpii-express does not\n* Kettle incorporates support for DataSources (see [DataSources](./docs/DataSources.md) )\n\nThe request handling architecture for gpii-express and Kettle is quite similar and the projects will probably converge\nover time. gpii-express currently already depends on Kettle to get access to its HTTP\n[testing](./docs/KettleTestingFramework.md) support.\n\n## Documentation\n\nDocumentation and sample code for working with Kettle is contained in the [docs](./docs) directory. Kettle is based on\nFluid [Infusion](http://fluidproject.org/infusion.html)'s\n[component model](http://docs.fluidproject.org/infusion/development/HowToUseInfusionIoC.html). If you aren't familiar\nwith the syntax and meaning of Infusion component trees, it is a good idea to browse the documentation, tutorials and\nexamples at the Infusion [documentation site](http://docs.fluidproject.org/infusion/development/).\n\nIt contains the following topics:\n\n1. Defining top-level [Kettle applications using \"config\" files](docs/ConfigsAndApplications.md).\n2. Defining HTTP and Websockets servers using the grades [`kettle.server`](./docs/Servers.md#kettle.server) and\n   [`kettle.server.ws`](./docs/Servers.md#kettle.server.ws).\n3. Defining Kettle request handlers derived from grades\n   [`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) grouped into app units derived from\n   [`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app)\n4. Working with standard express [middleware](./docs/Middleware.md) –  incorporating any standard middleware from the\n   express community and registering it into a Kettle application\n5. Working with [DataSources](./docs/DataSources.md) to abstract over asynchronous access to (primarily JSON-formatted)\n   data stored locally or remotely\n6. Defining conversational, asynchronous test fixtures against HTTP and WebSockets servers using the [Kettle testing\n   framework](./docs/KettleTestingFramework.md)\n\nOf these elements of this module, those described in topics 1, 5 and 6 (configs, DataSources and the testing framework)\nare portable and do not depend specifically on the Kettle server and request handling infrastructure –   they can be\nused together with any technologies defining node.js HTTP and WebSockets servers (or in the case of configs,\nany node.js enabled [Infusion](http://fluidproject.org/infusion.html) application).\n","readmeFilename":"README.md","gitHead":"f1fef17c1cef32b8888ef61f7866a049c60d1525","_id":"kettle@1.12.0-dev.20191220T164344Z.f1fef17.FLUID-6145","_npmVersion":"5.6.0","_nodeVersion":"10.13.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-+Mb1WeFA2hZWxDKkYRvM962RyWCxbgDyxp/DlH2Kd+Lka3Iay0jvD+Jnkpyl5q3NBePNquIwyeWC3pIgVCHNgQ==","shasum":"f7345a458ea7f29fc74081abb1743fe676069b50","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.12.0-dev.20191220T164344Z.f1fef17.FLUID-6145.tgz","fileCount":122,"unpackedSize":522474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd/PqMCRA9TVsSAnZWagAANpsP/j1p4LyU0+MeuHS8YxmZ\n4CVBOJN3ELPjcIZh/gVYkdtlt38XofEHMtOrPddykjVyIho+rzsVM4A0zdwD\nzzopnbE6i3UIy0ULJ2+lRw39BUrdwzl2EcgEzdKG+HlnZjiVXVYDtTFzBwgG\n28DgfWh2zwH48Ri5Ew+nQ/xPleamo0Nz9791rO0qoQmiZ5NKKFgbps4RNMbH\nffnj2TFhUxcWAe+vuD5yxT2qedp6ALhAK0YsgrHwzlwdFA+u5V8y/GwJk4NC\nbLeyda93v0fdUv+grKTtNrO0hUQDwS5fWJMBl2U31+kLvJmwFfY3KsUhrFzP\nLOUzVIKEU/4wzBPvXbKVr8j6ng/q3o+zC8fysOp7ZjGSqCBxTjXcckz1Po6Z\nDZg89ZpaSfNqNev6dX05ioFOsTWirsEOjyxKBV2R7ogiQSvfzI/moNpvTzzd\nUjZPftHXFpvxJUOy/+2bjvn5WEllcxjBloDmIWUE5OMwV/raYsQXzmJa+hOb\nsoITnguggzdRy0YqBhi+kYzVF2E7PDcXHyo5LSjOKUDeh8GMe37cJBMxzRyU\nUVjmvt2ISixMtwjPPCnzQx23kZ5vs9uNYz7UA1iIPV23CgHngflAbMft51+C\nCI33trjTdnWg1Pc5q7TxS7p2356Eg9X+3zxRGMeQ2y1URsHEjbx3nddVzAq+\np24v\r\n=Xgh/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFTUrYQWHSSpvU057ttRi+wpgTgeHGZOs2XVsosbI8slAiEA0gYpsyaqoXOsvlPbjFa6N9Xif456VN1OL+mkDIqBTTo="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.12.0-dev.20191220T164344Z.f1fef17.FLUID-6145_1576860300095_0.8444749596450261"},"_hasShrinkwrap":false},"1.12.0-dev.20200409T141107Z.a00af3d.KETTLE-82":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.12.0-dev.20200409T141107Z.a00af3d.KETTLE-82","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.0","body-parser":"1.19.0","cookie-parser":"1.4.4","express-session":"1.16.1","serve-static":"1.14.1","ws":"7.0.0","infusion":"3.0.0-dev.20190328T144119Z.ec44dbfab","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.1","form-data":"2.3.3","json5":"2.1.0"},"devDependencies":{"eslint-config-fluid":"1.3.0","gpii-grunt-lint-all":"1.0.5","gpii-express":"1.0.15","gpii-pouchdb":"1.0.14","grunt":"1.0.4","nyc":"14.1.1","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"2.6.3"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"readme":"# Kettle\n\n[![Build status](https://badge.buildkite.com/8715d7bc790b1c2702109d3ce2b777fe5322c858465e587478.svg)](https://buildkite.com/fluid-project/kettle)\n\nKettle is an integration technology which promotes the expression of servers handling HTTP and WebSockets endpoints.\nWith a few exceptions, Kettle implements no primary functionality of its own, but aggregates the facilities of\n[express](http://expressjs.com/) and [ws](https://github.com/websockets/ws), as well as middleware held in the wider\n[pillarjs](https://github.com/pillarjs) \"Bring your own HTTP Framework Framework\" ecosystem. Kettle applications can\neasily incorporate any express-standard middleware, as well as coexisting with standard express apps targeted at the\nsame node.js <a href=\"https://nodejs.org/api/http.html#http_class_http_server\"><code>http.Server</code></a>. Since\nKettle applications are expressed declaratively, in the JSON format encoding\n[Infusion](https://github.com/fluid-project/infusion)'s component trees, it is possible to adapt existing\napplications easily, as well as inserting middleware and new handlers anywhere in the pipeline without modifying the\noriginal application's code. This makes Kettle suitable for uses where application functionality needs to be deployed\nflexibly in a variety of different configurations.\n\nIn fact, Kettle's dependency on express itself is minimal, since the entirety of the Kettle request handling pipeline\nis packaged as a single piece of express-compatible middleware – Kettle could be deployed against any other consumer\nof middleware or even a raw node.js HTTP server.\n\n## Contents of this repository\n\n### Core Kettle implementation\n\nThis is packaged as Infusion [grades](http://docs.fluidproject.org/infusion/development/ComponentGrades.html) derived\nfrom [`kettle.server`](./docs/Servers.md#kettle.server),\n[`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) and\n[`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app). The first two of these exist in variants specialized both\nfor plain HTTP (with the `.http` suffix) and for WebSockets (with the `.ws` suffix) – `kettle.app` does not specialize.\n\n### Contents - Testing\n\nAs well as the integration technology implementing Kettle itself, this repository also contains functionality helpful\nfor testing HTTP and WebSockets servers written in arbitrary technologies. This is accessed by running\n`kettle.loadTestingSupport()` after having called `require(\"kettle\")`. Kettle testing support allows HTTP and\nWebSockets client requests to be packaged as [Infusion](https://github.com/fluid-project/infusion) components, suitable\nfor use with Infusion's\n[IoC Testing Framework](http://docs.fluidproject.org/infusion/development/IoCTestingFramework.html).\nAny user of Kettle's testing support needs to have [node-jqunit](https://github.com/fluid-project/node-jqunit)\nregistered as a member of their own project's `devDependencies` in their own package.json.\n\nKettle runs on [node.js](https://nodejs.org) version 4.x (see [package.json](package.json) for current dependency\nprofile).\n\n### Contents - DataSources\n\nThe Kettle repository also contains a few implementations of the simple `DataSource` contract for read/write access to\ndata with a simple semantic (broadly the same as that encoded in\n[CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) although the current DataSource semantic does not\nprovide explicitly for deletion). See the documentation section on [DataSources](./docs/DataSources.md) for details of\nthis contract, the available implementations and how to use them.\n\nThis repository contains DataSource implementations suitable for HTTP endpoints (with a particular variety specialised\nfor accessing CouchDB databases with CRUDlike semantics) as well as the filesystem, with an emphasis on JSON payloads.\n\n## Getting Started and Community\n\n### Installation instructions\n\nFirstly, install node and npm by running a standard installer from [node.js](https://nodejs.org). Clone this repository\nand then run `npm install`.\n\n### Issue Tracking\n\nIssue tracking is at [http://issues.fluidproject.org/browse/KETTLE](http://issues.fluidproject.org/browse/KETTLE).\n\n### IRC\n\nVisit `#fluid-work` on Freenode – community resources are linked at\n[Fluid's IRC Channels](https://wiki.fluidproject.org/display/fluid/IRC+Channel).\n\n### Mailing list\n\nContact us on the [fluid-work](https://wiki.fluidproject.org/display/fluid/Mailing+Lists) mailing list with any\nproblems or comments.\n\n### Uses of Kettle and related projects\n\nThe primary user of Kettle is the [GPII](http://gpii.net/)'s autopersonalisation infrastructure, held at\n[GPII/universal](https://github.com/GPII/universal). Kettle is used to provide a flexible means of deploying the\nGPII's \"Flow Manager\" and related components distributed across multiple local and remote installations.\n\nA closely related project to Kettle is [gpii-express](https://github.com/GPII/gpii-express) which is used in other\nGPII projects such as the [terms registry](https://github.com/GPII/common-terms-registry) and\n[unified listing](https://github.com/GPII/ul-api). This is similar in architecture to Kettle (wrapping express\nprimitives such as servers and requests into dynamically constructed Infusion components) but slightly different in\nemphasis –\n\n* gpii-express allows independently mounted application units with nested routing, in the Express 4.x style – whereas\n  Kettle is currently limited to flat Express 3.x-style routing\n* Kettle incorporates support for WebSockets endpoints, whereas gpii-express does not\n* Kettle incorporates support for DataSources (see [DataSources](./docs/DataSources.md) )\n\nThe request handling architecture for gpii-express and Kettle is quite similar and the projects will probably converge\nover time. gpii-express currently already depends on Kettle to get access to its HTTP\n[testing](./docs/KettleTestingFramework.md) support.\n\n## Documentation\n\nDocumentation and sample code for working with Kettle is contained in the [docs](./docs) directory. Kettle is based on\nFluid [Infusion](http://fluidproject.org/infusion.html)'s\n[component model](http://docs.fluidproject.org/infusion/development/HowToUseInfusionIoC.html). If you aren't familiar\nwith the syntax and meaning of Infusion component trees, it is a good idea to browse the documentation, tutorials and\nexamples at the Infusion [documentation site](http://docs.fluidproject.org/infusion/development/).\n\nIt contains the following topics:\n\n1. Defining top-level [Kettle applications using \"config\" files](docs/ConfigsAndApplications.md).\n2. Defining HTTP and Websockets servers using the grades [`kettle.server`](./docs/Servers.md#kettle.server) and\n   [`kettle.server.ws`](./docs/Servers.md#kettle.server.ws).\n3. Defining Kettle request handlers derived from grades\n   [`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) grouped into app units derived from\n   [`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app)\n4. Working with standard express [middleware](./docs/Middleware.md) –  incorporating any standard middleware from the\n   express community and registering it into a Kettle application\n5. Working with [DataSources](./docs/DataSources.md) to abstract over asynchronous access to (primarily JSON-formatted)\n   data stored locally or remotely\n6. Defining conversational, asynchronous test fixtures against HTTP and WebSockets servers using the [Kettle testing\n   framework](./docs/KettleTestingFramework.md)\n\nOf these elements of this module, those described in topics 1, 5 and 6 (configs, DataSources and the testing framework)\nare portable and do not depend specifically on the Kettle server and request handling infrastructure –   they can be\nused together with any technologies defining node.js HTTP and WebSockets servers (or in the case of configs,\nany node.js enabled [Infusion](http://fluidproject.org/infusion.html) application).\n","readmeFilename":"README.md","gitHead":"a00af3d27760b795cc0d50dd9bbc8d57a535e57e","_id":"kettle@1.12.0-dev.20200409T141107Z.a00af3d.KETTLE-82","_nodeVersion":"10.20.0","_npmVersion":"6.10.3","dist":{"integrity":"sha512-lWorh70bcK/KtPxm4XrZYO555JEcKwioi7qvuErxsg4HbcoxByg9/vLcaCloenm0P3Lq+ftxqvBytWSG72FPgA==","shasum":"5d1e43268f8daf9c867b8dba8ee06d58976770bd","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.12.0-dev.20200409T141107Z.a00af3d.KETTLE-82.tgz","fileCount":124,"unpackedSize":526159,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejy86CRA9TVsSAnZWagAA8P4P/376cwuZ2iPtDhs7x8o3\nicC8oBZ2tNGCJ3W5wrMk/pSYS2XlU7V9po+pQjTI83wdTMLZzarHjU0mxewo\nIzIPZI87T7Adz6oYzYrxyxsLE8agYxbf8ik1LHbcuQWkLxF5vL01JxFoUxjY\nR9srI2GXJhA/qY17zEH8+NGzjbe917TsLgf13bgVExl4c1Wc7IWI9Rjft2FK\nn59gN1jk7vZ+NHbvo0DPoNIsgg96AYpfqXL6tyRvq4w7sNuUQh4g+HfOCoD+\n8MxPit7HUgg0uz1VwZX3rSlM0DtN7ek/dTSsaHQa13lDpSraykcZgnpRzrnU\njbaeFuDvNCprowQ7q1XvK8S59nPfHQXgRXXn9LWL/UV+N+uCWwsQRaKwl3NJ\nNcUi4Q/Wso0a4lmDlQR45mB7pflKkqrnrMfdvDBKy2JYMAjmc4OSQdGdK3W4\nMljJ5gq0BC3rR3EpK5YJYX7FUDd3M6X/1cXNKtA1fyi63V2/2S7OVHNTgtEa\nZWPKswGNkuZadHjA73hFn+h9RGHmh+4MtEX+e/W6Vt8K/zwmU4F/mHnfivUz\ni5OuteE+e1O8qFko8Pmh/2+IfCZ79JQQ2cpnNI79joI4v+AaCLmL/sbMXoeV\n5SbF7ZJNnY5vyG8vG7xkMOOlHgLNwUDfB+9tI9J8FhCnqyHyc9PaUcJjNrBp\n/YPi\r\n=sxEo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHFZj8RGbhoMh+PfzHucYZKXEI9WHc/C6guC0SC9ZUkPAiBYFMMZy8GZl2+rnTCKgKBCQp7CxIK7Z0MFZI1DI4FEYQ=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.12.0-dev.20200409T141107Z.a00af3d.KETTLE-82_1586442041844_0.1768220830078584"},"_hasShrinkwrap":false},"1.12.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.12.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.1","body-parser":"1.19.0","cookie-parser":"1.4.5","express-session":"1.17.0","serve-static":"1.14.1","ws":"7.2.3","infusion":"3.0.0-dev.20200317T122331Z.1aa7ea8a1.FLUID-6145","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.2","form-data":"3.0.0","json5":"2.1.3"},"devDependencies":{"eslint-config-fluid":"1.4.0","gpii-grunt-lint-all":"1.0.7","gpii-express":"1.0.15","gpii-pouchdb":"1.0.15","grunt":"1.1.0","nyc":"15.0.1","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"3.0.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"5dbe57dc53edf60fb4f9b325c3ed80f730def1cd","_id":"kettle@1.12.0","_nodeVersion":"10.20.0","_npmVersion":"6.10.3","dist":{"integrity":"sha512-98VMyMiNUFAqAt3OgzJ46qjWH3J8H3HCOpaBsW/Dy8bqrEScjyFjk/BQvx10fC9/UwJY2oLddr9Kngs9oHdtTQ==","shasum":"261bc80acca5cc7cf9ed65c1a46069c1fe12e79f","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.12.0.tgz","fileCount":123,"unpackedSize":526751,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekGg/CRA9TVsSAnZWagAAL0gQAICB+e03GU8uRYF2ORlL\nEHmAKLgt549S2dEmIUsxcCfl31CVDDk02YNBqlZ9bsd4RLYKpKP69xrr74gC\naJv8x8eFaPlaiolFdatFHf5zsvp7YifajK6u6Wh1VP/qZwsNsSi2od1+kZbI\nLVfBQfvVwdYaBdIeY+ar8HjIi8OYOmen9y6tb13ZIhIdK6w0vVVV1YoNSfHV\nHgxielbtrJWQmVEj/tM4yuyUkawWmLq+l+5Qwlce5Qhg6WKMY4RO569cInsA\nrfo5JaM0kUOAF64iUDKD2cUwso+b6FEMku/FKF4coR72HMhWUyGbABVyWT0t\nyDgGvDaS263HJ/3qhBwS5PqnjToTYanMLTYTOWM20gfo6iQHrNDVBhTGg+p3\nMcS1bHDpxBQd1Jcf3g2xvJ96Mq5IMq9Ke6bvdjNaIZ6chF1vZk4t4Bfv99du\nY84Lh4Gzy+FcJ3eTR1W/uSNCqvBVvojT/utltlX/rGTdvdWeGz90J3bcugjp\nfHQbsQrMRKoa8AaFkY922BHnBUpRNSGMYw8IY/AjtEjxKkoVuWjdcYHhzmCj\nYZNp2w69BgdFXLhzvrMsPOLko42S91Ri2p/HsB9NQ2E/+biepTbPzEqcYy1N\n77c1GatMsIMp7xAP//9mzeiUJHxHUiTMDDNNIKw+8E3XCp4gMm+CYdRIvWHB\npQLB\r\n=d9KW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCh4FtnWE3B8wnir0NPBHEi+1DlFTK/RNlhlYbGEgaNLgIhAKGVsRqDXtV1DrXd2KeUu878BIpUXCuIzIrWJDBhKJEu"}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.12.0_1586522175335_0.31173592430057506"},"_hasShrinkwrap":false},"1.12.0-dev.20200709T180050Z.3070cd0.KETTLE-86":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.12.0-dev.20200709T180050Z.3070cd0.KETTLE-86","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.1","body-parser":"1.19.0","cookie-parser":"1.4.5","express-session":"1.17.0","serve-static":"1.14.1","ws":"7.2.3","infusion":"3.0.0-dev.20200317T122331Z.1aa7ea8a1.FLUID-6145","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.2","form-data":"3.0.0","json5":"2.1.3"},"devDependencies":{"eslint-config-fluid":"1.4.0","gpii-grunt-lint-all":"1.0.7","gpii-express":"1.0.15","gpii-pouchdb":"1.0.15","grunt":"1.1.0","nyc":"15.0.1","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"3.0.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"readme":"# Kettle\n\n[![Build status](https://badge.buildkite.com/8715d7bc790b1c2702109d3ce2b777fe5322c858465e587478.svg)](https://buildkite.com/fluid-project/kettle)\n\nKettle is an integration technology which promotes the expression of servers handling HTTP and WebSockets endpoints.\nWith a few exceptions, Kettle implements no primary functionality of its own, but aggregates the facilities of\n[express](http://expressjs.com/) and [ws](https://github.com/websockets/ws), as well as middleware held in the wider\n[pillarjs](https://github.com/pillarjs) \"Bring your own HTTP Framework Framework\" ecosystem. Kettle applications can\neasily incorporate any express-standard middleware, as well as coexisting with standard express apps targeted at the\nsame node.js <a href=\"https://nodejs.org/api/http.html#http_class_http_server\"><code>http.Server</code></a>. Since\nKettle applications are expressed declaratively, in the JSON format encoding\n[Infusion](https://github.com/fluid-project/infusion)'s component trees, it is possible to adapt existing\napplications easily, as well as inserting middleware and new handlers anywhere in the pipeline without modifying the\noriginal application's code. This makes Kettle suitable for uses where application functionality needs to be deployed\nflexibly in a variety of different configurations.\n\nIn fact, Kettle's dependency on express itself is minimal, since the entirety of the Kettle request handling pipeline\nis packaged as a single piece of express-compatible middleware – Kettle could be deployed against any other consumer\nof middleware or even a raw node.js HTTP server.\n\n## Contents of this repository\n\n### Core Kettle implementation\n\nThis is packaged as Infusion [grades](http://docs.fluidproject.org/infusion/development/ComponentGrades.html) derived\nfrom [`kettle.server`](./docs/Servers.md#kettle.server),\n[`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) and\n[`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app). The first two of these exist in variants specialized both\nfor plain HTTP (with the `.http` suffix) and for WebSockets (with the `.ws` suffix) – `kettle.app` does not specialize.\n\n### Contents - Testing\n\nAs well as the integration technology implementing Kettle itself, this repository also contains functionality helpful\nfor testing HTTP and WebSockets servers written in arbitrary technologies. This is accessed by running\n`kettle.loadTestingSupport()` after having called `require(\"kettle\")`. Kettle testing support allows HTTP and\nWebSockets client requests to be packaged as [Infusion](https://github.com/fluid-project/infusion) components, suitable\nfor use with Infusion's\n[IoC Testing Framework](http://docs.fluidproject.org/infusion/development/IoCTestingFramework.html).\nAny user of Kettle's testing support needs to have [node-jqunit](https://github.com/fluid-project/node-jqunit)\nregistered as a member of their own project's `devDependencies` in their own package.json.\n\nKettle runs on [node.js](https://nodejs.org) version 4.x (see [package.json](package.json) for current dependency\nprofile).\n\n### Contents - DataSources\n\nThe Kettle repository also contains a few implementations of the simple `DataSource` contract for read/write access to\ndata with a simple semantic (broadly the same as that encoded in\n[CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) although the current DataSource semantic does not\nprovide explicitly for deletion). See the documentation section on [DataSources](./docs/DataSources.md) for details of\nthis contract, the available implementations and how to use them.\n\nThis repository contains DataSource implementations suitable for HTTP endpoints (with a particular variety specialised\nfor accessing CouchDB databases with CRUDlike semantics) as well as the filesystem, with an emphasis on JSON payloads.\n\n## Getting Started and Community\n\n### Installation instructions\n\nFirstly, install node and npm by running a standard installer from [node.js](https://nodejs.org). Clone this repository\nand then run `npm install`.\n\n### Issue Tracking\n\nIssue tracking is at [http://issues.fluidproject.org/browse/KETTLE](http://issues.fluidproject.org/browse/KETTLE).\n\n### IRC\n\nVisit `#fluid-work` on Freenode – community resources are linked at\n[Fluid's IRC Channels](https://wiki.fluidproject.org/display/fluid/IRC+Channel).\n\n### Mailing list\n\nContact us on the [fluid-work](https://wiki.fluidproject.org/display/fluid/Mailing+Lists) mailing list with any\nproblems or comments.\n\n### Uses of Kettle and related projects\n\nThe primary user of Kettle is the [GPII](http://gpii.net/)'s autopersonalisation infrastructure, held at\n[GPII/universal](https://github.com/GPII/universal). Kettle is used to provide a flexible means of deploying the\nGPII's \"Flow Manager\" and related components distributed across multiple local and remote installations.\n\nA closely related project to Kettle is [gpii-express](https://github.com/GPII/gpii-express) which is used in other\nGPII projects such as the [terms registry](https://github.com/GPII/common-terms-registry) and\n[unified listing](https://github.com/GPII/ul-api). This is similar in architecture to Kettle (wrapping express\nprimitives such as servers and requests into dynamically constructed Infusion components) but slightly different in\nemphasis –\n\n* gpii-express allows independently mounted application units with nested routing, in the Express 4.x style – whereas\n  Kettle is currently limited to flat Express 3.x-style routing\n* Kettle incorporates support for WebSockets endpoints, whereas gpii-express does not\n* Kettle incorporates support for DataSources (see [DataSources](./docs/DataSources.md) )\n\nThe request handling architecture for gpii-express and Kettle is quite similar and the projects will probably converge\nover time. gpii-express currently already depends on Kettle to get access to its HTTP\n[testing](./docs/KettleTestingFramework.md) support.\n\n## Documentation\n\nDocumentation and sample code for working with Kettle is contained in the [docs](./docs) directory. Kettle is based on\nFluid [Infusion](http://fluidproject.org/infusion.html)'s\n[component model](http://docs.fluidproject.org/infusion/development/HowToUseInfusionIoC.html). If you aren't familiar\nwith the syntax and meaning of Infusion component trees, it is a good idea to browse the documentation, tutorials and\nexamples at the Infusion [documentation site](http://docs.fluidproject.org/infusion/development/).\n\nIt contains the following topics:\n\n1. Defining top-level [Kettle applications using \"config\" files](docs/ConfigsAndApplications.md).\n2. Defining HTTP and Websockets servers using the grades [`kettle.server`](./docs/Servers.md#kettle.server) and\n   [`kettle.server.ws`](./docs/Servers.md#kettle.server.ws).\n3. Defining Kettle request handlers derived from grades\n   [`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) grouped into app units derived from\n   [`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app)\n4. Working with standard express [middleware](./docs/Middleware.md) –  incorporating any standard middleware from the\n   express community and registering it into a Kettle application\n5. Working with [DataSources](./docs/DataSources.md) to abstract over asynchronous access to (primarily JSON-formatted)\n   data stored locally or remotely\n6. Defining conversational, asynchronous test fixtures against HTTP and WebSockets servers using the [Kettle testing\n   framework](./docs/KettleTestingFramework.md)\n\nOf these elements of this module, those described in topics 1, 5 and 6 (configs, DataSources and the testing framework)\nare portable and do not depend specifically on the Kettle server and request handling infrastructure –   they can be\nused together with any technologies defining node.js HTTP and WebSockets servers (or in the case of configs,\nany node.js enabled [Infusion](http://fluidproject.org/infusion.html) application).\n","readmeFilename":"README.md","gitHead":"3070cd0a1d69852b6f9d7f8be8b73f717bc221a5","_id":"kettle@1.12.0-dev.20200709T180050Z.3070cd0.KETTLE-86","_npmVersion":"5.6.0","_nodeVersion":"10.13.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-gsEsC7xOYW0vr9QJyap8FX9c1asKy0+k9IyQZ3wuO5T7KEXWea9FUnWRuLterJyNZzaodeHHe7WE4jDJQDcS2w==","shasum":"8c84eb6605e97e0a794d77ff04e5d88661d0dddb","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.12.0-dev.20200709T180050Z.3070cd0.KETTLE-86.tgz","fileCount":124,"unpackedSize":534646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCLN/CRA9TVsSAnZWagAAlDQQAJgjO4fYGS4aSy5p+Woy\nz7FcxWGYPpgURpqtyECd33ld4XxlARFEUV0DLa5QtcWC/VNrHuzt8L0lWymT\nrVefo9+RV2J7Fk3Z+IkyGbvFlkYEMt72EGw4NWEf3+5C5JrLZqmnkX614s7v\nEq0Ki2lPAwE2COZQ894hnZqp3lIGOm/Xdw+I+GtODiT3EMrrO/BYaLTepeqt\nrJ22qVEyAKIrgGJiP3SIjObOPkeKfsPS+YLtGMmRj97yXxwMGSv8EFWbzn/6\nIIA3VeGLbyPoXfxNHFlyRB0MtM0MSPjXXdlhRzyLsTa8ZUbqgJ1Xtbd9hviI\nFbye4VU6uzGyS23SOfg8bzfWy/Ms+lJvQsOiNUboavvXiVYvlfffcKajNpuq\nZqX1xt/bRvNyU+2v/0WprZtZ+/UcMGUH0vT3q6ESswPm1j7KhAropJL+EI33\neWfH8sk6BzYEq33kIb0ievFtpop/XWCzz1smPrpr8qaBoT0qILM9TiO/t94H\ntuU/BnNrNmhk8VLu1UoN8HD/uwzliaBJ4r/XBK24GDHIIgPQ8bdKIeNbGMva\noSCgiCWquoMAlfG19AFVpA+Nt8/tjX2E873nN+nQGO5KrBV8KgRqgSDzH+5H\ndLhf9UjFZ8vnC6dmFQs8RMnxnSVc5Isk6Iau4ucT1gw9OWG5LnYh2Ylqq1cR\nvqqV\r\n=au2g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+Cvthx4E9pHXiTSTHoTod2aPf/Ix9QKHuiX5ItEHIRAIgQbtOqxO5LcjuqRPDwwOs9xfRyGGPg2SVQ4Zv/B8iAKo="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.12.0-dev.20200709T180050Z.3070cd0.KETTLE-86_1594405758401_0.764502211598409"},"_hasShrinkwrap":false},"1.13.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.13.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.1","body-parser":"1.19.0","cookie-parser":"1.4.5","express-session":"1.17.1","serve-static":"1.14.1","ws":"7.3.1","infusion":"3.0.0-dev.20200317T122331Z.1aa7ea8a1.FLUID-6145","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.2","form-data":"3.0.0","json5":"2.1.3"},"devDependencies":{"eslint-config-fluid":"1.4.0","gpii-grunt-lint-all":"1.0.7","gpii-express":"1.0.15","gpii-pouchdb":"1.0.15","grunt":"1.2.1","nyc":"15.1.0","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"3.0.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=8.0.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"35b7cac9460e5ad7b8ccf965c6953c921eb566cd","_id":"kettle@1.13.0","_npmVersion":"5.6.0","_nodeVersion":"10.13.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-x0xpbtc1VtQrYGT0J0LbBwSfrvndqNT5k1yExuGLreiNq0RUcBcpg/nMsrMyNpDD7zPKGGrSdgMEpf6ii0723g==","shasum":"83bef5cce54b2fe7a951ae397a1fadf1cdc1e66c","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.13.0.tgz","fileCount":124,"unpackedSize":535619,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEGZ2CRA9TVsSAnZWagAASRkP/RIJUmpdCH7l5hySX7al\nXLPluO1IYxBOwB8xGhvkEp/vzyZu0MnKwgP9lZd2gEBu1uUVtKOdxQyI6LE4\nRoXU2iMlJr9wriVT+2abYvgSWdamUgGxn9kgQRofsAIHfqkxwtcH/8z2CJUs\nGndMlXE/o3Y8ECh8XA/YTwIIgq4j+KR7NPU88Hh6kTUIpj30zYwn0DOEnZT2\nF4o01aPT2/qpAWyA2TizheLaZf2pJMhqroEGM1VTg1aqWgT4agCLztGBQyfI\n/nhbG0S1kZhPjfrRpO+eTC3ay42hNdC9pC/T0s8mxu+FGKEKv/hJx1L/XovK\ng6lRtMdXL4jpFM0jtfT0LWtPXclRmVeOM8EKvBuFXK5A2eZWZyLz5VlGfIkM\nPtoAzJ6j9k51GktGkGhGTwGgzLgimg820b19k4ykS0psfI7/iGruMMMw7R7k\ndKPlxTEokdcYMp3jx5xVppzZ3718U2jeABW5nSPUH6e2cSUBEmg41fca8eQe\n1j01tUnvMXEy09w8MYOYCN6/EUxHhGzCdY+Vjai97lnxq52ymQepGj33jMtr\npe+Zl5+HoDR5wJunhEazniyXvLE6+5B5kCpcQueC4CtGils+hOlrRdUtPL41\nNrbv3zrSzP+VVVGJ1Syi+aWkT8YI4vvx6+LfvMPDHPcECmDzxLIq7jF25Mdu\niESM\r\n=r/Rg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC21MVklRHz0CKCaQjNyrnSq3pPVEsHxYjPzqN9qyiGzAiAzkrAGl08Y8v8LPW2M3pNYBK1zvcLgYT1nhgShDoPmfg=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.13.0_1594910325654_0.6015037545072135"},"_hasShrinkwrap":false},"1.14.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.14.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.1","body-parser":"1.19.0","cookie-parser":"1.4.5","express-session":"1.17.1","serve-static":"1.14.1","ws":"7.3.1","infusion":"3.0.0-dev.20200317T122331Z.1aa7ea8a1.FLUID-6145","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.2","form-data":"3.0.0","json5":"2.1.3"},"devDependencies":{"eslint-config-fluid":"1.4.0","gpii-grunt-lint-all":"1.0.7","gpii-express":"1.0.15","gpii-pouchdb":"1.0.15","grunt":"1.2.1","nyc":"15.1.0","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"3.0.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=8.0.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"d82958f3856803d4087aee291e6342e2236d28a2","_id":"kettle@1.14.0","_npmVersion":"5.6.0","_nodeVersion":"10.13.0","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-r5OgX+X49OIxIN8BRzPp9Wqbz70HXzb8JopK2hf56usbB71DbMm5OYCn+YY36oVjvAXEjbbdoihp3WSmD30Raw==","shasum":"263f3369fa382ef3b019d9c9eecb1d5d181ba531","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.14.0.tgz","fileCount":124,"unpackedSize":535722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEGpiCRA9TVsSAnZWagAAqYcP+wYYtlln3spqVzdQDuNL\nOzSwoH/V2i+obhLdLFbitwAESZnDoH5fPekTRzqMl0r3IISjuAB2luUc9g90\ndp6yR70s7KZF6reanGUSL6VtRmabt+PfX7O2mY9oTu3lq8KYZJq1cYMHYzy0\ndf8ZiTRr4r4uwwXlLXkVYGzxOGVaoqQgZ5sLItiL8G3nf8rmyiJjOvvL9heN\nmyGdVpswxP3HKCbM1ZsQqi+lbAlh3ho/flzZX+oZON4Vi7wxukgZbzuKnbiW\ne94tSugbnkjBsTZrByE3x8+iqtSDYaQccGIZUUWVKI+RbfGm+pt17OFqpZxv\nr7Ar3puTYNQWl6WwqQOCg8fLuN2sRgxibE3QZj/GoqQB7hLgKJZb1DxV5Pdu\nENYdqI05j/liTZr5mcCgXXOkfqkZ7GmxfR23P0MS1D7OoLgqq2znqcriclJJ\nwyj9aMoXrHeW2gAObNyLzqCt1Uo6Xms75PW8WuX69CozY5GLfRrEfzDnPGHV\nd+joRidn/4kvWsNiqnbUculFRrirkWyg9+dcHw71e/32BckSZfrMpHEVYkfO\n5erWqnlMkE8KqGe0Wr1FDKtsZ1qIY8O54tBQUBy5Z/5WMZXzPWQkK2xblId8\nHKWJobwZhkw91nP/mr+b2kmMW8ScvTM6DCCjVvb4QlLhZXZWjqUA7xtl5uT1\nLaD8\r\n=LVSs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCd1bGTV3xg5t/3mFD1Fpnl0Cyetvi99TyXnL2ZZojF9QIhAMw5IkqMXkuE1XrbMsVXkSiGrs+dz0Odp0MXokdzhike"}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.14.0_1594911329644_0.8181326206856872"},"_hasShrinkwrap":false},"1.15.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.15.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.1","body-parser":"1.19.0","cookie-parser":"1.4.5","express-session":"1.17.1","serve-static":"1.14.1","ws":"7.3.1","infusion":"3.0.0-dev.20200317T122331Z.1aa7ea8a1.FLUID-6145","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.2","form-data":"3.0.0","json5":"2.1.3"},"devDependencies":{"eslint-config-fluid":"1.4.0","eslint-plugin-markdown":"1.0.2","fluid-grunt-lint-all":"1.0.8","fluid-express":"1.0.16","fluid-pouchdb":"1.0.16","grunt":"1.2.1","nyc":"15.1.0","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"3.0.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"238801032a8182e02cb41eef740530c2596b40b8","_id":"kettle@1.15.0","_npmVersion":"5.6.0","_nodeVersion":"12.18.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-3WBb17OjiFrV/wr3rdu/tmuQ+lna7iFUvmjr9O4c8xRSzREUjckwfqWoUSExid+zKboOZGGyPFOFpOwve1CmTA==","shasum":"4c9d07c961d2ffbc82830418257cb2210d24e658","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.15.0.tgz","fileCount":124,"unpackedSize":535908,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFbpqCRA9TVsSAnZWagAAilUQAKSsuSfn5hrAfkYthPeM\nt4Vf3IPBZxhATyh74DGuZMkHsDu99mOA5zT6nlBhXtzfnPydHUFGs7wnjpqW\nW3IfFLTTPJy6Crb4t0pvaPOFVb6Z75fC6U2TStAQBFO1qB9QuoOI9uB8EpLp\n4C+ZY7KOMBZguyEUnQhVP8tOByCRuFeaf08OGJty86i9fB8d1xXvwMPKMR97\nzR7clRABb1bVXrLCz6jivrr1vEX50QbNQl3wqIr/QfMKGxwiLhI5CC469I/S\nlZH5qwJQ11ggwMDFWJdtEUx6JzqGrxSa5pAzv2vSduMBxOLUwibs8lQlG+dW\nnY+aPhLumKyHtt7LxhqZ9/omOGjtCAzEBt8qa4HA0sL/ncTSHcbVx62wuBID\nUmGw5GC1si5jk8bn59hT3aj/v/pWXu+/6Xu9HzNlZ/BB6dU8JuU7SH/0W3wo\nzOfzsyRa0qfomVZrCB8d2tbChv3X1HJtWhHif3HG8qed91jREvGtkQkVA5dR\n5cZ/aUT2n2VBKKx2eGVzQQEN+EzUX6TaP5+XhpI3xdzJvmD7YjaFo4EQZV9j\neDk1hnrJo+xiE0ItidOC7f65PlgHF4CIhvOI1pX7iKG7pt4I4fePFa9wqUt3\nre8a3PnF4pSspEIK1G6fle3ndHhWzIuQt2+9RIhd/O/CeCzKaAvrZXDdM4Ez\nOabT\r\n=lnI5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBMGsBMSmbVPfpDbmaasDVSM0FTpqNaXJCf0EUb8eNGbAiEArBjDaMu9awXql3qFpe7KdL9dzqILwXuwhPjoSjHVaos="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.15.0_1595259497470_0.21479227169395987"},"_hasShrinkwrap":false},"1.15.1":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.15.1","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.1","body-parser":"1.19.0","cookie-parser":"1.4.5","express-session":"1.17.1","serve-static":"1.14.1","ws":"7.3.1","infusion":"3.0.0-dev.20200317T122331Z.1aa7ea8a1.FLUID-6145","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.2","form-data":"3.0.0","json5":"2.1.3"},"devDependencies":{"eslint-config-fluid":"1.4.0","eslint-plugin-markdown":"1.0.2","fluid-grunt-lint-all":"1.0.8","fluid-express":"1.0.16","fluid-pouchdb":"1.0.16","grunt":"1.2.1","nyc":"15.1.0","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"3.0.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"e31361a2072b98c73ca3998ee360a094eda84458","_id":"kettle@1.15.1","_npmVersion":"5.6.0","_nodeVersion":"12.18.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-BcDmHsSH1J0DjXBnDoGwxgDSzNu90jEpgqMPEpV7+ocLVzy1lrv1RGT8sJLIOkL9rl44QLSmPY0QdUhrnD5zhw==","shasum":"134bfd9d589c67ce1b4bbe6b207f65f450851645","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.15.1.tgz","fileCount":124,"unpackedSize":535910,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGtg1CRA9TVsSAnZWagAAENwQAJdxko2Hh5S7/U99eBTb\nb/DUBPAXbcRjyIrTYdXnE65DayOShCOXPubyVwbGUOqjLLXlr7ToaRhaUUzi\n/y/dhT+Dr1t+A2E5ySxsLYgRVcfYsxr013WfvJEc72IdlBtZqj3j1tYrfF+1\nHQiRbCWXbuGkcf1nUvLUUu0c6d0WnyJm/0GvLBPOef2i/eRD4cUCMx1Lvdbd\nw2H9OrOnc/qMZaiFTHpU/F5cG/Lu2IZghHsHwVEaI5daujuWl8VxoYg9LQzU\n22KwFxKcuTqDakw6+ntTMTgTcgbljj/03cuO+pubb+a1OnLZpa/xJIVfJ1WO\nb8uMm3dN9Mww9iO9DpRO1pBlZXxvZtLv/doi4pFQjbK3SnoyQnRhjFmgOq9h\nvTaRBP62Jyy6+MkrfNffcK7RajHKW5EOy2gBh+NeWwLRL9ykU45Gv+M5b3Hh\nFvk+KeTcfPGe1ZvHsu2xKLK2M1vIQP41ZFgj6sTEklDCJ8a4wAsQ2uDdfZpJ\nqZZR0Ca4BDMxWBV3lQJCkL6BmOaLadTCKiLsI1/vxtCTloZFnsCtn6Urw6pM\nlLVX0jI/fB5EqyZIBsV9pWQMdnLtVW/pHFdagCID5qM7HrqZhw5t2yWyxS30\n5hQDBVMBae2W51SBXhUy8bOuGVJ+ROwUXvthiuFKGjB54T1ISYxIO2A46zlG\n5umQ\r\n=6msW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzdZBHQS9V+iH5HwtQfWhLrYcqxtBoiyUp11uHrhAPjAiAqc7thORZUCRDPUSfpzHF8Ulcq/Hg4207eD4Iwqf/gLA=="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.15.1_1595594804685_0.4767230175767516"},"_hasShrinkwrap":false},"1.16.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"1.16.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.1","body-parser":"1.19.0","cookie-parser":"1.4.5","express-session":"1.17.1","serve-static":"1.14.1","ws":"7.3.1","infusion":"3.0.0-dev.20200728T104627Z.e6aa1a341.FLUID-6145","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.2","form-data":"3.0.0","json5":"2.1.3","follow-redirects":"1.12.1"},"devDependencies":{"eslint-config-fluid":"1.4.0","eslint-plugin-markdown":"1.0.2","fluid-grunt-lint-all":"1.0.8","fluid-express":"1.0.16","fluid-pouchdb":"1.0.17","grunt":"1.2.1","nyc":"15.1.0","grunt-shell":"3.0.1","node-jqunit":"1.1.8","rimraf":"3.0.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=4.5.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"8d0cefbb3b12dcea9d2fc17bba2571ea4e028993","_id":"kettle@1.16.0","_npmVersion":"5.6.0","_nodeVersion":"12.18.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-ONRtw8BKqiVa0uM8HTbtGz/0RMh3aahyr50BoD579q6gn3yYe6IZy4YzdVeSTlNshHh89p7jjr4izmNZFaAIRA==","shasum":"73263f13c1502a3cb6c6de0c9f17d82dce2d0f30","tarball":"https://registry.npmjs.org/kettle/-/kettle-1.16.0.tgz","fileCount":124,"unpackedSize":538234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLYvVCRA9TVsSAnZWagAAKv0P/0Fv/p4g+onFxHtFtf0z\nexmMfFzQC+Vkc0p+yS3uFLLU4j3jcuBVqE4ZATh34LkUyOirHiQo39tB5fYd\nppYPSs11OfciXirVvrNmiQgUJrKWVwS+p48SDF7uZe2xCEON4CqJ443OFQV1\naREPI8jUWBOPeWRML4L98jeaPq4VhHfsmGDH8O/Ir8OUxvDHD1TvtNJMolwG\n1K/n0DHP8D/UUQY/EeSXMEwon9sCFtIcIANkv/MRUWIbxLhG/5T2VMoJQa5B\nSdmT7ScyDXPr8iNhunyZSQuMzgKN8UChUPkOaxvaAGN44ZZNE52ZaAis2k1I\nvnohE7Zw+0FSrDh9DB8aFY6zNX4TNq+AxSgoBJ12Abu3MxoDeNf9DWpWhh+a\n3cQbPqkHfp/wy3tHvGCGH/Pf8wXGw2nmkk0tI36oj5PjQCtJ6djAsb/Q6o+R\ngAVbQYmhaM3lPKmsOySysvC7FVj9jGMk2W1gRd1FDeN1zLT8wG3ncZOOZgDw\nO7PYnV3tH40U0hhSjLRMgoZh7k2nV28VHl3s/4K1fbcu9r5e50YszQ5z2fjx\nHT4rsHtuD5sVvf6prW51R13y6/DDlSa1ESgw5iR8oWL2R/e9SOEq9cOM94BF\nNwr7M0Ppm4aWx8fB1y0SA14wPKmdWUEp6swZH2/viPTj8ZFXW705yk06WzQz\n8+0j\r\n=sWgy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICUdZXXQjFfvATpOaWLAwpAJ/pAyC0YkX9IKjSY7IYNOAiEAiRIlHCEkK1nWnlIl7A7yh1YZwePnT3hBESj87DSZawk="}]},"maintainers":[{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"},{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_1.16.0_1596820437157_0.07751026152588425"},"_hasShrinkwrap":false},"2.0.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"2.0.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"node node_modules/rimraf/bin.js coverage/*","lint":"node node_modules/grunt/bin/grunt lint","test":"node node_modules/nyc/bin/nyc.js --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; $(npm bin)/grunt lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.1","body-parser":"1.19.0","cookie-parser":"1.4.5","express-session":"1.17.1","serve-static":"1.14.1","ws":"7.3.1","infusion":"3.0.0-dev.20200930T151056Z.d0b9e348d.FLUID-6145","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.2","form-data":"3.0.0","json5":"2.1.3","follow-redirects":"1.13.0"},"devDependencies":{"eslint-config-fluid":"1.4.0","eslint-plugin-markdown":"1.0.2","fluid-grunt-lint-all":"1.0.8","fluid-express":"1.0.16","fluid-pouchdb":"1.0.17","grunt":"1.3.0","nyc":"15.1.0","node-jqunit":"1.1.8","rimraf":"3.0.2"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=10.0.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"c0633b2156b33e805898cc18253cc84c953bb464","_id":"kettle@2.0.0","_npmVersion":"5.6.0","_nodeVersion":"12.18.2","_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"dist":{"integrity":"sha512-/9Zfjduk/4+yq3xujHM4Wx8D3pU1ldad/PW/dhVkv7x0nLlsg24Ll9myJtsvRA7aVopvZ4jESxLXFrh8+6dtbw==","shasum":"7a1531ca425d6315618856247af3f69b325db937","tarball":"https://registry.npmjs.org/kettle/-/kettle-2.0.0.tgz","fileCount":124,"unpackedSize":529250,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdKiICRA9TVsSAnZWagAAn3AQAI51HeWbMDSqi2Mg6Aed\nvm7qAht4QWOw00e5oBaWFo7ewURJA5XPIeAA72BEX7yb9TN46rUJrdNHkQQw\n8XkgyYAdxabtYtvnNK5+AQ6Sy/HHFcNF0zNk6jBwYhVkd0BPVoXdsHLXKPDs\nAYO3ULO8/fPOa79DWsx4V0tG9VxMaYfG67L46zEfpkgCGjf3XjuAUeirxeBW\nhE/7O1hSLfSAKuyzK4yvgDMF5cvtyNM7I7say1FsHz65q3tr38yIDOFBant/\nzqJIizWGTwIlFuOxQr27Dafm4FsezgnQ8oH7HOFR9F5hlbEzFYjKaB1yGGFs\n9wg7Sp8/02IrYB206J/lNKLSozp0xyjaCSNrBog2NTVnG0BcbNWv0S3oGqcX\n8gtIuXvYOee2rgcegpya7uokcyNFgmB6dlzfHIjYtWFdrdjf+sJ1xv7qnMVd\nBrrLSsQyZHy8fBTJiKUzont0Dlqh1lmibcuVYM5hNgO2L4xkNoZFpl4g2tyi\ndKHQyrnivud1PQL+Gqjgy4KSfRvDwICvl0RC/9ee4OHhJqzrE7QsjpOcsKk8\nQcz3OPY712QGQAne0W6lAdtepFEWho8zgc8oWESVa41W9jRL7lnB4dgU3AX6\nhvG2OWMnBSIJ97+xHWaNhLGD3BXCVlMgXTeZdGFQD4xaoxt2puP7Gvnydufo\nKBFw\r\n=lAVG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIArrRVShQGC8p/mfXjxva7iH2WK6Zg+5NwvFiok9mw3IAiEA/HtWovLLl3y5qjNru6ytYjyVtJiKx1m9B2Dmg94EQi4="}]},"maintainers":[{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"},{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_2.0.0_1601480840085_0.10167778301925812"},"_hasShrinkwrap":false},"2.1.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"2.1.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"npx rimraf coverage/*","lint":"fluid-lint-all","test":"nyc --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm run lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.1","body-parser":"1.19.0","cookie-parser":"1.4.5","express-session":"1.17.1","serve-static":"1.14.1","ws":"7.4.2","infusion":"3.0.0-dev.20210120T204128Z.6e4be079f.FLUID-6580","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.2","form-data":"3.0.0","json5":"2.1.3","follow-redirects":"1.13.1"},"devDependencies":{"eslint-config-fluid":"2.0.0","fluid-lint-all":"1.0.0","fluid-express":"1.0.17","fluid-pouchdb":"1.0.17","nyc":"15.1.0","node-jqunit":"1.1.8"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=10.0.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"46ed7047a44058b1a9862cc0732200de19f07b73","_id":"kettle@2.1.0","_nodeVersion":"14.15.4","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Lae3gaxmudp7mxS23yB3Cp/f1wLeRJMRG7PK+cjSMagwGZdzakWh3iiNzLsILK3/Yk5DNlblVR+0PBg46yn+KA==","shasum":"b668742eaae78c34d9f9af5a0ddcab5b410f3977","tarball":"https://registry.npmjs.org/kettle/-/kettle-2.1.0.tgz","fileCount":124,"unpackedSize":529574,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCJziCRA9TVsSAnZWagAAetsQAJFopkwN7sbZyNLmg1wG\n28g7xPiP/4BCWOdWqDj2wg9FDfkHLzXzZbPU5ePMh+3on+rjajEz3eUMr1De\n1S1ogXmNxeYMqkI5lET/hZXSpVNlAUaIqYPpKElIHi0S8AZRP2hCNk83jmx2\n95jnuVVR1n1EZceBaZ9H79KaoIbSmXsX6YqpdLKVbgGbdnkHsJ1muE0u1oxI\nBzp2n7dZW4rLxsra1OL9ErODU/1Dc4eJGRhTI6XqpBtAaK4CPKUUQShQMENq\nI9+4Wvj4vxbXmCrvkSNy6w8BakGqZSbppnjHC152esu78dpyql6ORasD+VCt\nBNKu/23p3QpBRNlNXiz638R2f7Ays3gmc7fShZtP9mAfl9UdKON+HQMQy02B\n3EFhxz/4fxo3qCDI8tymlhnjG1JecHQkoC4w6KxhCdLTYeNnofsFVQ7JF/W9\n2qHxN4n/YWHfkxJZU3asiCGMrwazjjY5XurWWk61LV3AcpNmgQf74gjvYQZw\ncL9HvMQJtcxm3TAfOfVmD7hTRQbm9lZoLwM/rryvD6Mc5NRsHOMNaRVQxast\n1ZlFi4AWm9D7GbVoiZRI9xjYyRXPCAvC62yb+bLwujNECLQ6Q1RUo3V2UDS+\nYRmM6CV8wcqD2JCgyXj49EaFIPQKLmDoK/FXG4LZpQ3BhMhFBn8+G1l+zUyk\n0Z/M\r\n=dQv5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+bmz6ZoJ9W75qh0TX5G0S/JsjUH3KdCTl7zC5CnzeBwIhANpgdo9ljvhXYoLuaNoqR85baV4F3pUKeUnvSP0Yraaf"}]},"_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"directories":{},"maintainers":[{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"},{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_2.1.0_1611177185510_0.5108650944238557"},"_hasShrinkwrap":false},"2.2.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"2.2.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"npx rimraf coverage/*","lint":"fluid-lint-all","test":"nyc --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm run lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.1","body-parser":"1.19.0","cookie-parser":"1.4.5","express-session":"1.17.1","serve-static":"1.14.1","ws":"7.4.4","infusion":"3.0.0-dev.20210302T181135Z.08e9a66ea.FLUID-6580","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.2","form-data":"4.0.0","json5":"2.2.0","follow-redirects":"1.13.3"},"devDependencies":{"eslint-config-fluid":"2.0.0","fluid-lint-all":"1.0.0","fluid-express":"1.0.18","fluid-pouchdb":"1.0.17","nyc":"15.1.0","node-jqunit":"1.1.8"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=10.0.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"03ab5124471f5e3ce622a2942beeb49c2d67253a","_id":"kettle@2.2.0","_nodeVersion":"14.15.4","_npmVersion":"6.14.11","dist":{"integrity":"sha512-OqeCbOcY/M2+QhV75tWc30I1t671GnGauQhZXb4/Q/m58eDCpokvRpnjjaXxJihstCyqWXIdcRmi/YHWk/UzGQ==","shasum":"63dc28b6e4c2f671817c3a585e6ad40b3b53b422","tarball":"https://registry.npmjs.org/kettle/-/kettle-2.2.0.tgz","fileCount":124,"unpackedSize":529793,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgS2xTCRA9TVsSAnZWagAAvpEQAKTX7w+G3WtDA9Axmxy9\nMD3WwOORmwI5WpPj+mIZXiwpwM15IR/8kLeQlg5INfd8oRUM0QbmPfNT9S4t\nxxX8cCVAIcSywO5MgSKjQY671cpQxRI3OQbmVYcDdmYpCwI2Cj+PztJRzQFy\njkfnvpiRH2ENoLNN0IcLRv2cftRcMKXg11MSxF5X+5yxRfW+zLyGwNtGOvwR\n7eaPUjjytoYSfe2HxGgh+y+iZc/M3T0EkKwzw2hoXd2cbSqRw7DdEeVleyVI\n5HFZxusybaE+YpisepDSM690V7P/Y5PCOuPFsDHbpRnZkTy4P9xxNSDQ3F6j\nQguuOLKXMzfMnvXKPeac9CmULMHcYh7fTfLXwI9AeO90UdsPJ6JaoSzHxATQ\nRXWrvcVWBPqC9ADoclzTeLb5Fi6XmszSzROcsP5vTF3uVMZFvYpk5Q2N/lXn\n3x8VyabLOd2CXYea7UGivmy8OoeTO0DQt7dIeQ7FtwTZYjb1/Tv6IthNZrct\n+EwF+PuczMz6cLUt0g1H/sj3M6cjaYXIYbT75FVM4Mej+d1YBJCbDFc5JBg5\nq1rBW0WxgJouWQcYqYdu8h8K2p83r8WzKEUiK/NoqHBfJs6eMLViOHYia87/\n/SCNhYct/E5lijAxIH6yToRC5MlUkK076KPmXoBOuYkNq5B/y2+wjKQsgH5a\nFLEA\r\n=dJmc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCW6jQifQgl+FRaoCuh93KvI0/JCw10FEm9YBnoA7d5DAIhAOuBoMxB1bfUorOnwa2U5HH5P4OuuH+eVDZAsFmsNVdQ"}]},"_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"directories":{},"maintainers":[{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"},{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_2.2.0_1615555667091_0.11763378290888538"},"_hasShrinkwrap":false},"2.3.0":{"name":"kettle","description":"Declarative IoC-based framework for HTTP and WebSockets servers on node.js based on express and ws","version":"2.3.0","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"scripts":{"pretest":"npx rimraf coverage/*","lint":"fluid-lint-all","test":"nyc --reporter=html node tests/all-tests.js","lint:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm run lint'","test:vagrant":"vagrant ssh -c 'cd /home/vagrant/kettle; npm test'"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","dependencies":{"express":"4.17.2","body-parser":"1.19.2","cookie-parser":"1.4.6","express-session":"1.17.2","serve-static":"1.14.2","ws":"7.5.7","infusion":"4.0.0-dev.20220209T141225Z.50bdbf8d1.main","jsonlint":"1.6.3","fluid-resolve":"1.3.0","path-to-regexp":"1.7.0","multer":"1.4.4","form-data":"4.0.0","json5":"2.2.0","follow-redirects":"1.14.8"},"devDependencies":{"eslint-config-fluid":"2.0.1","fluid-lint-all":"1.1.5","fluid-express":"1.0.18","fluid-pouchdb":"1.0.17","nyc":"15.1.0","node-jqunit":"1.1.9"},"license":"BSD-3-Clause","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"main":"./kettle.js","engines":{"node":">=12.0.0"},"nyc":{"exclude":["/node_modules/**"],"temp-directory":"./coverage/.nyc_output"},"gitHead":"1699a1320e8f689fcedd2243a65c0d93d5fe862c","_id":"kettle@2.3.0","_nodeVersion":"16.6.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-NkfaUVrJBTER2vsRgaZTFPik4hq3qdmqn4zDYGpTRr6uJnMkxiwtkE8aCtJArrPUz18SpV+AH5XmTloXWJtMhg==","shasum":"0ad41b0881f73cf7d092eaab535db319160990e0","tarball":"https://registry.npmjs.org/kettle/-/kettle-2.3.0.tgz","fileCount":124,"unpackedSize":529877,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDOhdCRA9TVsSAnZWagAAaUYP/1DjZ2CtXgW/3ya0TslP\nUY9diwNV+GXuyD6Sh67SO9JqyNU8CKtkPB6+sea5FTnbPOeAFVnFaHmxOXYn\nmafZ2vNHHOUHiu87Klkztq7RlmPFptLle/ERD7l5TyLpvxFZgG02Xo101ZLN\nwZXax7qvG4QjnyvXquCD6XCsExwRiFdwzRqEBXqz0nuBxx6W16GtxsDI23/V\nbhyfwBHPrXyRSpr8wRTlfJQLStsacDY9o8SWjiIEKM0pZTakwUu398y9NpSD\nGct0+G98TQOM9ShzTglN3DsfbBLm8ylceitFh52X8x6BO27WZi5BRgSbXn3h\nPRpzgd2LAH9+iZRnLHdSnGnRh0vis4kJ0XyON1430RrSvVIG1z/xRk8h1CXo\nxNttSlgJKVInxo6xhdySWStdw7Xpc8tB3oDYaaqW8f9CXduNroUmTjGATkWg\ncQeuZereZ5K/lVU1NmKHLRjJtTB8T1yu8g1FAWRiJn06dqu2AUn6Ouk+hDPt\nj5yuF5uDbwzHTCbjheIeiMaW01KjefXOOtxgnRZmO0LhLa5rJgUJklrj1lwH\nnIJGbh26jIjXdcCOuO0fDpPWCHQL7u04MqrkvPAETGFtKSoWNBPJsp95V5nd\nLtcI66VZpmOJh2O+A/gSSZjKjikosD+6XedgKOC6Lb7IahJrjlXounLrgDIp\n5ZoY\r\n=Iipg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBPTs7C/fHFb4imBcP0wLD7ZQpWvcQOZKPUXnC5k5apmAiAxveuCzJJNblbEGije31jrsgbxIoxiuSssPXwUkG0mjw=="}]},"_npmUser":{"name":"amb26","email":"amb26npm@ponder.org.uk"},"directories":{},"maintainers":[{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"},{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kettle_2.3.0_1645013085368_0.32260762427216716"},"_hasShrinkwrap":false}},"maintainers":[{"name":"colinbdclark","email":"colinbdclark@gmail.com"},{"name":"jobara","email":"obara.justin@gmail.com"},{"name":"amb26","email":"amb26npm@ponder.org.uk"},{"name":"cindyli","email":"cli@ocadu.ca"}],"time":{"modified":"2022-06-19T08:26:48.261Z","created":"2011-08-28T15:43:39.259Z","0.0.1":"2011-08-28T15:43:39.862Z","1.0.0-dev.20151203T203010Z.ea93d24":"2015-12-08T00:01:38.145Z","1.0.0-dev.20160525T225235Z.938ffbd":"2016-05-25T22:57:30.408Z","1.0.0":"2016-05-26T01:08:57.997Z","1.0.1":"2016-07-15T20:15:27.279Z","1.1.0":"2016-07-15T20:19:21.677Z","1.1.1":"2016-11-01T03:14:03.964Z","1.2.0":"2016-11-03T17:32:35.744Z","1.2.1":"2016-11-14T03:07:20.782Z","1.2.2":"2016-11-23T16:21:18.890Z","1.2.2-dev.20170103T231035Z.becc1e1":"2017-01-05T18:54:40.359Z","1.3.0":"2017-01-06T01:04:21.573Z","1.3.1":"2017-01-27T15:19:10.591Z","1.3.2":"2017-01-31T16:37:34.401Z","1.4.0":"2017-02-18T03:01:04.718Z","1.4.1":"2017-04-19T13:18:40.452Z","1.5.0":"2017-05-01T22:22:11.408Z","1.6.0":"2017-06-16T14:48:28.315Z","1.6.1":"2017-07-13T17:52:37.789Z","1.6.2":"2017-07-14T10:59:31.194Z","1.6.3":"2017-07-24T17:09:00.145Z","1.6.4":"2017-07-24T17:28:00.904Z","1.7.0":"2017-08-31T17:24:45.936Z","1.7.1":"2017-11-17T10:16:33.398Z","1.7.2":"2018-06-01T22:00:29.015Z","1.7.2-dev.20180601T220005Z.7af2dae.KETTLE-67":"2018-06-01T22:01:54.609Z","1.7.3":"2018-06-06T11:20:19.367Z","1.8.0":"2018-08-16T01:37:17.633Z","1.8.1":"2018-10-04T13:26:18.160Z","1.9.0":"2018-12-05T22:15:45.729Z","1.10.0":"2019-02-04T22:49:54.441Z","1.10.1":"2019-02-05T12:08:38.810Z","1.11.0":"2019-05-22T23:10:01.811Z","1.12.0-dev.20191024T094429Z.41cce95.KETTLE-80":"2019-10-24T09:46:04.184Z","1.12.0-dev.20191024T124425Z.59643ce.KETTLE-80":"2019-10-24T12:44:49.210Z","1.12.0-dev.20191125T152958Z.c571ba7.FLUID-6145":"2019-11-26T14:17:42.466Z","1.12.0-dev.20191220T164344Z.f1fef17.FLUID-6145":"2019-12-20T16:45:00.196Z","1.12.0-dev.20200409T141107Z.a00af3d.KETTLE-82":"2020-04-09T14:20:42.056Z","1.12.0":"2020-04-10T12:36:15.520Z","1.12.0-dev.20200709T180050Z.3070cd0.KETTLE-86":"2020-07-10T18:29:18.574Z","1.13.0":"2020-07-16T14:38:45.822Z","1.14.0":"2020-07-16T14:55:29.862Z","1.15.0":"2020-07-20T15:38:17.663Z","1.15.1":"2020-07-24T12:46:44.817Z","1.16.0":"2020-08-07T17:13:57.378Z","2.0.0":"2020-09-30T15:47:20.239Z","2.1.0":"2021-01-20T21:13:05.657Z","2.2.0":"2021-03-12T13:27:47.210Z","2.3.0":"2022-02-16T12:04:45.505Z"},"repository":{"type":"git","url":"git+https://github.com/fluid-project/kettle.git"},"homepage":"http://wiki.fluidproject.org/display/fluid/Kettle","keywords":["infusion","framework","application","fluid","IoC","express","Inversion of Control","MVC","evented"],"readme":"# Kettle\n\n[![Build status](https://badge.buildkite.com/8715d7bc790b1c2702109d3ce2b777fe5322c858465e587478.svg)](https://buildkite.com/fluid-project/kettle)\n\nKettle is an integration technology which promotes the expression of servers handling HTTP and WebSockets endpoints.\nWith a few exceptions, Kettle implements no primary functionality of its own, but aggregates the facilities of\n[express](http://expressjs.com/) and [ws](https://github.com/websockets/ws), as well as middleware held in the wider\n[pillarjs](https://github.com/pillarjs) \"Bring your own HTTP Framework Framework\" ecosystem. Kettle applications can\neasily incorporate any express-standard middleware, as well as coexisting with standard express apps targeted at the\nsame node.js <a href=\"https://nodejs.org/api/http.html#http_class_http_server\"><code>http.Server</code></a>. Since\nKettle applications are expressed declaratively, in the JSON format encoding\n[Infusion](https://github.com/fluid-project/infusion)'s component trees, it is possible to adapt existing\napplications easily, as well as inserting middleware and new handlers anywhere in the pipeline without modifying the\noriginal application's code. This makes Kettle suitable for uses where application functionality needs to be deployed\nflexibly in a variety of different configurations.\n\nIn fact, Kettle's dependency on express itself is minimal, since the entirety of the Kettle request handling pipeline\nis packaged as a single piece of express-compatible middleware – Kettle could be deployed against any other consumer\nof middleware or even a raw node.js HTTP server.\n\n## Notes on Kettle 2.x releases\n\nThe 2.x line of Kettle releases are (at the time of writing) still code-compatible with the 1.x releases in terms of\nsupport for user code, but the 2.x Kettle releases break compatibility with older versions of Infusion (1.x through\n3.x). Kettle 1.x has been compatible with mainline releases of Infusion as well as those from in-progress\nFLUID-6145 and FLUID-6148 branches. Kettle 2.x releases are only compatible with 4.x releases of Infusion (and\nhistorically, those from the FLUID-6145 branch, newer than and including\n3.0.0-dev.20200930T151056Z.d0b9e348d.FLUID-6145 ).\n\n## Contents of this repository\n\n### Core Kettle implementation\n\nThis is packaged as Infusion [grades](http://docs.fluidproject.org/infusion/development/ComponentGrades.html) derived\nfrom [`kettle.server`](./docs/Servers.md#kettle.server),\n[`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) and\n[`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app). The first two of these exist in variants specialized both\nfor plain HTTP (with the `.http` suffix) and for WebSockets (with the `.ws` suffix) – `kettle.app` does not specialize.\n\n### Contents - Testing\n\nAs well as the integration technology implementing Kettle itself, this repository also contains functionality helpful\nfor testing HTTP and WebSockets servers written in arbitrary technologies. This is accessed by running\n`kettle.loadTestingSupport()` after having called `require(\"kettle\")`. Kettle testing support allows HTTP and\nWebSockets client requests to be packaged as [Infusion](https://github.com/fluid-project/infusion) components, suitable\nfor use with Infusion's\n[IoC Testing Framework](http://docs.fluidproject.org/infusion/development/IoCTestingFramework.html).\nAny user of Kettle's testing support needs to have [node-jqunit](https://github.com/fluid-project/node-jqunit)\nregistered as a member of their own project's `devDependencies` in their own package.json.\n\nKettle runs on [node.js](https://nodejs.org) version 12.x and upward (see [package.json](package.json) for current\ndependency profile).\n\n### Contents - DataSources\n\nThe Kettle repository also contains a few implementations of the simple `DataSource` contract for read/write access to\ndata with a simple semantic (broadly the same as that encoded in\n[CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) although the current DataSource semantic does not\nprovide explicitly for deletion). See the documentation section on [DataSources](./docs/DataSources.md) for details of\nthis contract, the available implementations and how to use them.\n\nThis repository contains DataSource implementations suitable for HTTP endpoints (with a particular variety specialised\nfor accessing CouchDB databases with CRUDlike semantics) as well as the filesystem, with an emphasis on JSON payloads.\n\n## Getting Started and Community\n\n### Installation instructions\n\nFirstly, install node and npm by running a standard installer from [node.js](https://nodejs.org). Clone this repository\nand then run `npm install`.\n\n### Issue Tracking\n\nIssue tracking is at [http://issues.fluidproject.org/browse/KETTLE](http://issues.fluidproject.org/browse/KETTLE).\n\n### IRC\n\nVisit `#fluid-work` on Freenode – community resources are linked at\n[Fluid's IRC Channels](https://wiki.fluidproject.org/display/fluid/IRC+Channel).\n\n### Mailing list\n\nContact us on the [fluid-work](https://wiki.fluidproject.org/display/fluid/Mailing+Lists) mailing list with any\nproblems or comments.\n\n### Uses of Kettle and related projects\n\nThe primary user of Kettle is the [GPII](http://gpii.net/)'s autopersonalisation infrastructure, held at\n[GPII/universal](https://github.com/GPII/universal). Kettle is used to provide a flexible means of deploying the\nGPII's \"Flow Manager\" and related components distributed across multiple local and remote installations.\n\nA closely related project to Kettle is [gpii-express](https://github.com/GPII/gpii-express) which is used in other\nGPII projects such as the [terms registry](https://github.com/GPII/common-terms-registry) and\n[unified listing](https://github.com/GPII/ul-api). This is similar in architecture to Kettle (wrapping express\nprimitives such as servers and requests into dynamically constructed Infusion components) but slightly different in\nemphasis –\n\n* gpii-express allows independently mounted application units with nested routing, in the Express 4.x style – whereas\n  Kettle is currently limited to flat Express 3.x-style routing\n* Kettle incorporates support for WebSockets endpoints, whereas gpii-express does not\n* Kettle incorporates support for DataSources (see [DataSources](./docs/DataSources.md) )\n\nThe request handling architecture for gpii-express and Kettle is quite similar and the projects will probably converge\nover time. gpii-express currently already depends on Kettle to get access to its HTTP\n[testing](./docs/KettleTestingFramework.md) support.\n\n## Documentation\n\nDocumentation and sample code for working with Kettle is contained in the [docs](./docs) directory. Kettle is based on\nFluid [Infusion](http://fluidproject.org/infusion.html)'s\n[component model](http://docs.fluidproject.org/infusion/development/HowToUseInfusionIoC.html). If you aren't familiar\nwith the syntax and meaning of Infusion component trees, it is a good idea to browse the documentation, tutorials and\nexamples at the Infusion [documentation site](http://docs.fluidproject.org/infusion/development/).\n\nIt contains the following topics:\n\n1. Defining top-level [Kettle applications using \"config\" files](docs/ConfigsAndApplications.md).\n2. Defining HTTP and Websockets servers using the grades [`kettle.server`](./docs/Servers.md#kettle.server) and\n   [`kettle.server.ws`](./docs/Servers.md#kettle.server.ws).\n3. Defining Kettle request handlers derived from grades\n   [`kettle.request`](./docs/RequestHandlersAndApps.md#kettle.request) grouped into app units derived from\n   [`kettle.app`](./docs/RequestHandlersAndApps.md#kettle.app)\n4. Working with standard express [middleware](./docs/Middleware.md) –  incorporating any standard middleware from the\n   express community and registering it into a Kettle application\n5. Working with [DataSources](./docs/DataSources.md) to abstract over asynchronous access to (primarily JSON-formatted)\n   data stored locally or remotely\n6. Defining conversational, asynchronous test fixtures against HTTP and WebSockets servers using the [Kettle testing\n   framework](./docs/KettleTestingFramework.md)\n\nOf these elements of this module, those described in topics 1, 5 and 6 (configs, DataSources and the testing framework)\nare portable and do not depend specifically on the Kettle server and request handling infrastructure –   they can be\nused together with any technologies defining node.js HTTP and WebSockets servers (or in the case of configs,\nany node.js enabled [Infusion](http://fluidproject.org/infusion.html) application).\n","readmeFilename":"README.md","author":{"name":"The Fluid Project"},"bugs":{"url":"http://issues.fluidproject.org/browse/KETTLE"},"license":"BSD-3-Clause"}