{"_id":"ternion","_rev":"38-33d2b3430b8ffb97bacd7d0105f915d3","name":"ternion","description":"A socket.io framework that does the job for you.","dist-tags":{"latest":"0.8.5","beta":"0.8.4"},"versions":{"0.1.1":{"name":"ternion","version":"0.1.1","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{},"gitHead":"b9e97d3fc07c172ec562c27abedef3610b3f5a03","_id":"ternion@0.1.1","_shasum":"0a2416faf88de55520f629a95c5831449054dac5","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"0a2416faf88de55520f629a95c5831449054dac5","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.1.1.tgz","integrity":"sha512-42BXU9JCtIuUiyH67CELUXF6iP8lgj1DdRIB3mjX2o5+3TxfNbCsrg7IlFsl74K71aDr910/5V6doAyMGJdY9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+PDraGhodcZJKHhyG54i+5qeMBA73ZQTRlNqBeyiJfgIhAJY4SN3e84fJcl9+sUb1izlQpsb6uIqSEa2aIyrbuSpP"}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.1.1.tgz_1504229562455_0.4555127904750407"},"directories":{}},"0.1.2":{"name":"ternion","version":"0.1.2","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{},"gitHead":"c2218cad2392af95e7a1cec96132c933575e01f7","_id":"ternion@0.1.2","_shasum":"11ffb7cf68a0224b9d013b46eb1216c764987ae1","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"11ffb7cf68a0224b9d013b46eb1216c764987ae1","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.1.2.tgz","integrity":"sha512-ndwLXuw6kUXjiflw/M6EUYnCabbBlgrbFSok59A6doJ74Pl5mv0SSNFw8HAcI85NXYjnwmTFglIOwzjFqB4I/A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAD9JC51KSUlHajv+D02PXf+KGAWdkBU+RWoo6YCcuPDAiAdgScguIGrwCgHq4cjUv3F1xH1sfB/XMCR6o3gW8VEtw=="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.1.2.tgz_1504230996035_0.08901371760293841"},"directories":{}},"0.3.1":{"name":"ternion","version":"0.3.1","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{},"gitHead":"665c1d587f79b6ec1bb9d0b91ca4b5104b100a04","_id":"ternion@0.3.1","_shasum":"1013c3326ef55561f97217ed00c329e636ac6629","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"1013c3326ef55561f97217ed00c329e636ac6629","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.3.1.tgz","integrity":"sha512-fkoRd9B4ZA9o9a5nX19dzQ7semJhuTR5CH2siE+OhgGiCiOBGQlRgqkl10mCEdVNuXUQeJjGdmZMSJROK1f+nA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFO782OsuZ1WdrW0txl0Kh0dMzfyaZvS9PRZtWrfjzdEAiEAtAjf+UU0vQjcRcI3SsiP/g0kpL1HUMQZMijhQlV8rCY="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.3.1.tgz_1504318229202_0.44775824272073805"},"directories":{}},"0.3.2":{"name":"ternion","version":"0.3.2","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"coveralls":"^2.13.1","jest":"^20.0.4"},"engines":{"node":">=7.6.0"},"gitHead":"907926a7d5948233b43798a41fcf23a7e8dbd032","_id":"ternion@0.3.2","_shasum":"0b80877b5ea48da4b678a4b04f6386057af8397e","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"0b80877b5ea48da4b678a4b04f6386057af8397e","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.3.2.tgz","integrity":"sha512-7UdbyAmFfcdJwo6wXwK/dQ4VEF0j4N4F4/yk0GGTlWL+hFa+IcEGjKFSCUA1CCBKzQRzf7KQ+CR8Rm6hm9HKVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjPgaEpUM51kkBl8hZL9/Q3OVm/t/98saS6Go+uH07VgIgY8ehN+kFFUPfr5K1UZyJEOd17Xkb/hy/OChqwIux5rI="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.3.2.tgz_1504585871024_0.6464184990618378"},"directories":{}},"0.3.3":{"name":"ternion","version":"0.3.3","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"coveralls":"^2.13.1","jest":"^20.0.4"},"engines":{"node":">=7.6.0"},"gitHead":"0e2814f666587fdf092b06d886a3d251b970b4a8","_id":"ternion@0.3.3","_shasum":"bb75a1cb9020785e7412a0bdd338f1af7f1b5cdc","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"bb75a1cb9020785e7412a0bdd338f1af7f1b5cdc","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.3.3.tgz","integrity":"sha512-8M834mimp+s+4eSqH4fnjJebbyoj6fm/zoZ5lg6rf1mBaLJ6PiqIj28zzuE7Fa9wsDmv3Ir5o0aIs0IHjQ4lhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAJ+HrzNYsMLINVhBhTou9DTdT5J3/gvEgbl3RcxfT2YAiEAumwaeI/aaBCSCIVnFu6eBN8/FvzrCpzyHGdzzdDKeYY="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.3.3.tgz_1504586419911_0.26501131313852966"},"directories":{}},"0.3.4":{"name":"ternion","version":"0.3.4","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"coveralls":"^2.13.1","jest":"^20.0.4"},"engines":{"node":">=7.6.0"},"gitHead":"1a1b2f274d5b5b73e60ff831d8b634c12fb6d7f9","_id":"ternion@0.3.4","_shasum":"a8b5ec27ff63f17bced587c5e0bd4ed08ef1a5be","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"a8b5ec27ff63f17bced587c5e0bd4ed08ef1a5be","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.3.4.tgz","integrity":"sha512-DHzhjzgwj/0n08UgDxWf+cLQZdq8g9ep6+dtfh4Uyp1N7dpGDDAUkJZTG3tj7AU2qNHFtwb9MqodM9f3Xo8fgg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICPznJ0LEuibFySu+QYUK+tRt3dhMtGcDaWCWuVDE/oDAiBWfGWpnaIBP+kuH5fINY/JIIziYPFWkkEBCZoK7SfD+Q=="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.3.4.tgz_1504610803874_0.6594581606332213"},"directories":{}},"0.3.5":{"name":"ternion","version":"0.3.5","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"coveralls":"^2.13.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=7.6.0"},"gitHead":"97c7995b3482176591e8df40cc1b20402a5bdd58","_id":"ternion@0.3.5","_shasum":"763a7416234744535b52b7df90bb44d37ef99d60","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"763a7416234744535b52b7df90bb44d37ef99d60","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.3.5.tgz","integrity":"sha512-0oJAaZxOxWGkvmUEN1EErVcAhV0sUvITD439NKy6R7Gr207WFODofKQa14IayJkmZB82E2v76FefS4ClXgs9PQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFzF3PmIRfuqqbjXNwmt998ZOm6gnkRML57U5FsOlD/xAiALTn/Y7/oQwUSxwncM4yYYtDOJRtN8yqAh/OzKZw1cqw=="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.3.5.tgz_1504686830710_0.5353883812204003"},"directories":{}},"0.4.1":{"name":"ternion","version":"0.4.1","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"coveralls":"^2.13.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=7.6.0"},"gitHead":"1b5cd7dc1c16b48870092f1656687d4c22f1c90c","_id":"ternion@0.4.1","_shasum":"ca6c861978b225ce5ec5d43b1bdbc1efa25a108f","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"ca6c861978b225ce5ec5d43b1bdbc1efa25a108f","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.4.1.tgz","integrity":"sha512-hiqDuUMmD2yX6Zby+KOeAclz/JsG7cVh92Tvbd3skhV9RX4t++FOnEW8+UBl1wGMW61tV8PE8pmu8H/AHeDzYw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDapze0236vREHLUeBvC4khgGmNY+0KXlpAMMETPNfeDAIgQu/yme1luSVN5qiVrjMAH5wPl0TEp8BZDP29T3QS/ZE="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.4.1.tgz_1504750159668_0.43900992115959525"},"directories":{}},"0.4.2":{"name":"ternion","version":"0.4.2","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"coveralls":"^2.13.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=7.6.0"},"gitHead":"1dd99b0bed0c33c89a701870c68c314fed26ab4e","_id":"ternion@0.4.2","_shasum":"e757ce580303b47dd155a1fd6d88b824166ad0f1","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"e757ce580303b47dd155a1fd6d88b824166ad0f1","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.4.2.tgz","integrity":"sha512-II8f7l1hWJmaJ34f7zQssvpqyBiti0r9gU+YSU1FE/3wsSeajalLFKtOpR6x+uKgYvWr0q1eIUNSyl/WmoDTjw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCk77DGU4ySZas3GSgmiG8ANlU+j2h0xlVz2u18fyi3rwIgK43UqfTv/Rz0CkDG4z2FVgS1f0Q5lFQgb/hepHXsVgc="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.4.2.tgz_1504751332283_0.652798580005765"},"directories":{}},"0.5.1":{"name":"ternion","version":"0.5.1","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"4fbc9520c9532856e46c1e37702dc42f9d71c217","_id":"ternion@0.5.1","_shasum":"eafd78a1d69b2cc96fdc9ac206f18be5d994494b","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"eafd78a1d69b2cc96fdc9ac206f18be5d994494b","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.5.1.tgz","integrity":"sha512-6JnPOOg2GwDZWd20mFt64Re4mFWQIwq1up/PG4iIYTEfXOF4LVTk4ryIho4XL4YVFbFlVzrios/w9wv7QHUNoA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFAfI2b0xYgOQCMtN8QoyfVS5nY/Ugs2C/+0UCHF2YTKAiEAnvOWF92SLQKBkfo61Rc1DFpLF+zv4P/CblihCZDp7/8="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.5.1.tgz_1504922677580_0.9460163910407573"},"directories":{}},"0.6.1":{"name":"ternion","version":"0.6.1","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"8e52c309462e74adc9b8d585b3e5bfdfb844d994","_id":"ternion@0.6.1","_shasum":"01416e5b7b23e9707915d86eb7379cc698508812","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"01416e5b7b23e9707915d86eb7379cc698508812","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.6.1.tgz","integrity":"sha512-8mjMbe2Nk7yaMm/4ij4yxiKMCeQE+WZ0VJYjv48coUDE2PgEFDWPdg770p0FJZ/lr5QR8Hh8YZSJf1cDgKksow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBmIbRMtLyZqK3oE3NKtemm5DS0/6P6N6hzWqTCM6hbUAiBfAA7nmFIzWuQOfMRggm0D8LuQa6GFIAe9s/kmt7vN9A=="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.6.1.tgz_1505008778477_0.7654629552271217"},"directories":{}},"0.6.2":{"name":"ternion","version":"0.6.2","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"90e5f9fc69e0092992422099300af7f77f7455d0","_id":"ternion@0.6.2","_shasum":"0dc8168df10b95fd9c1083c7667126f284145a4a","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"0dc8168df10b95fd9c1083c7667126f284145a4a","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.6.2.tgz","integrity":"sha512-92khG+dri35Ke0q3goGZ1PcEPzo8CbEKRvtxC+oOsVDJ3EV3o6Cv1IvTKl1kdanjV211oK/A0MXhN8/udHhC4w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBXwtwdtsaEC8ClB/sb318Hho5E4uu6PDKQkesH0c+O9AiEA48WkhDO5Z2eIKGPzrnLmGJSJnEQCI7ZxAP+X2mX4pE8="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.6.2.tgz_1505031358747_0.8746665986254811"},"directories":{}},"0.6.3":{"name":"ternion","version":"0.6.3","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"2a6cd1235567a2950622ce89fddb915d5bb31ac6","_id":"ternion@0.6.3","_shasum":"cf3b6b6e883b25b0353cc6651f2de833f1981039","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"cf3b6b6e883b25b0353cc6651f2de833f1981039","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.6.3.tgz","integrity":"sha512-lTAr/+HT202Q0fnIhMbSWhl1V7OOVGpxr+axtB/dJHexLjog6rHFOQyRJTLUf7UP/x7x+pM9W+O1rx1mCVOAuw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhwJWsDwLdYxeSEhEK8o46EMZe8ea9IHyQdW3A+aB/iQIhAOOkqlgV/5wKj97dNxqji+eeFvdOO3798Mn17CVqBCuq"}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.6.3.tgz_1505194350602_0.872600837610662"},"directories":{}},"0.6.4":{"name":"ternion","version":"0.6.4","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"2d7cc3853dfe3a60acd53aec46500c7a9744f71a","_id":"ternion@0.6.4","_shasum":"363468edbdd0625e2b3bc6e217bbb940c31897fe","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"363468edbdd0625e2b3bc6e217bbb940c31897fe","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.6.4.tgz","integrity":"sha512-VYS19ACGTAaiaxlHmNnEXjQLD3uf5nLwl3yBejQeUak1ma+QLpTUUIavZaEK887YBeA5Jklm2vPJ7ZuBzpcsmw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCABrxxnGTzpY/49t6PkbByBoCnjRDct76OHP1TFN1z8gIhAPH6rcwL8TIp4czK1fRfy4N38jSWbWh/tg0EdbRW2BT+"}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.6.4.tgz_1505194876342_0.4398014871403575"},"directories":{}},"0.6.5":{"name":"ternion","version":"0.6.5","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"4bd27d6a5d3897f256a934ded310a1d1877ce096","_id":"ternion@0.6.5","_shasum":"b36bea854bd6799d68431098668ed08626a414f9","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"b36bea854bd6799d68431098668ed08626a414f9","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.6.5.tgz","integrity":"sha512-ZbfmzjbJjGdbOw08J24U5ZLRXaOllp1AB5DLV7ITsoyr68Ss30RWpntZkceX4zBhdFQ9Erm7AkYQO85rggaEBg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDa2Wm9FKLdEc+pJVN0Uai0K5IXEdVCOkHYG9UDYzxPbQIgIs3Xh4a5Ni5uOBTvU9ZSokn3JcH9S8nI2ZhLwgppIPY="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.6.5.tgz_1505198959855_0.5825197456870228"},"directories":{}},"0.6.6":{"name":"ternion","version":"0.6.6","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"97c2276f491f6401d201e1f67212c8d8684df243","_id":"ternion@0.6.6","_shasum":"c9b26191923e49fdd4a1e4cf8620bae674c8d680","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"c9b26191923e49fdd4a1e4cf8620bae674c8d680","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.6.6.tgz","integrity":"sha512-8Qg1Xmurhk3kt2LW/TpPtz9rYeYKNfqov7BQrhT7/87PXh2VkPkxovfcwZUla4r4Zw2AXRZ/UY8OsB5Ny/k8eg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAeU6oBIhhumu7QgVxFQBpk1MqJ+gFqTxj44vBqEtkdSAiBFIUoxEWIL0xSSERwJsqRO5r4vLu1M0ZNi9tcl5qy/hA=="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.6.6.tgz_1505207146048_0.5381434273440391"},"directories":{}},"0.6.7":{"name":"ternion","version":"0.6.7","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"cf23a8f0a8928d0806f70e50bc976b59dc0c196b","_id":"ternion@0.6.7","_shasum":"0c3053bfd37e73833050fe4c424aeeddf1ad7ead","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"0c3053bfd37e73833050fe4c424aeeddf1ad7ead","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.6.7.tgz","integrity":"sha512-f1p5MrKuAqdAd1EOHvaKcYbzb+aogIHFyh+rPTpEem4sh72apCcakjvRz+UuIg+U/M/3exfKnyfVRADqdRz9IA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAC9DA54YfEHTpu+Ll0RSmzjH2n+MZuUOgYko50dJwrzAiEApy23/fMoOEDhn/8w0+IIvb42OlxEPEN7Ik5t1DAn24E="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.6.7.tgz_1505695878801_0.40161148994229734"},"directories":{}},"0.6.8":{"name":"ternion","version":"0.6.8","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"c915eae2c369614d6993b9c5ec8110c5ff55a4de","_id":"ternion@0.6.8","_shasum":"6155429c3c6a1965419e69b4f5cbbb644e3d4a0e","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"6155429c3c6a1965419e69b4f5cbbb644e3d4a0e","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.6.8.tgz","integrity":"sha512-jPDh4UTU/8aSIbdS2XlduSxIN4Z0LpiS/zfu5wh1YNlpJsrVFEyudUJJvPR0kJ2i3faXREsGzgEJXQeN4HzHYw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGFWvZBTfkNpim1ZMpxNSe2rytTZqJ0Hm0kac3Kj5t2sAiEAhSW5e8Y79+xXg5J46JBFLrwlaTJEMJtNRhrQfQ0xBcY="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.6.8.tgz_1505696719870_0.40264713065698743"},"directories":{}},"0.6.9":{"name":"ternion","version":"0.6.9","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"8e80d9203a9bb298d492e41677f42472aceb6ac7","_id":"ternion@0.6.9","_shasum":"3786305bc2dbac9e23c928692fcf937414ccbde6","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"3786305bc2dbac9e23c928692fcf937414ccbde6","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.6.9.tgz","integrity":"sha512-tJVKUahbB+ULUR+xOPIdVTA9Sni8SraZcFMAijJpzn1XCZBAZPtdziHgK6d2XBwU9iJ1Eq2Bz4ictndZr8x6IA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxf8kQr+cLB6LozxpjklSFKkUcuhl8qjlEkgdQ2UKq+gIhAKWanuY4D2A2fjwfeiEWkRXPkNT2HOGG5TFXkoO/a9gr"}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.6.9.tgz_1505701609454_0.30713024828583"},"directories":{}},"0.6.10":{"name":"ternion","version":"0.6.10","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"1656c9eecc2b362de776f840d5b38766b86e21c0","_id":"ternion@0.6.10","_shasum":"616752ce62a7c581790b3d84179d8b56c5481b81","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"616752ce62a7c581790b3d84179d8b56c5481b81","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.6.10.tgz","integrity":"sha512-sMG4reETD3VOxd8sap42o/DBRVOmEr6vp6gO+IdVdC+7uUOpcKWPonyFIhutEAWTNiiAEzlG28ugNKh4Tare1w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFsIdDyk0m8o3kw5puFa+s6AQRs1TvQXwUkpmM2xLZLgAiBZ2jOtf/XSsyZCNslMKrODF/8YJe/9ROUIBywDyfyb3A=="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.6.10.tgz_1505995829528_0.7609276829753071"},"directories":{}},"0.7.1":{"name":"ternion","version":"0.7.1","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"1045468d0242055faf7f48f7165ba8dd5fc3cfb2","_id":"ternion@0.7.1","_shasum":"3e33ccd5d3c90984383684b2bcf891f0a9ee3c27","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"3e33ccd5d3c90984383684b2bcf891f0a9ee3c27","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.7.1.tgz","integrity":"sha512-x4aiQjcUhrnUS4iUfK3/zPuaitVm+TQLKfHDIWcummJ/lBr3nMBQRNqHqshx304pbljnu8v/26QQtSkyxsSWSA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG8TouNYFeTUkoydYgWuWqVdS87bAUrKvqdkv0pclM2iAiBJJR7FFKqD620csNh01M2N+jEKtuJZ4TPYMlotkarqPw=="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.7.1.tgz_1506688836217_0.7204327003564686"},"directories":{}},"0.7.2":{"name":"ternion","version":"0.7.2","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"28dddf46067315cb3d2a193e10c5487e139c1671","_id":"ternion@0.7.2","_shasum":"7c16c7492686500743f9f71a0b2472439b6a2cba","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"7c16c7492686500743f9f71a0b2472439b6a2cba","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.7.2.tgz","integrity":"sha512-5H3VsOu5rcm9nyH7Tlbd0flcX59ilddgKv5//MJaRlj2jLC2fxqqXIPhqRXT+ETDW8JctA7Y3X3gmiw5MVZwmg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzhXKqwZkZ3621UtcUbUBHfj8Ylua+IDF088QcVvrPHQIgJlLlKIaNwVHYfkxlTkc22GTftdWqXfNW7se6LBhPDJc="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.7.2.tgz_1506689471591_0.12307686638087034"},"directories":{}},"0.7.3":{"name":"ternion","version":"0.7.3","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"a96321332d338473cd1d71b5d872b9700acc2a3f","_id":"ternion@0.7.3","_shasum":"3e00644b589c05002792ca0147f3223adee49d08","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"3e00644b589c05002792ca0147f3223adee49d08","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.7.3.tgz","integrity":"sha512-CI5evACh595FzC15AyzQTZmkmfvuQEVZci6H5Z2d0uUiUp4J/Mcec9j0tHqPA7m6uTDGRLXmpj+gOWs0FaN0Lw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFoWJbjUK3mEdanAK4GYOSMkt9MlTyBrQR7KHu0FoqcMAiAeIEasHIzUelMNCh/yOD1eZlEjXa/sjBdRvh4zlmIXjg=="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.7.3.tgz_1506692473198_0.4385791209060699"},"directories":{}},"0.7.4":{"name":"ternion","version":"0.7.4","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Kamel"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","gulp":"^3.9.1","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.40.2"},"engines":{"node":">=6.0.0"},"gitHead":"2a051fc729b2165b1ff9ace03097ac436ada5063","_id":"ternion@0.7.4","_shasum":"d1190f69642d5aa52be7037aecdb504b58d26637","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"dist":{"shasum":"d1190f69642d5aa52be7037aecdb504b58d26637","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.7.4.tgz","integrity":"sha512-N2yKs+Ghy+Y4tIRRAmzY+W/nNXASPXvdKlIjI+vJFFt/utSVDFGS3IRrjtMWDcXRpSyHQuXU57hsMxbmTB6rYQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHCfufLU4K8zENTgrHwXB2ceUQzgTHoxzHhKuzGYDLb4AiAZAHLrKt15uWQpcyaouZmEu/BYWeC3svIs+8XwJ7nFoQ=="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion-0.7.4.tgz_1507755772201_0.7375528600532562"},"directories":{}},"0.7.5":{"name":"ternion","version":"0.7.5","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"test":"jest","test6":"npm run es6 && jest","reportcoverage":"jest --coverage --coverageReporters=text-lcov | coveralls","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Youssef"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","coveralls":"^2.13.1","eslint":"^6.7.1","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jest":"^23.0.5","eslint-plugin-node":"^10.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gulp":"^4.0.2","gulp-babel":"^7.0.0","gulp-replace":"^0.6.1","jest":"^20.0.4","snyk":"^1.251.2"},"engines":{"node":">=6.0.0"},"gitHead":"850676361c8962e0955d66c4ae49a4ff7edcfde0","_id":"ternion@0.7.5","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-5Yv3JQYmhoPIKIBrWaudVWbmdFp2lFT9YBOldMz6zLDSNKSmpVgXKqPuu3R/RpNmrtM62L7mnPWsM+fZtTZ22w==","shasum":"bf2eafaff0c6d3690c09df77ab843340939ac875","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.7.5.tgz","fileCount":32,"unpackedSize":89183,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd3u+YCRA9TVsSAnZWagAAhwUP/ROZG67dBkFAD25ysx4P\nv8eYor9EPyMVx9bmMDZa7A3umQjEsVmVgQnOQVxPgT+fUwekuQXG0xcJUhSX\nlJOX1k6aFE130UBBdNFnsO82xDHUkfEp+QQefj+/xbxP08E9QpUeQw45YAy6\nO4BBzv+fx2Y+SZSNPwnDtLu5SOz95cPBuLLc5GbxgNlcyJmCw0Mko3622NnI\nN6TTjLVTHmAGk0lbA065rEL10nZNbxx69spLT7oH4sP1GjBDg3UwKo27kYgX\nvuRa43Un2LlV9NJJyszSDDoGIz4SeOrUpRCEQ2W45ELs/Sz6xNrp5yC5uEdz\n3J1332qUwF2OZfoMCB1ANJmRhmg5JoaoWOSfUP3040PLdMZOsHQIblt304OW\n+qE60YtLenfFm6qJMNTVi1svFi+CX4TvNufOBiQV3Ykc7PvGP4kSKaQI5S0r\n7eV6s2sgdmQKm3AkU9ThkG8qAcqNYD3zs+maDCKqPDXuXfQjwQ2FTq4fusK5\nOmLiTEJ84NPAgVpUumuEBjtn4gBbigSz2G3ZI74HJ87triUUgqA3FTDX2/fU\nZdNiwbyYnhIQ5RB2+bfsN0rjO7m6Ri+07In1Yit0D8kpr+ledF5lt+0fILjH\ncTszmkTHZ65ibrEFKGQxcNJ5K/ME26AlWgAOfv/+VRzAtd4/rrzc8bOoj7on\n1s1P\r\n=EdnQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYmVPSU1aQ7cc3IKHjPJuvzjy2Gmm0IvkbFexR/oOzrAIhAL3YZsRwSsJ3/drhosUEezZ9Ww5Z1EhrVQTfH14xw9Xn"}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion_0.7.5_1574891415953_0.19194237897794397"},"_hasShrinkwrap":false},"0.7.6":{"name":"ternion","version":"0.7.6","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"lint":"npx eslint --fix --ext .js --ext .md .","test":"npm run es7i && jest","test6":"npm run es6 && jest","test5":"npm run es5 && jest","reportcoverage":"jest --coverage --coverageReporters=text-lcov | coveralls","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index","p6":"npm run lint && npm run test6"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Youssef"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-runtime":"^6.26.0","coveralls":"^3.0.9","eslint":"^6.8.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.19.1","eslint-plugin-jest":"^23.2.0","eslint-plugin-markdown":"^1.0.1","eslint-plugin-node":"^11.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-replace":"^1.0.0","jest":"^24.9.0","snyk":"^1.272.0"},"engines":{"node":">=6.0.0"},"readme":"# Ternion\n\n[![Build Status](https://travis-ci.org/michael-kamel/ternion.svg?branch=master)](https://travis-ci.org/michael-kamel/ternion)\n[![Coverage Status](https://coveralls.io/repos/github/michael-kamel/ternion/badge.svg?branch=master)](https://coveralls.io/github/michael-kamel/ternion?branch=master)\n[![Known Vulnerabilities](https://snyk.io/test/github/michael-kamel/ternion/badge.svg)](https://snyk.io/test/github/michael-kamel/ternion)\n[![Packagist](https://img.shields.io/packagist/l/doctrine/orm.svg)](https://img.shields.io/packagist/l/doctrine/orm.svg)\n[![DeepScan grade](https://deepscan.io/api/teams/6299/projects/8218/branches/94587/badge/grade.svg)](https://deepscan.io/dashboard#view=project&tid=6299&pid=8218&bid=94587)\n\n## A plugable socket.io framework that does the job for you\n\n## ~~This project is still under development~~\n\n### Sample usage\n\n``` javascript\nconst ternion = require('ternion');\nconst sockio = require('socket.io');\nconst io = sockio(8000);\n\nconst IDENTIFIER = 'id';\nconst emitter = ternion.buildTools.constructEmitter();\nconst defaultBuild = ternion.builds.defaultBuild();\n\nconst names = [];\nconst loggedIn = {};\nconst nameExistsValidator = ternion.buildTools.buildValidator((data, response, id) => names.indexOf(data.name) === -1, 'Name exists');\nconst nameLengthValidator = ternion.buildTools.buildValidator((data, response, id) => data.name.length > 2, 'Name must be of length 3 atleast');\nconst hasNameValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.name, 'No Name provided');\nconst loggedInValidator = ternion.buildTools.buildValidator((data, response, id) => !!loggedIn[id], 'Not logged in');\nconst hasMsgValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.msg, 'No message provided');\nconst msgEmptyValidator = ternion.buildTools.buildValidator((data, response, id) => data.msg.length > 2, 'Message must be of length 3 at least');\nconst nameFillMiddleware = (data, response, id) => { data.name = loggedIn[id]; };\nconst loginHandler = (data, response, id) => {\n  loggedIn[id] = data.name;\n  names.push(data.name);\n  response.respond('loginsuccess');\n};\nconst msgHandler = (data, response, id) => {\n  response.broadcast('message', { name: data.name, msg: data.msg });\n  response.respond('message', { name: data.name, msg: data.msg });\n};\nconst welcomeMsg = (data, response, id) => {\n  response.respond('misc', { name: data.name, msg: 'Welcome' });\n};\nconst disconnect = (data, response, id) => {\n  delete loggedIn[id];\n  names.splice(names.indexOf(data.name), 1);\n};\n\nconst buildSpec =\n{\n  events:\n    {\n      newclient:\n        {\n          handlers: [ welcomeMsg ]\n        },\n      disconnect:\n        {\n          middlewares: [ nameFillMiddleware ],\n          handlers: [ disconnect ]\n        },\n      login:\n        {\n          preValidators: [ hasNameValidator, nameLengthValidator, nameExistsValidator ],\n          handlers: [ loginHandler ]\n        },\n      message:\n        {\n          preValidators: [ loggedInValidator, hasMsgValidator, msgEmptyValidator ],\n          middlewares: [ nameFillMiddleware ],\n          handlers: [ msgHandler ]\n        }\n    }\n};\nconst newBuild = ternion.buildTools.constructBuild(\n  {\n    buildSpec,\n    opts: { preFailFast: true, postFailFast: true, unknownActionMsg: 'unknown', ignoreUnregisteredEvents: false }\n  });\n\nconst build = ternion.buildTools.mergeBuilds({ builds: [ defaultBuild, newBuild ] });\nconst handler = ternion.buildTools.constructHandler({ build, emitter, identifier: IDENTIFIER });\nconst sock = ternion.buildTools.constructManager({ eventSource: io, emitter, identifier: IDENTIFIER });\n\nsock.start();\nhandler.start();\n```\n\n``` javascript\nconst io = require('socket.io-client');\n\nconst client = io('http://localhost:8000/');\nclient.on('connect', function () {\n  console.log('connected');\n  client.emit('message', { msgType: 'login', msgData: { name: 'testname' } });\n});\nclient.on('message', function (data) {\n  const mdata = data.msgData;\n  switch (data.msgType) {\n    case 'validationErrors': console.log(mdata); break;\n    case 'loginsuccess': { console.log('logged in'); client.emit('message', { msgType: 'message', msgData: { msg: 'some random msg' } }); break; }\n    case 'misc': console.log(mdata.msg); break;\n    case 'message': console.log('message from ' + mdata.name + ' : ' + mdata.msg); break;\n    case 'unhandledError': console.log('unhandled: ' + mdata); break;\n    case 'unrecongnizedMessage': console.log('unrecongnized: ' + mdata); break;\n  }\n});\nclient.on('disconnect', function () { console.log('server closed connection'); });\n\n```\n","readmeFilename":"README.md","gitHead":"1ca30a4d60b243986d9fff4774dcc8d5db92fb84","_id":"ternion@0.7.6","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-vI5fikW2hurAMON+shux6dqLI7cqpsN/tvXd9JQvBXhwK1loDTQ0U21MDeFOD5ariNMi3KEvrVCN1K9dQwkztw==","shasum":"092a7c64c979c9d18cf29de7c96292794f9edc7a","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.7.6.tgz","fileCount":33,"unpackedSize":91705,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeD6MXCRA9TVsSAnZWagAAT8gP+wR6dWlU5PuGmlODXdp3\nmQjbt2fLD9lObMAnPcWi16VsOlk2I+kzo/ERsV6Be17fI8d1Jr4aBDzYw10e\n3TsmAwBX6EMN0GqP/yUP11DT0HlD0RrnDYV9mwujExfVcCs02hYbxp8S+MV8\nq6tMvalTK4i42M324Fzq8fe5UnznIreOdjfahN080/lr9z2OL802xH/zcFK/\nhlNfaeUKeBAIli1u1IAQCyPXleXiS1lv1zLlHc9VmryLJQk7TsXMLccseLen\nGiEekyt6NPYrblMu8Ry5o178PV6HdRtBFfEwTQuds13KEVM/MWO9813jIYCw\n/6bS7y7S+5IDNPc4v8CLHh4dLDOyzjpNjC/YpgTTtmeHLj1BzZkOwa2R6ghr\n7ErqrAwsuEYlMQiryCa74qPYhmcHMd/beFaQ28p5sBTW5SqszrV/p7jtTYYP\n9Ab3pFySnSonBa1BPkG3Y1EEQwCXhPQBYRdRVyXLoVBcWVgWi5n82AxhUGGx\nnF2KZzKmBmr4BofkH8EiK050t8SWiVazpl+h+55RxZQq+DKSifsfalthCHOZ\njfroREfiWH2kND1ehIXVr/LBlARmTIQL8nnBQQ9NTCFVigWuhoEJ8sIbKiJy\nXOH9+3IjTBOEBhIOHZYw/OlIXWazY6hGFhS64Bs8erVaO8HK4g6YsQ2UU5Mm\nfZsJ\r\n=vUbv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDk8HwxbvSHSUSaKikSZN/Y7B/uA59EstzAa/72oxLKOQIhAKDmJInGSmAEAXT9CjV9/HAYHieQT2LyZNrSOP6hqCAO"}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion_0.7.6_1578083094820_0.5239934143884952"},"_hasShrinkwrap":false},"0.8.1":{"name":"ternion","version":"0.8.1","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"pret":"npx prettier --write '**/*.js'","lint":"npx eslint --fix --ext .js --ext .md .","test":"npm run es7i && jest","test6":"npm run es6 && jest","test5":"npm run es5 && jest","reportcoverage":"jest --coverage --coverageReporters=text-lcov | coveralls","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index","p":"npm run pret && npm run lint && npm run test","p6":"npm run pret && npm run lint && npm run test6"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Youssef"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-runtime":"^6.26.0","coveralls":"^3.0.9","eslint":"^6.8.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.19.1","eslint-plugin-jest":"^23.2.0","eslint-plugin-markdown":"^1.0.1","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-replace":"^1.0.0","jest":"^24.9.0","prettier":"1.19.1","snyk":"^1.277.0"},"engines":{"node":">=7.10.1"},"readme":"# Ternion\n\n[![Build Status](https://travis-ci.org/michael-kamel/ternion.svg?branch=master)](https://travis-ci.org/michael-kamel/ternion)\n[![Coverage Status](https://coveralls.io/repos/github/michael-kamel/ternion/badge.svg?branch=master)](https://coveralls.io/github/michael-kamel/ternion?branch=master)\n[![Known Vulnerabilities](https://snyk.io/test/github/michael-kamel/ternion/badge.svg)](https://snyk.io/test/github/michael-kamel/ternion)\n[![Packagist](https://img.shields.io/packagist/l/doctrine/orm.svg)](https://img.shields.io/packagist/l/doctrine/orm.svg)\n[![DeepScan grade](https://deepscan.io/api/teams/6299/projects/8218/branches/94587/badge/grade.svg)](https://deepscan.io/dashboard#view=project&tid=6299&pid=8218&bid=94587)\n\n## A plugable socket.io framework that does the job for you\n\n## ~~This project is still under development~~\n\n### Sample usage\n\n``` javascript\nconst ternion = require('ternion');\nconst sockio = require('socket.io');\nconst io = sockio(8000);\n\nconst IDENTIFIER = 'id';\nconst emitter = ternion.buildTools.constructEmitter();\nconst defaultBuild = ternion.builds.defaultBuild();\n\nconst names = [];\nconst loggedIn = {};\nconst nameExistsValidator = ternion.buildTools.buildValidator((data, response, id) => names.indexOf(data.name) === -1, 'Name exists');\nconst nameLengthValidator = ternion.buildTools.buildValidator((data, response, id) => data.name.length > 2, 'Name must be of length 3 atleast');\nconst hasNameValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.name, 'No Name provided');\nconst loggedInValidator = ternion.buildTools.buildValidator((data, response, id) => !!loggedIn[id], 'Not logged in');\nconst hasMsgValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.msg, 'No message provided');\nconst msgEmptyValidator = ternion.buildTools.buildValidator((data, response, id) => data.msg.length > 2, 'Message must be of length 3 at least');\nconst nameFillMiddleware = (data, response, id) => { data.name = loggedIn[id]; };\nconst loginHandler = (data, response, id) => {\n  loggedIn[id] = data.name;\n  names.push(data.name);\n  response.respond('loginsuccess');\n};\nconst msgHandler = (data, response, id) => {\n  response.broadcast('message', { name: data.name, msg: data.msg });\n  response.respond('message', { name: data.name, msg: data.msg });\n};\nconst welcomeMsg = (data, response, id) => {\n  response.respond('misc', { name: data.name, msg: 'Welcome' });\n};\nconst disconnect = (data, response, id) => {\n  delete loggedIn[id];\n  names.splice(names.indexOf(data.name), 1);\n};\n\nconst buildSpec =\n{\n  events:\n    {\n      newclient:\n        {\n          handlers: [welcomeMsg]\n        },\n      disconnect:\n        {\n          middlewares: [nameFillMiddleware],\n          handlers: [disconnect]\n        },\n      login:\n        {\n          preValidators: [hasNameValidator, nameLengthValidator, nameExistsValidator],\n          handlers: [loginHandler]\n        },\n      message:\n        {\n          preValidators: [loggedInValidator, hasMsgValidator, msgEmptyValidator],\n          middlewares: [nameFillMiddleware],\n          handlers: [msgHandler]\n        }\n    }\n};\nconst newBuild = ternion.buildTools.constructBuild(\n  {\n    buildSpec,\n    opts: { preFailFast: true, postFailFast: true, unknownActionMsg: 'unknown', ignoreUnregisteredEvents: false }\n  });\n\nconst build = ternion.buildTools.mergeBuilds({ builds: [defaultBuild, newBuild] });\nconst handler = ternion.buildTools.constructHandler({ build, emitter, identifier: IDENTIFIER });\nconst sock = ternion.buildTools.constructManager({ eventSource: io, emitter, identifier: IDENTIFIER });\n\nsock.start();\nhandler.start();\n```\n\n``` javascript\nconst io = require('socket.io-client');\n\nconst client = io('http://localhost:8000/');\nclient.on('connect', function() {\n  console.log('connected');\n  client.emit('message', { msgType: 'login', msgData: { name: 'testname' } });\n});\nclient.on('message', function(data) {\n  const mdata = data.msgData;\n  switch (data.msgType) {\n    case 'validationErrors': console.log(mdata); break;\n    case 'loginsuccess': { console.log('logged in'); client.emit('message', { msgType: 'message', msgData: { msg: 'some random msg' } }); break; }\n    case 'misc': console.log(mdata.msg); break;\n    case 'message': console.log('message from ' + mdata.name + ' : ' + mdata.msg); break;\n    case 'unhandledError': console.log('unhandled: ' + mdata); break;\n    case 'unrecongnizedMessage': console.log('unrecongnized: ' + mdata); break;\n  }\n});\nclient.on('disconnect', function() { console.log('server closed connection'); });\n\n```\n","readmeFilename":"README.md","gitHead":"74fa83a56a0c005083f1a70813c04ef2181b7205","_id":"ternion@0.8.1","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-RFyUKj2ZNnhUoGXNYpt4K/1EMHh73lYDwvSxSg96Dt760E+nrjMZ6TVfMhTI1lajX5xKmTvCIhB4FgVvcCa20g==","shasum":"927d744c97f56b31fca19b54eed5b357e2990843","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.8.1.tgz","fileCount":26,"unpackedSize":77503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeFUScCRA9TVsSAnZWagAA6BgP/1l95bWD5NGKYpaWzm3/\nOOXey20OmOCet296OYcUMLuHt+sOuLS64QDZOOVtajqFLfKhx6zAHuIYnmNS\nLF+VI1zqEXho0SDfNCYMfR6N9gToWyciDRe3AgSYZnKb84hVhGAY5lfWctry\nzkoiTcGg/WWGr1x2LaZV4evCQm9FmwaDY56quMqOP0P/Lu/uGrtC7e6+2nZ3\nS//CIAdqOSfRp66adFOJsoKihkVK0HftDWI2hRXLkdjJOcDnzly40eIDvNkg\nywRHg7QvEFv4kyU2iP9ZEytGFqQnhFwQyRdx3ERaBK4uU5t7I2oB9xG4fvfQ\n4yZ/+CsNHE4afHERWjwGRjPhXMfF7emftOuU2YHUXeiJP7bDcna6BjxufAT1\ntVc2K8aS6xEp/FrtpS0auDBfF2y9FoT4F7reU5zKGkrY0nu9D9a8ugyQYWym\n2KoQGz17App1CLatLHXJrLqcTrLNFhs37ZJENzfBtraGyWN0Ja38mT7I3tTW\n4my6K9yWCWzOc2IvIaobUkidEYHo+x1ss+Z7XDyL8alU6ks61U/51tya8Mfc\nBTg2HhoKf6NhVVQR71+DrJWfqwJa+yfjPObc8YqDHUSIgCreczULtqHnHP9V\nYd2BHGi5bZHxA6ixLYnWzPRJtKZNt/c8u8bhChDEQ1pmTJkrcufFCL6vZnkd\nrGvV\r\n=fuID\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHv0F8sKJXol5mvrbszz0OCumG+aoS6eR39VWgOUC0aNAiAYNOmF/dO4V5hzQ9/vKK9IylP7/Ux6lsPojnQEAzbsrw=="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion_0.8.1_1578452123584_0.7792725855778087"},"_hasShrinkwrap":false},"0.8.2":{"name":"ternion","version":"0.8.2","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"pret":"npx prettier --write '**/*.js'","lint":"npx eslint --fix --ext .js --ext .md .","test":"npm run es7i && jest","test6":"npm run es6 && jest","test5":"npm run es5 && jest","reportcoverage":"jest --coverage --coverageReporters=text-lcov | coveralls","es5":"gulp es5p","es6":"gulp es6p","es7i":"gulp es7index","p":"npm run pret && npm run lint && npm run test","p6":"npm run pret && npm run lint && npm run test6"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Youssef"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"babel-plugin-transform-async-to-generator":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-runtime":"^6.26.0","coveralls":"^3.0.9","eslint":"^6.8.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.19.1","eslint-plugin-jest":"^23.2.0","eslint-plugin-markdown":"^1.0.1","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-replace":"^1.0.0","jest":"^24.9.0","prettier":"1.19.1","snyk":"^1.277.0"},"engines":{"node":">=7.10.1"},"readme":"# Ternion\n\n[![Build Status](https://travis-ci.org/michael-kamel/ternion.svg?branch=master)](https://travis-ci.org/michael-kamel/ternion)\n[![Coverage Status](https://coveralls.io/repos/github/michael-kamel/ternion/badge.svg?branch=master)](https://coveralls.io/github/michael-kamel/ternion?branch=master)\n[![Known Vulnerabilities](https://snyk.io/test/github/michael-kamel/ternion/badge.svg)](https://snyk.io/test/github/michael-kamel/ternion)\n[![Packagist](https://img.shields.io/packagist/l/doctrine/orm.svg)](https://img.shields.io/packagist/l/doctrine/orm.svg)\n[![DeepScan grade](https://deepscan.io/api/teams/6299/projects/8218/branches/94587/badge/grade.svg)](https://deepscan.io/dashboard#view=project&tid=6299&pid=8218&bid=94587)\n[![Maintainability](https://api.codeclimate.com/v1/badges/d1e548a5f9be482a64d9/maintainability)](https://codeclimate.com/github/michael-kamel/ternion/maintainability)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/4091b2ded5b6418bbb03b02f001d8ed5)](https://www.codacy.com/manual/michael-kamel/ternion?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=michael-kamel/ternion&amp;utm_campaign=Badge_Grade)\n\n## A plugable socket.io framework that does the job for you\n\n## ~~This project is still under development~~\n\n### Sample usage\n\n``` javascript\nconst ternion = require('ternion');\nconst sockio = require('socket.io');\nconst io = sockio(8000);\n\nconst IDENTIFIER = 'id';\nconst emitter = ternion.buildTools.constructEmitter();\nconst defaultBuild = ternion.builds.defaultBuild();\n\nconst names = [];\nconst loggedIn = {};\nconst nameExistsValidator = ternion.buildTools.buildValidator((data, response, id) => names.indexOf(data.name) === -1, 'Name exists');\nconst nameLengthValidator = ternion.buildTools.buildValidator((data, response, id) => data.name.length > 2, 'Name must be of length 3 atleast');\nconst hasNameValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.name, 'No Name provided');\nconst loggedInValidator = ternion.buildTools.buildValidator((data, response, id) => !!loggedIn[id], 'Not logged in');\nconst hasMsgValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.msg, 'No message provided');\nconst msgEmptyValidator = ternion.buildTools.buildValidator((data, response, id) => data.msg.length > 2, 'Message must be of length 3 at least');\nconst nameFillMiddleware = (data, response, id) => { data.name = loggedIn[id]; };\nconst loginHandler = (data, response, id) => {\n  loggedIn[id] = data.name;\n  names.push(data.name);\n  response.respond('loginsuccess');\n};\nconst msgHandler = (data, response, id) => {\n  response.broadcast('message', { name: data.name, msg: data.msg });\n  response.respond('message', { name: data.name, msg: data.msg });\n};\nconst welcomeMsg = (data, response, id) => {\n  response.respond('misc', { name: data.name, msg: 'Welcome' });\n};\nconst disconnect = (data, response, id) => {\n  delete loggedIn[id];\n  names.splice(names.indexOf(data.name), 1);\n};\n\nconst buildSpec =\n{\n  events:\n    {\n      newclient:\n        {\n          handlers: [welcomeMsg]\n        },\n      disconnect:\n        {\n          middlewares: [nameFillMiddleware],\n          handlers: [disconnect]\n        },\n      login:\n        {\n          preValidators: [hasNameValidator, nameLengthValidator, nameExistsValidator],\n          handlers: [loginHandler]\n        },\n      message:\n        {\n          preValidators: [loggedInValidator, hasMsgValidator, msgEmptyValidator],\n          middlewares: [nameFillMiddleware],\n          handlers: [msgHandler]\n        }\n    }\n};\nconst newBuild = ternion.buildTools.constructBuild(\n  {\n    buildSpec,\n    opts: { preFailFast: true, postFailFast: true, unknownActionMsg: 'unknown', ignoreUnregisteredEvents: false }\n  });\n\nconst build = ternion.buildTools.mergeBuilds({ builds: [defaultBuild, newBuild] });\nconst handler = ternion.buildTools.constructHandler({ build, emitter, identifier: IDENTIFIER });\nconst sock = ternion.buildTools.constructManager({ eventSource: io, emitter, identifier: IDENTIFIER });\n\nsock.start();\nhandler.start();\n```\n\n``` javascript\nconst io = require('socket.io-client');\n\nconst client = io('http://localhost:8000/');\nclient.on('connect', function() {\n  console.log('connected');\n  client.emit('message', { msgType: 'login', msgData: { name: 'testname' } });\n});\nclient.on('message', function(data) {\n  const mdata = data.msgData;\n  switch (data.msgType) {\n    case 'validationErrors': console.log(mdata); break;\n    case 'loginsuccess': { console.log('logged in'); client.emit('message', { msgType: 'message', msgData: { msg: 'some random msg' } }); break; }\n    case 'misc': console.log(mdata.msg); break;\n    case 'message': console.log('message from ' + mdata.name + ' : ' + mdata.msg); break;\n    case 'unhandledError': console.log('unhandled: ' + mdata); break;\n    case 'unrecongnizedMessage': console.log('unrecongnized: ' + mdata); break;\n  }\n});\nclient.on('disconnect', function() { console.log('server closed connection'); });\n\n```\n","readmeFilename":"README.md","gitHead":"abc9b49c222c5e4be4107c258463e6346ed1f285","_id":"ternion@0.8.2","_nodeVersion":"12.13.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-BmtKl2vPHLbxJrlENinhzRUK76g7PG9WfWfg3/0dGGBblyXMD3FTzGZiCy5W65vbB7M4dlv0rgtF26QP8CWwKQ==","shasum":"d08f09464f6cb3db830985077c296abafbb8936c","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.8.2.tgz","fileCount":26,"unpackedSize":77931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeFUdhCRA9TVsSAnZWagAAA6sQAJhG/IFN9/WQYuK4AJXG\nQiGN09eErD5n3vhbqJlsv4UyU/GwBRCIH7IOpzPnPz+wcQ+QLvYzt+XhLG8u\n3hCb1G6Z5kELoQIhnppw3gUauz3uGVjkscGXbh6Ow4fh3RvPmqI6QXKVOfnF\nT02xXsIR/mFPXzoGnbI5JSYbv8ikXM51v+sL8dLCBtTNLeeJnVuT3Z7k46LO\nyuk0Np6QcSFTMyYiL4DEEh+InsyHf7xDizrUgbYeVQYts7SrSysxvXNGBa4W\nbZEdgxeDtPSawpwk1TCa0weExiGuBuNk7m3ccFqQ1dt7OXRlYoB0TV1j3P/i\ndu3aAZsakuibteN8+iVymBTdZstN6HwnGWoY1km39CjaEtEm0wDuNZQmU6LT\n96uQGevV7mb+oJEfyrOgYbVF024aWxVPHgozuBL3q0argV+ZYv/q941w2uJM\nGlyQxOEHLc8arCi8gLkLUjFl6kGNjZokCLM8UhkYtA5R2W7wBXaQq8GwNXc+\nW/he2qTYbkLn8i7Rgg67hWnlvUc9SzJ4oJ944IFmluSK2XbwAwZCK2ioNm3/\nhzW0g/g1bkXXnUddDRHOf9+001pfjInYIyRxbXyOzmaE2TOJ6mMVzmAy+uW/\nrbKAzfZVH6T/5g8SkVPzBHtFsMZDyBIRcsIQIzJM8shoPE/Pg2pyX7aDyN9w\nb0fu\r\n=DRrK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4J81mAA8ZFGYxmbuLc69KvReN4OCiyxqkkJH1rmraegIgMikajuXgY2yERznxTIRrLi1nNXSUD/ZtHiZ3faqwleM="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion_0.8.2_1578452832825_0.015679775887462277"},"_hasShrinkwrap":false},"0.8.3":{"name":"ternion","version":"0.8.3","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"pret":"npx prettier --write '**/*.js'","lint":"npx eslint --fix --ext .js --ext .md .","test":"npx jest","reportcoverage":"jest --coverage --coverageReporters=text-lcov | coveralls","p":"npm run pret && npm run lint && npm run test"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Youssef"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"@types/jest":"^24.9.1","coveralls":"^3.0.9","eslint":"^6.8.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.19.1","eslint-plugin-jest":"^23.2.0","eslint-plugin-markdown":"^1.0.1","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","jest":"^24.9.0","prettier":"1.19.1","snyk":"^1.277.0"},"engines":{"node":">=7.10.1"},"readme":"# Ternion\n\n[![Build Status](https://travis-ci.org/michael-kamel/ternion.svg?branch=master)](https://travis-ci.org/michael-kamel/ternion)\n[![Coverage Status](https://coveralls.io/repos/github/michael-kamel/ternion/badge.svg?branch=master)](https://coveralls.io/github/michael-kamel/ternion?branch=master)\n[![Known Vulnerabilities](https://snyk.io/test/github/michael-kamel/ternion/badge.svg)](https://snyk.io/test/github/michael-kamel/ternion)\n[![Packagist](https://img.shields.io/packagist/l/doctrine/orm.svg)](https://img.shields.io/packagist/l/doctrine/orm.svg)\n[![DeepScan grade](https://deepscan.io/api/teams/6299/projects/8218/branches/94587/badge/grade.svg)](https://deepscan.io/dashboard#view=project&tid=6299&pid=8218&bid=94587)\n[![Maintainability](https://api.codeclimate.com/v1/badges/d1e548a5f9be482a64d9/maintainability)](https://codeclimate.com/github/michael-kamel/ternion/maintainability)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/4091b2ded5b6418bbb03b02f001d8ed5)](https://www.codacy.com/manual/michael-kamel/ternion?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=michael-kamel/ternion&amp;utm_campaign=Badge_Grade)\n\n## A plugable socket.io framework that does the job for you\n\n## ~~This project is still under development~~\n\n### Sample usage\n\n``` javascript\nconst ternion = require(\"ternion\");\nconst sockio = require(\"socket.io\");\nconst io = sockio(8000);\n\nconst IDENTIFIER = \"id\";\nconst emitter = ternion.buildTools.constructEmitter();\nconst defaultBuild = ternion.builds.defaultBuild();\n\nconst names = [];\nconst loggedIn = {};\nconst nameExistsValidator = ternion.buildTools.buildValidator((data, response, id) => names.indexOf(data.name) === -1, \"Name exists\");\nconst nameLengthValidator = ternion.buildTools.buildValidator((data, response, id) => data.name.length > 2, \"Name must be of length 3 atleast\");\nconst hasNameValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.name, \"No Name provided\");\nconst loggedInValidator = ternion.buildTools.buildValidator((data, response, id) => !!loggedIn[id], \"Not logged in\");\nconst hasMsgValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.msg, \"No message provided\");\nconst msgEmptyValidator = ternion.buildTools.buildValidator((data, response, id) => data.msg.length > 2, \"Message must be of length 3 at least\");\nconst nameFillMiddleware = (data, response, id) => { data.name = loggedIn[id]; };\nconst loginHandler = (data, response, id) => {\n  loggedIn[id] = data.name;\n  names.push(data.name);\n  response.respond(\"loginsuccess\");\n};\nconst msgHandler = (data, response, id) => {\n  response.broadcast(\"message\", { name: data.name, msg: data.msg });\n  response.respond(\"message\", { name: data.name, msg: data.msg });\n};\nconst welcomeMsg = (data, response, id) => {\n  response.respond(\"misc\", { name: data.name, msg: \"Welcome\" });\n};\nconst disconnect = (data, response, id) => {\n  delete loggedIn[id];\n  names.splice(names.indexOf(data.name), 1);\n};\n\nconst buildSpec =\n{\n  events:\n    {\n      newclient:\n        {\n          handlers: [welcomeMsg]\n        },\n      disconnect:\n        {\n          middlewares: [nameFillMiddleware],\n          handlers: [disconnect]\n        },\n      login:\n        {\n          preValidators: [hasNameValidator, nameLengthValidator, nameExistsValidator],\n          handlers: [loginHandler]\n        },\n      message:\n        {\n          preValidators: [loggedInValidator, hasMsgValidator, msgEmptyValidator],\n          middlewares: [nameFillMiddleware],\n          handlers: [msgHandler]\n        }\n    }\n};\nconst newBuild = ternion.buildTools.constructBuild(\n  {\n    buildSpec,\n    opts: { preFailFast: true, postFailFast: true, unknownActionMsg: \"unknown\", ignoreUnregisteredEvents: false }\n  });\n\nconst build = ternion.buildTools.mergeBuilds({ builds: [defaultBuild, newBuild] });\nconst handler = ternion.buildTools.constructHandler({ build, emitter, identifier: IDENTIFIER });\nconst sock = ternion.buildTools.constructManager({ eventSource: io, emitter, identifier: IDENTIFIER });\n\nsock.start();\nhandler.start();\n```\n\n``` javascript\nconst io = require(\"socket.io-client\");\n\nconst client = io(\"http://localhost:8000/\");\nclient.on(\"connect\", function() {\n  console.log(\"connected\");\n  client.emit(\"message\", { msgType: \"login\", msgData: { name: \"testname\" } });\n});\nclient.on(\"message\", function(data) {\n  const mdata = data.msgData;\n  switch (data.msgType) {\n    case \"validationErrors\": console.log(mdata); break;\n    case \"loginsuccess\": { console.log(\"logged in\"); client.emit(\"message\", { msgType: \"message\", msgData: { msg: \"some random msg\" } }); break; }\n    case \"misc\": console.log(mdata.msg); break;\n    case \"message\": console.log(\"message from \" + mdata.name + \" : \" + mdata.msg); break;\n    case \"unhandledError\": console.log(\"unhandled: \" + mdata); break;\n    case \"unrecongnizedMessage\": console.log(\"unrecongnized: \" + mdata); break;\n  }\n});\nclient.on(\"disconnect\", function() { console.log(\"server closed connection\"); });\n\n```\n","readmeFilename":"README.md","gitHead":"573fe6a4f3eeced6d357ed6e9dc547cac0a9e1e6","_id":"ternion@0.8.3","_nodeVersion":"12.13.0","_npmVersion":"6.13.6","dist":{"integrity":"sha512-FmclWADwiZjWTK7WDvAUGhS8nvpMKczwpf2rU3BV5a5VOOp28nt+tyvXNt9yHcpfb898AZ55HgojF/YxELOnjA==","shasum":"c3875a17dd8098120a0a3e7fb1fadbd3e00c7b07","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.8.3.tgz","fileCount":25,"unpackedSize":77513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeKoW2CRA9TVsSAnZWagAASFYP/3NAn4XDicvp7pdtH4n/\nT4c2JphSBKkfs4BhLm1THgZKUcl0ePIX4kB9eQxbVFY13BeGbiTHNfcp3s2F\nZYH48I4OAjsP8k2DZqiBu4N3Zi5Pzh8pk+4iwWHMn1Ece0M/iV+xpN/LiQ5s\nsDDS+aQnWxk57uScLiA+3JWmFKUU29kAIN4YnAyiMeknobkWwz1CwVGaEtQN\nR274BCmH5Xu7Ijk5srEJsChAg2AA++3Ep1OSob/W5DkYuUAo5U2bDXEqNA6w\n9zrEcnFWu7biVNoeYbpY3YYQYPxhQj6QvwDkzWV13RXZvU6TvUxa5EkCn7iL\nBdTXVE99A8LWFt8cGNpMXZZHQBG9+6kJwuKV7pNKKQnwu7gDhjcumo2o4G2d\nVoOtNAHhkj1JyjqWxS4DpM1wr4ngwel7BXSljjlZeWfCeaxWlgSBXicNEDGw\n38RUZMLU2Jjl7SMp0KuwQImWONAKZGIsBeDKjDq+n2CYJvK8VZhZe118TzcX\nhrfYUIDo40tIV4alUtIb22ELDGTzw1Y4KhznwsdeUkJfprB76dhJrrlLnxcQ\n8EXljr1ptIp0gi5F1JQpk9v6FXMLdpJ/7iofAj+QZZ5V7UgDSyVs/J6VbRUC\ncz+d2DaB2UcW5dODJ+A8sV4T5BbPWVA310YLAy4vIAo+p2akmseAjEX1J2kj\n7jl4\r\n=woEj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLHp836C4bQN2YWeZPO+U15IKLbal1YEpx9L5pxEtGxAIgCbdQCqd8irrJTzDjG3ru/KPXaIbPY0+EEw1kruEpLyg="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion_0.8.3_1579845046556_0.8689743284966065"},"_hasShrinkwrap":false},"0.8.4":{"name":"ternion","version":"0.8.4","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"pret":"npx prettier --write '**/*.js'","lint":"npx eslint --fix --ext .js --ext .md .","test":"npx jest","reportcoverage":"jest --coverage --coverageReporters=text-lcov | coveralls","p":"npm run pret && npm run lint && npm run test"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Youssef"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"@types/jest":"^24.9.1","coveralls":"^3.0.9","eslint":"^6.8.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.20.0","eslint-plugin-jest":"^23.6.0","eslint-plugin-markdown":"^1.0.1","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","jest":"^25.1.0","prettier":"1.19.1","snyk":"^1.280.0"},"engines":{"node":">=8.10.0"},"readme":"# Ternion\n\n[![Build Status](https://travis-ci.org/michael-kamel/ternion.svg?branch=master)](https://travis-ci.org/michael-kamel/ternion)\n[![Coverage Status](https://coveralls.io/repos/github/michael-kamel/ternion/badge.svg?branch=master)](https://coveralls.io/github/michael-kamel/ternion?branch=master)\n[![Known Vulnerabilities](https://snyk.io/test/github/michael-kamel/ternion/badge.svg)](https://snyk.io/test/github/michael-kamel/ternion)\n[![Packagist](https://img.shields.io/packagist/l/doctrine/orm.svg)](https://img.shields.io/packagist/l/doctrine/orm.svg)\n[![DeepScan grade](https://deepscan.io/api/teams/6299/projects/8218/branches/94587/badge/grade.svg)](https://deepscan.io/dashboard#view=project&tid=6299&pid=8218&bid=94587)\n[![Maintainability](https://api.codeclimate.com/v1/badges/d1e548a5f9be482a64d9/maintainability)](https://codeclimate.com/github/michael-kamel/ternion/maintainability)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/4091b2ded5b6418bbb03b02f001d8ed5)](https://www.codacy.com/manual/michael-kamel/ternion?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=michael-kamel/ternion&amp;utm_campaign=Badge_Grade)\n\n## A plugable socket.io framework that does the job for you\n\n## ~~This project is still under development~~\n\n### Sample usage\n\n``` javascript\nconst ternion = require(\"ternion\");\nconst sockio = require(\"socket.io\");\nconst io = sockio(8000);\n\nconst IDENTIFIER = \"id\";\nconst emitter = ternion.buildTools.constructEmitter();\nconst defaultBuild = ternion.builds.defaultBuild();\n\nconst names = [];\nconst loggedIn = {};\nconst nameExistsValidator = ternion.buildTools.buildValidator((data, response, id) => names.indexOf(data.name) === -1, \"Name exists\");\nconst nameLengthValidator = ternion.buildTools.buildValidator((data, response, id) => data.name.length > 2, \"Name must be of length 3 atleast\");\nconst hasNameValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.name, \"No Name provided\");\nconst loggedInValidator = ternion.buildTools.buildValidator((data, response, id) => !!loggedIn[id], \"Not logged in\");\nconst hasMsgValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.msg, \"No message provided\");\nconst msgEmptyValidator = ternion.buildTools.buildValidator((data, response, id) => data.msg.length > 2, \"Message must be of length 3 at least\");\nconst nameFillMiddleware = (data, response, id) => { data.name = loggedIn[id]; };\nconst loginHandler = (data, response, id) => {\n  loggedIn[id] = data.name;\n  names.push(data.name);\n  response.respond(\"loginsuccess\");\n};\nconst msgHandler = (data, response, id) => {\n  response.broadcast(\"message\", { name: data.name, msg: data.msg });\n  response.respond(\"message\", { name: data.name, msg: data.msg });\n};\nconst welcomeMsg = (data, response, id) => {\n  response.respond(\"misc\", { name: data.name, msg: \"Welcome\" });\n};\nconst disconnect = (data, response, id) => {\n  delete loggedIn[id];\n  names.splice(names.indexOf(data.name), 1);\n};\n\nconst buildSpec =\n{\n  events:\n    {\n      newclient:\n        {\n          handlers: [welcomeMsg]\n        },\n      disconnect:\n        {\n          middlewares: [nameFillMiddleware],\n          handlers: [disconnect]\n        },\n      login:\n        {\n          preValidators: [hasNameValidator, nameLengthValidator, nameExistsValidator],\n          handlers: [loginHandler]\n        },\n      message:\n        {\n          preValidators: [loggedInValidator, hasMsgValidator, msgEmptyValidator],\n          middlewares: [nameFillMiddleware],\n          handlers: [msgHandler]\n        }\n    }\n};\nconst newBuild = ternion.buildTools.constructBuild(\n  {\n    buildSpec,\n    opts: { preFailFast: true, postFailFast: true, unknownActionMsg: \"unknown\", ignoreUnregisteredEvents: false }\n  });\n\nconst build = ternion.buildTools.mergeBuilds({ builds: [defaultBuild, newBuild] });\nconst handler = ternion.buildTools.constructHandler({ build, emitter, identifier: IDENTIFIER });\nconst sock = ternion.buildTools.constructManager({ eventSource: io, emitter, identifier: IDENTIFIER });\n\nsock.start();\nhandler.start();\n```\n\n``` javascript\nconst io = require(\"socket.io-client\");\n\nconst client = io(\"http://localhost:8000/\");\nclient.on(\"connect\", function() {\n  console.log(\"connected\");\n  client.emit(\"message\", { msgType: \"login\", msgData: { name: \"testname\" } });\n});\nclient.on(\"message\", function(data) {\n  const mdata = data.msgData;\n  switch (data.msgType) {\n    case \"validationErrors\": console.log(mdata); break;\n    case \"loginsuccess\": { console.log(\"logged in\"); client.emit(\"message\", { msgType: \"message\", msgData: { msg: \"some random msg\" } }); break; }\n    case \"misc\": console.log(mdata.msg); break;\n    case \"message\": console.log(\"message from \" + mdata.name + \" : \" + mdata.msg); break;\n    case \"unhandledError\": console.log(\"unhandled: \" + mdata); break;\n    case \"unrecongnizedMessage\": console.log(\"unrecongnized: \" + mdata); break;\n  }\n});\nclient.on(\"disconnect\", function() { console.log(\"server closed connection\"); });\n\n```\n","readmeFilename":"README.md","gitHead":"b7f0aaa9e0aaf74e344178ae760d5ef65f16eb74","_id":"ternion@0.8.4","_nodeVersion":"12.13.0","_npmVersion":"6.13.6","dist":{"integrity":"sha512-DK1WYe8RlJ5ez5W6FKHt2EP6xihdb9xKzESjiItamzcxzf6ZSDLFExb8AbolVdW6b0vfoewTpEDljuCxYt0yNA==","shasum":"fcca2a0f40cba07df99355a0bde2870145e521b6","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.8.4.tgz","fileCount":26,"unpackedSize":78224,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeLpkQCRA9TVsSAnZWagAAaZEP/RAdcHiI9OMKcYUp3SXa\n3ygGmr77lCt7OwRySIB8rrCUNDIkn5tl1YvtEnMUckZFPqaGkKrRS9t5jBcR\noPMgLthC7G54lgfFnjpCTNnr11YktbOWCse9AcNnMHZ2UeLefMDfOsCx32zR\n8KT2z43553osK0GgM9k4yEQ5Tdzu7flPuzFt0a4ak7pxtVZVSn2pKH7XlCvt\nBh+c7es4dlhC5cgdyay90PWyuxwR27Tb7Xe8KLO/oBH/u7Hn9gw3HuR6cbWF\nlrEXAoGA5M2NUuHb7syK9SKjXCLEYAQm+XhL6ZpxVYkyIaZVsjCAe0I1RKl1\nqp4IW36uG5JTtxetD5Rd8u1GiS0l5ffdTC/fNiagX3TRLgkbzdo0xpwFO3tj\niT7/PADuAUCmhw15PxiRf8RdfWsizrG0VpZOc8+byAvIB7nsMEDrTV8e+aBs\nFqlAGOuah8wb2F4XY/oQD1uZ2VIaPqlRcEHHC0rBXwyZ5RX5XpRFGu4wrfsB\nHRn+8LBQpT1JMDVk3sJcGFvttuOcfaJwLike0P0aKUsPQlg2uzntnY4XOYdr\nXDlRUSr4TVIO2gEJ36jOMV+/igXCWu5MBNET6tKZjPCx174GZrAzvfIyFfXR\nE1NjuOMmdCwtrkfhvviKH0kP+y89CIjFKyGe6trhEvtH1LThK2kMyi1ret1M\nopWD\r\n=IGKb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB8ZCAWmSVKjU3WBvhhRn/1SC1d7LjF+exPaKY+tm/HVAiAjA4IC3OHTLjmGdfYQ2ySn+b40bZ9AMSpltN93hkeiKQ=="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion_0.8.4_1580112144519_0.23156996759582626"},"_hasShrinkwrap":false},"0.8.5":{"name":"ternion","version":"0.8.5","description":"A socket.io framework that does the job for you.","main":"index.js","scripts":{"pret":"npx prettier --write '**/*.js'","lint":"npx eslint --fix --ext .js --ext .md .","test":"npx jest","reportcoverage":"jest --coverage --coverageReporters=text-lcov | coveralls","p":"npm run pret && npm run lint && npm run test"},"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"keywords":["npm","socket.io","framework"],"author":{"name":"Michael Youssef"},"license":"MIT","bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"homepage":"https://github.com/michael-kamel/ternion#readme","dependencies":{},"devDependencies":{"@types/jest":"^25.1.1","coveralls":"^3.0.9","eslint":"^6.8.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.20.0","eslint-plugin-jest":"^23.6.0","eslint-plugin-markdown":"^1.0.1","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.2","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","jest":"^25.1.0","prettier":"1.19.1","snyk":"^1.280.0"},"engines":{"node":">=8.10.0"},"gitHead":"bcf6453582d1d03d1ee32b4c777d5cbcf3af0e5f","_id":"ternion@0.8.5","_nodeVersion":"12.13.0","_npmVersion":"6.13.6","dist":{"integrity":"sha512-0B+JspZq7hgU+UuWYdT5lbvSBk8kJ9V/oSonrH2wT13dQf0PjqI2sqtb7vLAh4+jmP3IfR5ireW7yccFNFrMsw==","shasum":"bb9f1da5a8fe99e12064b1bdb4e3a11f05122e71","tarball":"https://registry.npmjs.org/ternion/-/ternion-0.8.5.tgz","fileCount":26,"unpackedSize":78622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeMrA4CRA9TVsSAnZWagAAzBYP/1uH5ieEsVdaRMIecHGG\nsP1eS0SVu54V/s8wi/DwN8tJorqiRrguWnbYKZf7A/8M5kN2BX9IJ5Xaotn1\npUNsxI+LaTcKLFKUA0tbxBlDWYHBuEhEhcQDNTIGs561cozplGnyJUGdwG/b\nswnldA/Z89cGQbpI9eP7dW2/wY8I/XTfrO9EkihXgN/dMD0SJMnh/vhVyVaQ\nkich17xAY+O46ZPz2djuQglLBvi+3AJxRKOYTg0Owt842L47l5s79GYdj3zr\nbP0sNM6Fyi8b2ahUxqFRDa76E5igHP6MHKThuCLtXSYnOVHPyxCSi3+fpp+u\nkTXQQj/HeBHXxJbhoAiLtyUsEHc/Qnlmaneg3ttEPl/oH2wimliozB1oYah7\nGsUxFAI72294PFKesDX5iDvLP6oDEuvA+r3g0mWF2WGg3bqyMvfbc003jHSv\nBoc7O8FyNUqoj0iVvVKcYyjIScYbrqaTH+0h0o7twiNi6SxPGbJRwQ6i66OV\nlruZxwcPle+Ni6gMNUgRLotUSZnMkVtvcLaoyI1HGYZkrSPIXBZAzkUz7K70\nP59UVi0ZvcBPn6mCMHIUOVQxJdJSUkkZ8GX/dUkCqmjIaPQ97PIbrq/6A/PH\nMmdZWg2m4DQ2xSpgZJmdsKoy+OJ/+3hv5/RYS0IBlVB6oECSI26wC9Dq7GEf\nM8kc\r\n=L1Kk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC45YNLwtSj1KHmyMAYxQKpw2ktgCyNVnmF6w2JWbzp7gIgB1oZSsvp2xrnMDGzIDuq0nIM1dm8Kq16KxE+0t/X5uE="}]},"maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"_npmUser":{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ternion_0.8.5_1580380216038_0.19110960508979202"},"_hasShrinkwrap":false}},"readme":"# Ternion\n\n[![Build Status](https://travis-ci.org/michael-kamel/ternion.svg?branch=master)](https://travis-ci.org/michael-kamel/ternion)\n[![Coverage Status](https://coveralls.io/repos/github/michael-kamel/ternion/badge.svg?branch=master)](https://coveralls.io/github/michael-kamel/ternion?branch=master)\n[![Known Vulnerabilities](https://snyk.io/test/github/michael-kamel/ternion/badge.svg)](https://snyk.io/test/github/michael-kamel/ternion)\n[![Packagist](https://img.shields.io/packagist/l/doctrine/orm.svg)](https://img.shields.io/packagist/l/doctrine/orm.svg)\n[![DeepScan grade](https://deepscan.io/api/teams/6299/projects/8218/branches/94587/badge/grade.svg)](https://deepscan.io/dashboard#view=project&tid=6299&pid=8218&bid=94587)\n[![Maintainability](https://api.codeclimate.com/v1/badges/d1e548a5f9be482a64d9/maintainability)](https://codeclimate.com/github/michael-kamel/ternion/maintainability)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/4091b2ded5b6418bbb03b02f001d8ed5)](https://www.codacy.com/manual/michael-kamel/ternion?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=michael-kamel/ternion&amp;utm_campaign=Badge_Grade)\n\n## A plugable socket.io framework that does the job for you\n\n## ~~This project is still under development~~\n\n### Sample usage\n\n``` javascript\nconst ternion = require(\"ternion\");\nconst sockio = require(\"socket.io\");\nconst io = sockio(8000);\n\nconst IDENTIFIER = \"id\";\nconst emitter = ternion.buildTools.constructEmitter();\nconst defaultBuild = ternion.builds.defaultBuild();\n\nconst names = [];\nconst loggedIn = {};\nconst nameExistsValidator = ternion.buildTools.buildValidator((data, response, id) => names.indexOf(data.name) === -1, \"Name exists\");\nconst nameLengthValidator = ternion.buildTools.buildValidator((data, response, id) => data.name.length > 2, \"Name must be of length 3 atleast\");\nconst hasNameValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.name, \"No Name provided\");\nconst loggedInValidator = ternion.buildTools.buildValidator((data, response, id) => !!loggedIn[id], \"Not logged in\");\nconst hasMsgValidator = ternion.buildTools.buildValidator((data, response, id) => !!data.msg, \"No message provided\");\nconst msgEmptyValidator = ternion.buildTools.buildValidator((data, response, id) => data.msg.length > 2, \"Message must be of length 3 at least\");\nconst nameFillMiddleware = (data, response, id) => { data.name = loggedIn[id]; };\nconst loginHandler = (data, response, id) => {\n  loggedIn[id] = data.name;\n  names.push(data.name);\n  response.respond(\"loginsuccess\");\n};\nconst msgHandler = (data, response, id) => {\n  response.broadcast(\"message\", { name: data.name, msg: data.msg });\n  response.respond(\"message\", { name: data.name, msg: data.msg });\n};\nconst welcomeMsg = (data, response, id) => {\n  response.respond(\"misc\", { name: data.name, msg: \"Welcome\" });\n};\nconst disconnect = (data, response, id) => {\n  delete loggedIn[id];\n  names.splice(names.indexOf(data.name), 1);\n};\n\nconst buildSpec =\n{\n  events:\n    {\n      newclient:\n        {\n          handlers: [welcomeMsg]\n        },\n      disconnect:\n        {\n          middlewares: [nameFillMiddleware],\n          handlers: [disconnect]\n        },\n      login:\n        {\n          preValidators: [hasNameValidator, nameLengthValidator, nameExistsValidator],\n          handlers: [loginHandler]\n        },\n      message:\n        {\n          preValidators: [loggedInValidator, hasMsgValidator, msgEmptyValidator],\n          middlewares: [nameFillMiddleware],\n          handlers: [msgHandler]\n        }\n    }\n};\nconst newBuild = ternion.buildTools.constructBuild(\n  {\n    buildSpec,\n    opts: { preFailFast: true, postFailFast: true, unknownActionMsg: \"unknown\", ignoreUnregisteredEvents: false }\n  });\n\nconst build = ternion.buildTools.mergeBuilds({ builds: [defaultBuild, newBuild] });\nconst handler = ternion.buildTools.constructHandler({ build, emitter, identifier: IDENTIFIER });\nconst sock = ternion.buildTools.constructManager({ eventSource: io, emitter, identifier: IDENTIFIER });\n\nsock.start();\nhandler.start();\n```\n\n``` javascript\nconst io = require(\"socket.io-client\");\n\nconst client = io(\"http://localhost:8000/\");\nclient.on(\"connect\", function() {\n  console.log(\"connected\");\n  client.emit(\"message\", { msgType: \"login\", msgData: { name: \"testname\" } });\n});\nclient.on(\"message\", function(data) {\n  const mdata = data.msgData;\n  switch (data.msgType) {\n    case \"validationErrors\": console.log(mdata); break;\n    case \"loginsuccess\": { console.log(\"logged in\"); client.emit(\"message\", { msgType: \"message\", msgData: { msg: \"some random msg\" } }); break; }\n    case \"misc\": console.log(mdata.msg); break;\n    case \"message\": console.log(\"message from \" + mdata.name + \" : \" + mdata.msg); break;\n    case \"unhandledError\": console.log(\"unhandled: \" + mdata); break;\n    case \"unrecongnizedMessage\": console.log(\"unrecongnized: \" + mdata); break;\n  }\n});\nclient.on(\"disconnect\", function() { console.log(\"server closed connection\"); });\n\n```\n","maintainers":[{"name":"michael-kamel","email":"michael.kamel.2020@gmail.com"}],"time":{"modified":"2022-06-27T04:53:13.628Z","created":"2017-09-01T01:32:43.512Z","0.1.1":"2017-09-01T01:32:43.512Z","0.1.2":"2017-09-01T01:56:37.308Z","0.3.1":"2017-09-02T02:10:30.311Z","0.3.2":"2017-09-05T04:31:11.914Z","0.3.3":"2017-09-05T04:40:20.932Z","0.3.4":"2017-09-05T11:26:44.812Z","0.3.5":"2017-09-06T08:33:51.651Z","0.4.1":"2017-09-07T02:09:20.629Z","0.4.2":"2017-09-07T02:28:53.269Z","0.5.1":"2017-09-09T02:04:38.580Z","0.6.1":"2017-09-10T01:59:39.412Z","0.6.2":"2017-09-10T08:15:59.694Z","0.6.3":"2017-09-12T05:32:31.570Z","0.6.4":"2017-09-12T05:41:17.295Z","0.6.5":"2017-09-12T06:49:20.797Z","0.6.6":"2017-09-12T09:05:46.959Z","0.6.7":"2017-09-18T00:51:20.153Z","0.6.8":"2017-09-18T01:05:20.831Z","0.6.9":"2017-09-18T02:26:51.712Z","0.6.10":"2017-09-21T12:10:30.511Z","0.7.1":"2017-09-29T12:40:37.154Z","0.7.2":"2017-09-29T12:51:12.463Z","0.7.3":"2017-09-29T13:41:14.187Z","0.7.4":"2017-10-11T21:02:53.273Z","0.7.5":"2019-11-27T21:50:16.081Z","0.7.6":"2020-01-03T20:24:54.971Z","0.8.1":"2020-01-08T02:55:23.807Z","0.8.2":"2020-01-08T03:07:12.976Z","0.8.3":"2020-01-24T05:50:46.668Z","0.8.4":"2020-01-27T08:02:24.698Z","0.8.5":"2020-01-30T10:30:16.182Z"},"homepage":"https://github.com/michael-kamel/ternion#readme","keywords":["npm","socket.io","framework"],"repository":{"type":"git","url":"git+https://github.com/michael-kamel/ternion.git"},"author":{"name":"Michael Youssef"},"bugs":{"url":"https://github.com/michael-kamel/ternion/issues"},"license":"MIT","readmeFilename":"README.md"}