{"_id":"tailwind","_rev":"325665","name":"tailwind","description":"tailwind is a base module for streaming and evented CQS applications.","dist-tags":{"latest":"4.0.0"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"time":{"modified":"2021-06-07T02:44:34.000Z","created":"2017-06-15T10:50:14.760Z","4.0.0":"2019-03-14T10:10:34.052Z","3.1.0":"2019-03-12T12:50:52.563Z","3.0.1":"2019-03-12T12:05:03.180Z","3.0.0":"2018-12-12T20:28:24.354Z","2.4.1":"2018-11-07T10:51:59.422Z","2.4.0":"2018-10-12T15:19:05.062Z","2.3.1":"2018-09-12T11:03:06.381Z","2.3.0":"2018-09-11T07:47:18.764Z","2.2.0":"2018-06-25T10:48:28.590Z","2.1.1":"2018-06-14T10:57:25.026Z","2.1.0":"2018-04-30T16:15:46.439Z","2.0.4":"2018-02-13T10:34:13.188Z","2.0.3":"2018-02-12T19:39:12.310Z","2.0.2":"2018-02-12T16:32:57.294Z","2.0.1":"2018-02-12T16:18:41.339Z","2.0.0":"2018-02-11T10:09:02.390Z","1.0.1":"2017-07-04T07:29:40.849Z","1.0.0":"2017-06-15T10:50:14.760Z"},"users":{},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"versions":{"4.0.0":{"name":"tailwind","version":"4.0.0","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"@babel/runtime":"7.3.4","ajv":"6.10.0","app-root-path":"2.1.0","async-retry":"1.2.3","body-parser":"1.18.3","commands-events":"1.0.4","compression":"1.7.3","content-type":"1.0.4","cors":"2.8.5","crypto2":"2.0.0","datasette":"1.0.1","draht":"1.0.1","express":"4.16.4 ","flaschenpost":"1.1.3","hase":"2.0.0","json-lines":"1.0.0","limes":"2.0.0","lodash":"4.17.11","lusca":"1.6.1","morgan":"1.9.1","nocache":"2.0.0","partof":"1.0.0","processenv":"1.1.0","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"3.0.1","ws":"6.2.0"},"devDependencies":{"amqplib":"0.5.3","assertthat":"2.0.3","common-tags":"1.8.0","json-lines-client":"1.0.1","needle":"2.2.4","nodeenv":"1.0.0","roboter":"4.0.2","shelljs":"0.8.3"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":["cqs","cqrs"],"license":"AGPL-3.0","gitHead":"b717cb5686e18020bedf1cee64270bb60387f816","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@4.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"070b5e5f1c2c190e4c0d1280a46b36c7369ea46e","size":57511,"noattachment":false,"key":"/tailwind/-/tailwind-4.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-4.0.0.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_4.0.0_1552558233862_0.0788147142404112"},"_hasShrinkwrap":false,"publish_time":1552558234052,"_cnpm_publish_time":1552558234052},"3.1.0":{"name":"tailwind","version":"3.1.0","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"@babel/runtime":"7.3.4","ajv":"6.10.0","app-root-path":"2.1.0","async-retry":"1.2.3","body-parser":"1.18.3","commands-events":"1.0.4","compression":"1.7.3","content-type":"1.0.4","cors":"2.8.5","crypto2":"2.0.0","datasette":"1.0.1","draht":"1.0.1","express":"4.16.4 ","flaschenpost":"1.1.3","hase":"2.0.0","json-lines":"1.0.0","limes":"1.1.0","lodash":"4.17.11","lusca":"1.6.1","morgan":"1.9.1","nocache":"2.0.0","partof":"1.0.0","processenv":"1.1.0","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"3.0.1","ws":"6.2.0"},"devDependencies":{"amqplib":"0.5.3","assertthat":"2.0.3","common-tags":"1.8.0","json-lines-client":"1.0.1","needle":"2.2.4","nodeenv":"1.0.0","roboter":"4.0.2","shelljs":"0.8.3"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"a205fadf9e7b082bf422b33a4a8b594398208455","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@3.1.0","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"d05ffca027dd42412e1b7137e268bd54c3b8af93","size":57162,"noattachment":false,"key":"/tailwind/-/tailwind-3.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-3.1.0.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_3.1.0_1552395052455_0.4728202550155045"},"_hasShrinkwrap":false,"publish_time":1552395052563,"_cnpm_publish_time":1552395052563},"3.0.1":{"name":"tailwind","version":"3.0.1","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"@babel/runtime":"7.3.4","ajv":"6.10.0","app-root-path":"2.1.0","async-retry":"1.2.3","body-parser":"1.18.3","commands-events":"1.0.4","compression":"1.7.3","content-type":"1.0.4","cors":"2.8.5","crypto2":"2.0.0","datasette":"1.0.1","draht":"1.0.1","express":"4.16.4 ","flaschenpost":"1.1.3","hase":"2.0.0","json-lines":"1.0.0","limes":"1.1.0","lodash":"4.17.11","lusca":"1.6.1","morgan":"1.9.1","nocache":"2.0.0","partof":"1.0.0","processenv":"1.1.0","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"3.0.1","ws":"6.2.0"},"devDependencies":{"amqplib":"0.5.3","assertthat":"2.0.3","common-tags":"1.8.0","json-lines-client":"1.0.1","needle":"2.2.4","nodeenv":"1.0.0","roboter":"4.0.2","shelljs":"0.8.3"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"ad32ba3996dd9ecf574d5fc0e4a40cbaab74ed37","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@3.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"a231eadd574d2f252f763979914554160c912b6f","size":56947,"noattachment":false,"key":"/tailwind/-/tailwind-3.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-3.0.1.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_3.0.1_1552392303014_0.6234651623598719"},"_hasShrinkwrap":false,"publish_time":1552392303180,"_cnpm_publish_time":1552392303180},"3.0.0":{"name":"tailwind","version":"3.0.0","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"@babel/runtime":"7.2.0","ajv":"6.6.1","app-root-path":"2.1.0","async-retry":"1.2.3","body-parser":"1.18.3","commands-events":"1.0.3","compression":"1.7.3","content-type":"1.0.4","cors":"2.8.5","crypto2":"2.0.0","datasette":"1.0.1","draht":"1.0.1","express":"4.16.4 ","flaschenpost":"1.1.3","hase":"2.0.0","json-lines":"1.0.0","limes":"1.1.0","lodash":"4.17.11","lusca":"1.6.1","morgan":"1.9.1","nocache":"2.0.0","partof":"1.0.0","processenv":"1.1.0","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"2.0.0","ws":"6.1.2"},"devDependencies":{"amqplib":"0.5.3","assertthat":"2.0.1","common-tags":"1.8.0","json-lines-client":"1.0.1","needle":"2.2.4","nodeenv":"1.0.0","roboter":"3.0.3","shelljs":"0.8.3"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"b8725b1f890e4a6d38ce0cee21ab76f4fedbb2cb","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@3.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"060f8879122e80c08089233c29b86e64eec113ad","size":56951,"noattachment":false,"key":"/tailwind/-/tailwind-3.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-3.0.0.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_3.0.0_1544646504219_0.6109731215571776"},"_hasShrinkwrap":false,"publish_time":1544646504354,"_cnpm_publish_time":1544646504354},"2.4.1":{"name":"tailwind","version":"2.4.1","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"@babel/runtime":"7.1.5","ajv":"6.5.5","app-root-path":"2.1.0","async-retry":"1.2.3","body-parser":"1.18.3","commands-events":"1.0.3","compression":"1.7.3","content-type":"1.0.4","cors":"2.8.5","crypto2":"2.0.0","datasette":"1.0.1","draht":"1.0.1","express":"4.16.4 ","flaschenpost":"1.1.1","hase":"2.0.0","json-lines":"1.0.0","limes":"1.1.0","lodash":"4.17.11","lusca":"1.6.1","morgan":"1.9.1","nocache":"2.0.0","partof":"1.0.0","processenv":"1.1.0","spdy":"3.4.7","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"2.0.0","ws":"6.1.0"},"devDependencies":{"amqplib":"0.5.2","assertthat":"2.0.0","common-tags":"1.8.0","json-lines-client":"1.0.1","needle":"2.2.4","nodeenv":"1.0.0","roboter":"2.1.0","shelljs":"0.8.2"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"dc991130ee507d7f75744bad879e2e861c1f818b","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@2.4.1","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"mattwagl","email":"wagler@intuity.de"},"dist":{"shasum":"0c0a7581cefea25f1b61dc8a898905359bcfa501","size":57417,"noattachment":false,"key":"/tailwind/-/tailwind-2.4.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-2.4.1.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_2.4.1_1541587919207_0.9451225784413628"},"_hasShrinkwrap":false,"publish_time":1541587919422,"_cnpm_publish_time":1541587919422},"2.4.0":{"name":"tailwind","version":"2.4.0","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"@babel/runtime":"7.1.2","ajv":"6.5.4","app-root-path":"2.1.0","async-retry":"1.2.3","body-parser":"1.18.3","commands-events":"1.0.3","compression":"1.7.3","cors":"2.8.4","crypto2":"2.0.0","datasette":"1.0.1","draht":"1.0.1","express":"4.16.4 ","flaschenpost":"1.1.1","hase":"2.0.0","json-lines":"1.0.0","limes":"1.0.1","lodash":"4.17.11","lusca":"1.6.1","media-typer":"0.3.0","morgan":"1.9.1","nocache":"2.0.0","partof":"1.0.0","processenv":"1.1.0","spdy":"3.4.7","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"2.0.0","ws":"6.1.0"},"devDependencies":{"amqplib":"0.5.2","assertthat":"1.0.0","common-tags":"1.8.0","json-lines-client":"1.0.1","needle":"2.2.4","nodeenv":"1.0.0","roboter":"2.0.0","shelljs":"0.8.2"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"f9b35adee96185957bff4b4f44a50f6845d0882d","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@2.4.0","_npmVersion":"6.4.1","_nodeVersion":"8.11.3","_npmUser":{"name":"mattwagl","email":"wagler@intuity.de"},"dist":{"shasum":"77f677d8aabca5c854d4db3a7e30b4ee810d6374","size":57451,"noattachment":false,"key":"/tailwind/-/tailwind-2.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-2.4.0.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_2.4.0_1539357544941_0.3469246158370176"},"_hasShrinkwrap":false,"publish_time":1539357545062,"_cnpm_publish_time":1539357545062},"2.3.1":{"name":"tailwind","version":"2.3.1","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"ajv":"6.5.3","app-root-path":"2.1.0","async-retry":"1.2.3","babel-runtime":"6.26.0","body-parser":"1.18.3","commands-events":"1.0.3","compression":"1.7.3","cors":"2.8.4","crypto2":"2.0.0","datasette":"1.0.1","draht":"1.0.1","express":"4.16.3","flaschenpost":"1.1.1","hase":"1.0.3","json-lines":"1.0.0","limes":"1.0.1","lodash":"4.17.10","lusca":"1.6.1","media-typer":"0.3.0","morgan":"1.9.0","nocache":"2.0.0","partof":"1.0.0","processenv":"1.1.0","spdy":"3.4.7","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"1.0.1","ws":"6.0.0"},"devDependencies":{"amqplib":"0.5.2","assertthat":"1.0.0","common-tags":"1.8.0","json-lines-client":"1.0.1","needle":"2.2.2","nodeenv":"1.0.0","roboter":"1.0.7","shelljs":"0.8.2"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"ea2593890850b9d7721353a9077542aa81e750d7","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@2.3.1","_npmVersion":"6.4.1","_nodeVersion":"8.11.3","_npmUser":{"name":"mattwagl","email":"wagler@intuity.de"},"dist":{"shasum":"aff59e78fed903f75d38df515f6f42f5fb17efb7","size":57343,"noattachment":false,"key":"/tailwind/-/tailwind-2.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-2.3.1.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_2.3.1_1536750186175_0.8275188631227717"},"_hasShrinkwrap":false,"publish_time":1536750186381,"_cnpm_publish_time":1536750186381},"2.3.0":{"name":"tailwind","version":"2.3.0","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"ajv":"6.5.3","app-root-path":"2.1.0","async-retry":"1.2.3","babel-runtime":"6.26.0","body-parser":"1.18.3","commands-events":"1.0.3","cors":"2.8.4","crypto2":"2.0.0","datasette":"1.0.1","draht":"1.0.1","express":"4.16.3","flaschenpost":"1.1.1","hase":"1.0.3","json-lines":"1.0.0","limes":"1.0.1","lodash":"4.17.10","lusca":"1.6.1","media-typer":"0.3.0","morgan":"1.9.0","nocache":"2.0.0","partof":"1.0.0","processenv":"1.1.0","spdy":"3.4.7","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"1.0.1","ws":"6.0.0"},"devDependencies":{"amqplib":"0.5.2","assertthat":"1.0.0","common-tags":"1.8.0","json-lines-client":"1.0.1","needle":"2.2.2","nodeenv":"1.0.0","roboter":"1.0.6","shelljs":"0.8.2"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"ca42c05bad0eba6baa835ef2da7b31c2b7a584e9","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@2.3.0","_npmVersion":"6.4.1","_nodeVersion":"8.11.3","_npmUser":{"name":"mattwagl","email":"wagler@intuity.de"},"dist":{"shasum":"6bce8e79fb5339c624263034cdab1e1f68707445","size":54106,"noattachment":false,"key":"/tailwind/-/tailwind-2.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-2.3.0.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_2.3.0_1536652038572_0.7348483424895471"},"_hasShrinkwrap":false,"publish_time":1536652038764,"_cnpm_publish_time":1536652038764},"2.2.0":{"name":"tailwind","version":"2.2.0","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"ajv":"6.5.1","app-root-path":"2.1.0","async-retry":"1.2.1","babel-runtime":"6.26.0","body-parser":"1.18.3","commands-events":"1.0.3","cors":"2.8.4","crypto2":"2.0.0","datasette":"1.0.1","draht":"1.0.1","express":"4.16.3","flaschenpost":"1.1.1","hase":"1.0.3","json-lines":"1.0.0","limes":"1.0.1","lodash":"4.17.10","lusca":"1.6.0","media-typer":"0.3.0","morgan":"1.9.0","nocache":"2.0.0","partof":"1.0.0","processenv":"1.1.0","spdy":"3.4.7","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"1.0.1","ws":"5.2.1"},"devDependencies":{"amqplib":"0.5.2","assertthat":"1.0.0","common-tags":"1.8.0","json-lines-client":"1.0.1","needle":"2.2.1","nodeenv":"1.0.0","roboter":"1.0.5","shelljs":"0.8.2"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"93a48d63ef348a3ae4132268bbc69e61511f1f2b","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@2.2.0","_npmVersion":"6.1.0","_nodeVersion":"8.11.3","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"da0369a26bf668e092873a0bcd12a20edb91084d","size":53560,"noattachment":false,"key":"/tailwind/-/tailwind-2.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-2.2.0.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_2.2.0_1529923708545_0.23289291597973572"},"_hasShrinkwrap":false,"publish_time":1529923708590,"_cnpm_publish_time":1529923708590},"2.1.1":{"name":"tailwind","version":"2.1.1","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"ajv":"6.5.1","app-root-path":"2.0.1","babel-runtime":"6.26.0","body-parser":"1.18.3","commands-events":"1.0.3","cors":"2.8.4","crypto2":"2.0.0","datasette":"1.0.1","draht":"1.0.1","express":"4.16.3","flaschenpost":"1.1.1","hase":"1.0.3","json-lines":"1.0.0","limes":"1.0.1","lodash":"4.17.10","lusca":"1.6.0","media-typer":"0.3.0","morgan":"1.9.0","nocache":"2.0.0","partof":"1.0.0","processenv":"1.0.1","spdy":"3.4.7","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"1.0.1","ws":"5.2.0"},"devDependencies":{"amqplib":"0.5.2","assertthat":"1.0.0","async-retry":"1.2.1","json-lines-client":"1.0.1","needle":"2.2.1","nodeenv":"1.0.0","roboter":"1.0.4","shelljs":"0.8.2"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"00145b5bf12c7ed6f47961b03397cd1d7d57d1c7","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@2.1.1","_npmVersion":"5.6.0","_nodeVersion":"8.11.2","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"10798c9f7e8ffce0621ccf65df9cb4d560d7a2f7","size":53303,"noattachment":false,"key":"/tailwind/-/tailwind-2.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-2.1.1.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_2.1.1_1528973844941_0.8335117629596869"},"_hasShrinkwrap":false,"publish_time":1528973845026,"_cnpm_publish_time":1528973845026},"2.1.0":{"name":"tailwind","version":"2.1.0","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"ajv":"6.4.0","app-root-path":"2.0.1","babel-runtime":"6.26.0","body-parser":"1.18.2","commands-events":"1.0.1","cors":"2.8.4","crypto2":"1.0.3","datasette":"1.0.1","draht":"1.0.1","express":"4.16.3","flaschenpost":"1.1.1","hase":"1.0.2","json-lines":"1.0.0","limes":"1.0.1","lodash":"4.17.10","lusca":"1.6.0","media-typer":"0.3.0","morgan":"1.9.0","nocache":"2.0.0","partof":"1.0.0","processenv":"1.0.0","spdy":"3.4.7","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"1.0.0","ws":"5.1.1"},"devDependencies":{"amqplib":"0.5.2","assertthat":"1.0.0","async-retry":"1.2.1","json-lines-client":"1.0.1","needle":"2.2.1","nodeenv":"1.0.0","roboter":"1.0.2","shelljs":"0.8.1"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"cb7886e29f802d74599205113b96da1b581d5f5c","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@2.1.0","_npmVersion":"6.0.0","_nodeVersion":"8.11.1","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"965881d5e6be18a4bb09b47277fa6305a5361827","size":53188,"noattachment":false,"key":"/tailwind/-/tailwind-2.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-2.1.0.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_2.1.0_1525104946349_0.4193283145641675"},"_hasShrinkwrap":false,"publish_time":1525104946439,"_cnpm_publish_time":1525104946439},"2.0.4":{"name":"tailwind","version":"2.0.4","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"ajv":"6.1.1","app-root-path":"2.0.1","babel-runtime":"6.26.0","body-parser":"1.18.2","commands-events":"1.0.1","cors":"2.8.4","crypto2":"1.0.2","datasette":"1.0.1","draht":"1.0.1","express":"4.16.2","flaschenpost":"1.1.0","hase":"1.0.1","json-lines":"1.0.0","limes":"1.0.1","lodash":"4.17.5","lusca":"1.5.2","media-typer":"0.3.0","morgan":"1.9.0","nocache":"2.0.0","partof":"1.0.0","processenv":"1.0.0","spdy":"3.4.7","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"1.0.0","ws":"4.0.0"},"devDependencies":{"amqplib":"0.5.2","assertthat":"1.0.0","async-retry":"1.1.4","json-lines-client":"1.0.1","needle":"2.1.1","nodeenv":"1.0.0","roboter":"0.16.0","roboter-server":"0.16.0","shelljs":"0.8.1"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"74c6cc4fd0892df50871e4817f9c93503cdbb548","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@2.0.4","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"aec5898f863baef00c35aad730c10e548d049ff7","size":52149,"noattachment":false,"key":"/tailwind/-/tailwind-2.0.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-2.0.4.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_2.0.4_1518518052427_0.8694776959837178"},"_hasShrinkwrap":false,"publish_time":1518518053188,"_cnpm_publish_time":1518518053188},"2.0.3":{"name":"tailwind","version":"2.0.3","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"ajv":"6.1.1","app-root-path":"2.0.1","babel-runtime":"6.26.0","body-parser":"1.18.2","commands-events":"1.0.1","cors":"2.8.4","crypto2":"1.0.2","datasette":"1.0.1","draht":"1.0.1","express":"4.16.2","flaschenpost":"1.0.0","hase":"1.0.1","json-lines":"1.0.0","limes":"1.0.1","lodash":"4.17.5","lusca":"1.5.2","media-typer":"0.3.0","morgan":"1.9.0","nocache":"2.0.0","partof":"1.0.0","processenv":"1.0.0","spdy":"3.4.7","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"1.0.0","ws":"4.0.0"},"devDependencies":{"amqplib":"0.5.2","assertthat":"1.0.0","async-retry":"1.1.4","json-lines-client":"1.0.0","needle":"2.1.1","nodeenv":"1.0.0","roboter":"0.16.0","roboter-server":"0.16.0","shelljs":"0.8.1"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"01836407a01c1bd12644c7b95b64821211262f04","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@2.0.3","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"8b8b49b429ae1dd80d429c789300004af1cbf082","size":52146,"noattachment":false,"key":"/tailwind/-/tailwind-2.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-2.0.3.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_2.0.3_1518464351462_0.24000523326597745"},"_hasShrinkwrap":false,"publish_time":1518464352310,"_cnpm_publish_time":1518464352310},"2.0.2":{"name":"tailwind","version":"2.0.2","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"ajv":"6.1.1","app-root-path":"2.0.1","body-parser":"1.18.2","commands-events":"1.0.1","cors":"2.8.4","crypto2":"1.0.1","datasette":"1.0.1","draht":"1.0.1","express":"4.16.2","flaschenpost":"1.0.0","hase":"1.0.0","json-lines":"1.0.0","limes":"1.0.0","lodash":"4.17.5","lusca":"1.5.2","media-typer":"0.3.0","morgan":"1.9.0","nocache":"2.0.0","partof":"1.0.0","processenv":"1.0.0","spdy":"3.4.7","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"1.0.0","ws":"4.0.0"},"devDependencies":{"amqplib":"0.5.2","assertthat":"1.0.0","async-retry":"1.1.4","json-lines-client":"1.0.0","needle":"2.1.1","nodeenv":"1.0.0","roboter":"0.15.6","roboter-server":"0.15.6","shelljs":"0.8.1"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"774ba8f5154f3f2280d1e2427547add38a6eb5a7","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@2.0.2","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"347bb24a1160ac38fed34c7413e3cf4d6303b085","size":52466,"noattachment":false,"key":"/tailwind/-/tailwind-2.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-2.0.2.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_2.0.2_1518453176295_0.6146521082283338"},"_hasShrinkwrap":false,"publish_time":1518453177294,"_cnpm_publish_time":1518453177294},"2.0.1":{"name":"tailwind","version":"2.0.1","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"},{"name":"Jan-Hendrik Grundhöfer","email":"jan-hendrik.grundhoefer@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"ajv":"6.1.1","app-root-path":"2.0.1","body-parser":"1.18.2","commands-events":"1.0.1","cors":"2.8.4","crypto2":"1.0.1","datasette":"1.0.1","draht":"1.0.1","express":"4.16.2","flaschenpost":"1.0.0","hase":"1.0.0","json-lines":"1.0.0","limes":"1.0.0","lodash":"4.17.5","lusca":"1.5.2","media-typer":"0.3.0","morgan":"1.9.0","nocache":"2.0.0","partof":"1.0.0","processenv":"1.0.0","spdy":"3.4.7","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"1.0.0","ws":"4.0.0"},"devDependencies":{"amqplib":"0.5.2","assertthat":"1.0.0","async-retry":"1.1.4","json-lines-client":"1.0.0","needle":"2.1.1","nodeenv":"1.0.0","roboter":"0.15.6","roboter-server":"0.15.6","shelljs":"0.8.1"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"e4a98e50bfd1fa0f56e833d916f82c7848d54d93","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@2.0.1","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"ef2b1a10ebf98134a6a1ab4c450b706e69497f0a","size":52419,"noattachment":false,"key":"/tailwind/-/tailwind-2.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-2.0.1.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_2.0.1_1518452320387_0.3237155015404636"},"_hasShrinkwrap":false,"publish_time":1518452321339,"_cnpm_publish_time":1518452321339},"2.0.0":{"name":"tailwind","version":"2.0.0","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"}],"main":"dist/tailwind.js","dependencies":{"ajv":"6.1.1","app-root-path":"2.0.1","body-parser":"1.18.2","commands-events":"1.0.1","cors":"2.8.4","crypto2":"1.0.1","datasette":"1.0.0","draht":"1.0.0","express":"4.16.2","flaschenpost":"1.0.0","hase":"1.0.0","json-lines":"1.0.0","limes":"1.0.0","lodash":"4.17.5","lusca":"1.5.2","media-typer":"0.3.0","morgan":"1.9.0","nocache":"2.0.0","partof":"1.0.0","processenv":"1.0.0","spdy":"3.4.7","stethoskop":"1.0.0","timer2":"1.0.0","uuidv4":"1.0.0","ws":"4.0.0"},"devDependencies":{"amqplib":"0.5.2","assertthat":"1.0.0","async-retry":"1.1.4","json-lines-client":"1.0.0","needle":"2.1.1","nodeenv":"1.0.0","roboter":"0.15.6","roboter-server":"0.15.6","shelljs":"0.8.1"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"27c3292561ad3cdc847e74c07672b567e8c1fd20","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@2.0.0","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"4a1334a9ccf0edd47d791aeb01e3191447df5f59","size":52366,"noattachment":false,"key":"/tailwind/-/tailwind-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-2.0.0.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind_2.0.0_1518343741480_0.5015869876595167"},"_hasShrinkwrap":false,"publish_time":1518343742390,"_cnpm_publish_time":1518343742390},"1.0.1":{"name":"tailwind","version":"1.0.1","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"}],"main":"lib/tailwind.js","dependencies":{"ajv":"5.1.5","app-root-path":"2.0.1","async":"2.4.1","body-parser":"1.17.2","commands-events":"1.0.0","cors":"2.8.3","crypto2":"0.3.2","datasette":"0.3.4","draht":"0.4.2","express":"4.15.3","flaschenpost":"0.15.6","hase":"0.5.4","json-lines":"0.4.3","limes":"0.5.0","lodash":"4.17.4","lusca":"1.4.1","media-typer":"0.3.0","morgan":"1.8.2","nocache":"2.0.0","partof":"0.1.0","processenv":"0.1.1","spdy":"3.4.7","stethoskop":"0.2.0","timer2":"0.2.3","uuidv4":"0.5.0","ws":"3.0.0"},"devDependencies":{"amqplib":"0.5.1","assertthat":"0.9.0","json-lines-client":"0.7.9","needle":"1.6.0","nodeenv":"0.2.1","retry":"0.10.1","roboter":"0.15.2","roboter-server":"0.15.2","shelljs":"0.7.8"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"ea8f7c0efd557172f202ec2c85a35ffbd408d0f2","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@1.0.1","_npmVersion":"5.0.3","_nodeVersion":"6.9.5","_npmUser":{"name":"mattwagl","email":"wagler@intuity.de"},"dist":{"shasum":"d99dbf110200503f3dd886f476021268ef7d981c","size":41511,"noattachment":false,"key":"/tailwind/-/tailwind-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-1.0.1.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind-1.0.1.tgz_1499153379541_0.8123943854589015"},"directories":{},"publish_time":1499153380849,"_cnpm_publish_time":1499153380849,"_hasShrinkwrap":false},"1.0.0":{"name":"tailwind","version":"1.0.0","description":"tailwind is a base module for streaming and evented CQS applications.","contributors":[{"name":"Golo Roden","email":"golo.roden@thenativeweb.io"},{"name":"Matthias Wagler","email":"matthias.wagler@thenativeweb.io"}],"main":"lib/tailwind.js","dependencies":{"ajv":"5.1.5","app-root-path":"2.0.1","async":"2.4.1","body-parser":"1.17.2","commands-events":"1.0.0","cors":"2.8.3","crypto2":"0.3.2","datasette":"0.3.4","draht":"0.4.2","express":"4.15.3","flaschenpost":"0.15.6","hase":"0.5.4","json-lines":"0.4.3","limes":"0.5.0","lodash":"4.17.4","lusca":"1.4.1","media-typer":"0.3.0","morgan":"1.8.2","nocache":"2.0.0","partof":"0.1.0","processenv":"0.1.1","spdy":"3.4.7","stethoskop":"0.2.0","timer2":"0.2.3","uuidv4":"0.5.0","ws":"3.0.0"},"devDependencies":{"amqplib":"0.5.1","assertthat":"0.9.0","json-lines-client":"0.7.9","needle":"1.6.0","nodeenv":"0.2.1","retry":"0.10.1","roboter":"0.15.2","roboter-server":"0.15.2","shelljs":"0.7.8"},"repository":{"type":"git","url":"git://github.com/thenativeweb/tailwind.git"},"keywords":[],"license":"AGPL-3.0","gitHead":"74378bc287f6c2360f0bb54a83e647d56f898925","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"homepage":"https://github.com/thenativeweb/tailwind#readme","_id":"tailwind@1.0.0","_npmVersion":"5.0.3","_nodeVersion":"6.10.0","_npmUser":{"name":"goloroden","email":"webmaster@goloroden.de"},"dist":{"shasum":"3bfab157605d424a80bd51b8ac9d3fb31d0ae928","size":41478,"noattachment":false,"key":"/tailwind/-/tailwind-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/tailwind/download/tailwind-1.0.0.tgz"},"maintainers":[{"name":"goloroden","email":"webmaster@goloroden.de"},{"name":"nhummel","email":"hummel@marvelous.systems"},{"name":"thenativeweb-admin","email":"hello@thenativeweb.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tailwind-1.0.0.tgz_1497523813642_0.3437953407410532"},"directories":{},"publish_time":1497523814760,"_cnpm_publish_time":1497523814760,"_hasShrinkwrap":false}},"readme":"# tailwind\n\ntailwind is a base module for streaming and evented CQS applications.\n\n## Table of contents\n\n-   [Installation](#installation)\n-   [Quick start](#quick-start)\n    -   [Enable profiling](#enable-profiling)\n    -   [Configuring I/O ports](#configuring-io-ports)\n        -   [Configuring the API server](#configuring-the-api-server)\n        -   [Configuring the command bus, the event bus, and the flow bus](#configuring-the-command-bus-the-event-bus-and-the-flow-bus)\n        -   [Configuring the status server](#configuring-the-status-server)\n    -   [Handling messages](#handling-messages)\n        -   [Receiving incoming messages](#receiving-incoming-messages)\n        -   [Sending outgoing messages](#sending-outgoing-messages)\n        -   [Handling stream errors](#handling-stream-errors)\n        -   [Handling disconnects](#handling-disconnects)\n    -   [Getting application information](#getting-application-information)\n        -   [Accessing environment variables](#accessing-environment-variables)\n        -   [Handling configuration data](#handling-configuration-data)\n        -   [Using services](#using-services)\n        -   [Exiting an application](#exiting-an-application)\n    -   [Enabling queries on the server](#enabling-queries-on-the-server)\n-   [Accessing tailwind using HTTP](#accessing-tailwind-using-http)\n    -   [Sending commands](#sending-commands)\n    -   [Receiving events](#receiving-events)\n    -   [Querying models](#querying-models)\n        -   [Specifying where clauses](#specifying-where-clauses)\n        -   [Specifying order by clauses](#specifying-order-by-clauses)\n        -   [Specifying skip clauses](#specifying-skip-clauses)\n        -   [Specifying take clauses](#specifying-take-clauses)\n-   [Accessing tailwind using web sockets](#accessing-tailwind-using-web-sockets)\n    -   [Sending commands](#sending-commands-1)\n    -   [Receiving events](#receiving-events-1)\n    -   [Querying models](#querying-models-1)\n-   [Running the build](#running-the-build)\n-   [License](#license)\n\n## Installation\n\n```shell\n$ npm install tailwind\n```\n\n## Quick start\n\nFirst you need to add a reference to tailwind to your application:\n\n```javascript\nconst tailwind = require('tailwind');\n```\n\nNow you can create an actual application by calling the `createApp` function. Additionally, you may want to specify one or more identity providers to use. For that, provide the `identityProviders` array and add an object per identity provider. Each object has to have an `issuer` and the path to the certificate of the identity provider:\n\n```javascript\nconst app = tailwind.createApp({\n  identityProviders: [\n    {\n      issuer: 'https://auth.thenativeweb.io',\n      certificate: path.join(__dirname, 'certificate.pem')\n    }\n  ]\n});\n```\n\nOnce you have done all this, whenever you need a reference to the application, just call the `app` function:\n\n```javascript\nconst app = tailwind.app();\n```\n\nBasically, no matter what kind of application you create, the application's structure is always the same: First you configure some I/O ports, then you run custom configuration code, and finally you hand execution over to the `run` function that executes the actual application code.\n\n### Enable profiling\n\nIf you want to profile your application, additionally provide the `profiling` options with the `host` and the `port` of a StatsD server:\n\n```javascript\nconst app = tailwind.createApp({\n  profiling: {\n    host: 'localhost',\n    port: 8125\n  }\n});\n```\n\n### Configuring I/O ports\n\nAt the moment, there are four I/O ports available, `app.api`, `app.commandbus`, `app.eventbus`, and `app.flowbus`. To use them, you need to connect them with wires to protocols and ports. For that use an I/O ports `use` function and provide a wire instance.\n\nCurrently, there are four wires available: `app.wires.api.http`, `app.wires.commandbus.amqp`, `app.wires.eventbus.amqp`, and `app.wires.flowbus.amqp`. While the first one only provides a generic `Server`, the latter ones provide a `Receiver` and a `Sender`, each.\n\nSo, basically, the syntax is as folows:\n\n```javascript\nawait app.api.use(new app.wires.api.http.Server({\n  // ...\n}));\n```\n\nThe parameters you have to hand over depend on the actual wire.\n\n#### Configuring the API server\n\nIf you want to create an API I/O port which is based on `http` you have to use code similar to the following:\n\n```javascript\nawait app.api.use(new app.wires.api.http.Server({\n  port: 3000,\n  corsOrigin: '*',\n  writeModel: {\n    network: {\n      node: {\n        commands: { ping: {}},\n        events: { pinged: {}}\n      }\n    }\n  },\n  readModel: {\n    lists: { pings: {}}\n  }\n}));\n```\n\nThe parameters have the following meaning:\n\n-   The `port` value defines the endpoint of the API.\n-   The `corsOrigin` value can be a string or an array of strings and / or regular expressions containing the domains you want to allow to access your API. If you want your API to be accessible from everywhere, set this value to `*`.\n-   The `writeModel` and `readModel` values finally describe the contexts, topics, commands, events and models of your application.\n\nTo access the API you basically have two options. You can either access the API manually by calling the appropriate routes, or you can use a ready-made client module such as [wolkenkit-client-js](https://github.com/thenativeweb/wolkenkit-client-js).\n\nIf you need to get the configuration for the client module yourself, you can access the route `/v1/configuration.json`.\n\nIf you want to check whether the API server is reachable, try to access the `/v1/ping` route.\n\n#### Configuring the command bus, the event bus, and the flow bus\n\nConfiguring one of the other wires is a little bit simpler. All you need to do is to create a new instance of the requested wire, and set the url of a RabbitMQ instance as well as the name of the application:\n\n```javascript\nawait app.commandbus.use(new app.wires.commandbus.amqp.Sender({\n  url: 'amqp://admin:admin@localhost:5672',\n  application: 'plcr'\n}));\n\nawait app.commandbus.use(new app.wires.commandbus.amqp.Receiver({\n  url: 'amqp://admin:admin@localhost:5672',\n  application: 'plcr',\n  prefetch: 50\n}));\n```\n\n#### Configuring the status server\n\nIf you want to create a status I/O port which is based on `http` you have to use code similar to the following:\n\n```javascript\nawait app.status.use(new app.wires.status.http.Server({\n  port: 3000,\n  corsOrigin: '*'\n}));\n```\n\nThe parameters have the following meaning:\n\n-   The `port` value defines the endpoint of the status API.\n-   The `corsOrigin` value can be a string or an array of strings and / or regular expressions containing the domains you want to allow to access your status API. If you want your status API to be accessible from everywhere, set this value to `*`.\n\n### Handling messages\n\n#### Receiving incoming messages\n\nTo handle incoming messages, you need to subscribe to the `data` event of the `incoming` stream of the appropriate I/O port. The following example shows how to listen for incoming messages from the API I/O port:\n\n```javascript\napp.api.incoming.on('data', command => {\n  // ...\n});\n```\n\nWhen you receive a message from the command bus, the event bus or the flow bus you have to call the message's `next` function to mark the message as handled:\n\n```javascript\napp.commandbus.incoming.on('data', command => {\n  // ...\n  command.next();\n});\n```\n\nIf the message could not be handled successfully, instead of `next` either call `discard` to drop the message or call `defer` to requeue it:\n\n```javascript\napp.commandbus.incoming.on('data', command => {\n  // ...\n  command.discard(); // or command.defer();\n});\n```\n\n#### Sending outgoing messages\n\nTo send data using an I/O port, use its `outgoing` stream and call the `write` function:\n\n```javascript\napp.commandbus.outgoing.write({\n  // ...\n});\n```\n\n#### Handling stream errors\n\nEach stream of an I/O port provides an `error` event that you can subscribe to. This allows you to setup custom error handling code:\n\n```javascript\napp.commandbus.outgoing.on('error', err => {\n  // ...\n});\n```\n\n#### Handling disconnects\n\nEach stream of an I/O port provides a `disconnect` event that you can subscribe to. This allows you to setup custom disconnection handling code:\n\n```javascript\napp.commandbus.outgoing.on('disconnect', err => {\n  // ...\n});\n```\n\n### Getting application information\n\nBesides the I/O ports, the `app` object provides a number of properties and functions you can use within your application.\n\n-   `app.name` contains your application's name.\n-   `app.version` contains your application's version.\n-   `app.configuration` contains your application's `package.json` file deserialized into an object.\n-   `app.dirname` contains the name of your application's root directory.\n-   `app.identityProvider` contains an object that provides the identity provider's `name` and its `certificate`.\n\nThe `name` and `version` properties are read from your application's `package.json` file.\n\n#### Accessing environment variables\n\nIf you need to access environment variables use the `app.env` function and provide the key of the environment variable you're interested in. If the environment variable is not set, `app.env` returns `undefined`, otherwise it returns its value.\n\nIf the value is a serialized JSON object, it becomes deserialized automatically, otherwise it gets returned as-is:\n\n```javascript\nconst port = app.env('PORT');\n// => 3000\n```\n\n#### Handling configuration data\n\nIf you need to store configuration data at runtime, use the `app.data` object which provides a ready-made [datasette](https://github.com/thenativeweb/datasette) instance.\n\n```javascript\napp.data.set('foo', 23);\napp.data.get('foo'); // => 23\n```\n\n#### Using services\n\nAdditionally, the `app` object also provides a number of services that may be used by your application.\n\n-   `app.services.bus` is a message bus, see [draht](https://github.com/thenativeweb/draht) for details. The `get` function is automaticalled called internally, so you don't have to create a new instance.\n-   `app.services.crypto` provides functions for encrypting, decrypting, signing and verifying messages, see [crypto2](https://github.com/thenativeweb/crypto2) for details.\n-   `app.services.Datasette` is a key-value container, see [datasette](https://github.com/thenativeweb/datasette) for details.\n-   `app.services.Emitter` is an event emitter, see [draht](https://github.com/thenativeweb/draht) for details.\n-   `app.services.getLogger` returns a logger, see [flaschenpost](https://github.com/thenativeweb/flaschenpost) for details.\n-   `app.services.Timer` is a timer, see [timer2](https://github.com/thenativeweb/timer2) for details.\n\n#### Exiting an application\n\nTo exit an application, call the `app.exit` function. Optionally you may specify an exit code:\n\n```javascript\napp.exit();\n```\n\nIf you want to log an error and exit, use the `app.fail` function and provide a message and the error as parameter:\n\n```javascript\napp.fail('Application failed.', new Error('...'));\n```\n\n### Enabling queries on the server\n\nTo enable querying models on the server, you need to provide a function that gets the data from the model and writes them to a stream. For that use the `app.api.read` hook:\n\n```javascript\napp.api.read = async function (modelType, modelName, options) {\n  // options.where\n  // options.orderBy\n  // options.skip\n  // options.take\n  // options.user\n  // ...\n  // return stream;\n};\n```\n\n## Accessing tailwind using HTTP\n\n### Sending commands\n\nTo send a command to tailwind, you need to send a `POST` request to the `/v1/command` route with the actual command in the request body. To create a command, see the [commands-events](https://github.com/thenativeweb/commands-events) module.\n\n### Receiving events\n\nTo receive events from tailwind, you need to send a `POST` request to the `/v1/events` route. This then streams events to the client using the [JSON Lines](http://jsonlines.org/) format over a long-running http-connection. Inside the client, you may use the [json-lines-client](https://github.com/thenativeweb/json-lines-client) module as an easy way to request and parse events.\n\nIf you do not want to receive any event, you are also able to filter them. For this provide a filter object within the request body. Then, tailwind will only deliver events to you that match your filter object, i.e. you will get all events that contain the exact same properties and values as the filter object.\n\n### Querying models\n\nClients can query models by using the `/v1/read/:modelType/:modelName` route with a `POST` request. The result is streamed to the client using a long-running http connection.\n\nOptionally, you can send a number of query string parameters to specify a filter and similar things.\n\n#### Specifying where clauses\n\nThe `where` value must be a stringified JSON object encoded with `encodeURIComponent`. For the object itself, use the following format:\n\n```javascript\nconst where = {\n  name: 'Jane Doe',\n  age: { $greaterThan: 18 }\n};\n```\n\nIf `where` is not provided it defaults to `{}`.\n\n#### Specifying order by clauses\n\nThe `orderBy` value must be a stringified JSON object encoded with `encodeURIComponent`. For the object itself, use the following format:\n\n```javascript\nconst orderBy = {\n  name: 'ascending'\n};\n```\n\nIf `orderBy` is not provided it defaults to `{}`.\n\n#### Specifying skip clauses\n\nThis value must be the number of items to skip. If `skip` is not provided, it defaults to `0`.\n\n#### Specifying take clauses\n\nThis value must be the number of items to return. If `take` is not provided, it defaults to `100`.\n\n## Accessing tailwind using web sockets\n\nFirst you need to establish a web socket connection. For this, connect to the server running the tailwind application using the `ws` protocol.\n\nAll messages that you are going to send must follow a given form. There is always a `type` property, which specifies the message type, and a `procedureId` which needs to be set to a uuid in v4 format, so that you can distinguish multiple requests from each other.\n\nAdditionally, there is a `payload` property which contains the actual data to send. If you need to send an authenticated message, you need to add the user's JWT token as an encoded string using the `token` property.\n\nSo, a typical message looks like this:\n\n```javascript\n{\n  type: '...',\n  procedureId: '42dabca1-6c9b-45d2-8a42-497a25f4c04b',\n  payload: {\n    // ...\n  },\n  token: '...'\n}\n```\n\nAs a response, you will get a similar message back. The response will always have the same `procedureId`, so that you can connect a response to its request. Additionally, responses have a `statusCode` property that acts similar to the HTTP status codes.\n\nIf there is an error, you will get back a message of type `error` with an appropriate status code, such as `401` or `500`, e.g.\n\n### Sending commands\n\nTo send a command to tailwind, set the type to `sendCommand` and provide the actual command as `payload`. For details on how to create commands, see the [commands-events](https://github.com/thenativeweb/commands-events) module.\n\nIf sending the command succeeded, you will get a response of type `sentCommand`.\n\n### Receiving events\n\nTo receive events from tailwind, you need to subscribe to them. For this, set the type to `subscribeEvents`. You may provide a filter as `payload`. Then, tailwind will only deliver events to you that match your filter object, i.e. you will get all events that contain the exact same properties and values as the filter object. If you do not have a filter, use an empty object instead.\n\nIf subscribing to the events succeeded, you will first get a response of type `subscribedEvents`, and then a message of type `event` for each event, with the event's data as payload.\n\nTo unsubscribe from events, send a message with type `unscubscribeEvents`. Once you are unsubscribed, you will get a response of type `unsubscribedEvents`.\n\n### Querying models\n\nClients can query models by sending a message with type `subscribeRead`. You need to set the `payload` to an object that contains the `modelType`, the `modelName`, and a `query`. For details on how to structure the query, see [Querying models](#querying-models). If you don't want to provide a query, use an empty object instead.\n\nIf reading the model worked, you will first get a response of type `subscribedRead`, and then a message of type `item` for each item of the model, with the item's data as payload. Once you are done, you will receive a `finish` event.\n\nTo cancel reading a model before the `finish` event was sent, send a message with type `unsubscribeRead`. If this succeeded, you will get a response of type `unsubscribedRead`.\n\n## Running the build\n\nTo build this module use [roboter](https://www.npmjs.com/package/roboter).\n\n```shell\n$ npx roboter\n```\n\n## License\n\nCopyright (c) 2014-2019 the native web.\n\nThis program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License along with this program. If not, see [GNU Licenses](http://www.gnu.org/licenses/).\n","_attachments":{},"homepage":"https://github.com/thenativeweb/tailwind#readme","bugs":{"url":"https://github.com/thenativeweb/tailwind/issues"},"license":"AGPL-3.0"}