{"_id":"message-in-a-bottle","_rev":"27-80fe161379aaf79b2c9a984204b1a6ab","name":"message-in-a-bottle","dist-tags":{"latest":"2.2.1","next":"3.0.0-alpha.4"},"versions":{"0.0.1":{"name":"message-in-a-bottle","version":"0.0.1","description":"Inversion of control and dependency injection for application domains.","main":"./dist/index.js","module":"./src/index.js","scripts":{"test":"jest","build":"rollup src/index.js --file dist/index.js --format cjs","prepublish":"npm run build && npm test"},"repository":{"type":"git","url":"ssh://git@code.cablelabs.com:7999/nbaroni/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"license":"MIT","devDependencies":{"jest":"^24.9.0","rollup":"^1.29.0"},"gitHead":"1164fe45124462066542e3c69dce3873e078261e","_id":"message-in-a-bottle@0.0.1","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-m7tPbzkc/73pw29+xvUUGgIg5hPkJW4MH6lXxB8aZ9XfMTCpJQdEe1Eg1WdjvdC26AP89s4vCe+jou44cvPZrA==","shasum":"570526be5b9c06d7f58294f5404ebe39e7210fbe","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-0.0.1.tgz","fileCount":5,"unpackedSize":10851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeFi3GCRA9TVsSAnZWagAAGjEP/iKtsE3IzrviPICT8zuR\nKthD9LNKFRXWgepPduD/mS3nwCXdeXTVQKTP/tudLDhAaZuDSasQTTK1fMPI\nTLtGsp4AwGQTq74N/hGNv6gTXyj9yfFWdU7MOYCJ6BpbpqssiwOPmaqqKzJw\nT+4Bhe4s73P6v95skhrBQlp5MbW1IrcJ8IRX/7z9Wsthq1wuljU5Gj9VBV34\njuEN8Yjp+GO9WDfXyHZ0PJPSnf7EweIvcwlmJ+u503T93w7FtROGyqswHXUU\nvdNj69HNrkmEBWF7CIrpbuB0PqN/ypvhhGC9v6BViq2UyjRq1so9NYG7U4A5\n/501LkqWiE/JIC3RRLFVAh6skoxTk4y6HTWxFEs7oxpRXCPmfWCGmAnXJs+F\nOmWsWeq2FmwWCrQN9mNnmFyISoq423YL12mHsQpL8ZlKeArjPZtl4NJilJ1c\n6+wdpJGZiw2tywhGk5fDqkLwDdEj6who7am6PRSO/Da4Z/ErnXFuAbKWBx1z\nSPpOTRjRW2zX+/2Tp1bTyvCuOhDW8C55uNHsBQ6d+3e7TuOcpL1JxT2AUPmA\n9pBjLR9o+f2bS04Ywqzzhkpv8b1xu92RS+Prvri/9xTHqYsAwY1IRGlOfni0\nBNWCb8fvnFYEwbFA4fujplwCKhEIh1D5tvh/Hry9rxaDshHx8VpbptBuGtRC\n/wJh\r\n=vRlZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAUjTq1hh1LO4WE1YxHjNy6fKieeAHxb/gUUKfjHr5KhAiEAqXUWTok44YcoivUbA4de2CpmOob48ygcrVaAdAHVcnQ="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_0.0.1_1578511813863_0.13757080159032942"},"_hasShrinkwrap":false},"0.0.2":{"name":"message-in-a-bottle","version":"0.0.2","description":"JavaScript state management without the state","main":"./dist/index.js","module":"./src/index.js","scripts":{"test":"jest","build":"rollup src/index.js --file dist/index.js --format cjs","prepublish":"npm run build && npm test"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"jest":"^24.9.0","rollup":"^1.29.0"},"gitHead":"6527442d4684700a6b02f769f203f90d0ada04cc","_id":"message-in-a-bottle@0.0.2","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-L7Ggr7Lr5KR5xSlLMQ9fZxbYmtKguY69RWBgLBC4iXW3Oesi+YiBY4V4EQl3RgnQ96QlR2qubH1QjmG0U/rurA==","shasum":"3eb8bc8e1a032af3b6ef21ee0ab35f6783a161d3","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-0.0.2.tgz","fileCount":5,"unpackedSize":10975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeFk25CRA9TVsSAnZWagAAyGoP/jD4G8dFN6tiW9mhwgeA\nxsnUOaW/A0o/+V3F/pEQyvB7PxAPGy0t59VBN1XpcX9agjXR4AMVD3KnU5TJ\nn0iE0g1l3lpuJCLOK6uPpqovhPKA/S37OJOL71Dk+u4GYztmBLmy6N661NxR\n1enNuiX/SJf7Nou4F6Y+3gOEirav+gCUVxNXrTOa+mck6NHBj4k0f4GTXxD4\nk/X3SuFzCYvP+ZIl0nX6ujn2Ou1VoRZiHci6bvALxl9/FiJn+tXNLjCha6Zk\nyrkaOdQ/O7uGXhbWI+LPLqUEcyR/FeDvpHa1euLVQ8dQwGAZ2oFObBXfhpb/\nrDkFDcpK5UZ+8ljGCFSJaB3FY+AjJKMHBLEVnHj8BEq+E+uma36iYyoVTC5a\neywZEZlhrJoxpUw4lryWEQRc6so2Q+/xKFUXS6MPlO+rwxeQw6rVkAZxgyz4\nQz7KO4h3WxHD+LNNjnIFsrxBfPKEL+FEszA8UtK9NtJTb0DWQUNnUFnEM0aQ\nraho/z6uIrwkayuLzejSBFv5xkQkSUOvrQ9qe7J0Dg6Mbj+37sZrd24gYUc+\nn0o1ijwS+FXamLbzn1SkGnWxqvG7aeS44XQhMQI76Cxvm3mu5LlcreSCZWpY\nbuqKmz2MJ/zkANV+LGMDq8DAruPGuh01Lm26S7EyLJQYjlhzOe5TOZerP/w8\nt2l/\r\n=NE/y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHqI74zcIIzl7HpP2lys+hVzTEgI9m7bYgDpXGx6BCU2AiEAnbtH8If9gXCOigG4Q7CG/YJtVNvWojw9p5BRNcdpxC0="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_0.0.2_1578519992943_0.002466978792213803"},"_hasShrinkwrap":false},"0.0.5":{"name":"message-in-a-bottle","version":"0.0.5","description":"JavaScript state management without the state","main":"./dist/index.js","module":"./src/index.js","scripts":{"test":"jest","build":"rollup src/index.js --file dist/index.js --format cjs","prepublish":"npm run build && npm test"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"jest":"^24.9.0","rollup":"^1.29.0"},"gitHead":"774ae174417462b4081463f8bb608b42d4581e70","_id":"message-in-a-bottle@0.0.5","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-xp08JEPXZPnKorUtb+qVWodLTx7v7DPizJr2huW80gbyqHMPLxKUFfvlcWZKSppdBrn+dmUYJk+2paOsdfOnnQ==","shasum":"310dee703ca14ed40c7baf89a76e691870c3d8db","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-0.0.5.tgz","fileCount":5,"unpackedSize":11748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeMKOeCRA9TVsSAnZWagAA5rsP/Ryz3WDVJiuT97YL0Rpr\nADDbVoZzNC4iAcfuA5mQah9jXCwOv66G+wrkQSQLaQnJ6KVION89s/Zk9S1W\nejlZhobzhqTJdOwtfBM+jux8wlNMci2maNbNNpjFJovptm8UtOrty98tZApy\nO6zysEUkcKvBWg8b9+BMHMxNN7I+4Q2XV2ZGVvy0vG96n+yE1YnnEcVf5adL\nae93SEs4KPyRgbLM0kSi4LWrOaqyAcybfyyGY0BPk2nKVU1dAxr/TJa4IIOx\nVx7DNHT4UJhzMae/wYhA29zjocMg2+4McGbUhcEd8lGn0dFa/EiiB694n7By\nhzTjl8R384yqABNhLu6tdyO4oOMohJhBzjUy755mDpT5m4e9SBnG3TtXGPZQ\nOVALttHC6sBcbR00RuvMHT1a/zMIAqpZpykDrFdCiRkJ+DOuHJWmxOwMHVWd\nKKUYUGipZnlIxKtrMkyNPSy0R/tkXnnJA7kiBctH5A9yjm/0enoUxQ6QRiv1\nPJN3JVewEOxiiGxQ/IUe8DO0V+pg/MKVSaUMTCAPpaF+hcK47sQZwk4pbM5S\nScAZXOImXgOB3GhQyzGloAP61OmlFlnlg0xbsBGpTz2jTKMo5Scq/OWtNP7G\nZj4dCVzFqDvD96U+t+xq8BCv5+S+oORRmmPlAcEEcEX1TO/wJzkxPjhTv0kS\nFaaw\r\n=3Wct\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICwI9X/20wdDaULgrnc9dZ/3fqBomHZzWU1A4+vcu7eFAiBgGlcWi1oxLVXvel3NlCdGUmOekuACam+4spYx36PI/g=="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_0.0.5_1580245917749_0.026868214996583983"},"_hasShrinkwrap":false},"0.0.6":{"name":"message-in-a-bottle","version":"0.0.6","description":"JavaScript state management without the state","main":"./dist/index.js","module":"./src/index.js","scripts":{"test":"jest","build":"rollup src/index.js --file dist/index.js --format cjs","prepublish":"npm run build && npm test"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"jest":"^24.9.0","rollup":"^1.29.0"},"gitHead":"00000b6b0c5fecef1a925297afef4575e1d1c17d","_id":"message-in-a-bottle@0.0.6","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-IvvBDNCZ2QWLtXKIfgCwmLlxtkF4YfvWp2fJ+RrjNZDIR5bosPpKgO2CFKTtSxqegCAD4dQLNkMWVzhu9Nc83g==","shasum":"20a673d81fc4917a219391bf667a6d426286e379","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-0.0.6.tgz","fileCount":5,"unpackedSize":11766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeMKdcCRA9TVsSAnZWagAAaNMP/jAGwOM0RSaNz/T3H30L\n/5DbOvgMDBxBZg+OnkIOECSdk3LbK6+GDBD/bB2IutxSG5SL2K8pq8NCPNZT\nRD1R7pSvftASpGt07KlK1AjLU5xROX4TcJQxXnVjaBZXwDRyeJ0VYW+ird0P\nLuqaJQJvMj4N9fZTeMpp+x8LlzH5u7Pxp8A/h2GQXNm8/roPczUrai5/ePwy\n89kMelQD3MPR/jHII3y3+xN/syI38UZISR/p7L54jv02XHmsIBdfBp+OD/ij\nRF/Xk+kbKHuP5vYv4k+Zr3bj+fRaf2ytfuHSqHd62pDmaah1dNwDXAQfvFHY\nBp6bRKSBIf+n7w0djOBPxuFlZyVP9YdacB0i4g7Tuj3TmnT/AmhVJUsQM/x0\ng7q9WIYDBdXBusVdPeM1MvUx8oqiVBiUeHwqsnWXQVBJ3nNGloFlCltvLCgZ\nU7WlTmGkq3io+9zhHnxxQJpr0wog9/YkXN402noDFXcvm+JAQdCjMm/YjvAl\n1xurvxZ06aY8hTE/hT44sgJ0nYxZ24BqXBjbn847+lTRH6wfCjPODY/0WvbH\nWT/g1xzZA42Z1HM4g/yDbvKMjFclqTLoeenRmTqraXUcPh65nsXGKVGvKfsY\nrt76+10DHuGt9NXonz+Jg9kdd22IvDI2riLl0Tli6PqOzFZpeqJSL/dIB/iA\nZSjD\r\n=a8j1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0fP7gCsJO95prBRwrn2DTG3mB7fe9CDelWJirIGUAvgIhANL7SE6RNs9SYMuj9qPE2pQheHqZTfstTZYs7LoU1W3p"}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_0.0.6_1580246876201_0.23320198214331844"},"_hasShrinkwrap":false},"0.0.7":{"name":"message-in-a-bottle","version":"0.0.7","description":"JavaScript state management without the state","main":"./dist/index.js","module":"./src/index.js","scripts":{"test":"jest","build":"rollup src/index.js --file dist/index.js --format cjs","prepublish":"npm run build && npm test"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"jest":"^24.9.0","rollup":"^1.29.0"},"gitHead":"6cdbefc4616033b066ec10b50e46b8c8c8e74181","_id":"message-in-a-bottle@0.0.7","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-lV4c20GsReX6jMfIKEZ2EqWhJllFHrYcJQ9/lnF01WeVbnnWVJSTI5wP7rawwxgKXwrqwzB1bm1KIihpJMeVIw==","shasum":"c5ba8bac8d36d975800ada41d74bca053cdc1e79","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-0.0.7.tgz","fileCount":5,"unpackedSize":11749,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeOF8PCRA9TVsSAnZWagAATl8P/171LoENdRU1qqMUZ+GE\nMTTb6q7t5V7o7dOvrPe5JodCicsBVZttdGfQrNWm8JQgobWw2plLCZnfEDTl\n0RkEUEYDLaTtQzLHhf79iQRDhcPK16OBnanDd+0MtrztQ6RvKxrb6SpJpBVa\nmY3Zlcdz8RmeU6ErAi61ROPtxMDbYyD+Pif4L8tiwMH8Nq2F703du1o0BQq+\nD2MkUf21wnxOshrBx5HhGX8IbJRduaCvsK9z6Q4gLBn3IKIYSr16KRTz8ef+\nobA0SVb6WStZfGo0ZriXWxSKDCfseHvlYX/tJwZpRO0OW56uq+eDWHEm+7fq\nNKV38heNcpIxf7wqDHEqzRdp0m/6Q6sdUmZTGZIRHc2KZ+naZqM8fT2xiWcx\nhPsNSKh9YXcxQEFcUyodv43AnjC0Brbp5Bhwpy2oD2pK5hHUx4gNMPWEx6tS\ny5WBiXYcFDKfBzbrZxF3aiZCyaXoZ62memSx0ylxZZd27/Wx8NTJ4lkAZ5kK\n5uHOuRFWg/iDCqEQ0N+URTitvluYTQsuu5L2F4iO7ap6DpcWfaklV9eGKFBD\ncuIfhmL+osb1rJrtcFYKFop+iJBuPjnCsOzYQA3fhD0lJ2o5Gp4zT/BB9Tu/\n6T5Tn8Qb9eWQg++DkRllqjaAuzl2ExFXN5FRlja+AsSj9xeGBtLMgFOEx3fm\npYKi\r\n=swL6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/k/+CtoKij+15751oHm3m3tG05bcT9RHEi9mdsnJUgwIgeyXpNlsVs9xyOKyrAxOGQlhNq15yhuyx+46RyhbrKYo="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_0.0.7_1580752655241_0.49296735054822416"},"_hasShrinkwrap":false},"0.1.1":{"name":"message-in-a-bottle","version":"0.1.1","description":"JavaScript state management without the state","main":"./dist/index.js","module":"./src/index.js","scripts":{"test":"jest","build":"rollup src/index.js --file dist/index.js --format cjs","prepublish":"npm run build && npm test"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"jest":"^24.9.0","rollup":"^1.29.0"},"gitHead":"691f41a03728dda96c54bca7d77f62e507d57aa5","_id":"message-in-a-bottle@0.1.1","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-jZ0tfxdBBpI3z1q0gp5/CwW+HgdwnTvZ7cLYrk/LerG3TD0HiyiUs4es4dLc1+zX4SJqGt4tt/tgwViX44zNtw==","shasum":"ce04efe40e4bc0f0352cbcece55b94f4c151ca26","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-0.1.1.tgz","fileCount":7,"unpackedSize":13525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVXx0CRA9TVsSAnZWagAAkDkP/1hnLgqlrO7eblADgydB\n+KM+gb2wQa50bzdiZ2mTWfiPnU5Dy0F2Fk3MbXBP9E8ssAOWx+NfD/9WKOTg\nm0L0Sku4ZGkHS1XIigYZH0rCa2XXRwRE5PzqMid4381YR07Kck/LstUVZ3cs\n1b4xZhIwwC75NGHUEq1XqzLi/fAoy7z9sCpQjzmSlmWxUtehZyRalka4Bc2W\n0pPoh8HJrbaV688L2/wcRKbmwlrm9eEWUdUOdEo5TEsKWbiDZ2ymvlm9fVvm\nMTWpsfbtbVfbp1yOQpJojuNJlwm2lS2qjOREKt6YeG/h9fCWF2rZ+43dhyCm\nlzpD0r8iX8KzBmZldJZ4MoLnfeWHn9d2IHsCxPhW0i/eLZjtMHQnJgvRPXyg\n8wkduferWGc7o7gCU7qtMQP4m4X3eswYeL53UUnB4ZQJLpQq/X/ou0AMSY6b\nsmW4heVM+qu/xsxMEKBEPUQPtBl7chTZttLUIn2FQLI3GROSZmURHjIhSnZu\nlhjoZPgMKh02DEwi00v0HCdvro8K+sVfx984aNYOKn31asZYCPduhSaSG2JJ\nIYzgMdssiPEZeqiPeiBRpfNvWv9pLhhpfNuebdmIiwyWGMxd9BG4A9YIQyf2\nvdQFzIIN/3GjJAkfkrin68m8vMJcLJAsfikBDnm6o+6bAua15YWCUz14A5FP\nDml4\r\n=67ot\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICdKWQV/SlQ7dHWwCcCrqAAlqeGg9s9bX41NU5+w/3kiAiEAzJ8zfZKHEmI+u2QcrfvvJFNIqnXD+3Ot/iiQhm46Jk8="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_0.1.1_1582660723692_0.5769538187290542"},"_hasShrinkwrap":false},"1.0.0":{"name":"message-in-a-bottle","version":"1.0.0","description":"JavaScript state management without the state","main":"./dist/index.js","module":"./src/index.js","scripts":{"test":"jest","build":"rollup src/index.js --file dist/index.js --format cjs","prepublish":"npm run build && npm test"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"jest":"^24.9.0","rollup":"^1.29.0"},"gitHead":"f6ec6d984b2e76da36ea3417c47d2a187250e099","_id":"message-in-a-bottle@1.0.0","_nodeVersion":"13.6.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-SWE08M5yH4x5ap794PCK6b5Qpkm4jZQX/8u0d2+fRwGxeuKLX1izmxQiyxT5n0kkN0cK7vSq1hf4cq7A8SksLQ==","shasum":"e6fd251dd7ae6e5b4e63f4dba06c032aabb46ed9","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-1.0.0.tgz","fileCount":7,"unpackedSize":13475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVsaLCRA9TVsSAnZWagAAF/gP/AlglIankjxDYlSEYKaN\nI+H5QDo33BO9CzKDa/c3ipUQw34stDwAuMxxqsdvjJIEoOX9VasMGY7hp1mU\nn2fYYi7ODaTn6u25v7sBPuRmLMPuGOhf/y0zb+m7qcbkXrxs+5C1rJBU2Git\npY8DOpnjpBfDLKk2pjtK2RQTRBqr/T0Er0UGU5qgmRzK5lILjbxtAdnGHsJ/\n1gh46NDmCvqyNYML9aT+6WcUVvspEw71qTxnJBsHv+FBxcbGEDDltSSdGEKh\nq8eNOsqecUFFAyQdFWYzOS3qyKToi5NaucZzx/HRey9LtPBlNG5pXqscM0YQ\nUuhYqdiWMyN9tRQCbdmpW90wE6MkqMzUzL+4jqYVFtZV/htNWiDw67dB9Kko\nqjgNcKQ1wiTmzyE7tiXYxiCvt4EPdQLZaG0LHezbiHvkDOYvi3bN8OelecAM\nEjh+iGP97bJFJzFdKDErHiswgJk1DdzuPQDb7P4ckX/cPGtrVeoT+orGvjSq\njLzoPBPjJosINl3VhmTQUXB0dH2B+9nOZle6xOzh+cx6ZGRc59FCjWoBBHHF\nQmlR0ZsHb6KoUyBLqORAdnaIciTUdhl5/y+KP4edxkgdE1hJUixMz5oufiR1\nOkusDbQMQjGxH0i6tgRwCykQmz6Icjc4jhRBEpXgl1znXisxRHL/9YMqDQ5m\nnOVp\r\n=lnj+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDATrG0WO0CkOerzdZ0syasJTUBGZW9kOaxy6+AxD2JyAiB25CQERa9kzyPTg9EbYSvKt/eih3U3GNN0BsIzpNFA3w=="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_1.0.0_1582745227168_0.04064686409405871"},"_hasShrinkwrap":false},"2.0.0-alpha.1":{"name":"message-in-a-bottle","version":"2.0.0-alpha.1","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","main":"./dist/index.js","module":"./src/index.js","scripts":{"lint":"eslint src","build":"rollup src/*.js --dir dist --format cjs && rollup src/plugins/*.js --dir dist/plugins --format cjs","prepublish":"npm run lint && npm run build && npm test","test":"jest"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"eslint":"^7.1.0","jest":"^24.9.0","rollup":"^1.29.0"},"readme":"# message-in-a-bottle\n\n`message-in-a-bottle` is a small JavaScript library for organizing business logic.\nIt's an extension of Node's EventEmitter that adds a dispatcher and a plugin system.\n\n**Goals**\n- Easily tested business logic\n- Easy communication\n- Reusable code (plugins)\n- Centralized error handling\n- Easy debugging\n\n## Install\n\n`npm install message-in-a-bottle@next`\n\n## Overview\n`message-in-a-bottle` is a dispatcher that provides inversion of control and dependency injection and\nallows you to write code in a testable way.  It is similar to front-end state management libraries,\nexcept that it has no opinion on how you save state.  You can expose your\npersistence API to your functions via dependency injection.  On the back-end, this\nmight be a database client.  On the front-end, this could be an observable.\n\n`message-in-a-bottle` is a full-stack JavaScript communication library.  It can be used on the front-end\n, the back-end, or both.  If used in the front-end and back-end, plugins can connect the two.\nPlugins can also enable microservices to talk to each other.\n\n## Usage\n\n### Create the dispatcher\n```\nimport { Dispatcher } from 'message-in-a-bottle'\n// const { Dispatcher } = require('message-in-a-bottle')\n\nexport const dispatcher = new Dispatcher({\n\tdependencies: {\n\t\tdb: myDbClient\n\t}\n})\n\ndispatcher.on('error', err => {\n\tconsole.error(err)\n})\n```\n\n### Group related business logic as roles\n\n**todo role**\n```\nexport function todoRole (ctx) {\n\tctx.addCommand('todo:create', createTodo)\n}\n\nexport async function createTodo (ctx, todo) {\n\tconst user = await ctx.do('user:get', todo.userId)\n\tif (!user.verified) throw new Error('Unauthorized')\n\treturn ctx.db.todos.create(todo)\n\t...\n}\n```\n\n**user role**\n```\nexport function userRole (ctx) {\n\tctx.addCommand('user:get', getUser)\n}\n\nexport function getUser (ctx, userId) {\n\treturn ctx.db.users.get(userId)\n}\n```\n\n### Add roles as plugins\n```\ndispatcher.use(userRole)\ndispatcher.use(todoRole)\n```\n\n### Recap\nPlugin functions (`todoRole`) and command handlers (`createTodo`) have the same signature.\nThe first argument is a JS Proxy (more on that below).  The rest of the arguments are custom,\nand are passed when the plugin is added or the command is dispatched.\n\n```\ndispatcher.use(pluginFunction, arg1, arg2, arg3)\ndispatcher.do('command', arg1, arg2, arg3)\n```\n\n#### About ctx\n`ctx` from the examples above is a JS Proxy.  It gives preference first to any dependencies\nthat you've passed in, then to the dispatcher's API.  Naming it `ctx` is just the convention\nin this documentation.\n\n## API\n\n### new Dispatcher([options])\n- options [Object][object]\n\t- depencencies [Object][object] - Properties are available to you on the `ctx` proxy.\n\n### addCommand(command, handler)\n- command [String][string] | [Object][object]\n- handler [Function][function]\n\n#### command argument\nThe command argument can be a string or object.  If it's an object, it must have a `$command` property.\nPassing an object allows you to add dependencies and options.  Options are prefixed with `$`.\nOptions $catch and $throw are exclusive.  If $catch is present, $throw will be disregarded.\nOptions and dependencies passed here will override those passed in the constructor.\n\n**command object**\n\n- $command [String][string]\n- $catch [String][string] - When this command handler throws an error, catch the error and emit the\n  event indicated by the string value of the `$catch` option.\n- $throw [String][string] - When this command handler throws an error, emit an event indicated by the value of\n  the `$throw` option, and then re-throw the error. (**default** is 'warn')\n- $logArguments [Boolean][boolean] - attach the invocation arguments to the error (**default** is true)\n- myDep - any custom dependency that should be available on the proxy in the handler\n\n### broadcast(eventName[, ...args])\n- eventName [String][string]\n\nSame API as Node.js [EventEmitter.emit][emit].  The difference is that `broadcast` will emit the\nevents to other machines (via plugins).  Use `dispatcher.emit` to emit events on the same machine.\nUse `broadcast` to emit events locally and to other machines.\n\n### do(command[, ...args])\n- command [String][string] | [Function][function] | [Object][object]\n\nPass a string to call a command added with `addCommand`.  Pass a function to invoke that function\nwith the proxy object as the first argument.  Pass an object to call a command added with `addCommand`,\nwhile also passing options or dependencies.  See the **command object** from the **addComand** API.\nOptions and dependencies passed here will override those set in `addCommand` or in the constructor.\n\n### use(plugin[, ...args])\n- plugin [Function][function]\n\n#### plugin return value\nA plugin can optionally return an [Object][object] that adheres to the interface for a plugin's API.\n\n- claimCommand [Function][function]\n- emit [Function][function]\n\n##### claimCommand(cmd)\n- command [String][string]\n\nWhen `dispatcher.do(command)` is called with a string argument, and the command hasn't been added\nwith `addCommand`, the dispatcher will loop through the plugins, allowing a plugin to claim the command.\nThe `claimCommand` function receives the command ([String][string]) and returns a handler [Function][function].\nTo not claim a command, the plugin should not return anything.  Claiming a command allows plugins to\ndispatch commands to other machines.  Which commands a plugin should claim is configured when adding the plugin.\nIf a handler is on the same machine, a plugin should use `addCommand` and not `claimCommand`.\n\n##### emit(eventName[, ...args])\n- eventName [String][string]\n\nIf a plugin's return value has an emit function, it will be called by the `dispatcher.broadcast` method.\n\n## Plugin ecosystem\nThis repository has some plugin reference implementations.  These are not yet tested and will\nbe moved to individual repositories as they mature.\n\nSee [src/plugins/README.md](src/plugins/README.md)\n\n## Contributing\nV2 of `message-in-a-bottle` is a work in progress.  The core library is complete, but the API may change slightly.\nDeveloping the plugin ecosystem is where most work remains.  Open an issue for any bug reports or feature requests.\n\n[object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\n[string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String\n[function]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\n[boolean]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean\n[emit]: https://nodejs.org/api/events.html#events_emitter_emit_eventname_args","readmeFilename":"README.md","gitHead":"b9e81338ee8ba8d9d656475dbfb48e6738cff672","_id":"message-in-a-bottle@2.0.0-alpha.1","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-tl6PRVnITpymGAvBb8n+VOxkDm1hp/PsY5aN2Z7V/EdJF7hTJdq8mSnlpKCknZv8Q77BDOscsdvcRvBESWIQeQ==","shasum":"850409cb274e51a9e94a28fd9bd847486fd5271b","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-2.0.0-alpha.1.tgz","fileCount":16,"unpackedSize":37479,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4SFxCRA9TVsSAnZWagAAraUP/1JAwDBevmBIFmq3y628\n+RAIsRi5j9KfS1z84mde6bYYyG/ziNaxLCAUZpNguCHYTNXW92HjaEYqdaFO\nXj141lVcB6+h4Z73KH6jzzbkJlhNDrhxFbtmbljiVZE8q+RodQy8K90X1RdE\nuwLxGAIYZNQEoax0DoZ2EoJ6gOi2GvkUmSnlYucjLWjCypM4LMV0p0o6hbIu\npyjTVgkGJEaPEcrZlXtFm3VEuZkDS3KGeII0zncstZeKo0l2jpq3SnA60LZZ\nMmdIiVzgzti3X8epm6Wa8o69LVoVCN+f/yLGSbUJPes2fvtI+mRbw0FBCG/G\nHQOyh66dq0JhklLAUA8o4f8Hg3/BIY/6de+FMht9kUkP+z5N3iBjEUIaWCky\ni5fhfCCu8RjT+Mu8fyEiRNkOHiXq38+4n/VdNvNJs+pN6c4rw7GyGcAQBjAb\nNo0xuc3oJS9H6yyzkzUvDEVPQ1l+CE5jv0zo0bMebgBelzNUdT9CjI/rjarO\nx682+PPTCBs2V/918hvKYPz2e3QNCUc9ivK4jmSEnNaf13OvVn0aN0KIa8KH\nYe7auVQyOO//GsvK7V0LDK0g16RC4idIXVWpmIOp53hF8/tsmUEfnkUgtgUf\nElsukXdKMq6HmV1YQAXqcpIUVirjy3VeKARtKYTcnWAbL5OAoP25clhrHETB\n5iDi\r\n=zTWE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDtAxv04XqjYHgQsjKGk3dzUtfAVq9LMZCFdwuYrMUfcAiA90M+yc+o01zwUluX7lh96SUlNaL1ZNFnJHeOLCLbaeQ=="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_2.0.0-alpha.1_1591812464788_0.5524804193353123"},"_hasShrinkwrap":false},"2.0.0-alpha.2":{"name":"message-in-a-bottle","version":"2.0.0-alpha.2","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","main":"./dist/index.js","module":"./src/index.js","scripts":{"lint":"eslint src","build":"rollup src/*.js --dir dist --format cjs && rollup src/plugins/*.js --dir dist/plugins --format cjs","prepublish":"npm run lint && npm run build && npm test","test":"jest"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"eslint":"^7.1.0","jest":"^24.9.0","rollup":"^1.29.0"},"readme":"# message-in-a-bottle\n\n`message-in-a-bottle` is a small JavaScript library for organizing business logic.\nIt's an extension of Node's EventEmitter that adds a dispatcher and a plugin system.\n\n**Goals**\n- Easily tested business logic\n- Easy communication\n- Reusable code (plugins)\n- Centralized error handling\n- Easy debugging\n\n## Install\n\n`npm install message-in-a-bottle@next`\n\n## Overview\n`message-in-a-bottle` is a dispatcher that provides inversion of control and dependency injection and\nallows you to write code in a testable way.  It is similar to front-end state management libraries,\nexcept that it has no opinion on how you save state.  You can expose your\npersistence API to your functions via dependency injection.  On the back-end, this\nmight be a database client.  On the front-end, this could be an observable.\n\n`message-in-a-bottle` is a full-stack JavaScript communication library.  It can be used on the front-end\n, the back-end, or both.  If used in the front-end and back-end, plugins can connect the two.\nPlugins can also enable microservices to talk to each other.\n\n## Usage\n\n### Create the dispatcher\n```\nimport { Dispatcher } from 'message-in-a-bottle'\n// const { Dispatcher } = require('message-in-a-bottle')\n\nexport const dispatcher = new Dispatcher({\n\tdependencies: {\n\t\tdb: myDbClient\n\t}\n})\n\ndispatcher.on('error', err => {\n\tconsole.error(err)\n})\n```\n\n### Group related business logic as roles\n\n**todo role**\n```\nexport function todoRole (ctx) {\n\tctx.addCommand('todo:create', createTodo)\n}\n\nexport async function createTodo (ctx, todo) {\n\tconst user = await ctx.do('user:get', todo.userId)\n\tif (!user.verified) throw new Error('Unauthorized')\n\treturn ctx.db.todos.create(todo)\n\t...\n}\n```\n\n**user role**\n```\nexport function userRole (ctx) {\n\tctx.addCommand('user:get', getUser)\n}\n\nexport function getUser (ctx, userId) {\n\treturn ctx.db.users.get(userId)\n}\n```\n\n### Add roles as plugins\n```\ndispatcher.use(userRole)\ndispatcher.use(todoRole)\n```\n\n### Recap\nPlugin functions (`todoRole`) and command handlers (`createTodo`) have the same signature.\nThe first argument is a JS Proxy (more on that below).  The rest of the arguments are custom,\nand are passed when the plugin is added or the command is dispatched.\n\n```\ndispatcher.use(pluginFunction, arg1, arg2, arg3)\ndispatcher.do('command', arg1, arg2, arg3)\n```\n\n#### About ctx\n`ctx` from the examples above is a JS Proxy.  It gives preference first to any dependencies\nthat you've passed in, then to the dispatcher's API.  Naming it `ctx` is just the convention\nin this documentation.\n\n## API\n\n### new Dispatcher([options])\n- options [Object][object]\n\t- depencencies [Object][object] - Properties are available to you on the `ctx` proxy.\n\n### addCommand(command, handler)\n- command [String][string] | [Object][object]\n- handler [Function][function]\n\n#### command argument\nThe command argument can be a string or object.  If it's an object, it must have a `$command` property.\nPassing an object allows you to add dependencies and options.  Options are prefixed with `$`.\nOptions $catch and $throw are exclusive.  If $catch is present, $throw will be disregarded.\nOptions and dependencies passed here will override those passed in the constructor.\n\n**command object**\n\n- $command [String][string]\n- $catch [String][string] - When this command handler throws an error, catch the error and emit the\n  event indicated by the string value of the `$catch` option.\n- $throw [String][string] - When this command handler throws an error, emit an event indicated by the value of\n  the `$throw` option, and then re-throw the error. (**default** is 'warn')\n- $logArguments [Boolean][boolean] - attach the invocation arguments to the error (**default** is true)\n- myDep - any custom dependency that should be available on the proxy in the handler\n\n### broadcast(eventName[, ...args])\n- eventName [String][string]\n\nSame API as Node.js [EventEmitter.emit][emit].  The difference is that `broadcast` will emit the\nevents to other machines (via plugins).  Use `dispatcher.emit` to emit events on the same machine.\nUse `broadcast` to emit events locally and to other machines.\n\n### do(command[, ...args])\n- command [String][string] | [Function][function] | [Object][object]\n\nPass a string to call a command added with `addCommand`.  Pass a function to invoke that function\nwith the proxy object as the first argument.  Pass an object to call a command added with `addCommand`,\nwhile also passing options or dependencies.  See the **command object** from the **addComand** API.\nOptions and dependencies passed here will override those set in `addCommand` or in the constructor.\n\n### use(plugin[, ...args])\n- plugin [Function][function]\n\n#### plugin return value\nA plugin can optionally return an [Object][object] that adheres to the interface for a plugin's API.\n\n- claimCommand [Function][function]\n- emit [Function][function]\n\n##### claimCommand(cmd)\n- command [String][string]\n\nWhen `dispatcher.do(command)` is called with a string argument, and the command hasn't been added\nwith `addCommand`, the dispatcher will loop through the plugins, allowing a plugin to claim the command.\nThe `claimCommand` function receives the command ([String][string]) and returns a handler [Function][function].\nTo not claim a command, the plugin should not return anything.  Claiming a command allows plugins to\ndispatch commands to other machines.  Which commands a plugin should claim is configured when adding the plugin.\nIf a handler is on the same machine, a plugin should use `addCommand` and not `claimCommand`.\n\n##### emit(eventName[, ...args])\n- eventName [String][string]\n\nIf a plugin's return value has an emit function, it will be called by the `dispatcher.broadcast` method.\n\n## Plugin ecosystem\nThis repository has some plugin reference implementations.  These are not yet tested and will\nbe moved to individual repositories as they mature.\n\nSee [src/plugins/README.md](src/plugins/README.md)\n\n## Contributing\nV2 of `message-in-a-bottle` is a work in progress.  The core library is complete, but the API may change slightly.\nDeveloping the plugin ecosystem is where most work remains.  Open an issue for any bug reports or feature requests.\n\n[object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\n[string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String\n[function]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\n[boolean]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean\n[emit]: https://nodejs.org/api/events.html#events_emitter_emit_eventname_args","readmeFilename":"README.md","gitHead":"88ec4f4769c36183387bd6bba04c2bae08b0e8ee","_id":"message-in-a-bottle@2.0.0-alpha.2","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-csFvgMbki3ApuYpoImg5/3LUERnbF1sNbwE6G0q4jZHBlbT459Mmwn7SyhJPjkR7SchIl7cm8xZ3E4QdDDV+TA==","shasum":"3f1949bbc939faddf9f90c89112af426fda7f87c","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-2.0.0-alpha.2.tgz","fileCount":16,"unpackedSize":37666,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4Tu1CRA9TVsSAnZWagAAQbUP/iE4or2aTvTf/Z32I3W/\nr7YP/wrNlf/JZUzjhg2HTyYLHFEzBAprjyFDHRhsWcl4kjPt2tR5f/FHL8ry\nSkbpIowo+VbP7N2r0PDvAvM6OxIEFws9YAC1sB4As1B5xr+2nhqZatXWh4Pt\nD5XbBAgQGksrl53re1XrppQqImPe778B2LaK2yrdY5tI0vuYZ++ar2CUJE7+\ne1u3wv8tMGTzRz8BtlLP7bEcGInGw+YPUIxR4UcmZViaD/TkJfv9PFnOEO1b\noHoi/VWJsb/UCcshLnfNhuceVfqkdAvpVU9rKDQfsJzqvnFDJWFYV5o9jEP6\n87ETp7mXulel89TOGbq/dV97qajOyMkgDojImowfLzBqOBhMHttPV0kjQapu\nt49Mp+9UYu0kwhX7zJ2K+p05/zfGtHEwB5of6q2RSmLbTPtX2eB7IIbBfc1i\nGWw5s04FDAJipi9yTlz444WivN8fAc2dm/Q9pbGvKNOuAcR1MOn20EOtbcka\nIrpFshOmaKpwXxKRwIDJDw/DJTi4zS5asIiT7Pydrt4tqINRtMVpUURlKOwL\nVUXK69cALK+i+yyPSw9He5lsEXJlfWjKbCVQzXNJ8gF45tNB9QSTVehN2oRV\nfS+lFIGWgfAWGai4+oWSe6Tv043MvSXWZny8qIHx2odgTKCZESzv8f2gHwGP\nqUCu\r\n=VRrS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGizPen6FtPQ9yO0QoAm6jPdhqDktSGKBw/3d7IDA8vMAiEAx4R+cC4bMt3YSPxpoA05y4+4dMDu5ukEpQPCzRnT8mg="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_2.0.0-alpha.2_1591819188707_0.7118664671396069"},"_hasShrinkwrap":false},"2.0.0-alpha.3":{"name":"message-in-a-bottle","version":"2.0.0-alpha.3","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","main":"./dist/index.js","module":"./src/index.js","scripts":{"lint":"eslint src","build":"rm -rf dist && rollup --config rollup.config.js","prepublish":"npm run lint && npm run build && npm test","test":"jest"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"eslint":"^7.1.0","jest":"^24.9.0","rollup":"^1.29.0"},"gitHead":"632c624d049ea26a2eb209e27226603c529e86ac","_id":"message-in-a-bottle@2.0.0-alpha.3","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-6uO9GTqTqBrzg/gX44ZnXUBUT2nuHXus5zbx1Do5Onl74TFhcWI2mN3E+vAbAl/Oo/lDYD5wjwXRdCLj1U9TBQ==","shasum":"61864d925e1526c7edfc1f217fe2f50b622d1381","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-2.0.0-alpha.3.tgz","fileCount":14,"unpackedSize":40993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7C+cCRA9TVsSAnZWagAAfsEP+QGC6F4wUjN1hLbJHLYH\nTePeUA0egaLOLMM7JKUETPfEhGtaNMKiOd7dVVIlVeop27qbteEM9gw4Xqvs\n9VKT9KkZxfLf7GRns8UXpVM/MVT6MGmM3YcE67t7UJUM59C7YOGk14sXChje\n2cde6qUoc779egZ0PpQfaEXXyeZFczEOif8POQI5Yw7tP3Z54x9pcfdOCu97\nubx/BLLNHBTHHrTW/RO09S4geimd7UsWX+YeN+nJbjKl0rqkU2HckNfbm7/W\nUR/645SI1GsPNtu/x6e5WuDMkHDggiHhtzV9yHFLPymR+RrM/gINbFdlcQyj\nn3+YVXF630bKRbsDO18Bekuz19VoG25t2ZjvL8+aXujUWUpbkp4R/vhLl/Lb\nxaHDPhjEm9AwVR/vvwK7Nes3CZUlVwo7HDzE+u/6U+chaEJN2wM2nqIHUXCU\nrKvk+EOqCTLM4ZcsehrdxJJakK/2IhTaLFBj9BXriUPcl40ttlwHVErii34V\nM3l4tej/0BoBLvOIyUNC/OtrtHcPJSPgG4LxRYtt/xjcQnTKCaLWRAafUMDt\nQJqHJse77uieGY7pxJXCSDj3di7eWvze1qfAaUfEECZVx+Ksv4/q9UJPbrMQ\nC/ibr6ycT0O9PfEM7PJs6+FTO3J9Lw63TMRp753ac+jNT5uIAMUwLhUh/i6m\ncN79\r\n=hes0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCo35RXQhHy2RBWN/jVkoxJajYboi9AaalwUEe+i8UpbQIhAPQdvmPMgNSrvWZAILzhAgztj2cH72jM4x7cnCiQJ7GF"}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_2.0.0-alpha.3_1592536987744_0.43252195692790996"},"_hasShrinkwrap":false},"2.0.0":{"name":"message-in-a-bottle","version":"2.0.0","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","main":"./dist/index.js","module":"./src/index.js","scripts":{"lint":"eslint src","build":"rm -rf dist && rollup --config rollup.config.js","prepublish":"npm run lint && npm run build && npm test","test":"jest"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"eslint":"^7.1.0","jest":"^24.9.0","rollup":"^1.29.0"},"gitHead":"646df76a2b9b0fa640a0fde488105d00c7f460dc","_id":"message-in-a-bottle@2.0.0","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-vsv0ESAPSIDcmLfE8NikwXbsUyTslY2RR3BXi5GdM8jIs/sLkFywPvmKE99xP3tq3y/F4Uxvv9HLveYEdAZPsw==","shasum":"7369b65ce81ed0d9288edddd41fe03e637dde884","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-2.0.0.tgz","fileCount":14,"unpackedSize":40985,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7DFzCRA9TVsSAnZWagAASOMP+QG+CL/p+SLCLk6Ypbir\n6b5zr3pyxX1r+UO6DDIVwwHSj3+hfb+pwYrwT8AZGizVTxPMYaWq1u39FMAe\n+iGKwuLpHJoz344vkpJJxlMqrqbKhCwa5prc+SX9kVAJkGnALJv0Jr2d8UE5\nzHIxKzU1VdrTj2ag2H54DC1TsQDAdSqBVPA+3EgU/VH/mb67/R//lP2WADFa\nsZ/fAYlX7XmgHUMd63ioiIICbhGBdXcKGRpAXr3TuZjb2Czh3hjIrOFKZXoJ\nd4dOltDJqAjTw1UZcrmRC4vi0vAgUjBJM7wmvFbmrahT5xI2eaGsPTYfWLMH\ntoOGw5qfe61XOm2dlF6tWfLQX3HZireqoGjFTJ0RNCEk34JcD6E4svJvW2ya\n5XjaW8ZG91KrOWLzkTHI3wRvPxDe7gos/RvpP/jDeBP0D4Ve0EhmUfD3eS1o\nA64Fuxj6dbML8JYmcJta6KvFZ5iVcBH0hnwLIxjfEpBDQobEG145uNgb+NYt\nYnEnSrxNgIMseFdrXrozU7GrJ1gIh7zCEEBFqi6u2CNxaF72PbAYui28Xl1z\n6nIqxiqIWElp6sPmYI1CCiw3j8H24EtSiYxe3VljUlBS2X+SyxU/Yv+0jH9X\nmTpfTw+Ib+pi0+tEk15I0GUl6+lfhb3idADmHSjWSdIXOEGTloy7+GXIMwbk\neiXI\r\n=D6FC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwdU69fOcnZmVhWxVSE1K4oD26lsqdNsyfT8mfI6nkKAIgIek7zkGqFGlSySNW4lYPS1nJC2VqdNisUD8LCmQG9eA="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_2.0.0_1592537459134_0.2444147958155647"},"_hasShrinkwrap":false},"2.0.1":{"name":"message-in-a-bottle","version":"2.0.1","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","main":"./dist/index.js","module":"./src/index.js","scripts":{"lint":"eslint src","build":"rm -rf dist && rollup --config rollup.config.js","prepublish":"npm run lint && npm run build && npm test","test":"jest"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"eslint":"^7.1.0","jest":"^24.9.0","rollup":"^1.29.0"},"gitHead":"53a20513b757082263434df6bacc134faa32c4ae","_id":"message-in-a-bottle@2.0.1","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-NQhbhoaI84S83grqPc2LYbSKeyxJIj/sn40mj3Ufl6ZysHKT0BKLQA3sEFQYjVZX/sv0AMhWD846w34xCE/DEQ==","shasum":"48b868bd58cf0aba8ba2e853b930e3fb1541557b","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-2.0.1.tgz","fileCount":14,"unpackedSize":40980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7DG+CRA9TVsSAnZWagAAjDQP+wen9RcjwdBU+UWURC1y\nT/VXs8CKGhg2VUTxqrJ2XmuEz7vetdQyOG6C9rMoL8O+PjS91jb5FkdasEGh\nzElfgKsfK/F/TwJp/HlOh/lSz3kyiIw7fzzdLDU9PEzWZ1HIKj0/L2H4rec5\nfXH3MW22jp5J5ZNyMxA+oSjZU0LQddZmjbXXZbImTYUY7JU9Rh3qrEDF0ZCe\nn4blB2ATvN4rMOcQ4Oq60ABBAMkTsZEa3LPa64EVZ6dPjXmke5ViTILuOHE4\nXIQaGVGhL8e/WoPx3nApysdZlhqZU0pCEYrMiZvy306ju9gAcc9DMzfuT1fu\n8XJ8LOthEtFjAgZS/lM7mrY11KFfdqOcCYG1Edwx6HgoPS40TVCZEEgqiktI\nsPyfjY68Ww6zawO0VkxbTtvYmjlPUCezxoxx0WP7mZHhojl2/QvDWSsloDFn\nqgdBz9wh2H0Of36B3qY1ukC257DbLsTsciLsSseqTraUtdTzuPMTpbxQXs4C\nrirvE8eqnS1nywMmweuQzQ/E1Le7wkGyR6skpzW+UxEdkjEMEm7HnE4/ir2m\n4vPwgqmqZ9fXa3x3+KHBm3KiM3xxclxpvkCBH/wubMlgDG/BItUfGlhlEBIQ\nGcsmCSyXemoihHbgv2nPSRSnpKV7yKehw9sozkTjlGwQ9bhgdJmCI27YGeu8\nY5bs\r\n=9hWJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpFBdYWbYRRrh5puEotN+YwDrffsSl3liNbs25EI87RwIgGxYAQph986ZNA6/q3DTD+Ycohdj3PB9y5EOjxCJ3sws="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_2.0.1_1592537534063_0.1789683326328606"},"_hasShrinkwrap":false},"2.0.2":{"name":"message-in-a-bottle","version":"2.0.2","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","main":"./dist/index.js","module":"./src/index.js","scripts":{"lint":"eslint src","build":"rm -rf dist && rollup --config rollup.config.js","prepublish":"npm run lint && npm run build && npm test","test":"jest"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"eslint":"^7.1.0","jest":"^24.9.0","rollup":"^1.29.0"},"gitHead":"85761afb3669e088b066011f0b235847875ba5c2","_id":"message-in-a-bottle@2.0.2","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-tZRdbWIt+SFq8IqcfW8FNCF5yhKFNJsGxbq4B2FP4+4NYl0GhwaHpMI9hYxyBppllU49BQi2HeXaHyOAK0k1VQ==","shasum":"e0a62daed2b7723c24c431a1f1b18a448fb525e3","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-2.0.2.tgz","fileCount":9,"unpackedSize":26458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9BX4CRA9TVsSAnZWagAA2/IP/jyMv3ZLvSWbvqxr3d5Y\nN+q4bWouz9hNgONrYkgLO4mnvUzTFYmAHd/z6hhg1/BhDMh7TPABvJ7GyZRS\naij9KkLcJxr1BBREIp7Pxpyz17EGnVzV3jHMUotWwqrKR1T5g9u9AovVLpVv\nMEM2CTVUTk+bsHmWTPmaWm9nMNN7BijmdPt6p6Sap7i3NLHuw1o/QZz4UgdF\nlG35CowEAI8HpZRcF/mwyIS++dLuzK+lYrRjqhvHStV0iq1+UOIUsiZrnhB1\naD7psPGcL0XowR/hktqjGJee6N6v3EfWbNbbJKr/RuHKAdoXnvDi0hs7gR6l\nmf5CfHTMNdmE02xD57xFpIuKJ1/UcoXu/07bdLFWOHJ+9LQMWskZlmO49G/I\nQvwaCNsEE07WKFBKj9TgLwW8irlkaaavJfa529W80YZuVMro5+0DXLlKLTod\nyfbIcZVoxi8PxyTfeMKKJ2jCFythv9sexgGWssVZBQYNytb7vSL10h2oy0l3\nPe37Fi7GiDxhn3tkAiY+1Yw/LeLUfuuNvQPaaVlydDmipk+Y9HLhDrt3ef+P\n0IOdRv2mAN1OjeBPbnx+rLhcBVjqljwTKXmSE8v4psIgrVSiOOU3+rGwzl4r\nhU86r+dGzywAIFiGGO9m4umGjNmFm0Tjn7iBf5wk3mLrZPKUQh6OI+UuuTRZ\ntTA3\r\n=x+/0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNYeDtOrIbH+tip76zkzaGKylwvnPXjqXW52crHOEOzwIhAJh1UKiIxI0uNNYr06Y9GVxi2FD8lDOyuBeqguO9LGjb"}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_2.0.2_1593054712262_0.8460183989508354"},"_hasShrinkwrap":false},"2.1.0":{"name":"message-in-a-bottle","version":"2.1.0","type":"module","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","main":"./lib/dispatcher.cjs","exports":{".":{"import":"./src/dispatcher.js","require":"./lib/dispatcher.cjs"},"./duplex-messages":{"import":"./src/duplex-messages.js","require":"./lib/duplex-messages.cjs"},"./logger":{"import":"./src/logger.js","require":"./lib/logger.cjs"},"./web-socket":{"import":"./src/web-socket.js","require":"./lib/web-socket.cjs"}},"module":"./src/dispatcher.js","scripts":{"lint":"eslint src","build":"babel src --out-dir lib --out-file-extension .cjs","prepublish":"npm run lint && npm test","test":"mocha test/*.spec.js"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"@babel/cli":"^7.10.3","@babel/core":"^7.10.3","@babel/preset-env":"^7.10.3","eslint":"^7.1.0","mocha":"^8.0.1","test-console":"^1.1.0"},"gitHead":"ec7de01eb0fac5b800aa91f2dd63a753efedfcde","_id":"message-in-a-bottle@2.1.0","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-IeJGo+kGlguV2fifZ59kZwd8EEhX6EgTDvU80h8COLTgh2qNWmHa0rtvU07SQwmqLzvrQJXeMWY65Ik/jt3WdQ==","shasum":"a19d8b04c8e8205307450ba99ba07b48b25f4165","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-2.1.0.tgz","fileCount":12,"unpackedSize":43381,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+g9qCRA9TVsSAnZWagAAKuIP/jF+Nu0ubAgcFc3HgeGo\n3ZjVbhgi/8PbBExC3eVZsmYUBN9CcPcY0EYahf3wet9BMd0GPMrqoVgiPiur\nXlJDrlMyHkFjWHiUCnePg+AuwUGQkFBaODNNDhMq1g8OLn3MYDPoT0V68wY/\nuc1GL89b1iaYCWmrpcW183qlCsXuEVgaZ/F42tX/BoJXIG387NgA3jEYIs3o\n6MEq+ybmcBjkarzAXF8aertkgn6tuoPVYkCWyiaG/dJiccsGjDRekytJO4Yu\npjKwTETuombY2OqEP+pknUWcslUVcJx/iMWIGR3TEaXHJdnnd+lGJ5Up1RXQ\nNPMw73KlndoZdGzWgmecctUTittn5PFwneorfWpFiBFNDnbi+2OVGX1ICR6j\n+mbl8DkgC4ZZLtTTc0edOG1g1p82tegrb7j3DJDgK8aN9RsLqbZ4yHqWsR0G\nukwWuBALef9Wt23X6BmHSJdQERoEON7avY5Cul5UZp0362QcDm71xc2pDjF/\nhEvAt0Am2uDQKu0x6MWUY827kVGcXqpzYRx0esDUffCd4zNd9l7CeSt+KJ/Q\nm5wIErYoRDwdMOj0DxWw6PGjTCUCbEYcsAEq8LYaA4DmdIgeb96vjhGR8P5s\n6zAKpIuFmIl40hIwuIaiC5RDAI8Kh0KYjK580SkZXGmgbxX0S2nao3OuGQmO\nUmxv\r\n=iPiH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDtPgSp0mlhoQ3w0yC9w6ohet6SGrdbmntHKR1N00gK6AiASMJC1bX8dLZhO32bQdC3Lhw2VRqfYj+ng5HuDBsw/DA=="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_2.1.0_1593446250342_0.3097892365692039"},"_hasShrinkwrap":false},"2.1.1":{"name":"message-in-a-bottle","version":"2.1.1","type":"module","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","main":"./lib/dispatcher.cjs","exports":{".":{"import":"./src/dispatcher.js","require":"./lib/dispatcher.cjs"},"./duplex-messages":{"import":"./src/duplex-messages.js","require":"./lib/duplex-messages.cjs"},"./logger":{"import":"./src/logger.js","require":"./lib/logger.cjs"},"./web-socket":{"import":"./src/web-socket.js","require":"./lib/web-socket.cjs"}},"module":"./src/dispatcher.js","scripts":{"lint":"eslint src","build":"babel src --out-dir lib --out-file-extension .cjs","prepublish":"npm run lint && npm test && npm run build","test":"mocha test/*.spec.js"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"@babel/cli":"^7.10.3","@babel/core":"^7.10.3","@babel/preset-env":"^7.10.3","eslint":"^7.1.0","mocha":"^8.0.1","test-console":"^1.1.0"},"gitHead":"5f07213034af45f943354c98ae39e655a45041f7","_id":"message-in-a-bottle@2.1.1","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-akPHemaW2aGRPsagk+h1WrluFxrS5d8qAx9l4YTe8G3IWQivEgvsitATZwiCzm3VtE+IRZKLiTKwF6dFwG1hcQ==","shasum":"4e610078133a42db8e413d11218f72e9fe023477","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-2.1.1.tgz","fileCount":12,"unpackedSize":43713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfA2Y8CRA9TVsSAnZWagAAYAMP/25uA1GTWkUMTqUsPapO\nyqSqDxyfsaAFAgFcPsOsPX8pOKaLfW/l/15odA4CmducvaIgP4E4fhNgNVG9\nGbR/t7eVGFzuz+icxVe2kcHUpmHR9ISpCzyBpxEIrzznVuS5/8FcKfiZskQk\n6VbeK+nzUfsOZhqvWzWMc2vQ3ao077mob29pkdEXcdEF7+KxOvD+1vl6yT8N\nQrcjhpoHgIkOU3lhz/mbluIAQOB7ZiVZ7LtPhoQvJyjvwTfkLMKMb02DrOMd\nTC5sh8nwOojV7jERX+Rs42VkauKfRLWQgmrZD2JwNbCq7jnqDmNtijekDKb5\nT5KeFGzswuemPcQlylzZ9xff8FJ/AzvQCy0pOaSUwrZa8x8pl7sHPUpO6sYD\nu/+9b2yQ6vnmMUfOxGSjjNFKWIJ02JisAPlm6JDNtXPXW8t/VTtLTWDhJn74\nCxTpesTmRYjh+nw6pdd2X/FWip2hIswvmx2EM9pRnDUS9REHv4xo3Oe32++1\n+55VsdtIVaO4A37p7KzW7n9+igk8x2IEAa0Jz3nG+v/q83vQ/Drfphyhq+Lp\njmwYaJR6yhbxwtWx6XTI18Bu2iRKE7RBYuJhdF4pHYET7lE9navYAiOVW4hJ\nIBGydJqtF7q6/tJHxlRdcx/tldwsxrGXa6hZPNCq4xzdQ27OQK7H2OpZR1hh\nk8ue\r\n=W1mw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRPPUYenXnDwcz4dHpcpW6a0343U/zYzeuNUYmnpKqUAIgJLyuSkT3XAvkJN7zI9sHuYV84tpBwkEUPDkhTOM9mK8="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_2.1.1_1594058299854_0.433709027641795"},"_hasShrinkwrap":false},"2.1.3":{"name":"message-in-a-bottle","version":"2.1.3","type":"module","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","main":"./lib/dispatcher.cjs","exports":{".":{"import":"./src/dispatcher.js","require":"./lib/dispatcher.cjs"},"./duplex-messages":{"import":"./src/duplex-messages.js","require":"./lib/duplex-messages.cjs"},"./logger":{"import":"./src/logger.js","require":"./lib/logger.cjs"},"./web-socket":{"import":"./src/web-socket.js","require":"./lib/web-socket.cjs"}},"module":"./src/dispatcher.js","scripts":{"lint":"eslint src","build":"babel src --out-dir lib --out-file-extension .cjs","prepublish":"npm run lint && npm test && npm run build","test":"mocha test/*.spec.js"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"@babel/cli":"^7.10.3","@babel/core":"^7.10.3","@babel/preset-env":"^7.10.3","eslint":"^7.1.0","mocha":"^8.0.1","test-console":"^1.1.0"},"gitHead":"a61b078e04dab4d0b5281fd100156ddad07392e4","_id":"message-in-a-bottle@2.1.3","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-0TpwLEBsJSOCNfmVhTd+Yiw8Jp+v/6u3z55f5nBvUcSPamTBgWu/iRmt9aQPNivgCovZHLq/34BHLlbg9YM8gQ==","shasum":"c12c83522dec59d1a327b7682a371c2feb53ee3e","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-2.1.3.tgz","fileCount":12,"unpackedSize":43683,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfA2f3CRA9TVsSAnZWagAAUe4P/0BRjZIzj96UfPGY45r4\nutuvT50XlK1IE48O+P7OXGKkaK4L7capxbV++OcnZprLV8R04gfTYBpnxxht\nXM7yD9gmfcVQLntofHSiWMPaF7VgVTLUBhEhOi0DqAaj3e6fg7V5Gqg4WfZj\nE+FtqkcfG/yuISHSv+ChxcGCDnRRC0bTVA82JMteBu+1aEiGB6SHnoVHdQkp\n9ClfVVEL5boxITZ7vCXjf7LEmvCAHod0Ue9NhNYuFBwYm01RCkdVc+uNz3q9\ngCW1K8+IJPLbIoOdg9Kbq6U+Uvxye62sN5LQxoig+crYu9909Xpuqe7Ks+bG\n7ZkvwNqO7WKNuF+DA8g8AA3alDeid+BCpCLZH7HEHa+pD97kGnXUDvbzGAuF\n/NMDQ9vwfR8mriofK84Zg7Qck3o+i27gI3Cf0U8V0PVJmATQOkufom2/S2tL\nc4lwP5XPo/8wQ98QIf0uSnXFVsbx2gRTTPBXwdv6kNTRKBQFCZLPs0C/9r/t\nikaU90z6FaFsFJ4tLE5NH4Zq7RdZcGn+cqeNG6Z4xS5qrZQC/Rec98MNdD61\nKepMpVkfTTvVOsdBoLEhIep0W5oAbDLIjZIBIroc0YlALweBaLXY1B6mG7oI\nI/CP/FqvKCkv5OKblByEtmceV75qtZ30sHK8o7JK3obm4/WuufqxrJJbBFhz\n4L0c\r\n=Ug3K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICnQ+EqPEbCVRce63UYs+tBPJMoetMZXp8PLF3D2lSXtAiBy+6048H3IxMJ+0gPpNe7F257PTRZmHfjQlqi9S4SuwQ=="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_2.1.3_1594058743017_0.5261628597866248"},"_hasShrinkwrap":false},"2.2.0":{"name":"message-in-a-bottle","version":"2.2.0","type":"module","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","main":"./lib/dispatcher.cjs","exports":{".":{"import":"./src/dispatcher.js","require":"./lib/dispatcher.cjs"},"./duplex-messages":{"import":"./src/duplex-messages.js","require":"./lib/duplex-messages.cjs"},"./logger":{"import":"./src/logger.js","require":"./lib/logger.cjs"},"./web-socket":{"import":"./src/web-socket.js","require":"./lib/web-socket.cjs"}},"module":"./src/dispatcher.js","scripts":{"lint":"prettier --check src && eslint src && prettier --check test && eslint test","build":"babel src --out-dir lib --out-file-extension .cjs","prepublish":"npm run lint && npm test && npm run build","test":"mocha test/*.spec.js","prettier":"prettier"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"@babel/cli":"^7.10.3","@babel/core":"^7.10.3","@babel/preset-env":"^7.10.3","eslint":"^7.1.0","mocha":"^8.0.1","prettier":"^2.0.5","simple-mock":"^0.8.0","test-console":"^1.1.0"},"gitHead":"2e3deabd23c5f7f487adb062d7dc7f30b30fdc60","_id":"message-in-a-bottle@2.2.0","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-RbHhLW2TwDJSM9i+ErWCBTxB2ID69G5FJwAwso514G8xsHw4oZaJExuTjqNcvX/mLJIR217LxdJR0bNqcAfkEQ==","shasum":"6ed8a3aff6add6c3b42c14c2983d8d74bc348175","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-2.2.0.tgz","fileCount":12,"unpackedSize":46228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDHFUCRA9TVsSAnZWagAAL/MP/iBvPjTZomRbMhgY7NbI\nYkly9ttiNU50C2uIPu7NnP5mpQ+6bLWd2SVQv60slOMt1v26olkkeczDM1AE\nQjbuZYjp7DlrhVGh3iybrVuy1KaGEhRaJfuWvJjcdE9i+EOuDs8GvcGZQnnw\nl6/CMRcytfnjIhEmiCBuWeYBfn3KMaHuSBcju0jxpH++72guSau1oQ0wIY+6\nQ5dmWmxa6rRWmCaw5qX8vUUZW0kGnfO6iIvaK5iRONzPowGR6KytJQN89Dq0\n/msA+twqVCJuHKlbgxo034FVwaElPiaO8zb70HtcY3z5Gli05OxUI/F4wfz6\n/Qwr614Fq9onNf/KowIXUBBShsw3AmV1+RVRGr7myRDOJaRV8zW8JBr0GR9O\nzfKkbGxX1D/X4nXa91V6iDc/tAaDMUgLidl+6iTVvvpUZJ80tPZxouiRG0Tb\nMEQGxXoTbb/P92S22J2EBM3G/PqGLdhL/gyMzd/AbNmsaePmzASG5GJOS6Xc\nHeChc6iHjk8jAzWsOJvmSV9k7azbFdc5RH3eGTnaXZqw5kHnm80ZNrAIXznV\nyyjID7SvuMlKar7GHD+3zCYl6CeNxNBRtVp6Xz0AqMkyePYPisduoeWSfBB2\nsAaKUzA+XksOqidQlDW8vVYU9VzvfBBMf74PCPkFWuyIEHKscZibN7vnrgmd\nrU55\r\n=/Kjt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF6XwYRXOwNzfwH6JAFXZ7YgTVO6m0gpRSAP6kChc4nHAiAg+EsTZSjVxuOa1vhsVu0XWbz96obdzsuVMfxUnHTVyA=="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_2.2.0_1594650964243_0.19538049334610208"},"_hasShrinkwrap":false},"3.0.0-alpha.1":{"name":"message-in-a-bottle","version":"3.0.0-alpha.1","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","author":{"name":"Nick Baroni"},"license":"MIT","keywords":["event","event emitter","command","command dispatcher","dispatcher","dependency injection","inversion of control"],"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","type":"module","main":"./lib/index.js","types":"./lib/index.d.ts","exports":{".":"./lib/index.js","./logger":"./lib/logger/index.js","./message-transport":"./lib/message-transport/index.js"},"scripts":{"build":"tsc","prepublish":"npm run build"},"devDependencies":{"typescript":"^3.9.7"},"dependencies":{"heehaw":"0.0.8"},"_id":"message-in-a-bottle@3.0.0-alpha.1","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-7k/enuErrq2PXKedZOXEX4SjhNuy0NSfD7exHxpSOG4gX4y1x6QypMcdXeWfsmgZwcInK0P7C53hkCI+kcia0A==","shasum":"534e85dd45dacd0de14c6f6ce0d477e75078ae4c","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-3.0.0-alpha.1.tgz","fileCount":14,"unpackedSize":26438,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRc2WCRA9TVsSAnZWagAAQjUP/0Tpu5RZODTkmCjsZp/O\nkBu9wMfc4kJZ6FJxK35z0vcrCG9ajySsa/zXq44G5VyIEgXPGX2harcHk82h\nip8xd9caeOMPlRFvCyE/hxy0ED8FAwoms9kghebQ2FE2zvdl6G9DWqwwWRK1\nbGpEbjTrYE0bJ/YgsM0mUZDCToFnKzWU6EzmCYTeCnh6w4xQNuyPgYzjpPoZ\nkIYlRfBHJgj6BvITaJDC7wQBzH8Z/xQjjYC+TOh6saavwxZCsrqUn2lagrn/\nSdLTVYmqmwPiBu/cztnilalCIjHCSkUTHweTGvV2QrgOjOsxw6lvCywMUil7\nmvOykBFAOxbRD2wzzDvqM8e5A0fDuaE0cfMkbtuFO6Lk8grEBk3ZU1w5thXd\n3cMQWMYPOgysZzvQy6RSTFiBaGivaOAltwPUrA+LyhO0V3QiK/MZFKhSlxNz\n1aOLxXPNAOJnI2gZ+tAGysiNXxRocU9Wp3QBNZR1BYCdDSBCFGvbjGo7IK2u\nT6somb4lofdvhP1bHIF0KdnMRCUT4B872yQClU3d4tJpvdEFI0LQizP/NGi8\n1OPyh3TtjN14ZktBHnjDxwFKGv8TOf1DTjkZz5PX5jqGJcbJBj9RKGMxQMPE\nDjiJEXvJbFTDVminZVR70HqOEVTktIxbirQfNFOvMKHfqac+vw8djReaus30\nb9ir\r\n=ORtT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/TR6X/3ijJ2lLSLC1u/kBujD280bKBsaMrxUP1JPy9wIgRRbErJrsQvhALu6irGPUMUul3t5aiuLLyHbhyg28Kb4="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_3.0.0-alpha.1_1598410133523_0.9086003441663624"},"_hasShrinkwrap":false},"3.0.0-alpha.2":{"name":"message-in-a-bottle","version":"3.0.0-alpha.2","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","author":{"name":"Nick Baroni"},"license":"MIT","keywords":["event","event emitter","command","command dispatcher","dispatcher","dependency injection","inversion of control"],"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","type":"module","main":"./lib/mod.js","types":"./lib/mod.d.ts","exports":{".":"./lib/mod.js","./logger":"./lib/logger/mod.js","./message-transport":"./lib/message-transport/mod.js"},"scripts":{"build":"tsc"},"devDependencies":{"typescript":"^3.9.7"},"dependencies":{"heehaw":"0.0.8"},"_id":"message-in-a-bottle@3.0.0-alpha.2","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-YIuT3Y95Yctl0nX89mliRIVwBdIXVS8T5B1spitAxA9zt/wiicV6FyCvvNVdVUsL+C4RLrht1zisR42wwK/HEw==","shasum":"8808a1ecc7b19d637a1f847bce1a824d83d0c853","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-3.0.0-alpha.2.tgz","fileCount":10,"unpackedSize":16587,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR6gkCRA9TVsSAnZWagAAwpUP/12EF8eoD0iAFJ9teNgd\nQUF52nOAwseU28e4BX0kJ4YJ4ByEDAgbQ4gWAolHuCeQDA3GpMBceEIyWgFY\naajCHbsx9HmL/MJiB2LJ+KqUKdx46/D5wbBiFvMOsveAdDHCNabug0kS/KZa\nQrTpSupPACQ6zQbHvIfudqljQFkiWf/0X+eEk/5RoJTin8AfFTTs//1LFrcq\nmm7LOnZWoRuvysZP0nranSmk22QJP5ZUmUJHa2aODrcGG9zwRQbSjI5tdw1L\n1nPScrMOlkRXIkMVx4sX3zf2exRkHiBWQlKMw3kY4hixgzFizKYU2psIAJs4\n9p/9oHk7jfESnf27O0YY0GVz3ryhGxaEtIRXjlRpnOUJcWQ1gWAV/Uve2F5O\n7z2NcKOp96ZyjvvdCXjyVsPbFmVukr5clWtDgKKp1AJmQy926bEpvH5xNln/\nh5BMMwsWhPu340+phpeQgseNT1QQVzmhjY0t9bOwQoBs5xxleyTemkdFTlhs\nLQBT8GsyxSy+smrQru/468Ezedy7qDMeQT6N1EkWiP9ZSNtjkCsrCocnHSgp\n3os8H+wMCkGA4lTS/fRgtDUVm0Pj2gK3Zfc/RVX6KmghMmmpsLWuLo2/o6vt\npNFD08VnsdiUFoUMfazQxfDxGXl+nvQpxinAtTc3+22JKuHdEa2Ppdv4OjjS\nO8YX\r\n=aD9I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0UmRzyd0oVx/rlyxh4THl5Qsjg+xDyAH4GHmO8qzJVQIhAMx4rZOlxClCtjaaDOXKrEyetkG4ka5bRk4pDM0mF1tF"}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_3.0.0-alpha.2_1598531620125_0.9235919064705931"},"_hasShrinkwrap":false},"2.2.1":{"name":"message-in-a-bottle","version":"2.2.1","type":"module","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","main":"./lib/dispatcher.cjs","exports":{".":{"import":"./src/dispatcher.js","require":"./lib/dispatcher.cjs"},"./duplex-messages":{"import":"./src/duplex-messages.js","require":"./lib/duplex-messages.cjs"},"./logger":{"import":"./src/logger.js","require":"./lib/logger.cjs"},"./web-socket":{"import":"./src/web-socket.js","require":"./lib/web-socket.cjs"}},"module":"./src/dispatcher.js","scripts":{"lint":"prettier --check src && eslint src && prettier --check test && eslint test","build":"babel src --out-dir lib --out-file-extension .cjs","prepublish":"npm run lint && npm test && npm run build","test":"mocha test/*.spec.js","prettier":"prettier"},"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"author":{"name":"Nick Baroni"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","license":"MIT","devDependencies":{"@babel/cli":"^7.10.3","@babel/core":"^7.10.3","@babel/preset-env":"^7.10.3","eslint":"^7.1.0","mocha":"^8.0.1","prettier":"^2.0.5","simple-mock":"^0.8.0","test-console":"^1.1.0"},"gitHead":"2e3deabd23c5f7f487adb062d7dc7f30b30fdc60","_id":"message-in-a-bottle@2.2.1","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-gIdOb8jhv+6ekc8QFO3Wc0outuuT/xCwzIz5Mh83nam8cIGJ98GWTV695MI3RmtHTl9Yx5Odckrd/WKomCK2/w==","shasum":"0de625ec781a3afe409dfaa56345c1931c46e07b","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-2.2.1.tgz","fileCount":12,"unpackedSize":46566,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSVqfCRA9TVsSAnZWagAA72sP/A9JGGb95dr/cyX3j9jn\nHlGMeW2eFLRWbXh1g5KZ7cdEApOStZYUNgBpfiIFDuc4X1VBxW59npGQGeKP\nBwjdHkhn95QzIyNw8jD6NEvSvJDsTcnlrzd0mDSPykL8Fz+gLNGy2gwNBR+U\nUHtuzE81BmKDQlhCIopMyvQnDbLwX46cJtdg8p6Y/YDK+FzRDJlBc2HQ5eoK\nInXSgneag7L1fwY820cD0CYDNVWiXn38zhl6XS7O1uOHB0NE+RclMn1RQS5w\niZCZrvEEVWn3b0h58v0eXboeinA8MPZSCYZ6a9xsBDwPz/1Z3vfa0bVGw3dy\njXnzLiLciOFREil/As/lHKwX4fkQl5tcLHLKxpy7I6Bbke3ohmRQ2g5jpdOU\nl9gx8lvVV+XsvJTetHwxRTYllB7YWHrlyI/ZEVpl/NpipeB83Qui/dawEEcH\n1fbrfR7glUDqiATDUmL5BASCC7atOeiRWKsL/zNFYp2r0nc3Pebsb/mxrm/i\ncRYDxNEvQf7oqop3Ou48PpcDqMrWZr3BH9o+aKaYILkEPMF0c0dgQunMUva2\nNOQU8szw3Ww6daxLBBtRMqB8X9NFnURu+mGkq58Ln/k5QSUtxxpdobn7EcGn\nMwgKAfc9mAk5AI62ZSIby/BvsfiCWPGXf8ahyhgmvS2mPJj5Ma1BByytlSgA\ntHPH\r\n=rkqi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/97G01U4mdbc1Xei3rJ1cIpqEFFqRc1mbBNEOSVUMKwIhAM+U5jA3aucsOdc+ek4gWaEirX5pXOMiiEBNku3lNvkr"}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_2.2.1_1598642847461_0.3281155848702302"},"_hasShrinkwrap":false},"3.0.0-alpha.3":{"name":"message-in-a-bottle","version":"3.0.0-alpha.3","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","author":{"name":"Nick Baroni"},"license":"MIT","keywords":["event","event emitter","command","command dispatcher","dispatcher","dependency injection","inversion of control"],"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","type":"module","main":"./lib/mod.js","types":"./lib/mod.d.ts","exports":{".":"./lib/mod.js","./logger":"./lib/logger/mod.js","./message-transport":"./lib/message-transport/mod.js"},"scripts":{"build":"tsc"},"devDependencies":{"typescript":"^3.9.7"},"dependencies":{"heehaw":"0.1.0"},"readme":"# Message in a Bottle\n\nMessage in a Bottle, or MIB, is a plugin-based command dispatcher and event emitter. MIB dispatches commands by delegating them to plugins. [This blog post][dispatcherpatternpost] gives a good overview of the command dispatcher pattern.\n\n**Goals**\n\n- A pattern for business logic with inversion of control and dependency injection\n- Easy communication between machines or processes\n- Reusable code (plugins)\n- Centralized error handling\n- Easy debugging\n\n## Deno import\n\n- **latest** - `import { Dispatcher } from \"https://gitlab.com/rhythnic/message-in-a-bottle/-/raw/master/src/mod.ts\"`\n- **versioned** - `import { Dispatcher } from \"https://gitlab.com/rhythnic/message-in-a-bottle/-/raw/VERSION/src/mod.ts\"`\n\n## NPM install\n\n`npm install message-in-a-bottle@next`\n\n## Usage\n\n```\nimport { Dispatcher } from 'message-in-a-bottle'\n\nclass UserRole {\n  load($, id) {\n    return $.db.users.get(id)\n  }\n}\n\nconst todoRole = {\n  async create($, todo) {\n    await $.do('user/load', todo.author).catch(err => {\n      throw new Error(`Invalid author ${todo.author}`)\n    })\n    await $.db.todos.put({ ...todo, id: new Date().toISOString() })\n  }\n}\n\nconst dispatcher = new Dispatcher()\ndispatcher.mergeContext({ db: myDbClient })\n\ndispatcher.use('user', new UserRole())\ndispatcher.use('todo', todoRole)\n\ndispatcher.on('error', err => {\n  console.error(err)\n})\n\nconst todo = {\n  status: 'INCOMPLETE',\n  text: 'Send invitations',\n  author: userId\n}\n\ndispatcher.do({ $command: 'todo/create', $catch: 'error' }, todo)\n```\n\n### Review\n\nIn the above code, there are 2 plugins, user and todo. Plugins can be for local code, like above,\nor they can be a transport plugin to send command and events to other machines/processes.\nThis design is heavily influenced by [Seneca][seneca], but MIB can be used in a server or in the browser.\n\nContext/dependencies can be added that are available globally, by calling the `mergeContext` command. The first\nargument of each command handler and event listener is a context object that has all added dependencies.\nThe context object's prototype is the dispatcher, so all dispatcher methods are available on that object too.\n\nCommands above are called in 2 different ways. Normally, you'll use the form `$.do('user/load', todo.author)`.\nIf you need to pass context or options, you can pass an object instead,\nsuch as `$.do({ $command: 'todo/create', $catch: 'error' }, todo)`. This example uses the `$catch` option,\nwhich catches any error and emits an event. The string \"error\" indicates that an \"error\" event\nshould be emitted.\n\n## Dispatcher API\n\n[Dispatcher API Documentation][dispatcher]\n\n## Plugins\n\nPlugins are objects that implement a simple interface so that the dispatcher can interact with it.\nIf there is an `initialize` method, it's called when the plugin is added.\nPlugins can also have a `defaultHandler` method which handles all commands for which the plugin\ndoesn't have a method matching the command string. Plugins are assigned a key. A command `user/load`\nwill look for a `user` plugin and call the `load` method on it. If there is no `load` method, the dispatcher\nwill call the `defaultHandler` method.\n\n### Included plugins\n\nMessage in a Bottle ships with these plugins.\n\n- [Logger][logger] - For logging\n- [MessageTransport][messagetransport] - For connecting dispatchers over a message protocol such as web sockets\n\n## LICENSE\n\nMIT license, Copyright Nicholas Baroni 2020\n\n[dispatcher]: ./docs/dispatcher.md\n[messagetransport]: ./docs/message-transport.md\n[logger]: ./docs/logger.md\n[seneca]: https://senecajs.org/\n[dispatcherpatternpost]: https://olvlvl.com/2018-04-command-dispatcher-pattern\n","readmeFilename":"README.md","_id":"message-in-a-bottle@3.0.0-alpha.3","_nodeVersion":"14.9.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ki8RtAZbVaK47KvvgRI+8P6af5odUgJ8eO0VCSmHX/60ejXWHBcOB/JbhqY9Qav++XTXSCJinpcz7AnKq23/qg==","shasum":"2a041fe5d5c3411b6f243b14aaf94455f3b0b6c7","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-3.0.0-alpha.3.tgz","fileCount":10,"unpackedSize":16643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTHJkCRA9TVsSAnZWagAA9z0P/il6Zi0s6KP9xxS4BmZT\neMZIAE9fRIkZILathUNAxRN9SMYNWNDt/CKzswvR+glpAGrbdn21vUYOqSGx\nfWD6Z8nggkaUXwb8J2XL/CQhxG82SqyrXO67eqFeyUwWNQKlGk5gr3FXB10k\n4ckN7+sbplYxpeFbCh/RC9EY0KJkQLzzxLRUM9shPcIw8vDgzgxm+1kIhD2v\nUmkORWeEe0RoDZKRZQ6UrtXKsWFEUvJwUuy3R4EuLTOb2815P0T38+jDejkt\nynXHXp3n/IXzfqfDf5gO2gSSOUSD4NSLkEjgial0W27CUFE7UidOH5GWMYce\nB8biHZgJGsebf+/3oZmOfLm7gxw4QJ6dqlv1EE/tv/LTXLsy6UKQAr8Qcdms\nvqLgNouEdQcSTm/y6Q2vyz747xIJc6U8+2z/++NZHjqm7IG/HkYuLjoB4J7I\nxsf8bSc4c1nZKayS6blDjVD8r1qTpqEKXJ8/ysX0aImsw9wx8v6WH/4IpJGs\nNl5U8MXn7BKO5RDttiwmdF/FA70Y6ZsYFz8CWWFP9HSbysHUtsojgy+gBZAJ\n61kJXlgE2YDEip1Kci65fbbWafvFmeJ+d+0RHBcgR2b+X31agQ0h3GX5Wt8W\nytVOf62O3ms/PTskjfGtN7gtFDZey8mZ+QaGawhUiMRYg06SklZndJ7+B3tl\nGe/8\r\n=07Em\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD66E2bnEYsIcghdrB5c53+5pZj3ofkhEoX81LWu4IfnAIhAJ9iVEvo3kkRHrmN/+tKoDIc/2CiB3IGeQbGE124ACnP"}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_3.0.0-alpha.3_1598845539581_0.649123648696138"},"_hasShrinkwrap":false},"3.0.0-alpha.4":{"name":"message-in-a-bottle","version":"3.0.0-alpha.4","description":"A command dispatching extension of Node's EventEmitter with a plugin system.","author":{"name":"Nick Baroni"},"license":"MIT","keywords":["event","event emitter","command","command dispatcher","dispatcher","dependency injection","inversion of control"],"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"},"homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","type":"module","main":"./lib/mod.js","types":"./lib/mod.d.ts","exports":{".":"./lib/mod.js","./logger":"./lib/logger/mod.js","./message-transport":"./lib/message-transport/mod.js"},"scripts":{"build":"tsc"},"devDependencies":{"typescript":"^3.9.7"},"dependencies":{"heehaw":"0.1.0"},"readme":"# Message in a Bottle\n\nMessage in a Bottle, or MIB, is a plugin-based command dispatcher and event emitter. MIB dispatches commands by delegating them to plugins. [This blog post][dispatcherpatternpost] gives a good overview of the command dispatcher pattern.\n\n**Goals**\n\n- A pattern for business logic with inversion of control and dependency injection\n- Easy communication between machines or processes\n- Reusable code (plugins)\n- Centralized error handling\n- Easy debugging\n\n## Deno import\n\n- **latest** - `import { Dispatcher } from \"https://gitlab.com/rhythnic/message-in-a-bottle/-/raw/master/src/mod.ts\"`\n- **versioned** - `import { Dispatcher } from \"https://gitlab.com/rhythnic/message-in-a-bottle/-/raw/VERSION/src/mod.ts\"`\n\n## NPM install\n\n`npm install message-in-a-bottle@next`\n\n## Usage\n\n```\nimport { Dispatcher } from 'message-in-a-bottle'\n\nclass UserRole {\n  load($, id) {\n    return $.db.users.get(id)\n  }\n}\n\nconst todoRole = {\n  async create($, todo) {\n    await $.do('user/load', todo.author).catch(err => {\n      throw new Error(`Invalid author ${todo.author}`)\n    })\n    await $.db.todos.put({ ...todo, id: new Date().toISOString() })\n  }\n}\n\nconst dispatcher = new Dispatcher()\ndispatcher.mergeContext({ db: myDbClient })\n\ndispatcher.use('user', new UserRole())\ndispatcher.use('todo', todoRole)\n\ndispatcher.on('error', err => {\n  console.error(err)\n})\n\nconst todo = {\n  status: 'INCOMPLETE',\n  text: 'Send invitations',\n  author: userId\n}\n\ndispatcher.do({ $command: 'todo/create', $catch: 'error' }, todo)\n```\n\n### Review\n\nIn the above code, there are 2 plugins, user and todo. Plugins can be for local code, like above,\nor they can be a transport plugin to send command and events to other machines/processes.\nThis design is heavily influenced by [Seneca][seneca], but MIB can be used in a server or in the browser.\n\nContext/dependencies can be added that are available globally, by calling the `mergeContext` command. The first\nargument of each command handler and event listener is a context object that has all added dependencies.\nThe context object's prototype is the dispatcher, so all dispatcher methods are available on that object too.\n\nCommands above are called in 2 different ways. Normally, you'll use the form `$.do('user/load', todo.author)`.\nIf you need to pass context or options, you can pass an object instead,\nsuch as `$.do({ $command: 'todo/create', $catch: 'error' }, todo)`. This example uses the `$catch` option,\nwhich catches any error and emits an event. The string \"error\" indicates that an \"error\" event\nshould be emitted.\n\n## Dispatcher API\n\n[Dispatcher API Documentation][dispatcher]\n\n## Plugins\n\nPlugins are objects that implement a simple interface so that the dispatcher can interact with it.\nIf there is an `initialize` method, it's called when the plugin is added.\nPlugins can also have a `defaultHandler` method which handles all commands for which the plugin\ndoesn't have a method matching the command string. Plugins are assigned a key. A command `user/load`\nwill look for a `user` plugin and call the `load` method on it. If there is no `load` method, the dispatcher\nwill call the `defaultHandler` method.\n\n### Included plugins\n\nMessage in a Bottle ships with these plugins.\n\n- [Logger][logger] - For logging\n- [MessageTransport][messagetransport] - For connecting dispatchers over a message protocol such as web sockets\n\n## LICENSE\n\nMIT license, Copyright Nicholas Baroni 2020\n\n[dispatcher]: ./docs/dispatcher.md\n[messagetransport]: ./docs/message-transport.md\n[logger]: ./docs/logger.md\n[seneca]: https://senecajs.org/\n[dispatcherpatternpost]: https://olvlvl.com/2018-04-command-dispatcher-pattern\n","readmeFilename":"README.md","_id":"message-in-a-bottle@3.0.0-alpha.4","_nodeVersion":"14.9.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-q2mnBNYX/xWBNNTWPyyysWDUkSb2qCwNndzseuuTQy/D9jNKpnaZ8idi9Qh5dmJqq1nWNHSWZNSCurL8zs5ckA==","shasum":"9449d2e8e33dab84faf64f56675182e4ced1fd44","tarball":"https://registry.npmjs.org/message-in-a-bottle/-/message-in-a-bottle-3.0.0-alpha.4.tgz","fileCount":10,"unpackedSize":16599,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTNmvCRA9TVsSAnZWagAAqQAP/RJokeZmIy4Ouk3Tdp/B\n7nndt9DZO1PdfyYW+PqQwCq73ZnQBzQqmDtw12duWP0cbX4Jz2o1KjUaaMqO\nKn3IG2ts8jLZm8JmLYhSefF518BYkLsa06jXttkh2+TEapkz59gNwBDKMWo6\nLlQV9xTAn/0VH91UV39yvYXfkqQ/msq3fiHTlPDz5isfQfepTHoVLft/viWq\nPLGBe8CC8ycBT9lOabmRa/C57n9YAylVGssvT1/uUlUJ4psY5huA8MUInAtl\n5w7eg6JHCQPvvjSddrfbnrvdGKcXW4PZU+9a1O4Aigq0ih9u/gNfzP3kjryL\ncn7jqR3KPZL0BvDLTS6Akd/GP9fEY/ED7R1qxRp0Au075tASSvM3V8hUSYDS\na6+yjv1HB+KKwDU2hzvh67dyIC3M4YNIl9lTDdnFCCIhCYO+U+LWteoeA+oI\nMnpD1GwjoA7HzANgUOnYAhVsSDCyfMEyVGWsWyyHoY2XbBB+LY/IWHEDwfFF\nAeFNLZEU4E0C4YoyU2xXdlJ997aspU5g8QXIXg5jSqcxYBUWsglD1QEIZFWu\nWgd/2yVdV9PkWwYNeyFHeHCQEtEUs7PARFAi+2hNH/Uk1LNhH3WBO85q4eRY\naXDjZEcO4hDKDnVdjmP+jQT+lQz6SntBbwooWR/z9+1mUZ8+lrb2+FO6MMYP\nIetp\r\n=/Ub8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCx7/oRRt5gnSt/sc2PAP5jbwBbBTKwExBW6sZ/h1saFAIgCfCAFVftxNgB3wz/RkMt8VgPmbfPY8iOp+td+fbVU0Q="}]},"maintainers":[{"name":"rhythnic","email":"nicholasbaroni@gmail.com"}],"_npmUser":{"name":"rhythnic","email":"nicholasbaroni@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/message-in-a-bottle_3.0.0-alpha.4_1598871982852_0.4326357128798044"},"_hasShrinkwrap":false}},"time":{"created":"2020-01-08T19:30:13.862Z","0.0.1":"2020-01-08T19:30:14.245Z","modified":"2022-05-09T04:46:07.196Z","0.0.2":"2020-01-08T21:46:33.117Z","0.0.5":"2020-01-28T21:11:58.136Z","0.0.6":"2020-01-28T21:27:56.349Z","0.0.7":"2020-02-03T17:57:35.333Z","0.1.1":"2020-02-25T19:58:43.858Z","1.0.0":"2020-02-26T19:27:07.343Z","2.0.0-alpha.1":"2020-06-10T18:07:44.893Z","2.0.0-alpha.2":"2020-06-10T19:59:48.811Z","2.0.0-alpha.3":"2020-06-19T03:23:07.838Z","2.0.0":"2020-06-19T03:30:59.281Z","2.0.1":"2020-06-19T03:32:14.219Z","2.0.2":"2020-06-25T03:11:52.529Z","2.1.0":"2020-06-29T15:57:30.500Z","2.1.1":"2020-07-06T17:58:19.955Z","2.1.3":"2020-07-06T18:05:43.125Z","2.2.0":"2020-07-13T14:36:04.418Z","3.0.0-alpha.1":"2020-08-26T02:48:53.674Z","3.0.0-alpha.2":"2020-08-27T12:33:40.237Z","2.2.1":"2020-08-28T19:27:27.628Z","3.0.0-alpha.3":"2020-08-31T03:45:39.713Z","3.0.0-alpha.4":"2020-08-31T11:06:22.966Z"},"maintainers":[{"email":"nicholasbaroni@gmail.com","name":"nbaroni"}],"description":"A command dispatching extension of Node's EventEmitter with a plugin system.","keywords":["JavaScript","Node","Dependency Injection","Inversion of Control"],"repository":{"type":"git","url":"git+ssh://git@gitlab.com/rhythnic/message-in-a-bottle.git"},"author":{"name":"Nick Baroni"},"license":"MIT","readme":"","readmeFilename":"","homepage":"https://gitlab.com/rhythnic/message-in-a-bottle#readme","bugs":{"url":"https://gitlab.com/rhythnic/message-in-a-bottle/issues"}}