{"_id":"direape","_rev":"42-30b7e290465ab2003308661a0e6fcaca","name":"direape","description":"Distributed Reactive App Environment","dist-tags":{"latest":"0.2.16"},"versions":{"0.0.1":{"name":"direape","version":"0.0.1","description":"Distributed Reactive App Environment","main":"main.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"3ed8ce4d610a7d58df9e7129972b5eb46c8fa121","_id":"direape@0.0.1","_shasum":"ea3d8baba57f73efbbc4cc972fe70051c2a8a0d8","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"ea3d8baba57f73efbbc4cc972fe70051c2a8a0d8","tarball":"https://registry.npmjs.org/direape/-/direape-0.0.1.tgz","integrity":"sha512-YBAkO98ZIWbZeb6H1HnpKmDi1WmkvrFIbse1DMRjr4TzlMOJyEad+CyjG+BfEqqMslvgCnKTAs/D2Zx+xT/3UQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDMk2nP5cij8VD0AgeENL2TOOFH9xf2UkGMb4tEFhuwMAiBwc27jw6owxtVyR/8qYo/1cTlM+btemw3aSCi8yChuAg=="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.0.1.tgz_1484144614560_0.7510787048377097"}},"0.0.2":{"name":"direape","version":"0.0.2","description":"Distributed Reactive App Environment","main":"main.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"c7530348c292c7426c108dcb22dcece74a91ae32","_id":"direape@0.0.2","_shasum":"2e25555adf129a17bcc720b3ee8b057c56c0ecf5","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"2e25555adf129a17bcc720b3ee8b057c56c0ecf5","tarball":"https://registry.npmjs.org/direape/-/direape-0.0.2.tgz","integrity":"sha512-4/hcG/0/tXK/PkiPwAK0aWHIjoCn3kZFeJ2GWy9KjnFZ6XtMc8IcPoU2yczYK1K6WmKpdNW1g31Ydk0O24gpng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/jKjr/eN/PPcgCopvnDnGhwYi1tYWwZyLJjFPytEEBAIhAOiTfSeYadrwkim2we1nlNKuP6IiU4Ey46krFpgC7l9U"}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.0.2.tgz_1484146515973_0.6051471568644047"}},"0.0.3":{"name":"direape","version":"0.0.3","description":"Distributed Reactive App Environment","main":"main.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"332ce5aafdf83a11f5105b99451e879626ffe1a9","_id":"direape@0.0.3","_shasum":"40a05537d39adbe19a24101d9682f3ed58c4e6b9","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"40a05537d39adbe19a24101d9682f3ed58c4e6b9","tarball":"https://registry.npmjs.org/direape/-/direape-0.0.3.tgz","integrity":"sha512-zr/6YRxA3TueGa1FKoz3qo05wVIsXyhVrI9n37GFyO9OxKcHzrObDWTQZUJ87zeGHdrwcE3JlGu1Vn8to/FGKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG5DM+ipEm6sJfOQM7CB4tOekKGT7JEKOv5Mw0+yidLGAiB4DM3nD424T1YFfoB/nVM99fGUI66sFQ14Em6okbjeYQ=="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.0.3.tgz_1484157756086_0.561730153625831"}},"0.0.4":{"name":"direape","version":"0.0.4","description":"Distributed Reactive App Environment","main":"main.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"74289ab685a6b4204eb7b28a538bc4f0f3b6dd36","_id":"direape@0.0.4","_shasum":"1c07c90c3a4a997398eafd66be73a0cc7e08e431","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"1c07c90c3a4a997398eafd66be73a0cc7e08e431","tarball":"https://registry.npmjs.org/direape/-/direape-0.0.4.tgz","integrity":"sha512-5AQvnnS5anlYSq3WA5St+HLiXRrNDNOztbTS8XTssLpfnbUoGmT4wo9RLn71XUrjSGfpDZdTAPbWzRM5TLCkbQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDFzxXfjJQTNYphWtDAq+koc5RGV0pqvhHcY81prQQUgAiEAt5OjsFigkgeGuiPNvDnPnP8Lcnl0U71fWzISmgnLgyM="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.0.4.tgz_1484160917759_0.9980953831691295"}},"0.0.5":{"name":"direape","version":"0.0.5","description":"Distributed Reactive App Environment","main":"main.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"d48d52c6c595e734ad49be923c76af3e93305abf","_id":"direape@0.0.5","_shasum":"4a18b06b31d1b74a3d4bbf114f6d3d36c54ee7ca","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"4a18b06b31d1b74a3d4bbf114f6d3d36c54ee7ca","tarball":"https://registry.npmjs.org/direape/-/direape-0.0.5.tgz","integrity":"sha512-59f08pyBgN9ETYecjSqQ9mnBtgsc+ZU0yxBDFzP4IhbuoqcnfgxIwBEceYxOiKDm/pHC/Avdu5WBNlzXX8C3Yg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID/OuXSkvoIpJvw3lE+Jfgas8D4gxikR78oIOEM9wIkGAiEAx70cEeJwp0Wpmdnjd3Whf/OsnJlhtxxzc9YTW33IHE4="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.0.5.tgz_1484165194111_0.43788330792449415"}},"0.1.0":{"name":"direape","version":"0.1.0","description":"Distributed Reactive App Environment","main":"main.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"c687fae6caa8870988bf7a6ee2b78eb8521e7db1","_id":"direape@0.1.0","_shasum":"c293d08126868c3cd0e23d473d1adfa9c4eb192f","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"c293d08126868c3cd0e23d473d1adfa9c4eb192f","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.0.tgz","integrity":"sha512-lPFbjnDaPVEsgwuuowTJh/yR/K9MZk7hybkUoCYItyUKgGTjebvKVztzfJsMBpVWvvvubBcRPkLVSIC7uEyvWw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICgCiT5HJ5vFGrgWpedebSCqOr6fPFDioiYzGnMDIHYgAiAMkn/Z2IriqSp4UcAFi9CTvgYQ0omyaY4sdAwEGBRsuw=="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.1.0.tgz_1484638043528_0.9423507624305785"}},"0.1.1":{"name":"direape","version":"0.1.1","description":"Distributed Reactive App Environment","main":"main.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"a187461d22a8429de4f4143253c593273cf47609","_id":"direape@0.1.1","_shasum":"230cb40543735d14a4006a4e539bc8d3d2b990c0","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"230cb40543735d14a4006a4e539bc8d3d2b990c0","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.1.tgz","integrity":"sha512-81ih+Rob3HMY8N7sg6RvHi0NRqtsTwy6DViHaFvDPUKk943nYNO56SGOwT2DYPYd4LDK4L9tFRvyBlaOOrjvDw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIzfcrGwZxh1eVEqDCxB3boRttzIs07POZ3sIhLmsetAIgECcMJmfSOFnhpUxj7IpW1WHyzPEAYFUu1dsJa7eOck0="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.1.1.tgz_1484639228797_0.24694165564142168"}},"0.1.2":{"name":"direape","version":"0.1.2","description":"Distributed Reactive App Environment","main":"main.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"5e09b4820eec9da2505395831715a2d39b22b478","_id":"direape@0.1.2","_shasum":"9b1636ed4aea315ad355284949814044803083b8","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"9b1636ed4aea315ad355284949814044803083b8","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.2.tgz","integrity":"sha512-Oj7NCblcpE9EChv0c6KR0CqzxEHI+yDsHEXfSyLKNX8K34lfUarORQn5caXe8lXYMCeMe20WwowccH0X8I0bPg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB72viaWGWDN7DSv9YUEZTGYVxlP30X3+K3Gy/mlOyfWAiEAzjYyLSAC42bwjvp74+XIT1DxX1vBzqgXVLzWXYWqbbQ="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.1.2.tgz_1484639710249_0.646833980223164"}},"0.1.3":{"name":"direape","version":"0.1.3","description":"Distributed Reactive App Environment","main":"main.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"17a90c7470d1ce7c7516ff9cd6fd2134d2eab39f","_id":"direape@0.1.3","_shasum":"1f02647bcd0bf95a82c2f2906535852586453aae","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"1f02647bcd0bf95a82c2f2906535852586453aae","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.3.tgz","integrity":"sha512-7fzshYaW8i2wKsDe2ASBZu0CiqnfvOsvPrjEMCfwnBQrTwqXKN0HaeHZU2sDSWMM8CSOUXS2EEfMu6oE20o3iw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDr1IUH52A6hIptDE2VHVS0h0Dj/x8YYI4GoduEWYSVBQIgAeORnrZm8fgdZrTe6D+ybBcrtsqpTvicf9/DxhAFKAg="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.1.3.tgz_1484639973523_0.13922849111258984"}},"0.1.4":{"name":"direape","version":"0.1.4","description":"Distributed Reactive App Environment","main":"main.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"729e20c8714e782ecd192dc3383be08c50f7f809","_id":"direape@0.1.4","_shasum":"962346c8605053a0eb86b2b4a879dfa4b78115b8","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"962346c8605053a0eb86b2b4a879dfa4b78115b8","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.4.tgz","integrity":"sha512-DBYgirCOSc1XsGPYoiZwu23SHfFYMON8lGJRictTdhgDffsk4GVbazFwu8gt90DHyAqeFL1JstrLbqZRbee6iQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgKDfii/ecQkUPTKFglxaiJl4B7ozcEcfz3VB9AE2d8gIhAIUGCJgeLK6MVpNFgNPCrTxR7qqMd1vv7jcoaZ2XvCVP"}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.1.4.tgz_1484643811621_0.8832027949392796"}},"0.1.5":{"name":"direape","version":"0.1.5","description":"Distributed Reactive App Environment","main":"main.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"6a3f4cd0e57015446fafc3a55165042b33bb0495","_id":"direape@0.1.5","_shasum":"298da77fc07a58db4419f8767aacfa92a6f30cc8","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"298da77fc07a58db4419f8767aacfa92a6f30cc8","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.5.tgz","integrity":"sha512-0s2qi9ENbjJpBLOEHAk1KFPq1QE/G/+C4syNs6wEWDk+xS6UE0agb78zsK3MBvSJHETotgskSXWs4gsbJQANvw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFNHGeFlLs5/tTYBOWJLHwNe+9E65LFhxxi3EL2BvUmeAiEAwYiyAdBcmHsrwMgkcZgtRj/Cs7/ndI62ojFCxuhFoeg="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.1.5.tgz_1484645599116_0.3796362916473299"}},"0.1.6":{"name":"direape","version":"0.1.6","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"8a0420e18a47ab17bf9eba7cbbdaadd534f911a1","_id":"direape@0.1.6","_shasum":"ab1e4709bfc357b6db84c3cb9e9d3f4f5971569b","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"ab1e4709bfc357b6db84c3cb9e9d3f4f5971569b","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.6.tgz","integrity":"sha512-kruAD6WVuPHPuMNWSjnONXX32L0fdwX1ycUWFWbaLGaeQfO1SJ+I1YnCBDq5qUrhguIb8ais95jIGzTIuelh0A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICwoi2BHBFFpcbX3BrhHymiv/8L3AeDFjqhfaLWPdl/IAiEAonv9vsmNrN2diGUKhq/AM2THEatHOVwZNnSBK1hzh+0="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.1.6.tgz_1485420039962_0.9652261578012258"}},"0.1.7":{"name":"direape","version":"0.1.7","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"28a0cecf9953c2333c33e31ca4c9e048f1a0b988","_id":"direape@0.1.7","_shasum":"bb5e5c7c42cd72c6f3a9468f1d34764579378c20","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"bb5e5c7c42cd72c6f3a9468f1d34764579378c20","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.7.tgz","integrity":"sha512-q/Fg7MhE6umreZ+ob64SH4tAPIU+Ctdon3Ly0yiFc8xB6ASDDMgKj4hL1uUmqjTxiOx6CYUJHG2BwJQcTM9tkw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUZPPuw3iP1TQWXLhDUAI9etK5OBwvb0J93RvdYzKDxwIgEDkdb+faS/KOt7Otpvl5QFjACgRPTR0Rdm+SUGn61uo="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.1.7.tgz_1485423426088_0.6902445813175291"}},"0.1.8":{"name":"direape","version":"0.1.8","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"7c67a490b953bc87eccee8bee72413ce0bd91cb2","_id":"direape@0.1.8","_shasum":"59c8a74301f2440b5a9b6b65b6cea1939b1118b5","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"59c8a74301f2440b5a9b6b65b6cea1939b1118b5","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.8.tgz","integrity":"sha512-ZI1rggmudOFiT1O5KC3bGRzaJ5f9s2Kn0yAdlaveBaa+iES4rC8lw8jJKkFD2V/BFJ4OMrNnWJby+04P9b2oHg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSZuZRyORz2p2Z+wuSCbafNAdEUhT/J+m+Uk7tYyIOBQIhAKuC7IEM38TGs3/e866iS973pUS9Kh2xMWowEKGX6j3n"}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.1.8.tgz_1485424185871_0.28724297299049795"}},"0.1.9":{"name":"direape","version":"0.1.9","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"b942a58967b3266317b0ed06934c04756df2b51e","_id":"direape@0.1.9","_shasum":"dcdb1a3e67e924ed3a5ea565e1203c3c2116d5ab","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"dcdb1a3e67e924ed3a5ea565e1203c3c2116d5ab","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.9.tgz","integrity":"sha512-nRhMt0KLpSsYT2ASrYU5jxQtBmCiopBQpQNNDPDdAdyQitoYyCUVGNcjb9lGbLnMkSSnk6MkCa0iWjCZtitw1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAe72gjFok3KbMMxlQCjZQW1ZktGBzDvLEv6bDhUGNkiAiEAncyvkUkhqRiV8qR8Jgr/KOcnfb5KkXq/Ti3b6cQDeCs="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.1.9.tgz_1485499470457_0.26598845911212265"}},"0.1.10":{"name":"direape","version":"0.1.10","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"61fce3dfa75d2912c8d1519ba38a772a884bc717","_id":"direape@0.1.10","_shasum":"af0927c2e1a1f6a4f18c3dae49b67221e2401d79","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"af0927c2e1a1f6a4f18c3dae49b67221e2401d79","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.10.tgz","integrity":"sha512-LwjdiyijPKiqI3mOIaPyHJQNRD017vcy7Fcj7NKEM8HKDZ1CYFOzASbh5mNG/GLWr1/s2a+kcvAU6s2wIariRg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEiRSvZja7hBzevNxugrXWea3zv387c+l/PcbkXCXOXqAiBf8NvErI9J7Kq2LJzw2c/phBRmzQ6QfZ+yUs12qssW4w=="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.1.10.tgz_1485599807239_0.8884199936874211"}},"0.1.11":{"name":"direape","version":"0.1.11","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"909a5e035a01f6caa0c37b77a3b921456c38dfaf","_id":"direape@0.1.11","_shasum":"1aa88e481f0e16a5bc6645d7923167815e89402f","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"1aa88e481f0e16a5bc6645d7923167815e89402f","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.11.tgz","integrity":"sha512-5Boz/0dNhb6lzmoTqXrzHowcbXid1ICW20ljXRX2lJZzDSHeXWo9gzcihuIfTOMy/UwVu3GpALlvQ0ZbN7N4PA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEdsUj/iRWX3y+dp3x9WcmD++0Afm0uQGxQvyzJteQAkAiEA4zlGJIap/9lHe+x/FXmAsI0lYlF3VAINBupdZ5D8jkA="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.1.11.tgz_1485600201978_0.7579406294971704"}},"0.1.12":{"name":"direape","version":"0.1.12","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"6f23e40bc68ae305d81a38ec8d6afac19cfcf579","_id":"direape@0.1.12","_shasum":"6fe4cbc38233e3b9aa52d1373e878ad3b60fc203","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"6fe4cbc38233e3b9aa52d1373e878ad3b60fc203","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.12.tgz","integrity":"sha512-rbIrrEWpoSnKmM8FYhCR8Dzb23h8Rx8B7sGNJvmOnQQTIdd43s5wSo6GAv9RUyzNdTMjjMgOELcig6tNc2Xycg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0WcoCVZZCFIuzxBno7k2sugccvx5kC6/wRC3m9nJ3UgIhALJlhdAPEH+B13+157Ymyl64eDKLpd+frlRUe/PuwtR3"}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.1.12.tgz_1485787042155_0.2874027104116976"}},"0.1.13":{"name":"direape","version":"0.1.13","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"e4780daf754785120000f7dcd1070d128caf873b","_id":"direape@0.1.13","_shasum":"51551e865ce11c3542f545da04ffcdb5b925ff1d","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"51551e865ce11c3542f545da04ffcdb5b925ff1d","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.13.tgz","integrity":"sha512-XvlQsNc7NNOiVqSpHahsYhiGmoTjYASxe6qofVAyyn5XJMdghxgXSmqklMShT7mRlPHNK9zTPKkm2IGY7mbrxA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsOU1/a1jD7svb4q0L9EultLEdPnPPif1Uj4uz/gUqbQIhAIq+5w8CI/8V9gL86THe4HvZWtFcG8V2Cl3KTV2dsPjd"}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.1.13.tgz_1485803756200_0.2948713779915124"}},"0.1.14":{"name":"direape","version":"0.1.14","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"42ab899526e4987808edae62e329de44939cc92d","_id":"direape@0.1.14","_shasum":"89f4b6da8a5bcbe0a7d28388cc3120666b14eafa","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"89f4b6da8a5bcbe0a7d28388cc3120666b14eafa","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.14.tgz","integrity":"sha512-Fgx9+XDtkUu4dcY7cwB1Aj9YFofSeo5rcSv6+8/44Ub0yXXOz4kVoDEUD7H9YzG3QAJhfBJTVQRdjVQ2PhG9FA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID8doA2UYnmjw0iDUvjPWwU2G21ROswJgtSE6iqb1FpIAiEA9m7d6rfvXJ8GBmwO56iNAGaQvo63UykZQa3T1CzlRvk="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.1.14.tgz_1485806156927_0.952193956123665"}},"0.1.15":{"name":"direape","version":"0.1.15","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"dfe4d20410012b3fc0cae0df4d4213544d6c32e6","_id":"direape@0.1.15","_shasum":"4a6800694aca39c8313d3f784d886403e529990b","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"4a6800694aca39c8313d3f784d886403e529990b","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.15.tgz","integrity":"sha512-2mQrXLNm7qb1J7l2RJnJnjqA8/VrdENaj1aWxeKzwZPeI0gQOxDIu9ZXtSauzG75f1iPSfBpmDmoBmx0KnlOvQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOONyl3uT9LxljlbHeLsrPx8410rO5qkZgxSPzyJpp2QIgdw1JudCs6UBj2Ym4CUuY60lXiAdzgSeZMdUZ0OPSmjc="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.1.15.tgz_1486007039138_0.7729327878914773"}},"0.1.16":{"name":"direape","version":"0.1.16","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"b2a7074b51659d59d130e6bd7881e4efdf6b1f7e","_id":"direape@0.1.16","_shasum":"bc3ec3aa89046daec6469bdfe7d11230e2436279","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"bc3ec3aa89046daec6469bdfe7d11230e2436279","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.16.tgz","integrity":"sha512-s92Wxe7kYc+PnDKTQLOqMz5J4Spi41l//PMROS1qJrG7aAG04m0aWaJcs3KQjGsLelWQNEvywDameoCS8G/NhA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG2xuSYXr+W/M//7C6ALEB8JutF7StcnOskZMHb8Q3ltAiEAqaUWUG3jkRt0av7ywNBJpCyQ5pATgZuuSArUwYmzYiA="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.1.16.tgz_1486040148109_0.6133530191145837"}},"0.1.17":{"name":"direape","version":"0.1.17","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"bb314531c31d8ea4c8c5faa87eecbf1ce7587f84","_id":"direape@0.1.17","_shasum":"7de4171e99a643f5fd2c34c967c8c689929e2391","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"7de4171e99a643f5fd2c34c967c8c689929e2391","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.17.tgz","integrity":"sha512-TZ/3lt2HzMQz51P9CxT+lhnRQ91yEerKUUukdNIVk6mgneVfnyaauR4ay0PckvcYRV1qtL59YDcTc4SUs5+giA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhRL7WPWY2gidHriFl+bWvGD4xU7zpwdnDZUNe/HAh2gIgQMkQWEsgEWrJ3F1u6/wpeiz/8BZAgdUrHJdc68owAsc="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.1.17.tgz_1486138053858_0.7547051140572876"}},"0.1.18":{"name":"direape","version":"0.1.18","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"14318618a7eb1a95a7375a979bc7154050084e8f","_id":"direape@0.1.18","_shasum":"f74833cb3b6e5ed1bc7b38857c5dc96f32fcd3aa","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"f74833cb3b6e5ed1bc7b38857c5dc96f32fcd3aa","tarball":"https://registry.npmjs.org/direape/-/direape-0.1.18.tgz","integrity":"sha512-801KwHq0e9dpc3CiD37WKrHPYVfo4rtpewmO9rstU/aISyAEYlinmCRuSUbLYrdNddTl4tqWnIrAcaCn7oiczQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGUOQlqZ+iq1MrizXNyLLMvS3pvV27WFSZ8nD9S7Ez0VAiBQxPRdk2ITThOILWryU3aiElebpkhpm9yOsNrXSSzQ3Q=="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.1.18.tgz_1486533589999_0.47231370373629034"}},"0.2.0":{"name":"direape","version":"0.2.0","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"true"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","gitHead":"1863cb60a8d964ed042cb680f33cff00bd9c55a4","_id":"direape@0.2.0","_shasum":"9cb770df73c1d7a996d510a44ffba2afa27583d6","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"9cb770df73c1d7a996d510a44ffba2afa27583d6","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.0.tgz","integrity":"sha512-kZ4IbzA2+SnH1PZTzJUbPpnx2tQtCC/T6guatrLqlxAw9fdqjAx2ta9qXzzgyVzTd1VYzpVCcccFIdPXreiFeA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCE75PwDnVGBWVLIulY8DSSI+ZvIcjHSBP1WvGt1/JN9gIhAKqWaBrfXFVdyhVeRvIIB4mIefG0Uo1LYz+oTl4256Db"}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.2.0.tgz_1486630404478_0.7718417248688638"}},"0.2.1":{"name":"direape","version":"0.2.1","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"gitHead":"a8c317b788ebb522b7b49591c63c1e86b99628f4","_id":"direape@0.2.1","_shasum":"e74773b2b2855fbd7c1cb0ec9de24866abe799a4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.5.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"e74773b2b2855fbd7c1cb0ec9de24866abe799a4","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.1.tgz","integrity":"sha512-TgkAEu+HH6O72itccE8F/c9kESVGCncaUz64Bp0PD1AKK2VWSpYkOjxQfOeF1XlVaVQJJgK2wrh4bl85vYqM1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwawZZJBNrFGSYKp/zBNcJ1nzlLvXQPy5jpYz2iP5y+gIgZv4WVdMilohvFiv3quIQ9LRAkUsegb0fRLVk2KQgtMA="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.2.1.tgz_1487047145728_0.41915006074123085"}},"0.2.2":{"name":"direape","version":"0.2.2","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"gitHead":"c158f2c9946b370f457faa027dba842a94e63a6e","_id":"direape@0.2.2","_shasum":"898b5523fcc82f9842755f154f437129ab6a0ef9","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.5.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"898b5523fcc82f9842755f154f437129ab6a0ef9","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.2.tgz","integrity":"sha512-fbG76DyGaqo+8oPjD01Dvn1xqjfIWdAydeoBiEyfHFQjTAUweZYBwkOo3Acb3F0/UYoS5qNKp1f+NJiwww58gw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1g8Bx/okC3jthIpJZ1xnDU395VXlr9yjh+4s1ztTnWwIgcrhJ8CDHjjdK9zKTfVQTw6m1WjY/yGMMiANou2V51og="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.2.2.tgz_1487075359063_0.9520047984551638"}},"0.2.4":{"name":"direape","version":"0.2.4","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"gitHead":"ee8f731a76fcebe44b5b023559a6728ad0a01aac","_id":"direape@0.2.4","_shasum":"0f6982aeac98a10b20bb643f46be221d7280e6c1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.5.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"0f6982aeac98a10b20bb643f46be221d7280e6c1","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.4.tgz","integrity":"sha512-n+bCYDwIlzpk4sHGTsO1doreBrwTK5w9LFq4zPpkI+AdbeYEkKpv8FA1vZzVp5QDwHaNkFyZZ02ZPryU7nNjkA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFpeWGO3Rdf38pngrYVdAQc37jXdnmmdOabf3atCEhsIAiEA+Bi5jISu89v5FU+b8zjodKrdI8uUg32UMRHPUWcc66I="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.2.4.tgz_1487076127309_0.5056612144690007"}},"0.2.5":{"name":"direape","version":"0.2.5","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"gitHead":"f8fe857a6a6293b0e35f2162b9a18c9e19e1fc01","_id":"direape@0.2.5","_shasum":"8a0106ba8bff26b58e538871b775b05e1c95220e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.5.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"8a0106ba8bff26b58e538871b775b05e1c95220e","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.5.tgz","integrity":"sha512-l0/leKUWQew43cIRSzWAxgxaIsDY11Fa2tjKljmLXk/FMiz1/wQnM54xX1EpNXVGr3rArh7AibeRAetDIgeakQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEOEPSe/t2k9+S/YKVN+pbiWczQGI3EvwbnmsvsJPRAzAiBA6RLkJ6MXdX0OMlutA2CDAmIsrNAii/Hkc22XgZtbYg=="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.2.5.tgz_1487077735704_0.009348379913717508"}},"0.2.6":{"name":"direape","version":"0.2.6","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"devDependencies":{"eslint":"^3.15.0","live-server":"^1.2.0","uglify-js-harmony":"^2.6.2"},"gitHead":"d4afa624f3be800c6bcbd19a1abd1d18caeb6167","_id":"direape@0.2.6","_shasum":"f2dac4d9523bc8f567650aa9a35b9d81d9f58d1e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.5.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"f2dac4d9523bc8f567650aa9a35b9d81d9f58d1e","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.6.tgz","integrity":"sha512-7Zul38ACOJgVtZ3BdKkgtnRHrgKI+2WWFdshdGRRQ28dfnyFNSZnUx5uhAv8dGdejmHNwG1C9xOSmm23A4XIkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5o9PiBF/Z6ZdnNFlvJ1RnC65clKmCb1uuYUz2+I3YGgIgcX1Pu853CvJI2PLzvNPWqBRD6ZRk4XWIrAS6QCufQ20="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.2.6.tgz_1487153115308_0.7457425314933062"}},"0.2.7":{"name":"direape","version":"0.2.7","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"devDependencies":{"eslint":"^3.15.0","live-server":"^1.2.0","uglify-js-harmony":"^2.6.2"},"gitHead":"aedd1a7a0715c5d7397907ca69e09eaff20ddb34","_id":"direape@0.2.7","_shasum":"6864007ca6360d02674ef038374278e13feac40d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.5.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"6864007ca6360d02674ef038374278e13feac40d","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.7.tgz","integrity":"sha512-ePDX00UcqQENco53uQic3hYFV5INWbKmVwvgZati3eQugbtDm9sF6t84hLeqVJa9W0oxg2E6hP4Vx7GLwyrybw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdQ11XqurFqxIsOXBfzwkJijf9oAvm8PBuloINFfdGKwIhAMoxh+KbAbKckeLWhFP9/OzCZ4ujdLadXuAmOUmrOIHb"}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.2.7.tgz_1487155562562_0.9582118655089289"}},"0.2.8":{"name":"direape","version":"0.2.8","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"devDependencies":{"eslint":"^3.15.0","live-server":"^1.2.0","uglify-js-harmony":"^2.6.2"},"gitHead":"a224dc5a82f1be6e69d5fe19e946672f1911acb9","_id":"direape@0.2.8","_shasum":"13180623b0bb8a739f031472e4ad167bf8a8e9ba","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.5.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"13180623b0bb8a739f031472e4ad167bf8a8e9ba","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.8.tgz","integrity":"sha512-WjhUdlb8QLRUaGCwKmDnlfy+Fqf/J5hLfXPnGs6JgmY/xBTSVUGbWRtZ/jcnhLWkwQEdSCFbjIr5nhC9VTON7w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFER71UL12TBBYAqrD9uvEQUODr2LZVMMG6GVe+vwLGCAiEAgHFsDZx8Axzt2LrXJyXKzhkMs+qi7KSKj2jzawN8wok="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.2.8.tgz_1487577676804_0.5749944110866636"}},"0.2.9":{"name":"direape","version":"0.2.9","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"devDependencies":{"eslint":"^3.15.0","live-server":"^1.2.0","uglify-js-harmony":"^2.6.2"},"gitHead":"96683ba6898c1e68cdc33d2f72051e9deb6aec46","_id":"direape@0.2.9","_shasum":"ca609b9e5667e74a17cbf88b22eaed07f3fa1a38","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.5.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"ca609b9e5667e74a17cbf88b22eaed07f3fa1a38","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.9.tgz","integrity":"sha512-NkMaqaiMVuTph+HNjLccp38qDxEtor/qVZDlMauIV04bLlmFG0k4Fi851nBGEz7xOqmxIgqpas/Ko5tXYZovcw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICxWieoZJAbbD3jk1tNEAQyvY5geL2eha6K5d1Npet3+AiATDhL9DR69j246eroCzcK1dM4mL2ZEtrpzYHS2rGawTw=="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.2.9.tgz_1487595079558_0.4881340661086142"}},"0.2.10":{"name":"direape","version":"0.2.10","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"devDependencies":{"eslint":"^3.15.0","live-server":"^1.2.0","uglify-js-harmony":"^2.6.2"},"gitHead":"1cec7af97fd70188d6396f8d90c0a075b4b29c10","_id":"direape@0.2.10","_shasum":"11b53e5c19a910bba4afb698fc71aa87f925f96d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.5.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"11b53e5c19a910bba4afb698fc71aa87f925f96d","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.10.tgz","integrity":"sha512-xtVYUTb/hmk30JkrI9XvjHbO/zO0vdCSFZ2Xgx0USSVRZTC7QI3Ycvfzax0qHqCRTWzfgI7j00MLu1nRBpPqkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnSRwj1C47qOp14UTJ+1ttbiOUxlINBRbCj5IwHb/n0gIhAMf5zCmMwWMu1KsCjzAR8fZPirZvWccfqIZn/J852Uwq"}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.2.10.tgz_1487602849839_0.5438653724268079"}},"0.2.11":{"name":"direape","version":"0.2.11","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"devDependencies":{"eslint":"^3.15.0","live-server":"^1.2.0","uglify-js-harmony":"^2.6.2"},"gitHead":"0642f71b2c084a7f95ae2919c3fbc3c0400f46ce","_id":"direape@0.2.11","_shasum":"84d3ceefb927382ec4fb98dd50d658a92464b1e1","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"84d3ceefb927382ec4fb98dd50d658a92464b1e1","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.11.tgz","integrity":"sha512-57w5Z/rYAEoVVMIjSCZFGLSE42OlRtI/1r+n43LW12oqd81fIaz2AIwId0euZdFQMi8K5YK1RLQyK0hC+bb60w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4kiCZ6SINtoQL8Sy7D0c4dffriIdGxj7+5SU00pERqQIhANDRnNdylYVQpFIUEAfX1/1pZ3F+alFPjSLa/zzawfvE"}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.2.11.tgz_1488370119045_0.22792584891431034"}},"0.2.12":{"name":"direape","version":"0.2.12","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"devDependencies":{"eslint":"^3.15.0","live-server":"^1.2.0","uglify-js-harmony":"^2.6.2"},"gitHead":"8d51a75c3585b946fa8ed5ada369436a40e1f8d8","_id":"direape@0.2.12","_shasum":"e24cb42aa1a6057e4bb0832f33d703eaa6910c6f","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"e24cb42aa1a6057e4bb0832f33d703eaa6910c6f","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.12.tgz","integrity":"sha512-n4LZ4T6ew/L45hiPoZ7BHA40naQzAQtKoSeZJXde6gDq8k3Hr4MVyXSD5KdrA2HlyhD8xGXLpyKX6/4SwjlNRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEtocr0m80Zn/GBZXPLjg01Chbl7/uUfw/295RjTm/CKAiEAkvdS+VyqHFIxoWjaeEGn9cFObLsAqDRNzlWlTPYYxN8="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.2.12.tgz_1488371252921_0.3522920133545995"}},"0.2.13":{"name":"direape","version":"0.2.13","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"devDependencies":{"eslint":"^3.15.0","live-server":"^1.2.0","uglify-js-harmony":"^2.6.2"},"gitHead":"16d169ec2ae129cc46ce8697047b63497e159fcc","_id":"direape@0.2.13","_shasum":"8a69ce6c9d389561217ad4e3892b2e635cb85fd4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"8a69ce6c9d389561217ad4e3892b2e635cb85fd4","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.13.tgz","integrity":"sha512-gv4NHhGYZbJfwE4Ni6QDKApn9HT8Vjitibu1Rz0AHd3d3YHRXaRCzewv2MNa256AUtteVnFKbwckKp7RmSBQ6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8nzyRhBS8Ur2xnludScjbf8HWbkvX4bnkRDdK3aUZ6AiAgBTpGDyoZ//MSUX1yVtGsTpVThFgizlhveZZzY6OF+Q=="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.2.13.tgz_1488385298378_0.23123314953409135"}},"0.2.14":{"name":"direape","version":"0.2.14","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"devDependencies":{"eslint":"^3.15.0","live-server":"^1.2.0","uglify-js-harmony":"^2.6.2"},"gitHead":"35b15683891593a56b0a082c917c960a77a929d1","_id":"direape@0.2.14","_shasum":"985f2baffffb26f5d47b806fba49a8b681289bb6","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"985f2baffffb26f5d47b806fba49a8b681289bb6","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.14.tgz","integrity":"sha512-5ydRhjElUmW9cv/N6lDVrUgzaCH5Cjgv/UOmgb4SfYxxSYT+vvrtgs/85cpm6nVRXtPHFj595w8WU2se2YKP9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFx5BfEunrwK9NMe3g1/UoCO8JP4fx0zKd8/P8X976CBAiEAuVmQiwgu73RemueCVIGa8DS4od3wvq6/bwUsJeZm0TQ="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.2.14.tgz_1488387500364_0.9467154594603926"}},"0.2.15":{"name":"direape","version":"0.2.15","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"devDependencies":{"eslint":"^3.15.0","live-server":"^1.2.0","uglify-js-harmony":"^2.6.2"},"gitHead":"1abe3e64e9045e4b63fdbf42aca339b4fb859192","_id":"direape@0.2.15","_shasum":"826d2780639dc1802685e78629295c4268ff4a46","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.0","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"826d2780639dc1802685e78629295c4268ff4a46","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.15.tgz","integrity":"sha512-vX4FgSnLFVJ0+EYfOpa88SM2vRoNqq4CHNg936uRCMboVPJes4eXKvLb3Rp2d9X1b8qz570cV/9PpPs6mKX3xg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRMgu5zpydXpw11aIXjLLzHMs5xnT/gN3YMVEOtuK7IwIgdkTLK/6TYxEE1vd/AwyCe/C/IodgzCvZ0a2fLb+KJxo="}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/direape-0.2.15.tgz_1488393442576_0.4254640524741262"}},"0.2.16":{"name":"direape","version":"0.2.16","description":"Distributed Reactive App Environment","main":"direape.js","scripts":{"test":"DIREAPE_DEV=true node direape.js test"},"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"keywords":[],"author":{"name":"RasmusErik / solsort.com"},"license":"GPL-3.0","bugs":{"url":"https://github.com/solsort/direape/issues"},"homepage":"http://direape.solsort.com","dependencies":{"express":"^4.14.1","request":"^2.79.0","ws":"^2.0.3"},"devDependencies":{"eslint":"^3.15.0","live-server":"^1.2.0","uglify-js-harmony":"^2.6.2"},"gitHead":"e2c735977d1686db6dec55895c6df45885695161","_id":"direape@0.2.16","_shasum":"fe67994159d1132aa4232603188497cde74f0731","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"solsort","email":"npmjs@solsort.com"},"dist":{"shasum":"fe67994159d1132aa4232603188497cde74f0731","tarball":"https://registry.npmjs.org/direape/-/direape-0.2.16.tgz","integrity":"sha512-v5KKtmwfy/Tcpo3aDx8YdpFn7MzB0Nfa2ZjXn0pvAz4tu7iiCQLNHJLOrLDutbrgZr1D8aVgA7fjhbTkqKflMw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCa1n2ttNTXBOGsRawCK02Hs0V3vgE6NlKUooIfvs3SlQIhAOdsXqHIF59tpxo6CunC/UbvunkgqhrQh3M05Cm7PRks"}]},"maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/direape-0.2.16.tgz_1488446007798_0.8998136920854449"}}},"readme":"<img src=https://direape.solsort.com/icon.png width=96 height=96 align=right>\n\n[![website](https://img.shields.io/badge/website-direape.solsort.com-blue.svg)](https://direape.solsort.com/)\n[![github](https://img.shields.io/badge/github-solsort/direape-blue.svg)](https://github.com/solsort/direape)\n[![codeclimate](https://img.shields.io/codeclimate/github/solsort/direape.svg)](https://codeclimate.com/github/solsort/direape)\n[![travis](https://img.shields.io/travis/solsort/direape.svg)](https://travis-ci.org/solsort/direape)\n[![npm](https://img.shields.io/npm/v/direape.svg)](https://www.npmjs.com/package/direape)\n\n# DireApe - Distributed App Environment\n\nDireape supplies:\n\n- message passing, locally and across network\n- creation/destruction of worker threads\n- simple nodejs message relay server\n- unit testing library\n- utility library\n\nRead latest documentation on [AppEdit](https://appedit.solsort.com/?page=read&github=solsort/direape).\n\nIt is fully self-contained and is the foundation for [REUN](https://appedit.solsort.com/?page=read&github=solsort/reun).\n    \n    (function() {\n      var da; setupModule();\n    \n      da.info = {\n        name: 'direape',\n        keywords: ['message passing', 'unit testing'],\n        platforms: ['nodejs', 'webworker', 'browser'],\n        github: 'solsort/direape'\n      };\n    \n## Message Passing\n\n### `pid`, `nid`\n\n`direape.pid` is id of the current process. `direape.nid` is the id of the main process on this computer/node.\n\nIn worker processes, these are set by the parent thread.\n\nSome of the code below is in progress. \nCryptographic ids will be used when it becomes more distributed.\n    \n      function initPid() {\n        if(!da.pid) {\n          if(!self.crypto && isNodeJs()) {\n            da._publicKey = Math.random().toString(); // TODO\n            da.pid = require('crypto')\n              .createHash('sha256')\n              .update(da._publicKey)\n              .digest('base64');\n          } else {\n            return da.pid || Promise.resolve()\n              .then(() => self.crypto.subtle ||\n                  (self.crypto.subtle = self.crypto.webkitSubtle))\n              .then(() => self.crypto.subtle.generateKey(\n                    {name: 'ECDSA', namedCurve: 'P-521'},\n                    true, ['sign', 'verify']))\n              .then(key => self.crypto.subtle.exportKey('spki', key.publicKey))\n              .then(spki => da._publicKey = spki)\n              .then(buf => self.crypto.subtle.digest('SHA-256', buf))\n              .then(buf => btoa(da.buf2ascii(buf)))\n              .then(base64 => da.pid = da.nid = base64)\n              .catch(e => {\n                da.pid = da.nid = 'local';\n              });\n          }\n        }\n      }\n    \n### `handle(name, fn, opt)`\n\nRegister a new message handler in the current thread, \ngiven the name of the mailbox. \nThe handler can be called across the network if `opt` is `{\"public\": true}`.\n\nThe handler function `fn`, gets called when a message arrives, \nwith the parameters passed in the message.\n    \n      da._handlers = da._handlers || new Map();\n      da.handle = (name, fn, opt) => {\n        if(!fn) {\n          da._handlers.delete(name);\n        }\n        da._handlers.set(name, Object.assign(opt || {}, {fn:fn}));\n      };\n    \n### `call(pid, name, args...)`\n\nCall a (remote) function, given the process id, and the handler name. \nWill return a promise of a result (that will time out if no result arrive.\n\n      da.call = function(pid, name) {\n        return new Promise((resolve, reject) =>\n            send({\n              dstPid: pid,\n              dstName: name,\n              srcPid: da.pid,\n              srcName: makeCallbackHandler(resolve, reject),\n              data: da.slice(arguments, 2)\n            }));\n      };\n    \n### `emit(pid, name, args...)`\n\nEmit a message to a remote handler, - similar to `call`, \nexcept that it will not send a result back.\n    \n      da.emit = function(pid, name) {\n        send({\n          dstPid: pid,\n          dstName: name,\n          data: da.slice(arguments, 2)\n        });\n      };\n    \n### Implementation details\n\n      da._messageQueue = [];\n      var postmanScheduled = false;\n      var callTimeout = 10000;\n    \n      function makeCallbackHandler(resolve, reject) {\n        var name = 'callback' + Math.random().toString().slice(2);\n        var timeout = setTimeout(\n            () => handler(null, 'call timeout'),\n            callTimeout);\n    \n        function handler(result, error) {\n          clearTimeout(timeout);\n          da.handle(name, null);\n          if(error) {\n            reject(error);\n          } else {\n            resolve(result);\n          }\n        }\n    \n        da.handle(name, handler, {public: true});\n        return name;\n      }\n    \n      function send(msg) {\n        da._messageQueue.push(msg);\n        schedulePostman();\n      }\n    \n      function schedulePostman() {\n        if(!postmanScheduled) {\n          da.nextTick(postman);\n          postmanScheduled = true;\n        }\n      }\n    \n      function postman() {\n        postmanScheduled = false;\n        var messages = da._messageQueue;\n        da._messageQueue = [];\n        for(var i = 0; i < messages.length; ++i) {\n          processMessage(messages[i]);\n        }\n      }\n    \n      function processMessage(msg) {\n        if(msg.dstPid === da.pid) {\n          processLocalMessage(msg);\n        } else {\n          relay(msg);\n        }\n      }\n    \n      function processLocalMessage(msg) {\n        var result;\n        var handler = da._handlers.get(msg.dstName) || {};\n    \n        if(msg.external && ! handler.public) {\n          return sendReply(msg, [null, 'no such public function']);\n        }\n    \n        var fn = handler.fn;\n        if(!fn) {\n          console.log('no such function:', msg.dstName);\n          return sendReply(msg, [null, 'no such function']);\n        }\n    \n        Promise.resolve(fn.apply(msg, msg.data))\n          .then(result => sendReply(msg, [result]))\n          .catch(e => sendReply(msg, [null, e]));\n      }\n    \n      function sendReply(msg, data) {\n        if(msg.srcPid !== undefined && msg.srcName !== undefined) {\n          send({\n            dstPid: msg.srcPid,\n            dstName: msg.srcName,\n            data: data\n          });\n        }\n      }\n    \n      da.test('message passing', () => {\n        da.handle('da:square', i => i*i);\n        return da.call(da.pid, 'da:square', 9)\n          .then(i => da.assertEquals(i, 81));\n      });\n    \n## Workers\n\nOnly available in browser main thread.\n\n### `spawn()`\n\nCreate a new worker thread.\n\nReturns a promise of the process id of the new thread. \nCode can then be loaded using [reun](https://appedit.solsort.com/?page=read&github=reun),\nwhich exposes `reun:require` and `reun:eval`.\n    \n      if(isBrowser()) {\n        da._children = da._children || new Map();\n    \n        da.spawn = () => new Promise((resolve, reject) => {\n          loadWorkerSource().then(workerSource => {\n    \n            var childPid = da.pid + Math.random().toString(36).slice(2,12);\n            workerSource = `\n              self.direape = {\n                pid: '${childPid}',\n                nid: '${da.pid}'\n              };\n            ` + workerSource;\n    \n            var workerSourceUrl = URL.createObjectURL(\n                new Blob([workerSource], {type:'application/javascript'}));\n    \n            var child = new self.Worker(workerSourceUrl);\n    \n            da._children.set(childPid, child);\n    \n            child.onmessage = (o) => {\n              child.onmessage = (o) => send(o.data);\n              URL.revokeObjectURL(workerSourceUrl);\n              resolve(childPid);\n            };\n          });\n        });\n      }\n    \n### `isWorker()`\n\nCheck whether the current process is a worker thread.\n    \n      da.isWorker = isWorker;\n      function isWorker() {\n        return !!self.postMessage && self.postMessage.length === 1;\n      }\n    \n### `children()`\n\nGet the list of running worker processes.\n    \n      if(isBrowser()) {\n        da.children = () => da._children.keys();\n      }\n    \n### `kill(child-id)`\n\nKill a worker process.\n    \n      if(isBrowser()) {\n        da.kill = (pid) => {\n          da._children.get(pid).terminate();\n          da._children.delete(pid);\n        };\n      }\n    \n### Implementation details\n\nSend the message to ther processes. Only called if it shouldn't be handled by the process itself;\n    \n      function relay(msg) {\n        if(isWorker()) {\n          self.postMessage(msg);\n        } else if(isBrowser()) {\n          var child = da._children.get(msg.dstPid);\n          if(child) {\n            child.postMessage(msg);\n          } else {\n            relayNetwork(msg);\n          }\n        } else {\n          relayNetwork(msg);\n        }\n      }\n    \n      function initWorker() {\n        if(isWorker()) {\n          self.onmessage = (o) => send(o.data);\n          self.postMessage({});\n        }\n      }\n    \n      function loadWorkerSource() {\n        if(!da._workerSourcePromise) {\n          var source;\n          var reunRequest = da.GET('https://unpkg.com/reun@0.2');\n          da._workerSourcePromise = da.GET(isDev() ? './direape.js' : 'https://unpkg.com/direape@0.2')\n            .then(src => source = src)\n            .then(() => reunRequest)\n            .then(reun => source + reun);\n    \n        }\n        return da._workerSourcePromise;\n      }\n    \n      function isDev() {\n        return isNodeJs() ? process.env.DIREAPE_DEV : self.DIREAPE_DEV;\n      }\n    \n      if(isBrowser()) {\n        da.test('workers', () => {\n          var childPid;\n          return da.spawn()\n            .then(pid => childPid = pid)\n            .then(() => da.call(childPid, 'da:status'))\n            .then(o => da.assertEquals(o.pid, childPid));\n        });\n      }\n    \n## Network\n\nMessage passing between servers, - is implemented,\nand should work, but not used for production yet.\n\n### `online([boolean/url])`\n\nTODO: automatic reconnect\n    \n      if(isBrowser()) {\n    \n        var websocket;\n    \n        da.online = function(url) {\n          if(arguments.length === 0) {\n            return websocket && websocket.readyState === 1;\n          }\n    \n          closeWebSocket();\n    \n          if(url) {\n            if(typeof url !== 'string') {\n              url = 'wss://direape.solsort.com';\n            }\n            return new Promise((resolve, reject) => {\n              websocket = new WebSocket(url);\n              websocket.onopen = () => {\n                websocket.send(JSON.stringify({direapeConnect: da.buf2ascii(da._publicKey)}));\n                resolve(true);\n              };\n              websocket.onerror = (e) => {\n                da.emit(da.pid, 'da:socket-error', e);\n                reject(e);\n              };\n              websocket.onmessage = o => {\n                var msg = o.data;\n                msg = JSON.parse(msg);\n                msg.external = msg.external || true;\n                send(msg);\n              };\n            });\n          }\n        };\n      }\n    \n### Implementation details\n\nSend the message to ther processes. Only called if it shouldn't be handled by the process itself;\n    \n      if(isNodeJs()) {\n        var wsClients = new Map();\n      }\n    \n      function closeWebSocket() {\n        if(websocket) {\n          websocket.onerror = () => null;\n          websocket.close();\n        }\n      }\n    \n      function relayNetwork(msg) {\n        if(isNodeJs()) {\n          var dst = wsClients.get(msg.dstPid.slice(0,44));\n          console.log('relay', msg, wsClients.keys(), dst);\n          if(dst) {\n            console.log('relay send', msg);\n            dst.send(JSON.stringify(msg));\n          }\n        } else {\n          if(websocket) {\n            websocket.send(JSON.stringify(msg));\n          }\n        }\n      }\n    \n### Server: nodejs websocket server that relays messages\n    \n      if(isNodeJs()) {\n        da.startServer = () => {\n          var app = require('express')();\n          app.use(require('express').static('.'));\n    \n          var server = require('http').createServer(app);\n    \n          var wss = new (require('ws').Server)({\n            perMessageDeflate: false,\n            server: server\n          });\n    \n          wss.on('connection', (ws) => {\n            var nid;\n            ws.on('message', (msg) => {\n              msg = JSON.parse(msg);\n              if(msg.direapeConnect) {\n                if(nid) {\n                  wsClients.delete(nid);\n                }\n                nid = require('crypto')\n                  .createHash('sha256')\n                  .update(msg.direapeConnect)\n                  .digest('base64');\n                wsClients.set(nid, ws);\n              } else {\n                msg.external = nid;\n                if(msg.dstPid === 'server') {\n                  msg.dstPid = da.pid;\n                }\n                send(msg);\n              }\n            });\n            ws.on('close', () => {\n              if(nid) {\n                wsClients.delete(nid);\n              }\n            });\n          });\n    \n          server.listen(8888, () => console.log('started server on port 8888'));\n        };\n      }\n    \n## Built-in Handlers\n\nThese are the event handlers. that are exposed\n    \n      function initHandlers() {\n    \n### `da:list-clients ()`\n\nList clients connected to the NodeJS message relay server.\n    \n        if(isNodeJs()) {\n          da.handle('da:list-clients', () => Array.from(wsClients.keys()), {public: true});\n        }\n    \n### `da:get (url)`\n\nGet the content of a URL. This is needed by the module loader:\nWebWorkers may not be able to load the modules due to the web security model,\nbut they can they are able to request them through the main thread.\n    \n        da.handle('da:GET', da.GET);\n    \n### `da:status ()`\n\nGet a status with a timestamp. \nCan be used to ping for latency and checking whether a thread is alive.\n    \n        da.handle('da:status', () => ({pid: da.pid, time: Date.now()}), {public: true});\n    \n### `da:children ()`\n    \n        if(!isBrowser()) {\n          da.handle('da:children', da.children);\n        }\n      }\n## Utilities\n\nVarious utilities needed by DireApe, and made available \nas other libraries/code are also using them\n\n### `ready(fn)`\n\nCalled when direape is loaded, and has a valid `pid`.\n\n      da._waiting = da._waiting || [];\n      da.ready = (fn) => {\n        if(da._waiting) {\n          da._waiting.push(fn);\n        } else {\n          da.nextTick(fn);\n        }\n      };\n    \n### `isNodeJS()`, `isBrowser()`\n\nDetermine which environment we are in, see also `isWorker`, under Workers above.\n\n      da.isNodeJs = isNodeJs;\n      function isNodeJs() {\n        return !!((self.process || {}).versions || {}).node;\n      }\n    \n      da.isBrowser = isBrowser;\n      function isBrowser() {\n        return !!(self.window);\n      }\n    \n### `da.log(...)` `da.trace(...)`\n\nSimple logging, used for debug.\n\n      da.log = function(msg, o) {\n        console.log.apply(console, arguments);\n        return o;\n      };\n      da.trace = da.log;\n\n### `ajax` `GET(url)`\n\nWe need to export http-get from the main thread,\nto be able to fetch modules with webworkers.\n\nMay as well make a generic `ajax` function,\nwhich is not much extra code, and is needed by other code.\n\n(`fetch` is not universally supported yet )\n    \n      if(self.XMLHttpRequest) {\n    \n        da.ajax = (url, opt) =>\n          new Promise((resolve, reject) => {\n            opt = opt || {};\n            if(opt.json) {\n              opt.data = JSON.stringify(opt.data);\n            }\n            opt.method = opt.method || (opt.data ? 'POST' : 'GET');\n            var xhr = new XMLHttpRequest();\n            xhr.open(opt.method, url);\n            xhr.onreadystatechange = function() {\n              if(xhr.readyState === 4) {\n                if((200 <= xhr.status && xhr.status < 300)\n                    && typeof xhr.responseText === 'string') {\n                  resolve(xhr.responseText);\n                } else {\n                  reject(xhr);\n                }\n              }\n            };\n            xhr.send(opt.data ? opt.data : undefined);\n          });\n        da.GET = da.ajax;\n    \n      } else {\n    \n        da.GET = (url) => new Promise((resolve, reject) => {\n          if(url[0] === '.') {\n            resolve(require('fs').readFileSync(url));\n          } else {\n            return require('request')(url, (err, res, body) =>\n                err || res.statusCode !== 200 ? reject(err) : resolve(body));\n          }\n        });\n      }\n      da.test('GET ok', () => da.GET('https://unpkg.com/direape'));\n      da.test('GET fail', () => da.GET('https://unpkg.com/direape/notfound')\n          .catch(() => 'error')\n          .then(ok => da.assertEquals('error', ok)));\n    \n### `jsonify(obj)`\n\nTranslate many general JavaScript objects into `JSON.stringify`-able objects. \n\nUsed for preprocesing data that will be passed as messages, \nif they may contain data of classes that would mess up the serialisation.\n    \n      da.jsonify = o =>\n        JSON.parse(JSON.stringify([o], (k,v) => jsonReplacer(v)))[0];\n    \n      da.test('jsonify', () => {\n        var e = new Error('argh');\n        e.stack = 'hello';\n    \n        da.assertEquals(da.jsonify(e), {\n          $_class: 'Error',\n          name:'Error',\n          message:'argh',\n          stack: 'hello'\n        });\n    \n        da.assertEquals(da.jsonify(function hello() { }), {\n          $_class: 'Function',\n          name: 'hello'\n        });\n    \n        da.assertEquals(da.jsonify(null), null);\n      });\n    \n      function jsonReplacer(o) {\n        var jsonifyWhitelist = ['stack', 'name', 'message', 'id', 'class', 'value'];\n    \n        if((typeof o !== 'object' && typeof o !== 'function') ||\n            o === null || Array.isArray(o) || o.constructor === Object) {\n          return o;\n        }\n        var result, k, i;\n        if(typeof o.length === 'number') {\n          result = [];\n          for(i = 0; i < o.length; ++i) {\n            result[i] = o[i];\n          }\n        }\n        result = Object.assign({}, o);\n        if(o.constructor && o.constructor.name && result.$_class === undefined) {\n          result.$_class = o.constructor.name;\n        }\n        if(o instanceof ArrayBuffer) {\n\nTODO btoa does not work in arraybuffer,\nand apply is probably slow.\nAlso handle Actual typed arrays,\nin if above.\n\n          result.base64 = self.btoa(\n              String.fromCharCode.apply(null, new Uint8Array(o)));\n        }\n        for(i = 0; i < jsonifyWhitelist.length; ++i) {\n          k = jsonifyWhitelist[i] ;\n          if(o[k] !== undefined) {\n            result[k] = o[k];\n          }\n        }\n        return result;\n      }\n    \n### `nextTick(fn)`\n    \n      da.nextTick = nextTick;\n      function nextTick(f) {\n        setTimeout(f, 0); // TODO this is relatively slow, could implement with faster version.\n      }\n    \n### `slice(arr, i, j)`\n    \n      da.slice = (a, start, end) => {\n        return Array.prototype.slice.call(a, start, end);\n      };\n    \n      da.test('slice', () => {\n        da.assertEquals(da.slice([1,2,3]).length, 3);\n        da.assertEquals(da.slice([1,2,3], 1)[1], 3);\n        da.assertEquals(da.slice([1,2,3], 1 , 2).length, 1);\n      });\n    \n### `buf2ascii(buf)`, `ascii2buf(str)` \n\nConvert buffers to/from strings using latin1 encoding with one byte per char.\n    \n      da.buf2ascii = (buf) =>\n        Array.from(new Uint8Array(buf)).map(i => String.fromCharCode(i)).join('');\n    \n      da.test('buffer conversion', () => {\n        da.assertEquals(da.buf2ascii(Uint8Array.from([104,105]).buffer), 'hi');\n      });\n    \n### `equals(a,b)`\n\n(deep equal for Object/Array, otherwise `.equals(..)` or direct comparison)\n\nTODO handle cyclic structures (via weak-map)\nTODO handle iterables\n    \n      da.equals = (a,b) => {\n        if(a === b) {\n          return true;\n        }\n    \n        if(typeof a !== 'object' ||\n            typeof b !== 'object' ||\n            a === null || b === null) {\n          return false;\n        }\n    \n        if(Array.isArray(a)) {\n          if(!Array.isArray(b)) {\n            return false;\n          }\n          if(a.length !== b.length) {\n            return false;\n          }\n          for(var i = 0; i < a.length; ++i) {\n            if(!da.equals(a[i], b[i])) {\n              return false;\n            }\n          }\n          return true;\n        }\n    \n        if(a.constructor === Object) {\n          if(b.constructor !== Object) {\n            return false;\n          }\n          if(!da.equals(\n                Object.keys(a).sort(),\n                Object.keys(b).sort())) {\n            return false;\n          }\n          for(var key in a) {\n            if(!da.equals(a[key] ,b[key])) {\n              return false;\n            }\n          }\n          return true;\n        }\n    \n        if(typeof a.equals === 'function') {\n          return a.equals(b);\n        }\n        return false;\n      };\n    \n      da.test('equals', () => {\n        da.assert(da.equals({a:[1,2],b:3},{b:3,a:[1,2]}));\n        da.assert(!da.equals({a:['1',2],b:3},{b:3,a:[1,2]}));\n        da.assertEquals({a:[1,2],b:3},{b:3,a:[1,2]});\n      });\n    \n## Testing\n    \n      var testTimeout = 5000;\n    \n### `assert(bool)`\n    \n      da.assert = (ok) => ok || throwAssert({type: 'truthy', val: ok});\n    \n### `assertEquals(val1, val2)`\n    \n      da.assertEquals = (val1, val2) =>\n        da.equals(val1, val2) || throwAssert({type: 'equals', vals: [val1, val2]});\n    \n### `testSuite(name)`\n\nSets the current test suite name\n    \n      da.testSuite = testSuite;\n      function testSuite(str) {\n        da._currentTestSuite = str;\n      }\n    \n### `test(name, fn)`\n\nAdd a test case.\nFor asynchrounous tests, let the function return a promise.\nNotice that tests may run in parallel.\n    \n      da.test = test;\n      function test(name, f) {\n        if(da._currentTestSuite) {\n          name = da._currentTestSuite + ':' + name;\n        }\n        f.testName = name;\n        if(!da._tests) {\n          da._tests = [];\n        }\n        da._tests.push(f);\n      }\n    \n### `runTests(testSuites)`\n\nExecute the tests given a list of test suites.\n    \n      da.runTests = (modules) => {\n        var ts = da._tests;\n        if(modules) {\n          if(!Array.isArray(modules)) {\n            modules = [modules];\n          }\n          ts = ts.filter(t => modules.some(m => t.testName.startsWith(m + ':')));\n        }\n        return Promise\n          .all(ts.map(runTest))\n          .then(e => {\n            console.log('All tests ok:', ts.map(o => JSON.stringify(o.testName)).join(', '));\n          });\n      };\n    \n### Implementation details\n    \n      function runTest(t) {\n        var err, p;\n    \n        try {\n          p = Promise.resolve(t());\n        } catch(e) {\n          p = Promise.reject(e);\n        }\n    \n        var timeout = new Promise((_, reject) =>\n            setTimeout(() => reject(new Error('Timeout')), testTimeout));\n        p = Promise.race([p, timeout]);\n    \n        p = p.catch(e => err = e);\n    \n        p = p.then(() => {\n          if(err) {\n            console.log('Test error in \"' +\n                (t.testName || '') +\n                ': ' + err.message);\n            if(err.assert) {\n              try {\n                console.log(JSON.stringify(err.assert));\n              } catch(e) {\n                console.log(err.assert);\n              }\n            }\n    \n            if(err.stack) {\n              console.log(err.stack);\n            }\n    \n            throw err;\n          } else {\n     console.log('Test ok', t.testName || '');\n          }\n        });\n        return p;\n      }\n    \n      /*\n         test('must error 1', () => da.assert(false));\n         test('must error 2', () => new Promise(() => da.assert(false)));\n         test('must error 3', () => new Promise((reject, resolve) => {true;}));\n         */\n    \nTo get the call stack correct, to be able to report assert position, we throw an `Error` (which includes the stack on many browsers), and enrich it with more information.\n    \n      function throwAssert(o) {\n        var err = new Error('AssertError');\n        err.assert = o;\n        throw err;\n      }\n    \n      da.test('assert',()=>{\n        try {\n          da.assertEquals(1,2);\n        } catch(e) {\n          da.assert(e.message === 'AssertError');\n          da.assert(typeof e.stack === 'string');\n        }\n      });\n    \n## Module Setup / Main\n    \n      function setupModule() {\n    \nShims\n    \n        if(typeof self === 'undefined') {\n          global.self = global;\n        }\n    \n        if(!self.URL) {\n          self.URL = self.webkitURL;\n        }\n    \nMake sure are on https in browser,\notherwise crypto etc. wont work.\n    \n        if(isBrowser() &&\n            self.location.protocol === 'http:' &&\n            self.location.hostname !== 'localhost' &&\n            !self.location.hostname.startsWith('192.168.')) {\n          self.location.href = self.location.href.replace(/http/, 'https');\n        }\n    \nSetup / export module\n    \n        da = self.direape || {};\n    \n        if(typeof module === 'undefined') {\n          self.direape = da;\n        } else {\n          module.exports = da;\n        }\n    \n        da.test = test;\n    \nDefine name of testsuite\n    \n        testSuite('direape');\n      }\n    \nInitialisation, of the different parts of direape\n    \n      Promise\n        .resolve(initPid())\n        .then(initHandlers)\n        .then(initWorker)\n        .then(() => {\n          for(var i = 0; i < da._waiting.length; ++i) {\n            da._waiting[i]();\n          }\n          da._waiting = false;\n        });\n    \nMain entry\n    \n      testSuite('');\n      da.ready(() => {\n        if(self.DIREAPE_RUN_TESTS) {\n          da.runTests();\n        }\n    \n        if(isNodeJs() && require.main === module) {\n          if(process.argv.indexOf('test') !== -1) {\n            da.runTests('direape')\n              .then(o => {\n                if(process.argv.indexOf('server') !== -1) {\n                  da.startServer();\n                } else {\n                  process.exit(0);\n                }\n              }).catch(e => process.exit(-1));\n          }\n        }\n      });\n    })();\n    \n## License\n\nThis software is copyrighted solsort.com ApS, and available under GPLv3, as well as proprietary license upon request.\n\nVersions older than 10 years also fall into the public domain.\n\n","maintainers":[{"name":"solsort","email":"npmjs@solsort.com"}],"time":{"modified":"2022-06-15T04:30:41.193Z","created":"2017-01-11T14:23:35.238Z","0.0.1":"2017-01-11T14:23:35.238Z","0.0.2":"2017-01-11T14:55:18.334Z","0.0.3":"2017-01-11T18:02:38.512Z","0.0.4":"2017-01-11T18:55:18.441Z","0.0.5":"2017-01-11T20:06:34.869Z","0.1.0":"2017-01-17T07:27:25.435Z","0.1.1":"2017-01-17T07:47:09.529Z","0.1.2":"2017-01-17T07:55:12.343Z","0.1.3":"2017-01-17T07:59:34.285Z","0.1.4":"2017-01-17T09:03:32.413Z","0.1.5":"2017-01-17T09:33:21.045Z","0.1.6":"2017-01-26T08:40:40.744Z","0.1.7":"2017-01-26T09:37:06.805Z","0.1.8":"2017-01-26T09:49:47.889Z","0.1.9":"2017-01-27T06:44:32.695Z","0.1.10":"2017-01-28T10:36:47.959Z","0.1.11":"2017-01-28T10:43:24.125Z","0.1.12":"2017-01-30T14:37:22.921Z","0.1.13":"2017-01-30T19:15:56.828Z","0.1.14":"2017-01-30T19:55:57.599Z","0.1.15":"2017-02-02T03:43:59.826Z","0.1.16":"2017-02-02T12:55:48.867Z","0.1.17":"2017-02-03T16:07:35.083Z","0.1.18":"2017-02-08T05:59:52.394Z","0.2.0":"2017-02-09T08:53:25.315Z","0.2.1":"2017-02-14T04:39:07.997Z","0.2.2":"2017-02-14T12:29:19.865Z","0.2.4":"2017-02-14T12:42:09.609Z","0.2.5":"2017-02-14T13:08:56.543Z","0.2.6":"2017-02-15T10:05:16.009Z","0.2.7":"2017-02-15T10:46:03.282Z","0.2.8":"2017-02-20T08:01:19.097Z","0.2.9":"2017-02-20T12:51:21.915Z","0.2.10":"2017-02-20T15:00:51.977Z","0.2.11":"2017-03-01T12:08:39.814Z","0.2.12":"2017-03-01T12:27:33.677Z","0.2.13":"2017-03-01T16:21:39.168Z","0.2.14":"2017-03-01T16:58:22.458Z","0.2.15":"2017-03-01T18:37:23.294Z","0.2.16":"2017-03-02T09:13:30.110Z"},"homepage":"http://direape.solsort.com","keywords":[],"repository":{"type":"git","url":"git+https://github.com/solsort/direape.git"},"author":{"name":"RasmusErik / solsort.com"},"bugs":{"url":"https://github.com/solsort/direape/issues"},"license":"GPL-3.0","readmeFilename":"README.md","users":{"solsort":true}}