{"_id":"@hypericon/yuzu","_rev":"34-c05f3d423ebd87200b85d8d70af5e7ed","name":"@hypericon/yuzu","dist-tags":{"latest":"1.1.0"},"versions":{"0.1.0":{"name":"@hypericon/yuzu","version":"0.1.0","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"UNLICENSED","_id":"@hypericon/yuzu@0.1.0","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"af46d74fc19aedfd92ed2e91d46f4f19229341e7","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.1.0.tgz","fileCount":10,"integrity":"sha512-0gaI7VX6pBeC2KDwiQ5udeZnvoeIRq+UJ3gYo6/GTXF1nEmykI77gxdv+01t9vy3wd5qdgldIF/ADiqAb1XLRg==","signatures":[{"sig":"MEYCIQCTVeYRxaD3k0JSII40JAYY18QojNTGEOu3xcVZyOZ9NAIhAMnkI4TQsWUGZ0sstXXa7PoAfHgSl9E1KRPMWEUuQngp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17662,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgL+MDCRA9TVsSAnZWagAAMVcP/iIiDATwLzpFxhMhn+JK\nObd33PBm9A+36aBM1UiyRIEKgxBpOG3p1qztMeBbs2z/iLfAI2zQX0bz/mZh\ngDanC8zDOFP/CxRpE5oLorlKSHrL6yoqjUdl6lhD7t97xoqFkIW2SXQn5jhX\n22mxCugRFs3Ug6z4s9+daMnWuCQkaCfUD15mvxZ1JiI4eICF9XGO2KBBBceQ\nU2ZmG4331quHp7L+0U49NalNm6jTz755b/CPO7iPMN5hKiMNBi6NolzIwyLr\njnjjoY5evjmSs4XmHZWt0mj/VyJOFUNAdYfvf5Ivon3yAcA+kreFJD8tyjPp\nNs4qtBH4iejmfM77hT8bYKKwFYV3T8puL9Vx/VTHvfAtftonaY9m16xQ9jaS\n9Q17JdE4rxsvjmw/9CB8cejgGOfn+tyV3IS3ppPK+NcriAUyLMr8iJmns0E2\n7Zish8f+00YFCHLcAdDSUQjWlPR50au3W7/mdD6UUWMkaAadUpltGr5pKS1T\nOccvNWe70w/gFE+XhFdQ+izhKcYvEZ/X0yA4L5HhSOm6sBjpKntTmsVkDuf1\ndNahkznqYDfdV+DKYYLu9PNmc7wcCYTIkuIHDBbhoVcRzkMO93BCAFaQIvkz\nuyGc9EQHuweJivIfVd9ADpP8xwovK7JXlZLLjDIH9pMtYLyCgdONA9lx21tK\nG19n\r\n=5FJ7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","gitHead":"9727562da57242ff3a3eb8af67b7587b4dd34ddf","scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && parcel example/client/index.html -d example/client-out","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"7.5.2","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"12.13.1","dependencies":{"ws":"^7.4.3","rxjs":"^6.6.3"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","parcel-bundler":"^1.12.4","tsconfig-paths":"^3.9.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.1.0_1613751042491_0.8653793178849214","host":"s3://npm-registry-packages"}},"0.2.0":{"name":"@hypericon/yuzu","version":"0.2.0","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"UNLICENSED","_id":"@hypericon/yuzu@0.2.0","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"c33b5c77ca5f84b0bd8b66c7db9e1a7f5808c5bb","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.2.0.tgz","fileCount":10,"integrity":"sha512-EQlWjtRlg0GrGrITkEb6dUxRKWuxNRtrN/5+6DG9Ps9kbbXdQQTRqb9Tuy7gi22AYCEif1rEk3pXNRR1J2DF0w==","signatures":[{"sig":"MEUCIGKBMwZwm1Ymt2roZY4KYkNzDj3eao9ZEkctMEm1UY20AiEA92HvN6lKot/T13w8MWSLTfThbJ7bKGpkdBLgiPaQTnY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20314,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgN5KQCRA9TVsSAnZWagAA65IP/RqZ7AdFDKQk1uqgfA22\n7M55v0Cfd/OIcnxNurKl03hMrPq/8Ol5ol9MyseA00KvzD/DehA+4408OOAS\nbEqbwFG7vsgrheGOWDShczXBFXGB5QlywuYSjYHjbCUYtRrKB47/Iook97rA\nKtKhCXArJrER4qJJ/7ojQt2CuEJYhdghqjv+amxyXIr3a4TmITXMqIy29m4b\nZUo13Zq0MqdAd+98umT81moZ2Jv1EMHgZ4B0Eyg0I0EdhR0fLfqtK4F5+j71\ncIfFKXKG/QKuslJCn6s6HUN8nDyYN3KNgunmg80ikFHKbEP9R/aSP8I5uu+n\neqwNbirbNZt589z2FXgDM7vAwyvGNRnarpFG05Q85UdoH5hObhtc75FASDaK\nd5ghs1JeZ5IXjuNPyvE6gB2xQMGA5fs0/F6ZCUq6/KhwqCeNZrYMhFxukLgA\nvy5Vb6GrbfhfmpBCfqpLno9tjsa6BiqQBdUbjQ20uBuPZdKjgdxpQBbDLy6b\nG+dxye7Lf8ldMafrttrs1cGcVeCL5QMdxoccFRwrr2FhNEPXqNVREj2nZ/ky\nsRF1iSwYg8RKzhpJDzMf1dNL/XMmSNP6p8XfLTw4YbJ5ilzVUphfwepCfTTL\njt3ke181lSO7rbsAJvg2fmiWHO2h32KUCDL73+jaCf3tnOshHTd2Mxxd3XhL\ni2yR\r\n=KzEN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","gitHead":"cd95e80c7243ee317c418656d24bc336c040abb5","scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && parcel example/client/index.html -d example/client-out","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"7.5.2","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"12.13.1","dependencies":{"ws":"^7.4.3","rxjs":"^6.6.3"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","parcel-bundler":"^1.12.4","tsconfig-paths":"^3.9.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.2.0_1614254735574_0.8673413088024085","host":"s3://npm-registry-packages"}},"0.2.1":{"name":"@hypericon/yuzu","version":"0.2.1","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"UNLICENSED","_id":"@hypericon/yuzu@0.2.1","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"8ad21643dfeeb26029683c84cffc52323c64d089","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.2.1.tgz","fileCount":10,"integrity":"sha512-tbTg4XPpYa40fx9XINHxuUJX9ic6OAjX/Guwmo/IQAyC1fQqtRtO0QL9pZEdBcC+nlNrsDu79xsTAV0T2wyWKQ==","signatures":[{"sig":"MEUCIDpl7LRJ5pM42rzXm5oKyY3tbDhpJSxG6L2E/y2gXJvBAiEAu4n7rrJGAMsawQP3GKDTrSnbuwXhPV419q9W5EuP044=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgN5MeCRA9TVsSAnZWagAAbKcP/3Ox25HJMe1uBKt8/kd+\nprA+Y//q2NG025rIZhp2hwzdpkiPALdFagroX0wvcr7R0WlwEK+1ruJsE9ql\nE10zzpKcvDg2MSrUcpUaBKOI+HGUBw6d1T1087VKHd56EKEqaD/8HMUBKkWA\nFdWzlgZFb/d8r+gJqIVVKYSFkr7rNKlytvDH4senM17ct2Q6aTdT9sb9Fswp\nFpmxogsJQLk0evTuhxmdW4fep8ffot8yXOMJ8Op67pa9J+V7/nHQkDYgwGje\npFpxcmEynyWNMRMqsK8iS9kM0eNYG91KzQay8WUsLqZO44a1+5XE5nukQJIy\nJTT0aAx/2TpYDnNUNOjBWaTrfBacTz/0X/lE01OPFAvVWvXPd5/on/Ixh/XF\nfAG0eUKtRQ7nC9fshLuAk8Blm4uWnjvXU8viiTqR8W2P1JCeegIGJYp/NZw0\njKU+g1el1KMVeUIaHl77k0vR81ETY0ectkoXVMzTVpgzILCdOHsk+BFrkc7T\npa656adjNNBIsy9ZRY3Ue/OlbJzjWjaqTA6NbClhBBeH7H8Hu+dkEPt1gFXq\n2xZNM2rabVugryYfFrSypukd8XZ9sHHTiMZY3yYuQqDlN6c0y8cbXtbRMYK4\nvFXJsQ2quhklW3SW/lnRcdP/xs+LgfEmEjAgDgDr1lN9POPQvP8MKRaYOVh8\nMW3q\r\n=dwir\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","gitHead":"d4a836bd3398824f46c6bd7f0177598d0c3354ff","scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && parcel example/client/index.html -d example/client-out","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"7.5.2","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"12.13.1","dependencies":{"ws":"^7.4.3","rxjs":"^6.6.3"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","parcel-bundler":"^1.12.4","tsconfig-paths":"^3.9.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.2.1_1614254877667_0.3975236094167649","host":"s3://npm-registry-packages"}},"0.2.2":{"name":"@hypericon/yuzu","version":"0.2.2","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"UNLICENSED","_id":"@hypericon/yuzu@0.2.2","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"4c44ebb2d9cb7a9eb34de946fb002d463957717f","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.2.2.tgz","fileCount":10,"integrity":"sha512-83l/1j8IgTcWAxlnZO1x4CnpEEvQlVQdEvfoPp5+JDdjCeUqYWdQ6X617fwsZ+lDjllIB7vSQlcDHpyXx07GDA==","signatures":[{"sig":"MEUCIQDGep0juM7xZPDemLathK4KweOIl/34gp6HLlC2eo12MwIgeG1bBnWBo2xya8NrFBwjlllcW0dg+N92CHmUCyz3ZHw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgN5PnCRA9TVsSAnZWagAAA2YP/Aga482t+rd7DG128SuR\nb7IguF2a4/J+NQ74Md5JOUs7e4IDP+WfDVMjaGqgsEUf0Azw4638ESTr9Lm1\nTgff/EBiyDySGJokwt7046WuA93XxWgOpp1Z2hPE4HMbSuJ+84MfXtdrcNBZ\nA7lcQZF+lKtWvNw8VeMSCpbnl7+86S/mH06CAaCJb0GlyZM1eqNm8kSFnrte\nmomJmbxpAO9481+GnrLKwvCNVvwRgF1cZJatETmn1kvevXhVr67g2wTN4JUQ\nr9yUxrEAnj/MgxgWeMCDP6xoAwcj1RwQ59JTCG4rMsijFbZshEKm3caZi0Kq\nflOrBiwhO2dP5ty32/yVQT/aInA8id0M5owXYH8YwC+07HvKgLNEachlesfR\nrVViSqBq7UA1aNPD3oaBEOSXJs86T7m17LOyUctqgX7c8ANYZGhgUhkQ5orb\nlcbaXQENX27Rk/lLR3nTA8gLiEGzsZB6x7HLCh1cUBTQT12efb7LkPznva9c\n4ac5HKJEs/6iNDYThxqVGAWxR3n52Adg44HFqDFJjsdqJvC2L6LGYJVZN1DF\nLY8pNeG8iFtwkXK8FpSwhWytuXP9cYncFXddVVXWgzvZJ/VGQ6oxWkmJ25HD\nSGRN4/BlG0LrVY6Gcg5Gbyz1yzoCZtYN4xizo9yAiIwL1CgUxGhl7eNtQgzW\nme2D\r\n=zzlv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","gitHead":"2807264707bb1fa94d3381ae44e88794081ddd64","scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && parcel example/client/index.html -d example/client-out","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"7.5.2","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"12.13.1","dependencies":{"ws":"^7.4.3","rxjs":"^6.6.3"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","parcel-bundler":"^1.12.4","tsconfig-paths":"^3.9.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.2.2_1614255078774_0.9020400339855739","host":"s3://npm-registry-packages"}},"0.2.3":{"name":"@hypericon/yuzu","version":"0.2.3","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"UNLICENSED","_id":"@hypericon/yuzu@0.2.3","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"226d572a9131e1fcd3610c56d6fb2c750129ce7a","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.2.3.tgz","fileCount":10,"integrity":"sha512-nHaGaHUrGCL8tsw8vO1b5mJFjkd9YNfC5Y5lW9Zgd4pyE93xBwMRz+oNyEgcOlcYDuh6MFskfVtikQum+cu/9g==","signatures":[{"sig":"MEUCIEH0UkRU52q0+61LGoGk3yCnNsl6uBhNSZExoRb9LnjxAiEAv2+S914VkAmEO/ZG8OSP/qML/2Iww8HUs/yZ6VqhdjQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgN6tACRA9TVsSAnZWagAAz1wQAJ0/jFIWnOkQ7RAUZpij\n/vxnDsOUni+rqvqhBsOSczttv2veqSIa773INNs7Y4Ecpj3dCMofzbxKm1jK\n5oIP7DNemsmUqmsDjgJHSiFqNMC+9SJIr2oreGE993kAvmpaB7WRKM3w5ZW5\nq5+5ORNwbnbbGNxzJBjxq7EQ+4aAIDc/u+2Zwh3ULOY1HUwwRSvB0dX1sJCH\n2IXA1wXThxCILRnk5HI+7KjwcemZNPqnqKPrX2ESoSQGQ5IuV0K2P6xc+bD3\nmLfA/Q2AI6NK8DasP0SUvrM1s/B+6QYIvQyMFiDeiWra+/OOCKNIIzw1d+ls\n+XrXCoafYmmWKoHKFhl9bUOSILS9Uw5kfQRBWiFdSr4B+kQiDwdaU5mjVxHm\n4Jra00rSXgTAhlD2CrUfI7ZUXJoPa8U1tRBc6DOJPNbmWQKyto1bhXXdQAa2\n9/zqsn+haCrlIIqfuyUmH2PqO3VcS79Vp9yJQUUdGwMbrfHhbzSBK1lwdi2K\nXW2O+AdOds7IB/VHpGOfbz2rSue/F5uJZ/8basJ4Am7gYGpD1NPmbBUk4TBI\npCPklv82CGqhgkxjmnF8aKeAIlnwZeIgAK2C0PiWdvLo/4iMpM+HW5ALyzKH\nJaox2r9mgqe8G+ebCBcck9jeqtHNPtjMU/Ou2Ie03z0spb5sS75AGT6MgcRk\nMvY9\r\n=SKqI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","gitHead":"1d360774b65fdc06deb661f6c0bdb2bcfdf306f9","scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && parcel example/client/index.html -d example/client-out","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"7.5.2","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"12.13.1","dependencies":{"ws":"^7.4.3","rxjs":"^6.6.3"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","parcel-bundler":"^1.12.4","tsconfig-paths":"^3.9.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.2.3_1614261055912_0.08744657461498573","host":"s3://npm-registry-packages"}},"0.2.4":{"name":"@hypericon/yuzu","version":"0.2.4","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"UNLICENSED","_id":"@hypericon/yuzu@0.2.4","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"9f3365fe7c02af8809d8623d9b11ec61da89c933","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.2.4.tgz","fileCount":10,"integrity":"sha512-llEs29rU3qj28AMZlc31xL3ZRErFwl6uYwVfGGXpXLMMHDKWZDUojrUN5xZ6diMAZJjBoVyp66tIcJi0TIo3LA==","signatures":[{"sig":"MEYCIQDB4HJMlZvaJKUGfa6fY1YTk0SHBoDhev8eJl+MapGogwIhANEhHNfxj7ekgCL2itsWAJaSNubfUT/3dsQNXJnNyuMY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgN7ZVCRA9TVsSAnZWagAAn9YP/iX+mQhgQHfjSoWkUUWY\nf+7OE3032PtnkIW0ZvraJcUuzgmP/kZa+zS8vgPg28nATAefspbWgIRoPlQP\nHvDudKwB2y0+kSl7YR+2GjD1zlpabqxPaaGfhPo1G2PV1IqoutoZZvjD57dA\nPEvbtes2CXp6RYkUFqSTf8PPHCNKCINdqkE45Tjb21brNv91lcnmMmGzgoMu\nrFvevZuOrEAUnhdtWav5lldGwvk4753P84Vu7bluYU00o62zktpVYC8KBPAk\nPqM8q3XzyQhQD4wB6xUeDeUOvRGEgX8AfjNUVVFdRAq4fxHkEkKN9jpxlvVL\nqIeeaWd9J8LIueYIsABKpGOA43RX6upv5JkFXn6oyVisQi77iOktjehqUGQa\nshzBu5BHhpSNqvS9cAsXb6O22EaInTccxGco/VhD87ei3g4gnCsXEOVH8MRM\nL4it8QInGyTUT3/ilqk4q7S8bpUKTAFwCgz5lfjNWXetEkBo1Xy8k4qQBAZm\nuXCQjyBLfyaB8kZVo0UcNFJXEV36mxrv14lFsj/IH7tEAXFxFGmunbIUfs+b\n8di6TcEtJe9g2k40diI56UVVfq7ujm+DAeP6Rs9i8U0eapYmU6vrsOi90wLL\n6h66k7lfAOD2gQ8W2XtH4HOFQD5nGTTICgm4LFlo8LDULIoy59qWHww/h3D6\ndIOb\r\n=WoPC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","gitHead":"ad062770d8e36671f6e32305095b3b0d8bdd33cb","scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && parcel example/client/index.html -d example/client-out","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"7.5.2","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"12.13.1","dependencies":{"ws":"^7.4.3","rxjs":"^6.6.3"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","parcel-bundler":"^1.12.4","tsconfig-paths":"^3.9.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.2.4_1614263893259_0.9773799551396694","host":"s3://npm-registry-packages"}},"0.3.0":{"name":"@hypericon/yuzu","version":"0.3.0","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"UNLICENSED","_id":"@hypericon/yuzu@0.3.0","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"c3726e981049860fb71ab0d666ccc34bbc851139","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.3.0.tgz","fileCount":20,"integrity":"sha512-y24SZbePlVt8/oZkcsqtwvInZhFNBSmiOrVYqKVf95s/zM08WIizL3YmskCdXUx4AWHMVd+zWcxO7LWAfEmcCg==","signatures":[{"sig":"MEYCIQDviic2PhHhwUJO3G1MCQ0tvZ36xnWSeOb4xQbpvCV9lQIhAMWYcEGyXBksUABNJPdbLjMZBlOad2IOEbeGG/DigjTq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPgSoCRA9TVsSAnZWagAAERIP/jmlH9rQ6j4tiTrhifmt\newbic/EzzBAAdXJ+pjeB9ewfkykhP6+5SNTQp+xmTT9f6FflljkzNa/cQkq+\nfSQw1TJXWipBEdbj+yzdUwAitUZijgJ2FfbOeCQCqsik0YIoVcljXlE2DuDZ\nbHFJU5aHoF1X55Hzp7yuKdX/C9AXcWBEaU2br2Nj+whr6ZIgkVIPOZeAdAdM\nBSv5ckVwwnoCCx2QpiM6MoJH0Jy0x4PxJgvtlbyCMdzeyBRKxj/+MNsCYsvQ\ncM2zYaszTNqMwXdcmPCR4YNwmetu34wk+xBXIMWZ8DzHTUpE87zDcuBOa4n0\n8ibCWKkj+XZU+V2ZPqb1v7xpziu+78xhGqpRnOR+xVkiS3zFqu4wUGlgt/Ob\nSxoWRrluYAZLSmMnw4fqGvPOY4BI/Dpxla+USl+DvbUwCWzQQv7EVuGr8o4Q\n51PTbs3USkVO/WHcVig532e8TEwHvepD5poTwoloL4i3L8N7DFkOZPBSOrLj\nM91egCOa/QrW+Kb5pE0iaadRDWg6BFVXwx6X5dqPACUe41mQKu0ep66plKac\nN3PP15YUxymGT4u2lPyLMKWbSPL9K5iwPtKFc2FCYt+P0Dj0hSH5CHmyN6ab\nazVjF2x6nnx+dJgXAlP6jBsT+MpWGHAMVZGGk8vwZ0WLijh++wkG+ubaVPrX\nEzRk\r\n=HKYK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","gitHead":"f07329497b3a2af2aa29385b5a2444d323e40202","scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev_old":"concurrently npm:dev_old-*","dev-client":"rimraf example/client-out && parcel example/client/index.html -d example/client-out","dev-server":"nodemon","dev_old-client":"rimraf example-old/client-out && parcel example-old/client/index.html -d example-old/client-out","dev_old-server":"nodemon --config nodemon.old.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"7.5.2","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"12.13.1","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","parcel-bundler":"^1.12.4","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.3.0_1614677160308_0.059592113265414914","host":"s3://npm-registry-packages"}},"0.3.1":{"name":"@hypericon/yuzu","version":"0.3.1","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"UNLICENSED","_id":"@hypericon/yuzu@0.3.1","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"e526c3835ed27ee349a8422b4bcf52e2a218510d","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.3.1.tgz","fileCount":20,"integrity":"sha512-uOaccxmz2E1DX30Ob13QZmRtTNe+dDa6F32jhzmmwgTEBdhc3BmsnCEEePIIB1Jer9Ft11DReYI7jiQuriMQZA==","signatures":[{"sig":"MEUCID4gFqgYv4XP7vsp+y1bDIpStgVdkwDmWh8buQfrAqukAiEA451KrRgAUnw4ykult+IIs08DCPj+FSqYbs27Y2Jm+vk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPjP6CRA9TVsSAnZWagAABsMP+wVXzcyP2rLK6JeA527T\ngjFi2PBJo/xP5hNGdbsTUA8IpSl/mVFS8NLQ+402AYE8EbDJvB0U3DklXnKc\n95hFre1apldLkwOFtCduL+Yv1H7Sn77WnPVWt0R5RTCDzoD1H4M1TxMUQlBa\nN7pTn1W/qY+Q+IR4g2NQjIf4iXPw+ni8JgsmwkYxRwy6bA6pmGrmGX4HseAO\nuUKFBeG5s7/kKGpQ1crDSgvO1I1/Tv0qHH+lPL4LxqS8pxan7I9O9aVlPjgB\nY8o0Gdydfwvdr8gbELD21KEWfUJav08XZ7uNFdaPGUEwum2W2HKt/UFuRugO\n3U564HvpF4PyfY05dVpsjpO1lTeFa0+0XppM+0+aByG/O1NvlwRhHQjJBdz5\nG9wGi+kgoQ266PYiJWvsHeL1KonWrkinGkteQv6zXlgKvktoF1y64b6BG/U0\nPkM5njZiEj5oYMioCbDjlBwo3UXy6lfklnbCOIwZsJSnA+shjIbqM8SqWqPt\nQ114qEmgxDezCIPeC+ubGfzVQB0kk6LKK1vY9TIIWKL2Sdkw3ypNhzxeqzD4\n2WL6q2UrP3h7diS77+C++I1qr0h3c4y07WxXLXegR1OXMyIoIli9Mpu8X/92\nV+wU6LbDU0bLbDOulL/0IBiHvvdBQnD8exhFO8FqsWZTjkukcTvX66XLdmN0\n9t7/\r\n=xNjg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","gitHead":"cd9cfd1abddad7bca211ba18173f8c6876d95015","scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev_old":"concurrently npm:dev_old-*","dev-client":"rimraf example/client-out && parcel example/client/index.html -d example/client-out","dev-server":"nodemon","dev_old-client":"rimraf example-old/client-out && parcel example-old/client/index.html -d example-old/client-out","dev_old-server":"nodemon --config nodemon.old.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"7.5.2","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"12.13.1","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","parcel-bundler":"^1.12.4","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.3.1_1614689274240_0.5871568319131788","host":"s3://npm-registry-packages"}},"0.3.2":{"name":"@hypericon/yuzu","version":"0.3.2","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"UNLICENSED","_id":"@hypericon/yuzu@0.3.2","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"511a602a7da506697012fca3c6bd964577c7498d","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.3.2.tgz","fileCount":20,"integrity":"sha512-6m5Z/bVvAoc9gjpQ9kYNrw60XsRH/6vge3paUkUST28wqVMvZCXk4/Q8S464E8XZo49rDmo7dqcdEpgXzboiAA==","signatures":[{"sig":"MEQCIDVpsMNcsCDb962UqFbDPXUN+52s39Q2Z6GIE/XSo3LcAiBpp+QLOPxPSWG9pfrWQhPEiQ+A37Ap8JE4Vh9bny4Idw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPjTcCRA9TVsSAnZWagAAPZcQAJpFDyOJyWY4pCLsjvv4\n+kQWNzXBpGN4sFjp00xANiiYJVX9TdVShOZpkZHCu/PQ+VTEvwvzgfcly7dm\nY/eC/ZJenFGquDvnhxy2jflFTU9v38SkOXPLqsJB5Bmj3aUzccBIVRQ9yL4L\ntipkgdgmrWPD7fAyXWCs8r4teBL4fIXdcrDIRoc/QGXrTDWXwJez8PW3QkXl\nmFLJHP2RblAqn6J6MeE+9+U2qvFpkXsPnyWFHhorUW6wTwwxZ0iEOGoiO58E\nK3Bv+yi/bkPeWMKoP4rNJKN/3vM8KBKxIqSJpBEtbghhNWOdinrhM55pGVy8\n87zXBy+ETgJqjOgJNdYPX+NZqbkAoVXHOuSZR4v+95EyxmB2qwXiyXJ62nFh\n3RJocCguCqKK7WCbundM5gJOUu6V5ZphYPe84nTRHHIK6Q5402XY9KG+2EkN\n7vOHOshytSCjnhd1WqT44WxhIj5BBUrUYElqUfytTt+iwttdH29qc3AbbD6o\nyDGGUmR14ql+NQJdLmSQ+oFTtQEr2wB3oOd2pPn0liSPZVQzwMTIASkdStlk\nf+6L5WLV64HGh35HIKAokjnhyhe5JrXcldVDAHWAdFMYZ3wvhqWmGRNPRJQM\nV13RIvAlgNJhQUAtSZQREklTDRsuTJMqZ6pL/4i6bo/IxlDOirhq+1jxqIBJ\nwSVY\r\n=2aT0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","gitHead":"9f45a7e57ddd2ea092fabfbb8eceae519558a6f6","scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev_old":"concurrently npm:dev_old-*","dev-client":"rimraf example/client-out && parcel example/client/index.html -d example/client-out","dev-server":"nodemon","dev_old-client":"rimraf example-old/client-out && parcel example-old/client/index.html -d example-old/client-out","dev_old-server":"nodemon --config nodemon.old.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"7.5.2","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"12.13.1","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","parcel-bundler":"^1.12.4","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.3.2_1614689499671_0.2649261224073898","host":"s3://npm-registry-packages"}},"0.3.3":{"name":"@hypericon/yuzu","version":"0.3.3","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"UNLICENSED","_id":"@hypericon/yuzu@0.3.3","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"280d11f38d7b36f5b4a73a21e72dcc689c7f3c6f","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.3.3.tgz","fileCount":20,"integrity":"sha512-zqsm0xcb8a3PwBtm8PkzH4uR8VnPf3ekT7MAnDpuvF5yNRTxDQ8sXfHPbMiVRJKJ4HPMcwFrp44/2tWAC4Scrw==","signatures":[{"sig":"MEUCIFvY7YpkElk8ZtKiRn2E3CeKIRWnT++25S7L32bXlmpwAiEAtjVC8qknQMGjoI2Es+Jb4v00xrEY19x3dKdKzWPVO/M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0pq4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqivxAAoDHcUvXUmMkPItfZBYTVwCOm9RnWbTABTnARlqzUch1RTIdu\r\n3RF4wRWiUSzOZfMXd1QPo34ruMLVfkygn1TMRWPaWBSQIcjWO1JYOkZGgN2D\r\nskMcOW9P3+5H7rsQimQO3ZzJET7RREs0/2SyIiOdLqmPG2wfEB6XjSHMtHe6\r\ngTS54Tz9jQXs9D51hWNuY7NDW3rdvhVkDZqh1Kr/zV5U9FIRCiV7mVnG1x9E\r\nuh5CDTsfa0v7pOL0WYeBzk0GcooJotxSs1ucCcGRTDE5HUOmCui1bGsmm67U\r\nhAUENfQ6R+Y9S3KK9zTOqhKOTIAZKpi1e/i3a8XqlwXbwdmB/agQ7oqLTmJT\r\nQ2TDKSCPo6A9gKLkgmC1O/vJvxlsSg2VzqP4FkrwE4pNIW2/3zh2yIxiRTkL\r\n3mWG7NRqKCCg0nHHkvSX+YFN5dfxAKjRjdPPmIOSRSpSqLFjrGrr+3dlmtjg\r\noxC6EPHWerGExL0TEAiysujduAILKiW2v2Ly4JHu23HQKueXIUV9IiqNQu4/\r\n9xXog5RjEYF7YKuW8uHWE8zETiDDjARdwyavZltRRRY2fzy5r3i4PXH6J/EH\r\n3AHqJxfOC5FG2d2/WE0YQwAFLBuJYiZ0jmEeVAkM1ljLhIls+vfEKJgxf32P\r\nIutS89mKowoWGQ8VovOvLaPNILZVk7EfSk8=\r\n=v1VZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"b3c89562e014c3bb0ccf9d5fbec676e2b9acc548","scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"8.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"16.17.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.3.3_1674746552519_0.3881364864119863","host":"s3://npm-registry-packages"}},"0.3.4":{"name":"@hypericon/yuzu","version":"0.3.4","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"UNLICENSED","_id":"@hypericon/yuzu@0.3.4","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"28798002018b18ee6ae81c916e30a212cc88eca4","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.3.4.tgz","fileCount":20,"integrity":"sha512-6LSOstD8N+6rUsvHKzfUVNSaL5b+TxaBvimsQZoIFOL3mS5vU8A21/OcI+/Ma0sN/tmW9sUoYW9nKC4FLq5BCQ==","signatures":[{"sig":"MEUCIQCloI/GfRRRTIxh3e3YZA8aq9cwREBr76sjwrY70tV8vAIgFSmPjo1Z2WKoRZ/mSQDN57d5bsJf+Ft/gwY1NwCw9yY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62678,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj43HYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmonbA/+LSe8ViX+2yDrlxTMZAj4Zmvw2wrEMzMCg8MoxtLwskVj8/79\r\nNu/i+ba+zByjnQlDc623QzAk1LsisMIsP5YT1wZ/OgCIyMLtoSzF28wdwBdf\r\n3/uGzXBLrei9MqWWxnJ8Gvm0dpjGjcl71cW1Bbb03X8crXUVnd5z7ABquBAi\r\nITs3A6rY7o4eJDm27ermeZNi8i+qy3QHrX0hMT7qZvL78D6hSTDdJgzwY2Xk\r\n6Z42YCNaCAwg5BLaaOgbs3b6N38KgiRTIR1BSuByXUBSmckZS2VGhqfld/+1\r\n1arzxjd/l8S61E9OgKsX5FxcePMS0HJAF+hLfdZkO7d+AMv0mcwnmrwtWkEi\r\nZjIBgMI/dQeBP3D8G0U+BdGvjn/G2NtMgwK56q2VVbiYSABrlKmaRuIaCc5z\r\nSK7L2BT32nKv1+LIUeVofP/OGn36Q6zT704JER21i/9WcIChVLy0I6pvsQ8N\r\nsGw4Y4GikI/dR0BNDYEdh+YnMG/l4abpv54V1/Fcue4+JwhQ3C6sobJo9W8p\r\n8oA/vOkDxi9mrY1NUfLgijUIzYRpEFghOqiLCY/WvZ8cBVJHSdDCKhlwHzr1\r\n025a5jXBUfD1YpMArxXNf/pSslSoYpkdo1DkH2001Seq9RgKqN1CwcFbVA4Y\r\nKUcN84fhfT0FX2EOjxo+/2lA1TVQpqYPwZw=\r\n=6q6q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"169d682bde9cc9394bdab51b673231ec9d2a28f4","scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"8.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"16.17.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.3.4_1675850199875_0.9256635597942218","host":"s3://npm-registry-packages"}},"0.3.5":{"name":"@hypericon/yuzu","version":"0.3.5","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.3.5","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"4604ed1ce63754fc55681e8fcb07d3e4ce8f481e","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.3.5.tgz","fileCount":20,"integrity":"sha512-SE9N6usRZNhKkvqM3GAvs4fd3tzXEb+7OwC4ROI2tvsiLLl6WKEiibS/B0YmcEBzaLqgF0/CEYNO33oa4X9NDg==","signatures":[{"sig":"MEYCIQDHjBLpieO3KJK1ognZeB/PCAyg/3l3k6pUsUxAZnQMeAIhAOar2gN9zNCPIwFOgkHMDn0fkB7Goj3jnB44FSba5bHM","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62691,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj456pACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYyg//bpk37c1v9L2drtYyNATpo9QlN4HiUoJd8UDvlWOStaYVdUtq\r\nc4jo4yRSev8hq7VYeqBaHMLZBLS+SR/WWKxrrMyNlnnkbXuAMXEVUBZrpjWZ\r\nLf+4VBPwHOwU+kE+M6sYXOlm4jxZbjbQtPlWf9T6jR2MjTSrQ3sr82vzXzpS\r\n3qCrD8P+e1MpMRs/k+0v7LsVwseoOkk1uaheippamOF8gwfy8T5S/Q+saBL8\r\nUsUZPJOCuYMSCYswT/bboWMzSPWz2bwYsLbQFqbZ6z4ZfD3WR2/EttlJ8zTE\r\no4ezf5V8L+hI0MnZwmOBJXcMR6Zh0XI0Fp8njvb2E8IZWx32tBEvCKizCH7i\r\nv/7UQ6NX0OPeAIPr2x/Ix0H+ik0y2T++XoJZ6tOFDu/QMFoFCG42b+b6pyDA\r\nTDqy/WLUtMw9HbC3RQlnZyua0sC704rC8+BxsOFs7jim49/ciylmOpwm6pCS\r\n+VTj31qhPBZsvi6jRZ1TrJxL1dpe424yWYlOcrPvakGo2udZbdJpAqgH0Fcg\r\n3s0x1WqzBNJnzM36kLJXtyYkocCsQv+aPjDOCxRdffbBF1UTOj7+Ltcgy+6I\r\nZBdzG6eCFTvsR+y7GNjclSuyGgQYsfETrDGVR7skAhD8aKfl2jndewMtk3FB\r\nvh9B9aIqGvwEU+b8i77k+Kr7XHGgKbkMNjg=\r\n=ml60\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"b63aa3df3e51fdc4d1b3c1a70e90a6fe388165a0","private":false,"scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"8.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"16.17.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.3.5_1675861673644_0.23053985774975283","host":"s3://npm-registry-packages"}},"0.3.6":{"name":"@hypericon/yuzu","version":"0.3.6","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.3.6","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"52150e715f4f90582f13de1af830d7528f811553","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.3.6.tgz","fileCount":20,"integrity":"sha512-G0apTZWJFkTbntJoPyqng9fe/foG2Vdw/Ah3liS3MPa3B8UUOlifjN0uTnx6pFiszC/lkil+Zw5ptiZ7yFryzw==","signatures":[{"sig":"MEUCIFekwf1DH6m//Xw1p/649S9aRIV5s+i37QniI+o/bLT9AiEAw7c+1tWY7CeTtjDDTCtzWKj+R+SYXEF5nJX3TPUIILI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65012,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkDv22ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoqGw//be53AVt2usKlhXaCtpffzMSebArLiGQDVbbj/XqzGWlroMWm\r\nCdKAZca3MPjw0xYh6A3a4fcO/MILTRFH+cezj9hKWdpAHWsoYx/XuZSi8jkK\r\noQalhal7N4RgJjy/Dticl6WUL3Pwv+Ek0oLmXvGxdLQ0lSP4mIQQzbe3dN7u\r\n/6+0lkw6cgXeMlhVoZUncVU7GdnLxu6moSi08nsDU+neBBZzWb0Jzf7OjZJw\r\nhvh2lTDkKinNaJ/0XFJDjCbAdBnFPBKWt4AUBLH6PhDMy3aExhaDChkRd0pw\r\nryWujGOde96GUT1wumXkSwSLlb7a2vZbjWe1d4VeMz/hyMeoPyUJd3KC1E7n\r\nZdvTYqYTlne9a+td6d8XOpB/WBxineS9HJRlGMvjdSSb4iedz3qYEv5aPu1n\r\nmoYEM4xB8LUwLv10vYoWGuQffXwhaPiQqnNFK6QH7wEx2m3nrYkrfcdMGUSg\r\nD1L4as5z+FUqcYhgvXaHDFCVjFdgTFi71zcy0nNRzfsdDyYIw0QLDiuKNZTp\r\nXePje/d4O7s54/8hL1aXh2GTNe9fCcO6iF4qTDV/pavP2UKrzeESWZYudomo\r\n37y6yBZm8CRKWcsCz8S+yheRqNaXtj2ifCGWFF7rUiPM7pxfNbV9dgznLYzN\r\nS/3vH79y61YzF4bN1QhX0EMzq4dQ7qrMDwI=\r\n=OBy6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"8fdf417120615916a1d9884f9c333d5cd8bc0c9a","private":false,"scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"8.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"16.17.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.3.6_1678704054207_0.32964594475004794","host":"s3://npm-registry-packages"}},"0.3.7":{"name":"@hypericon/yuzu","version":"0.3.7","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.3.7","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"cd78998823f1ae1b70987386a17882975913b2f9","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.3.7.tgz","fileCount":20,"integrity":"sha512-4UMXzplmQv6kWmpYIh6UsPOV9QYL0W89N4XdfOCJdEQJpj04bG1Mp6SvzPe29Kp8lL5mzNwpBVq/2HgcaWDJ4A==","signatures":[{"sig":"MEUCIQDwycfL16sJWIHaKOUXKCzYOO29KAxr9pCm5D6n68CEBwIgeanX+bCUzUh2wnIWkOva38tzPsDkFlYiFiwyvixbmbo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65012,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkEeODACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpTjxAAn14qHuyCG7jovdlDSBhNCv4n+TcJPFo4tERyd6iaOtJid2H0\r\nR76TiLP7xI8sgshFTZfy4erI46C0/UsGr59Sf4StglS7icUq9aceOoVn+NBL\r\nfFvuBmXfnkXZ02vPL2k60Fs/dlYTBInLpxjUc8neBihfTLpsAGk1UrD3U39i\r\n9uCV6/arZ4J4PXj4SYbwuw/vR8DECKmvT1yJw5Vp6qmt/y37gCPQW9tDLHWI\r\n3bxACLD1U7ab05PKMGj9ksHZSSNw3WW7xXlJsq3SoNmrgB/GjIez9un4J75l\r\nnLfbEOKdjizmUgMcfBhZMP/6V2KeHbwdNGJEVCQlAiaab1fyLfJ+IbpvDQPK\r\nx0rAXlqARPJkmr9Z7lYF4riDaS6aEUXKmACrOp28beQOFHWaD1mQdfuUyVhn\r\niqWP+4hoKWTmGrFAUqCb4mC0wyVCHuO5PcqifH3JR3OluWEf6TyX4x2bD96n\r\nUtCxXa+N3vESlXYPW1CNjGDnS/2ILZL1Yo4stLlB1tQMxQH+Rp5cANrKMkyf\r\nL5n0YxZw3kPBCF423N8HutFy5L9Dv6iZlU29RUqkJL7AY5bXJf8508Pgjv4v\r\nUVBcd0TcZ1t/Zf6Ph3dL8xlOpBG71kX6S+Oepr29GWYw3Z8oPCQoUVEbTAJ2\r\nBf4q6ZmDgBT0SMLWVx+BkyTQBp1n5aNUk/s=\r\n=XxKR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"f1ccebda0ffb7a1e3ad7b27c9fadc2edb3ea2593","private":false,"scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"8.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"16.17.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.3.7_1678893954928_0.9811247466851123","host":"s3://npm-registry-packages"}},"0.3.8":{"name":"@hypericon/yuzu","version":"0.3.8","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.3.8","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"eedfb7151f7f8f444a06a2cccb03d71299e64285","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.3.8.tgz","fileCount":20,"integrity":"sha512-n4Iv8KHryn7q6dDFI0mxXA16+5cRE1a9LbbaH4CtkuxJxPpPmwXpHkLAllLe4f6fg7KUlTkNa99uQVK/87/qzQ==","signatures":[{"sig":"MEUCIQCnDQt+kzIdQKnA5tkAQBOai3UWq1IM4t0hj/V45kWmhAIgRf9GdTciLb0Rno5CK/5dY7VN9VErELiZl40cvuGYR84=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65167},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"3c4feb89097666a8e309e9fb01d9020f73f19d50","private":false,"scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"8.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"16.17.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.3.8_1684162966849_0.27552208358271035","host":"s3://npm-registry-packages"}},"0.3.9":{"name":"@hypericon/yuzu","version":"0.3.9","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.3.9","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"aeedd08880da8f1ecb4fa348bc668b34a88a0167","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.3.9.tgz","fileCount":20,"integrity":"sha512-+y0qvcW/LUtImxO0mNXrCibrnEUNphbJBXd4z5EO7MgmcLrRMn9zzV638j5ZzcGmBNKpv2jg5R6749lsWTRz3Q==","signatures":[{"sig":"MEQCICORppKh3kUzfgUjU/WXJwzbNPuHX15Eug7GwtiUNHRvAiBigYO8J3g0YzkYZD85mckdLA6aqWVA2Y7JrzbUWrSV+g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65242},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"dc32aa67481bdcf59800c6a50e20598c8c28c9cf","private":false,"scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"8.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"16.17.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.3.9_1684163289225_0.4164871678767206","host":"s3://npm-registry-packages"}},"0.3.10":{"name":"@hypericon/yuzu","version":"0.3.10","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.3.10","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"d056e84fdcbb9d0af6e6f664d028c2e101f89071","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.3.10.tgz","fileCount":20,"integrity":"sha512-HUw2vAXqK02uLbkYvnslvflPxe9IZ0hd/BO794YzRl2bJCXWmXdT6d87ECz0WrzoMjEl+DSfCfr3sE7Hz35Ekg==","signatures":[{"sig":"MEQCIGcMBnX0c+TpeK77+Ju3+jjckM27uD6tWJ6GvtvA42r/AiBEom4sbstnLla7NIbWJeX07y8KYuvkGrML2cvnECJFsg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65705},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"7f177572a6ea63aadce1299d18a239e5646be962","private":false,"scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"8.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"16.17.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.3.10_1684170140646_0.31285597012749133","host":"s3://npm-registry-packages"}},"0.3.11":{"name":"@hypericon/yuzu","version":"0.3.11","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.3.11","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"71afd57490a13caec8f77fc8be01e1c7d4f08b2d","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.3.11.tgz","fileCount":20,"integrity":"sha512-uZrOHoUqwKooLBpzrkfclzI6C7qw1ZRgc2SHE8mSgAoLjxeUUktyHmTxvTLdSrtJJMBE3rMMDxTZMtvz+MgBgQ==","signatures":[{"sig":"MEUCIQDJ39GrfUR8mM8cKmGGqMh7Y8Zzd0DMEc5DkHQV9T+/cgIgBtzAo7qXwvdPK1Ew6HTpHlKJ14gI0E+c/ihBZivOvgs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65736},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"5934e2c1427a400c21a5c050e63cd0917445043d","private":false,"scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"8.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"16.17.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.3.11_1684170543201_0.7259670819705737","host":"s3://npm-registry-packages"}},"0.4.0":{"name":"@hypericon/yuzu","version":"0.4.0","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.4.0","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"6490b3afe8290abe5e683d7bcafd475bf21bc071","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.4.0.tgz","fileCount":20,"integrity":"sha512-D8JPnnxs5frfDi5ci/EXNVD9nDu0cNohpSD34YYuHLStk0EupGh9QLSgpC8MAu2HfFdXVohbt2pYCpHmr5f/ug==","signatures":[{"sig":"MEQCIBKMx665zlVYyFoUBb6nhNssnjTW+Sw3SDZKBdbdeMvpAiBPLxFCmcGgdv2zbvM2SGVJ5fbelejzqUUX4uyiFM8Y2Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67568},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"c6ad1f056525e88d992731819b282a7ca03c9ef4","private":false,"scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"8.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"18.16.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.4.0_1707223779761_0.8132955115580265","host":"s3://npm-registry-packages"}},"0.4.1":{"name":"@hypericon/yuzu","version":"0.4.1","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.4.1","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"57e9605aeb24ae9f5f0453b9042d1e3fdca16328","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.4.1.tgz","fileCount":20,"integrity":"sha512-z/+g6C5ZMb0sR2sK0JKdRlkwbrouTBvTUeC8GiMMPyIMFNGk7YYInHi1DxygWDvm5LD0NSNP0lK8r4W/9AwZzQ==","signatures":[{"sig":"MEYCIQDPrNpPZErblCb2fYuW4HOAG8aDaOX7Ftv5dEWIpyMaZQIhAOoJ8nei4LrYdk44ch3pxzljZbgdACz6NwumTESgqQXo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66408},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"55532f597bb0c043710b3cc915a76077ab125da2","private":false,"scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"10.4.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"20.11.1","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.4.1_1708635984862_0.4846222997677332","host":"s3://npm-registry-packages"}},"0.4.2":{"name":"@hypericon/yuzu","version":"0.4.2","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.4.2","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"05d09be2243584a8684bc347ef1e2cfff52886e2","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.4.2.tgz","fileCount":20,"integrity":"sha512-M10NtMnEXspC2i0EF0xPggMZcAK5yLKd2s05xxLQa7MKMwchS4roS/jOrwfeUb0NKLI2ky7sN+mCcR+xH24OyQ==","signatures":[{"sig":"MEUCIQCrpPl9DB+cbWiRr8wbY8Kh4P0cLivEVZ7eK16WtoYtFgIgTIgKO7H/JSBx4JBQaa7GFspT0IW8ratmdLz+YUnk4Q0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":68441},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"0cd65cd56f701802d767838056fda60caade51ee","private":false,"scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"8.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"18.20.2","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.4.2_1714485540436_0.4304303558838678","host":"s3://npm-registry-packages"}},"0.4.3":{"name":"@hypericon/yuzu","version":"0.4.3","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.4.3","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"43ea88bd578b2c6d3717899c1e5ebe66cee84424","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.4.3.tgz","fileCount":20,"integrity":"sha512-be7tFlqZMAJU6gEOfKpLd2dqyYi9pekNRFuCIEMW9Y+Lu4acNAKNXgguLTXdmVcj404SPXWXaVJvNVOtMFazZA==","signatures":[{"sig":"MEUCIQDAlQYweUhSrAEu9QlDmwfkExYedhDHDFQkllUu+ONexgIgUH/4RJ1wiQHi5i86fSL9R+1tp2czXPHM7SriNERjsEo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":68442},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"77d18e46a769414f19ccb7d7a2e2f6bef7ef3659","private":false,"scripts":{"dev":"concurrently npm:dev-*","test":"echo \"Error: no test specified\" && exit 1","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"10.8.1","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"20.16.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","rimraf":"^3.0.2","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","typescript":"^4.1.5","@types/node":"^14.14.30","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.4.3_1736336200073_0.1627411658661133","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@hypericon/yuzu","version":"0.5.0","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.5.0","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"0afd86bbd03cdac03151d379033ed9c2365b5bec","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.5.0.tgz","fileCount":29,"integrity":"sha512-jQC3ljEh9WyG4xGjTueRxkuprEGV2kSBx5tGXBAADUJf34m/EyvQ7pInpo1lBV451bgbKiblDPSQSS8/NYWZ1A==","signatures":[{"sig":"MEUCIQD7Wk1vATlICN+mdr1ubE63LiQBgrZI9i5Ji6lZwuhuqAIgB8LbcuUvjTWYNVv/PpLtXZnPGUr5jxTeEuxIqziBx8w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94862},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"03b6487658e3e06905e6094ac28971b686897a7b","private":false,"scripts":{"dev":"concurrently npm:dev-*","lint":"eslint .","test":"vitest run","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","test:ui":"vitest --ui","lint:fix":"eslint . --fix","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"10.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","eslint":"^9.39.2","rimraf":"^3.0.2","vitest":"^4.0.18","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","happy-dom":"^20.6.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.0.18","typescript":"^4.1.5","@types/node":"^20.19.33","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","@stylistic/eslint-plugin":"^5.8.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.5.0_1770751046833_0.12325360950837938","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@hypericon/yuzu","version":"0.6.0","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.6.0","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"039a77c9d346cb2ca0503f7fd8744330cf19152c","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.6.0.tgz","fileCount":17,"integrity":"sha512-F9ns8RpeW2fSdsM6rpOiNmBQvQJp/VAsHD5K7VzkxJFLvUTgeR5dXvkna50Pw1jPxou1W/Q8CgnINVjSMpAaZA==","signatures":[{"sig":"MEQCIBrS2iC+bgk/1jH786MhH/AZ+WtyQcAoX8EEJ6ElrhU/AiBP3Xu4XA+7W0iMr6tW9SAx62E+ZFuntrgbmeiW18sJWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92024},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"64c49d5d786757529369b28dae2c5df192156806","private":false,"scripts":{"dev":"concurrently npm:dev-*","lint":"eslint .","test":"vitest run","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","test-ui":"vitest --ui","lint-fix":"eslint . --fix","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","test-watch":"vitest","test-coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"10.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","eslint":"^9.39.2","rimraf":"^3.0.2","vitest":"^4.0.18","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","happy-dom":"^20.6.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.0.18","typescript":"^4.1.5","@types/node":"^20.19.33","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","@stylistic/eslint-plugin":"^5.8.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.6.0_1770761486085_0.6597203967737053","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@hypericon/yuzu","version":"0.6.1","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.6.1","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"6ca1b2e0fa13d756eaf4f40a8606f84bfeaa3eea","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.6.1.tgz","fileCount":17,"integrity":"sha512-UmVHAXgD+URNpRyrANfFfpclE0k0RoS0Jv9K3b7zIh8rUo7CHfFDrNdTiAmurUo3LmJ/YkAk8/uUX4ugJwMoNA==","signatures":[{"sig":"MEUCIAEC+ucTztlKJPiRwLw0HMopPQPhjczccX4ZRWKbY1+DAiEA40yDRsvctuGv/Njnox8qSHcpaGwbGnGmngrNWT98E1I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94164},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"78e72f838875de71e1a3473e3f3140a4215457e1","private":false,"scripts":{"dev":"concurrently npm:dev-*","lint":"eslint .","test":"vitest run","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","test-ui":"vitest --ui","lint-fix":"eslint . --fix","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","test-watch":"vitest","test-coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"10.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","eslint":"^9.39.2","rimraf":"^3.0.2","vitest":"^4.0.18","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","happy-dom":"^20.6.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.0.18","typescript":"^4.1.5","@types/node":"^20.19.33","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","@stylistic/eslint-plugin":"^5.8.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.6.1_1770809344588_0.7028372021871665","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@hypericon/yuzu","version":"0.6.2","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.6.2","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"f9f72a8727cfc1615df005dd34169be17778a7be","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.6.2.tgz","fileCount":17,"integrity":"sha512-8ajZe7oXmefrNC8USwriP9v9QHHRP9izOphI5JoYnqf9phLrIPH69Kz/AzdT61Kf1fUHHzCH3QW95AbJaJeHbw==","signatures":[{"sig":"MEUCIQDSIrlAZIkAgqjuUmxiUxPqIglk9FGICcwEBin5zwlZJgIge2dF21Hmg/rxvtrM9/OhDmGH9VdI1uQ62T0Qb0B0DUM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95555},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"d6d9d931916c476f953784b8597f7c2ce37826c1","private":false,"scripts":{"dev":"concurrently npm:dev-*","lint":"eslint .","test":"vitest run","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","test-ui":"vitest --ui","lint-fix":"eslint . --fix","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","test-watch":"vitest","test-coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"10.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ws":"^7.4.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","eslint":"^9.39.2","rimraf":"^3.0.2","vitest":"^4.0.18","mithril":"^2.0.4","nodemon":"^2.0.7","ts-node":"^9.1.1","@types/ws":"^7.4.0","happy-dom":"^20.6.0","@eslint/js":"^10.0.1","@vitest/ui":"^4.0.18","typescript":"^4.1.5","@types/node":"^20.19.33","concurrently":"^5.3.0","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","@stylistic/eslint-plugin":"^5.8.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.6.2_1770810991182_0.7629558794898597","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@hypericon/yuzu","version":"0.7.0","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.7.0","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"49e89f2cd5138a3dac8c2f36fcec30ebd409e3fa","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.7.0.tgz","fileCount":17,"integrity":"sha512-ttiziAKd0t8K0lJcOERPy3MtpVKuhglfEdkn9uhJVFCNGLCYeWO4sJCasvmA+GpCD54gBOCBUVAUJLMdmGGDzA==","signatures":[{"sig":"MEUCIE6ExpG9YYB/lrkGcdrvqiK238+hfSgjjQTDij8PAqT6AiEAoBFUE1sPmqbHHBlEP3hJuIUAyoIg4cSOeUavpJXuLwM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97439},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"24da71f91cc8478d91502f9557b499d980475109","private":false,"scripts":{"dev":"concurrently npm:dev-*","lint":"eslint .","test":"vitest run","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","test-ui":"vitest --ui","lint-fix":"eslint . --fix","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","test-watch":"vitest","test-coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"10.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ws":"^8.19.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","eslint":"^9.39.2","rimraf":"^6.1.2","vitest":"^4.0.18","mithril":"^2.0.4","nodemon":"^3.1.11","ts-node":"^10.9.2","@types/ws":"^8.18.1","happy-dom":"^20.6.0","@eslint/js":"^9.39.2","@vitest/ui":"^4.0.18","typescript":"^5.9.3","@types/node":"^22.19.11","concurrently":"^9.2.1","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","@stylistic/eslint-plugin":"^5.8.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.7.0_1770843465867_0.019711804358212515","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@hypericon/yuzu","version":"0.7.1","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.7.1","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"7b1d544dc9b722662a37360d783bb1b2b48d4817","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.7.1.tgz","fileCount":18,"integrity":"sha512-sgVQqTEHcR/ptKzdpORyCc8ca5geKYA/+gzu/FdDMscwNMmvqBF8OQkmz17+ZL9Gp49TkFmrXLzMHeZMlx/8lA==","signatures":[{"sig":"MEYCIQC8Ue9ZyzeGGIWpQWD93LQdgy2s6/Otcym/Kd85+S8JpwIhAL7cMewwMts/9ergM2Pbb5mlGaQR2WBUeDLzgGWijDzR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106503},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"1cdc44ef698366471378047d1e9868bebb630ddb","private":false,"scripts":{"dev":"concurrently npm:dev-*","lint":"eslint .","test":"vitest run","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","test-ui":"vitest --ui","lint-fix":"eslint . --fix","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","test-watch":"vitest","test-coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"10.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ws":"^8.19.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","eslint":"^9.39.2","rimraf":"^6.1.2","vitest":"^4.0.18","mithril":"^2.0.4","nodemon":"^3.1.11","ts-node":"^10.9.2","@types/ws":"^8.18.1","happy-dom":"^20.6.0","@eslint/js":"^9.39.2","@vitest/ui":"^4.0.18","typescript":"^5.9.3","@types/node":"^22.19.11","concurrently":"^9.2.1","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","@stylistic/eslint-plugin":"^5.8.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.7.1_1770847160457_0.5849448501463701","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@hypericon/yuzu","version":"0.8.0","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@0.8.0","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"5346ada32272f8b8ff8f1537f093129fff3809f6","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-0.8.0.tgz","fileCount":18,"integrity":"sha512-hF4VbGMLON5kSEQFCgc3LMhgoQpOnaI+dK72TRrtkfV5mkB9DcMnTK+EeyqAlIiXkyfJuU45kG4NSGPEXWlQww==","signatures":[{"sig":"MEQCICHAXGbdDAMw5gyenTXSiOYQLp+e7fWbCc66HBlZAGNyAiBhfZrOBAjseTcLyYLaVnRasQojiklNxcZp85FYEgoFiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129325},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"8bec8ed5c22e0e733db208b2abe0d526123db835","private":false,"scripts":{"dev":"concurrently npm:dev-*","lint":"eslint .","test":"vitest run","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","test-ui":"vitest --ui","lint-fix":"eslint . --fix","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","test-watch":"vitest","test-coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"10.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ws":"^8.19.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","eslint":"^9.39.2","rimraf":"^6.1.2","vitest":"^4.0.18","mithril":"^2.0.4","nodemon":"^3.1.11","ts-node":"^10.9.2","@types/ws":"^8.18.1","happy-dom":"^20.6.0","@eslint/js":"^9.39.2","@vitest/ui":"^4.0.18","typescript":"^5.9.3","@types/node":"^22.19.11","concurrently":"^9.2.1","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","@stylistic/eslint-plugin":"^5.8.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_0.8.0_1771241922783_0.11422773233302985","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@hypericon/yuzu","version":"1.0.0","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@1.0.0","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"56ff74d145b91139e338879517b6172d56723bb5","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-1.0.0.tgz","fileCount":18,"integrity":"sha512-PdIP3KhqhMftCjWBp9MV4+270sfbYWVdUOjIEJKMpBEYtYDXfyjldgdwxlhoY+tjowJdG2NXkLzAiTJkke33hQ==","signatures":[{"sig":"MEQCIH8cAC2+oefyFvqThGcFBDnZGPWJj9e+4c6DKi+ywLERAiBN9zP2udcvp0qwWUHrtdf5Sf4AzJCDrkz5EO+VvSfwjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128886},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"21bd5e9347db943a37d64b1cfce3b5eb39648bfe","private":false,"scripts":{"dev":"concurrently npm:dev-*","lint":"eslint .","test":"vitest run","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","test-ui":"vitest --ui","lint-fix":"eslint . --fix","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","test-watch":"vitest","test-coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"10.7.0","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ws":"^8.19.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","eslint":"^9.39.2","rimraf":"^6.1.2","vitest":"^4.0.18","mithril":"^2.0.4","nodemon":"^3.1.11","ts-node":"^10.9.2","@types/ws":"^8.18.1","happy-dom":"^20.6.0","@eslint/js":"^9.39.2","@vitest/ui":"^4.0.18","typescript":"^5.9.3","@types/node":"^22.19.11","concurrently":"^9.2.1","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","@stylistic/eslint-plugin":"^5.8.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_1.0.0_1771243834778_0.7746260064794876","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@hypericon/yuzu","version":"1.0.1","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","_id":"@hypericon/yuzu@1.0.1","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"homepage":"https://github.com/hypcn/yuzu#readme","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"dist":{"shasum":"19cce5a8d31a914ee3fa4dbf94300cc1a62d73a8","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-1.0.1.tgz","fileCount":18,"integrity":"sha512-rvZmZw2YHxjPUMpHOxZCUs9sBYif/HJSHweQhEcq2VkaYTa9PzkG1Va/pcU1RrMOOpLvf7NnMlYYkthNzgTWxw==","signatures":[{"sig":"MEUCIEzvExYON/JJ1F8KM/ZnXKi1GU5PJ4hTYfvc9R9pKPI2AiEAvTRNQk9v32/+xYILR/XkIZcUbEtonPKnYWqiO9vI/2U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128886},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"acecefad9fa9633a9d3237dc5e2852a47916ba47","private":false,"scripts":{"dev":"concurrently npm:dev-*","lint":"eslint .","test":"vitest run","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","test-ui":"vitest --ui","lint-fix":"eslint . --fix","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","test-watch":"vitest","test-coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"repository":{"url":"git+https://github.com/hypcn/yuzu.git","type":"git"},"_npmVersion":"7.19.1","description":"Library to push UI State updates across connected clients in CI applications","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ws":"^8.19.0","@types/ws":"^8.18.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.0.4","eslint":"^9.39.2","rimraf":"^6.1.2","vitest":"^4.0.18","mithril":"^2.0.4","nodemon":"^3.1.11","ts-node":"^10.9.2","happy-dom":"^20.6.0","@eslint/js":"^9.39.2","@vitest/ui":"^4.0.18","typescript":"^5.9.3","@types/node":"^22.19.11","concurrently":"^9.2.1","@types/mithril":"^2.0.6","tsconfig-paths":"^3.9.0","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","@stylistic/eslint-plugin":"^5.8.0"},"peerDependencies":{"rxjs":"^7.8.0"},"_npmOperationalInternal":{"tmp":"tmp/yuzu_1.0.1_1782767846489_0.7014158703269806","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@hypericon/yuzu","version":"1.1.0","description":"Library to push UI State updates across connected clients in CI applications","main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","homepage":"https://github.com/hypcn/yuzu#readme","private":false,"repository":{"type":"git","url":"git+https://github.com/hypcn/yuzu.git"},"scripts":{"dev":"concurrently npm:dev-*","dev-client":"rimraf example/client-out && vite example/client","dev-server":"nodemon","build":"rimraf dist && tsc -p src/tsconfig.json","watch":"rimraf dist && tsc -p src/tsconfig.json -w","prepublishOnly":"npm run build","test":"vitest run","test-watch":"vitest","test-ui":"vitest --ui","test-coverage":"vitest run --coverage","lint":"eslint .","lint-fix":"eslint . --fix"},"dependencies":{"@types/ws":"^8.18.1","ws":"^8.19.0"},"peerDependencies":{"rxjs":"^7.8.0"},"devDependencies":{"@eslint/js":"^9.39.2","@stylistic/eslint-plugin":"^5.8.0","@types/mithril":"^2.0.6","@types/node":"^22.19.11","@vitest/coverage-v8":"^4.0.18","@vitest/ui":"^4.0.18","concurrently":"^9.2.1","eslint":"^9.39.2","happy-dom":"^20.6.0","mithril":"^2.0.4","nodemon":"^3.1.11","rimraf":"^6.1.2","ts-node":"^10.9.2","tsconfig-paths":"^3.9.0","typescript":"^5.9.3","typescript-eslint":"^8.55.0","vite":"^4.0.4","vitest":"^4.0.18"},"_id":"@hypericon/yuzu@1.1.0","gitHead":"ce082de5199fb0771988020e4eb25da922ddee7c","bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"_nodeVersion":"22.16.0","_npmVersion":"10.7.0","dist":{"integrity":"sha512-ss+rBbH+gWfnBfvd63o+KPFbfsrIDyyyfbAQuTShJEJNAPHT0TDg0NfZYdvVEcTY1lHyRN0e9QJshdJ2Z3tWrg==","shasum":"0bccc61ef9e6e5de0aa5370afb16a60cc40fd116","tarball":"https://registry.npmjs.org/@hypericon/yuzu/-/yuzu-1.1.0.tgz","fileCount":18,"unpackedSize":151366,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIE5LRWYppqhL7uFbChf2ryNrOYuzVdr/XxvRzwEY6HUtAiBE1Ucc9PwmKtKOUHekYagRUz7ED58m8ImU9wfFwS4jCg=="}]},"_npmUser":{"name":"neonfish","email":"ed@neon.fish"},"directories":{},"maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/yuzu_1.1.0_1782838145576_0.6005369027132315"},"_hasShrinkwrap":false}},"time":{"created":"2021-02-19T16:10:42.491Z","modified":"2026-06-30T16:49:05.855Z","0.1.0":"2021-02-19T16:10:42.715Z","0.2.0":"2021-02-25T12:05:35.813Z","0.2.1":"2021-02-25T12:07:57.797Z","0.2.2":"2021-02-25T12:11:18.881Z","0.2.3":"2021-02-25T13:50:56.041Z","0.2.4":"2021-02-25T14:38:13.422Z","0.3.0":"2021-03-02T09:26:00.494Z","0.3.1":"2021-03-02T12:47:54.417Z","0.3.2":"2021-03-02T12:51:39.787Z","0.3.3":"2023-01-26T15:22:32.715Z","0.3.4":"2023-02-08T09:56:40.091Z","0.3.5":"2023-02-08T13:07:53.822Z","0.3.6":"2023-03-13T10:40:54.371Z","0.3.7":"2023-03-15T15:25:55.112Z","0.3.8":"2023-05-15T15:02:47.035Z","0.3.9":"2023-05-15T15:08:09.431Z","0.3.10":"2023-05-15T17:02:20.880Z","0.3.11":"2023-05-15T17:09:03.409Z","0.4.0":"2024-02-06T12:49:39.940Z","0.4.1":"2024-02-22T21:06:25.000Z","0.4.2":"2024-04-30T13:59:00.627Z","0.4.3":"2025-01-08T11:36:40.230Z","0.5.0":"2026-02-10T19:17:26.979Z","0.6.0":"2026-02-10T22:11:26.341Z","0.6.1":"2026-02-11T11:29:04.752Z","0.6.2":"2026-02-11T11:56:31.338Z","0.7.0":"2026-02-11T20:57:46.015Z","0.7.1":"2026-02-11T21:59:20.601Z","0.8.0":"2026-02-16T11:38:42.987Z","1.0.0":"2026-02-16T12:10:34.925Z","1.0.1":"2026-06-29T21:17:26.624Z","1.1.0":"2026-06-30T16:49:05.716Z"},"bugs":{"url":"https://github.com/hypcn/yuzu/issues"},"author":{"name":"Ed Johnson, Hypericon Ltd"},"license":"MIT","homepage":"https://github.com/hypcn/yuzu#readme","repository":{"type":"git","url":"git+https://github.com/hypcn/yuzu.git"},"description":"Library to push UI State updates across connected clients in CI applications","maintainers":[{"name":"dyenamic","email":"steve@piquantdesign.com"},{"name":"neonfish","email":"ed@neon.fish"},{"name":"unany","email":"will-dye@hotmail.co.uk"}],"readme":"\r\n# Yuzu\r\n\r\n[![npm version](https://img.shields.io/npm/v/@hypericon/yuzu.svg)](https://www.npmjs.com/package/@hypericon/yuzu)\r\n[![npm downloads](https://img.shields.io/npm/dm/@hypericon/yuzu.svg)](https://www.npmjs.com/package/@hypericon/yuzu)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue.svg)](https://www.typescriptlang.org/)\r\n[![Test Coverage](https://img.shields.io/badge/coverage-84.45%25-yellowgreen.svg)](https://github.com/hypcn/yuzu)\r\n[![Tests](https://img.shields.io/badge/tests-170%20passing-brightgreen.svg)](https://github.com/hypcn/yuzu)\r\n\r\nUI State Updates -> UISU -> Yuzu\r\n\r\nCI UIs are required to display the status of devices connected to the system in real time. This may be light levels, shade positions, monitoring alerts, etc.\r\n\r\nYuzu provides a mechanism for Hypericon Controller Gateways to push small amounts of realtime state to all connected clients.\r\n\r\n<!-- ![](./docs/diagrams/overview.drawio.svg) -->\r\n\r\n## Quickstart\r\n\r\nInstall the library:\r\n\r\n`npm i @hypericon/yuzu`\r\n\r\nTypescript type definitions are included.\r\n\r\n## Testing\r\n\r\nYuzu includes a comprehensive test suite with 90+ tests covering all core functionality.\r\n\r\n```bash\r\nnpm test              # Run tests once\r\nnpm run test:watch    # Run tests in watch mode\r\nnpm run test:ui       # Run tests with UI\r\nnpm run test:coverage # Generate coverage report\r\n```\r\n\r\n### Breaking Changes\r\n\r\n0.4.0\r\n\r\n- `readPath` renamed to `readPathExisting` (`readPathOptional` added)\r\n- `onChange` renamed to `onChangeExisting` (`onChangeOptional` added)\r\n- `Subscription` renamed to `YuzuSubscription`\r\n\r\n### Shared Definition\r\n\r\nCreate the shared initial state definition object. This specifies the type of the state objects maintained in both the client and server and provides default values.\r\n\r\n> Important: The state definition object must be serialisable as JSON.\r\n\r\nExample:\r\n\r\n```ts\r\n// shared/ui-state.ts\r\n\r\nexport interface ShadeStatus {\r\n  id: string,\r\n  statusName: string,\r\n  position: number,\r\n  alerts: string[],\r\n}\r\nexport interface FixtureStatus {\r\n  id: string,\r\n  brightness: number,\r\n  alerts: string[],\r\n}\r\n\r\n/**\r\n * UI state object used to initialise both client and server.\r\n * EITHER explicitly define key types and initial values in a constant...\r\n */\r\nexport const INITIAL_UI_STATE = {\r\n  shades: [] as ShadeStatus[],\r\n  fixtures: [] as FixtureStatus[],\r\n} as const;\r\n\r\n/** ... OR define a separate interface... */\r\nexport interface YuzuState {\r\n  shades: ShadeStatus[],\r\n  fixtures: FixtureStatus[],\r\n};\r\n/** ... and constant. */\r\nexport const INITIAL_UI_STATE: YuzuState = {\r\n  shades: [],\r\n  fixtures: [],\r\n};\r\n```\r\n\r\n### Server Implementation\r\n\r\nImplement the UI state server.\r\n\r\nEither provide an existing HTTP server, or define a port on which to listen with a new server.\r\n\r\nExample:\r\n\r\n```ts\r\n// server/ui-state/ui-state.service.ts\r\n\r\nimport { YuzuServer } from \"@hypericon/yuzu\";\r\nimport { Server } from \"http\";\r\nimport { INITIAL_UI_STATE, yuzu, ShadeStatus } from \"../../ui-state\";\r\n\r\nexport class yuzuService {\r\n\r\n  private yuzu: YuzuServer;\r\n\r\n  constructor(opts: { server: Server | undefined, port: number | undefined }) {\r\n    this.yuzu = new YuzuServer(INITIAL_UI_STATE, {\r\n      serverRef: opts.server,\r\n      serverConfig: opts.port ? { port: opts.port } : undefined,\r\n      // Optional: Enable WebSocket compression (can reduce bandwidth by 60-80%)\r\n      perMessageDeflate: true,\r\n    });\r\n\r\n    // Example random position every 1,000 ms\r\n    setTimeout(() => {\r\n      const status: ShadeStatus = {\r\n        id: \"shadeID\",\r\n        statusName: \"moving\",\r\n        position: Math.round(Math.random() * 100),\r\n        alerts: [],\r\n      };\r\n      this.updateShadeStatus(\"shadeID\", status);\r\n    }, 1_000);\r\n  }\r\n\r\n  // State could be updated by listening to other parts of the application,\r\n  // or receiving method calls from other parts of the application.\r\n\r\n  updateShadeStatus(id: string, status: ShadeStatus) {\r\n    const shadeIndex = this.yuzu.state.shades.findIndex(s => s.id === id);\r\n\r\n    // Simply interact with the state property of the YuzuServer object,\r\n    // and all updates will be sent to all connected clients.\r\n    if (shadeIndex > -1) {\r\n      this.yuzu.state.shades[shadeIndex] = status;\r\n    } else {\r\n      this.yuzu.state.shades.push(status);\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### Client Implementation\r\n\r\nImplement the UI state client. The instance of the client UI state class should be a singleton. This is not strictly necessary, but more instances will increase network traffic for no gain.\r\n\r\nExample Mithril page component:\r\n\r\n```ts\r\n// client/pages/ExampleStatePage.ts\r\n\r\nimport { YuzuClient, YuzuSubscription } from \"@hypericon/yuzu\";\r\nimport m from \"mithril\";\r\nimport { UI_STATE, INITIAL_UI_STATE } from \"../../ui-state\";\r\n\r\n// Client UI state singleton reference\r\nconst yuzu = new YuzuClient(INITIAL_UI_STATE);\r\n\r\n// Example Mithril page component\r\nexport const ExampleStatePage: m.Component<{}, {\r\n  sub: YuzuSubscription,\r\n}> = {\r\n\r\n  oninit() {\r\n    this.sub = new YuzuSubscription();\r\n\r\n    // Listen to changes on the subscribable state property\r\n    // Every object and primitive has a .subscribe() method added for precise listening\r\n    this.sub.add(yuzu.state$.shades.subscribe((shades) => console.log(\"shades updated\")));\r\n\r\n    // Listen to changes on ALL state keys\r\n    this.sub.add(yuzu.onAny((value, path) => {\r\n      console.log(`State path \"${path.join(\".\")}\" updated, redrawing...`);\r\n      m.redraw();\r\n    }));\r\n  },\r\n\r\n  onremove() {\r\n    // Clean up listeners when they are finished with\r\n    this.sub.unsubscribe();\r\n  },\r\n\r\n  view() {\r\n    return m(\"\", [\r\n      m(\"h1\", \"UI State Example Page\"),\r\n\r\n      // Read state using the .state property\r\n      // The .state$ property has the same values, but reading the property ensures that .subscribe()\r\n      // functions are set up, so can slightly decrease performance if subscribing is not immediately needed\r\n      m(\"h2\", \"Shade Status:\"),\r\n      yuzu.state.shades.map(s => {\r\n        const alertMsg = s.alerts.length > 0 ? s.alerts.join(\", \") : \"no alerts\";\r\n        return m(\"p\", `Shade ${s.id}: ${s.statusName} @${s.position}% (${alertMsg})`);\r\n      }),\r\n\r\n      // Read state using the .state property\r\n      m(\"p\", `Fixture ABC123 alerts: ${yuzu.state.fixtures\r\n                                        .filter(f => f.id === \"abc123\")\r\n                                        .map(f => `${f.alerts}`)}`),\r\n    ]);\r\n  }\r\n\r\n};\r\n```\r\n\r\n## Authentication\r\n\r\nYuzu supports optional authentication for WebSocket connections using query parameters. This allows you to secure your WebSocket endpoints while maintaining compatibility with both browser and Node.js environments.\r\n\r\n### Server-Side Authentication\r\n\r\nImplement authentication by providing an `authenticate` callback in the `YuzuServer` configuration. The callback receives connection information and returns `true` to accept or `false` to reject the connection. The callback can be synchronous or asynchronous (return a `Promise`).\r\n\r\n```ts\r\nimport { YuzuServer, AuthenticationInfo } from \"@hypericon/yuzu\";\r\nimport { INITIAL_UI_STATE } from \"./shared/ui-state\";\r\n\r\nconst validTokens = new Set([\"secret-token-123\", \"another-valid-token\"]);\r\n\r\nconst yuzu = new YuzuServer(INITIAL_UI_STATE, {\r\n  serverConfig: { port: 3000 },\r\n  \r\n  // Synchronous authentication\r\n  authenticate: (info: AuthenticationInfo) => {\r\n    const token = info.queryParams.get(\"token\");\r\n    return validTokens.has(token || \"\");\r\n  }\r\n});\r\n```\r\n\r\nThe `AuthenticationInfo` object provides:\r\n\r\n- `request`: The incoming HTTP request (`IncomingMessage`)\r\n- `queryParams`: Parsed query parameters (`URLSearchParams`)\r\n- `origin`: The `Origin` header value (if present)\r\n\r\n### Client-Side Authentication\r\n\r\nClients can provide authentication tokens in two ways:\r\n\r\n#### Static Token\r\n\r\nProvide a token string that will be appended to all connection attempts:\r\n\r\n```ts\r\nimport { YuzuClient } from \"@hypericon/yuzu\";\r\nimport { INITIAL_UI_STATE } from \"./shared/ui-state\";\r\n\r\nconst yuzu = new YuzuClient(INITIAL_UI_STATE, {\r\n  address: \"ws://localhost:3000\",\r\n  token: \"secret-token-123\"\r\n});\r\n\r\nawait yuzu.connect();\r\n// Connects to: ws://localhost:3000?token=secret-token-123\r\n```\r\n\r\n#### Dynamic Token via Callback\r\n\r\nProvide a `getToken` callback for dynamic token retrieval (e.g., refreshing expired tokens). The callback can be synchronous or asynchronous:\r\n\r\n```ts\r\nconst yuzu = new YuzuClient(INITIAL_UI_STATE, {\r\n  address: \"ws://localhost:3000\",\r\n  getToken: async () => {\r\n    // Fetch fresh token from your auth service\r\n    const response = await fetch(\"/api/auth/token\");\r\n    const data = await response.json();\r\n    return data.token;\r\n  }\r\n});\r\n\r\nawait yuzu.connect();\r\n```\r\n\r\n### Real-World Examples\r\n\r\n#### JWT Authentication\r\n\r\n```ts\r\n// Server\r\nimport jwt from 'jsonwebtoken';\r\n\r\nconst yuzu = new YuzuServer(INITIAL_UI_STATE, {\r\n  serverConfig: { port: 3000 },\r\n  authenticate: async (info: AuthenticationInfo) => {\r\n    try {\r\n      const token = info.queryParams.get(\"token\");\r\n      if (!token) return false;\r\n      \r\n      // Verify JWT token\r\n      const decoded = jwt.verify(token, process.env.JWT_SECRET!);\r\n      console.log(`Authenticated user: ${decoded.userId}`);\r\n      return true;\r\n    } catch (err) {\r\n      console.error(\"JWT verification failed:\", err);\r\n      return false;\r\n    }\r\n  }\r\n});\r\n\r\n// Client\r\nconst yuzu = new YuzuClient(INITIAL_UI_STATE, {\r\n  address: \"ws://localhost:3000\",\r\n  getToken: async () => {\r\n    // Get JWT from localStorage or auth service\r\n    return localStorage.getItem(\"jwtToken\") || \"\";\r\n  }\r\n});\r\n```\r\n\r\n#### Token Refresh on Reconnection\r\n\r\nThe `getToken` callback is called on every connection attempt, making it ideal for token refresh scenarios:\r\n\r\n```ts\r\nconst yuzu = new YuzuClient(INITIAL_UI_STATE, {\r\n  address: \"ws://localhost:3000\",\r\n  getToken: async () => {\r\n    // Check if token is expired\r\n    const token = localStorage.getItem(\"token\");\r\n    const expiry = localStorage.getItem(\"tokenExpiry\");\r\n    \r\n    if (!token || Date.now() > parseInt(expiry || \"0\")) {\r\n      // Refresh token if expired\r\n      const response = await fetch(\"/api/auth/refresh\", {\r\n        method: \"POST\",\r\n        credentials: \"include\"\r\n      });\r\n      const data = await response.json();\r\n      \r\n      localStorage.setItem(\"token\", data.token);\r\n      localStorage.setItem(\"tokenExpiry\", data.expiry);\r\n      return data.token;\r\n    }\r\n    \r\n    return token;\r\n  }\r\n});\r\n```\r\n\r\n### Security Best Practices\r\n\r\n1. **Use WSS (WebSocket Secure)** in production: `wss://your-domain.com`\r\n2. **Short-lived tokens**: Use tokens with expiration times (e.g., JWT with exp claim)\r\n3. **Token rotation**: Implement token refresh mechanisms for long-running connections\r\n4. **Rate limiting**: Consider rate-limiting authentication attempts to prevent brute-force attacks\r\n5. **HTTPS for token retrieval**: Always fetch tokens over HTTPS to prevent interception\r\n6. **Origin validation**: Use `info.origin` to validate the request origin when applicable\r\n7. **Error handling**: The `authenticate` callback should handle errors gracefully; if it throws, the connection will be rejected\r\n\r\n### Backward Compatibility\r\n\r\nAuthentication is completely optional. Existing code without authentication continues to work unchanged:\r\n\r\n```ts\r\n// No authentication - works as before\r\nconst yuzu = new YuzuServer(INITIAL_UI_STATE, {\r\n  serverConfig: { port: 3000 }\r\n});\r\n```\r\n\r\n## Reconnection\r\n\r\nWhen a WebSocket connection is lost, `YuzuClient` automatically attempts to reconnect. The reconnection behaviour is configurable via the `reconnect` option in `YuzuClientConfig`.\r\n\r\n### Configuration\r\n\r\n```ts\r\nconst client = new YuzuClient(initialState, {\r\n  address: \"ws://localhost:3000/api/yuzu\",\r\n  reconnect: {\r\n    enabled: true,            // Master switch (default: true)\r\n    strategy: \"exponential\",  // \"fixed\" | \"exponential\" (default: \"fixed\")\r\n    baseDelayMs: 1000,        // Base delay in ms (default: 3000)\r\n    multiplier: 2,            // Exponential multiplier (default: 2, exponential only)\r\n    maxDelayMs: 30000,        // Cap on delay in ms (default: 30000, exponential only)\r\n    jitter: 0.2,              // ±jitter fraction (default: 0.2, 0 disables)\r\n    maxAttempts: 0,           // Max attempts before giving up (default: 0 = unlimited)\r\n  },\r\n});\r\n```\r\n\r\n**Strategies:**\r\n\r\n- `\"fixed\"` — waits `baseDelayMs` between every attempt.\r\n- `\"exponential\"` — delay grows as `baseDelayMs * multiplier^(attempt-1)`, capped at `maxDelayMs`.\r\n\r\n**Jitter** applies a random `±jitter` fraction to the computed delay to avoid thundering-herd effects when many clients reconnect simultaneously (e.g. after a server restart).\r\n\r\n### Runtime Control\r\n\r\nReconnection can be paused and resumed at runtime — useful when the consuming application knows the user is logged out and wants to stop retrying until they log back in:\r\n\r\n```ts\r\n// Pause reconnection (e.g. user logged out)\r\nclient.setAutoReconnect(false);\r\n\r\n// ... user logs back in ...\r\n\r\n// Resume — kicks an immediate connect if currently disconnected\r\nclient.setAutoReconnect(true);\r\n```\r\n\r\n### Manual Reconnect\r\n\r\nForce an immediate reconnection (resets the attempt counter, no delay):\r\n\r\n```ts\r\nclient.reconnect();\r\n```\r\n\r\n### Disconnect\r\n\r\nClose the connection with explicit control over whether reconnection should follow:\r\n\r\n```ts\r\n// Permanent disconnect (default) — suppresses reconnection until\r\n// reconnect() or setAutoReconnect(true) is called\r\nclient.disconnect();\r\n\r\n// Close but let Yuzu reconnect on its own schedule (with backoff)\r\nclient.disconnect({ reconnect: true });\r\n```\r\n\r\n### Observing Reconnection State\r\n\r\nThe `reconnectState$` observable emits lifecycle events:\r\n\r\n```ts\r\nimport { firstValueFrom } from \"rxjs\";\r\n\r\nclient.reconnectState$.subscribe(state => {\r\n  switch (state.status) {\r\n    case \"connected\":    // Connection established, attempt counter reset\r\n    case \"reconnecting\": // Retry scheduled, state.attempt = current attempt number\r\n    case \"disconnected\": // Paused or disconnected\r\n    case \"gave-up\":      // maxAttempts reached; call reconnect() to retry\r\n  }\r\n});\r\n```\r\n\r\n### Backward Compatibility\r\n\r\nThe deprecated `reconnectTimeout` option still works — it sets the base delay with strategy `\"fixed\"`. Existing code using `reconnectTimeout` is unaffected:\r\n\r\n```ts\r\n// Still works — equivalent to reconnect: { baseDelayMs: 5000 }\r\nconst client = new YuzuClient(initialState, {\r\n  address: \"ws://localhost:3000/api/yuzu\",\r\n  reconnectTimeout: 5000,\r\n});\r\n```\r\n\r\n### External Transport Mode\r\n\r\nIn external transport mode, all reconnection APIs (`reconnect()`, `disconnect()`, `setAutoReconnect()`) warn and no-op, since the consuming application owns the transport. `reconnectState$` is seeded with `\"disconnected\"` and never re-emits.\r\n\r\n## External Transport Mode\r\n\r\nYuzu's external transport mode allows you to use your own communication layer (WebSocket, HTTP polling, Server-Sent Events, WebRTC, etc.) instead of the built-in WebSocket server. This is useful when:\r\n\r\n- You already have a WebSocket connection and don't want to create a second one\r\n- You want to integrate Yuzu into an existing communication infrastructure\r\n- You need full control over the transport layer (authentication, compression, routing, etc.)\r\n- You want to use a different transport mechanism entirely\r\n\r\n### How It Works\r\n\r\nIn external transport mode, Yuzu focuses solely on state synchronization. You're responsible for:\r\n\r\n1. Managing the connection/transport\r\n2. Sending Yuzu's messages to clients/server\r\n3. Forwarding received messages back to Yuzu\r\n\r\nYuzu continues to handle:\r\n\r\n- State change detection\r\n- Message serialization\r\n- Patch generation and batching\r\n- Subscription management\r\n- State synchronization logic\r\n\r\n### Server-Side External Transport\r\n\r\nConfigure the server with `externalTransport: true` and provide an `onMessage` callback:\r\n\r\n```ts\r\nimport { YuzuServer } from \"@hypericon/yuzu\";\r\nimport WebSocket, { WebSocketServer } from \"ws\";\r\nimport { INITIAL_UI_STATE } from \"./shared/ui-state\";\r\n\r\n// Create your own WebSocket server\r\nconst wss = new WebSocketServer({ port: 3000, path: \"/ws\" });\r\n\r\n// Map to track clients by ID\r\nconst clients = new Map<string, WebSocket>();\r\nlet nextClientId = 1;\r\n\r\n// Create Yuzu server in external transport mode\r\nconst yuzuServer = new YuzuServer(INITIAL_UI_STATE, {\r\n  externalTransport: true,\r\n  onMessage: (message, clientId) => {\r\n    if (clientId) {\r\n      // Send to specific client (e.g., for full state reload)\r\n      const client = clients.get(clientId);\r\n      if (client && client.readyState === WebSocket.OPEN) {\r\n        client.send(message);\r\n      }\r\n    } else {\r\n      // Broadcast to all clients (e.g., for state patches)\r\n      wss.clients.forEach((client) => {\r\n        if (client.readyState === WebSocket.OPEN) {\r\n          client.send(message);\r\n        }\r\n      });\r\n    }\r\n  },\r\n});\r\n\r\n// Forward incoming messages to Yuzu\r\nwss.on(\"connection\", (ws) => {\r\n  const clientId = `client-${nextClientId++}`;\r\n  clients.set(clientId, ws);\r\n\r\n  ws.on(\"message\", (data) => {\r\n    // Pass clientId so Yuzu can send targeted responses\r\n    yuzuServer.handleClientMessage(data.toString(), clientId);\r\n  });\r\n\r\n  ws.on(\"close\", () => {\r\n    clients.delete(clientId);\r\n  });\r\n});\r\n\r\n// Use state as normal - updates are sent via your onMessage callback\r\nyuzuServer.state.counter++;\r\n```\r\n\r\n**Server Configuration:**\r\n\r\n- `externalTransport: true` - Disables built-in WebSocket server\r\n- `onMessage: (message: string, clientId?: string) => void` - **Required** callback for sending messages to clients\r\n  - `message` - JSON-stringified message to send\r\n  - `clientId` - When provided, send only to this specific client (e.g., full state reload). When undefined, broadcast to all clients (e.g., state patches).\r\n- `serverRef`, `serverConfig`, `path`, `authenticate` - Ignored in external transport mode\r\n\r\n**Methods:**\r\n\r\n- `handleClientMessage(message: string, clientId?: string)` - Call this with incoming messages from clients\r\n  - `message` - JSON-stringified message from the client\r\n  - `clientId` - Optional identifier for the client. Used for targeted responses like full state reloads.\r\n- All other methods and properties work as normal\r\n\r\n**Targeted Messaging:** The optional `clientId` parameter enables bandwidth optimization. When a single client requests the full state (via `reload()`), only that client receives the response instead of broadcasting to all clients. State patches are still broadcast to all clients (no `clientId`).\r\n\r\n### Client-Side External Transport\r\n\r\nConfigure the client with `externalTransport: true` and provide an `onMessage` callback:\r\n\r\n```ts\r\nimport { YuzuClient } from \"@hypericon/yuzu\";\r\nimport { INITIAL_UI_STATE } from \"./shared/ui-state\";\r\n\r\n// Create your own WebSocket connection\r\nconst ws = new WebSocket(\"ws://localhost:3000/ws\");\r\n\r\n// Create Yuzu client in external transport mode\r\nconst yuzuClient = new YuzuClient(INITIAL_UI_STATE, {\r\n  externalTransport: true,\r\n  onMessage: (message) => {\r\n    // Send Yuzu messages through your WebSocket\r\n    if (ws.readyState === WebSocket.OPEN) {\r\n      ws.send(message);\r\n    }\r\n  },\r\n});\r\n\r\n// Forward incoming messages to Yuzu\r\nws.addEventListener(\"open\", () => {\r\n  // Request initial state from server\r\n  yuzuClient.reload();\r\n});\r\n\r\nws.addEventListener(\"message\", (event) => {\r\n  yuzuClient.handleServerMessage(event.data);\r\n});\r\n\r\n// Use state and subscriptions as normal\r\nyuzuClient.state$.counter.subscribe((value) => {\r\n  console.log(\"Counter:\", value);\r\n});\r\n```\r\n\r\n**Client Configuration:**\r\n\r\n- `externalTransport: true` - Disables built-in WebSocket connection\r\n- `onMessage: (message: string) => void` - **Required** callback for sending messages to server\r\n- `address`, `reconnectTimeout`, `token`, `getToken` - Ignored in external transport mode\r\n\r\n**Methods:**\r\n\r\n- `handleServerMessage(message: string)` - Call this with incoming messages from the server\r\n- `reload()` - Request full state from server (sends message via your `onMessage` callback)\r\n- `reconnect()`, `disconnect()` - Do nothing in external transport mode (your responsibility)\r\n- All subscription and state reading methods work as normal\r\n\r\n**Properties:**\r\n\r\n- `connected$` and `isConnected` - Always return `false` in external transport mode (manage your own connection state)\r\n\r\n### Complete Example\r\n\r\nSee the [external-transport example](./example/external-transport) for a working demonstration of using Yuzu with your own WebSocket connection.\r\n\r\n### Alternative Transport Examples\r\n\r\n**HTTP Polling (Server):**\r\n\r\n```ts\r\nimport express from \"express\";\r\nimport { YuzuServer } from \"@hypericon/yuzu\";\r\n\r\nconst app = express();\r\napp.use(express.json());\r\n\r\nconst pendingMessages = new Map<string, string[]>();\r\n\r\nconst yuzuServer = new YuzuServer(INITIAL_UI_STATE, {\r\n  externalTransport: true,\r\n  onMessage: (message, clientId) => {\r\n    if (clientId) {\r\n      // Store message for specific client\r\n      if (!pendingMessages.has(clientId)) {\r\n        pendingMessages.set(clientId, []);\r\n      }\r\n      pendingMessages.get(clientId)!.push(message);\r\n    } else {\r\n      // Broadcast to all clients\r\n      for (const [id, messages] of pendingMessages.entries()) {\r\n        messages.push(message);\r\n      }\r\n    }\r\n  },\r\n});\r\n\r\n// Client polls this endpoint\r\napp.get(\"/poll/:clientId\", (req, res) => {\r\n  const clientId = req.params.clientId;\r\n  const messages = pendingMessages.get(clientId) || [];\r\n  pendingMessages.set(clientId, []); // Clear after sending\r\n  res.json({ messages });\r\n});\r\n\r\n// Client sends messages to this endpoint\r\napp.post(\"/message/:clientId\", (req, res) => {\r\n  const clientId = req.params.clientId;\r\n  yuzuServer.handleClientMessage(JSON.stringify(req.body), clientId);\r\n  res.sendStatus(200);\r\n});\r\n```\r\n\r\n**Server-Sent Events (Server):**\r\n\r\n```ts\r\nimport express from \"express\";\r\nimport { YuzuServer } from \"@hypericon/yuzu\";\r\n\r\nconst app = express();\r\nconst clients = new Map<string, express.Response>();\r\n\r\nconst yuzuServer = new YuzuServer(INITIAL_UI_STATE, {\r\n  externalTransport: true,\r\n  onMessage: (message, clientId) => {\r\n    if (clientId) {\r\n      // Send to specific client\r\n      const client = clients.get(clientId);\r\n      if (client) {\r\n        client.write(`data: ${message}\\n\\n`);\r\n      }\r\n    } else {\r\n      // Broadcast to all connected SSE clients\r\n      clients.forEach((client) => {\r\n        client.write(`data: ${message}\\n\\n`);\r\n      });\r\n    }\r\n  },\r\n});\r\n\r\napp.get(\"/events/:clientId\", (req, res) => {\r\n  const clientId = req.params.clientId;\r\n  res.setHeader(\"Content-Type\", \"text/event-stream\");\r\n  res.setHeader(\"Cache-Control\", \"no-cache\");\r\n  res.setHeader(\"Connection\", \"keep-alive\");\r\n  \r\n  clients.set(clientId, res);\r\n  \r\n  req.on(\"close\", () => {\r\n    clients.delete(clientId);\r\n  });\r\n});\r\n\r\n// Endpoint for client messages\r\napp.post(\"/message/:clientId\", (req, res) => {\r\n  const clientId = req.params.clientId;\r\n  yuzuServer.handleClientMessage(JSON.stringify(req.body), clientId);\r\n  res.sendStatus(200);\r\n});\r\n```\r\n\r\n### Migration Guide\r\n\r\nSwitching from standard mode to external transport mode is straightforward:\r\n\r\n**Before (Standard Mode):**\r\n\r\n```ts\r\n// Server\r\nconst yuzu = new YuzuServer(initialState, {\r\n  serverConfig: { port: 3000 }\r\n});\r\n\r\n// Client\r\nconst yuzu = new YuzuClient(initialState, {\r\n  address: \"ws://localhost:3000/api/yuzu\"\r\n});\r\n```\r\n\r\n**After (External Transport Mode):**\r\n\r\n```ts\r\n// Server\r\nconst myWss = new WebSocketServer({ port: 3000 });\r\nconst clients = new Map<string, WebSocket>();\r\nlet nextId = 1;\r\n\r\nconst yuzu = new YuzuServer(initialState, {\r\n  externalTransport: true,\r\n  onMessage: (msg, clientId) => {\r\n    if (clientId) {\r\n      // Send to specific client\r\n      clients.get(clientId)?.send(msg);\r\n    } else {\r\n      // Broadcast to all\r\n      myWss.clients.forEach(c => c.send(msg));\r\n    }\r\n  }\r\n});\r\n\r\nmyWss.on(\"connection\", ws => {\r\n  const clientId = `c${nextId++}`;\r\n  clients.set(clientId, ws);\r\n  ws.on(\"message\", data => yuzu.handleClientMessage(data.toString(), clientId));\r\n  ws.on(\"close\", () => clients.delete(clientId));\r\n});\r\n\r\n// Client\r\nconst myWs = new WebSocket(\"ws://localhost:3000\");\r\nconst yuzu = new YuzuClient(initialState, {\r\n  externalTransport: true,\r\n  onMessage: (msg) => myWs.send(msg)\r\n});\r\nmyWs.addEventListener(\"message\", e => yuzu.handleServerMessage(e.data));\r\nmyWs.addEventListener(\"open\", () => yuzu.reload());\r\n```\r\n\r\nAll state access, subscriptions, and other Yuzu APIs remain identical!\r\n\r\n## RxJS Compatibility\r\n\r\n`YuzuSubscription` implements the RxJS `Unsubscribable` interface, making it fully compatible with the RxJS ecosystem. You can:\r\n\r\n- Use `YuzuSubscription` anywhere an RxJS `Subscription` is expected\r\n- Add RxJS `Subscription` objects to a `YuzuSubscription` using `.add()`\r\n- Add plain functions as teardown logic\r\n- Mix and match `YuzuSubscription` and RxJS `Subscription` objects\r\n\r\n```ts\r\nimport { interval } from 'rxjs';\r\nimport { YuzuSubscription } from '@hypericon/yuzu';\r\n\r\nconst sub = new YuzuSubscription();\r\n\r\n// Add Yuzu subscription\r\nsub.add(yuzu.state$.count.subscribe(value => console.log(value)));\r\n\r\n// Add RxJS subscription\r\nconst rxjsSub = interval(1000).subscribe(n => console.log(n));\r\nsub.add(rxjsSub);\r\n\r\n// Add plain function\r\nsub.add(() => console.log('Cleanup'));\r\n\r\n// Unsubscribe all at once\r\nsub.unsubscribe();\r\n```\r\n\r\nThe `closed` property indicates whether the subscription has been unsubscribed, and calling `unsubscribe()` multiple times is safe (idempotent).\r\n\r\n## Considerations\r\n\r\n### Subscription Paths\r\n\r\nIn the client, any object at any depth in the state stree can be subscribed to. This includes all objects and arrays, but not primitives.\r\n\r\n- When the entire state tree is reloaded (for example, on network reconnection) all listeners are notified.\r\n\r\n- When the state tree is patched, only the listeners whose \"path\" is completely satisfied by the updated \"path\" are notified. Any \"extra\" segments in the updated path do not matter.\r\n\r\nSimple example:\r\n\r\n```ts\r\nconst sub = clientUi.state$.shades.controllers[\"id1\"].subscribe(val => { ... });\r\n```\r\n\r\nThis is a subscription to the controller with id `id1` on the `controllers` object in the `shades` object in the state tree. The \"path\" for this listener is:\r\n\r\n`[ \"shades\", \"controllers\", \"id1\" ]`\r\n\r\nServer Update | Updated Path | Subscription Notified\r\n--- | --- | ---\r\n`server.state.lighting.fixtures.push({ ... });` | [ \"lighting\", \"fixtures\" ] | No\r\n`server.state.shades.controllers.push({ ... });` | [ \"shades\", \"controllers\" ] | No\r\n`server.state.shades.controllers[\"id5\"] = { ... };` | [ \"shades\", \"controllers\", \"id5\" ] | No\r\n`server.state.shades.controllers[\"id5\"].status = \"Error\";` | [ \"shades\", \"controllers\", \"id5\", \"status\" ] | No\r\n`server.state.shades.controllers[\"id1\"] = { ... };` | [ \"shades\", \"controllers\", \"id1\" ] | Yes ✓\r\n`server.state.shades.controllers[\"id1\"].status = \"Error\";` | [ \"shades\", \"controllers\", \"id1\", \"status\" ] | Yes ✓\r\n`server.state.shades.controllers[\"id1\"].shades[5].status = \"Error\";` | [ \"shades\", \"controllers\", \"id1\", \"shades\", \"status\", \"5\" ] | Yes ✓\r\n`server.state.shades.controllers[\"id1\"] = undefined;` | [ \"shades\", \"controllers\", \"id1\" ] | Yes ✓ (caution)\r\n`delete server.state.shades.controllers[\"id1\"];` | (None, no message sent) | No (no patch message sent)\r\n\r\n**Worked Example:**\r\n\r\nGiven the following state interface definition:\r\n\r\n```ts\r\ninterface State {\r\n  shadeControllers: {\r\n    [id: string]: {\r\n      status: string,\r\n      errors: string[],\r\n      shades: {\r\n        status: string,\r\n        position: number,\r\n        errors: string[],\r\n      }[],\r\n    },\r\n  },\r\n  ...\r\n}\r\n\r\nconst initialState: State = {\r\n  shadeControllers: {\r\n    id1: {\r\n      status: \"fine\",\r\n      errors: [],\r\n      shades: [\r\n        { status: \"fine\", position: 50, errors: [] },\r\n        { status: \"fine\", position: 50, errors: [] },\r\n        { status: \"error\", position: 50, errors: [\"overtemp\"] },\r\n      ],\r\n    },\r\n    id2: {\r\n      ...\r\n    },\r\n    ...\r\n  },\r\n  ...\r\n};\r\n```\r\n\r\nAnd the client subscriptions:\r\n\r\n```ts\r\nconst client = new YuzuClient<...>(...);\r\n\r\nconst sub1 = client.state$.shadeControllers.subscribe(v => { ... });\r\nconst sub2 = client.state$.shadeControllers[\"id1\"].subscribe(v => { ... });\r\nconst sub3 = client.state$.shadeControllers[\"id1\"].shades.subscribe(v => { ... });\r\nconst sub4 = client.state$.shadeControllers[\"id1\"].shades[5].subscribe(v => { ... });\r\n\r\n// path1 - [ \"shadeControllers\" ]\r\n// path2 - [ \"shadeControllers\", \"id1\" ]\r\n// path3 - [ \"shadeControllers\", \"id1\", \"shades\" ]\r\n// path4 - [ \"shadeControllers\", \"id1\", \"shades\", \"5\" ]\r\n```\r\n\r\nHere are the results of modifying the values at the given paths:\r\n\r\nModifying lighting status - updated path: `[ \"lighting\", \"status\" ]`\r\n\r\n- sub1 = not triggered\r\n- sub2 = not triggered\r\n- sub3 = not triggered\r\n- sub4 = not triggered\r\n\r\nModifying controller 2 status - updated path: `[ \"shadeControllers\", \"id2\", \"status\" ]`\r\n\r\n- sub1 = triggered\r\n- sub2 = not triggered\r\n- sub3 = not triggered\r\n- sub4 = not triggered\r\n\r\nModifying controller 1 status - updated path: `[ \"shadeControllers\", \"id1\", \"status\" ]`\r\n\r\n- sub1 = triggered\r\n- sub2 = triggered\r\n- sub3 = not triggered\r\n- sub4 = not triggered\r\n\r\nModifying controller 1 shade 4 status - updated path: `[ \"shadeControllers\", \"id1\", \"shades\", \"4\", \"status\" ]`\r\n\r\n- sub1 = triggered\r\n- sub2 = triggered\r\n- sub3 = triggered\r\n- sub4 = not triggered\r\n\r\nModifying controller 1 shade 5 status - updated path: `[ \"shadeControllers\", \"id1\", \"shades\", \"5\", \"status\" ]`\r\n\r\n- sub1 = triggered\r\n- sub2 = triggered\r\n- sub3 = triggered\r\n- sub4 = triggered\r\n\r\n### Nullable State Keys\r\n\r\nIt may be the case that state keys be dynamically created/destroyed, for example for transient pieces of equipment or pieces of state. It may be desireable to access the state regarding these by some key or ID.\r\n\r\nAs shown above, the state object can be defined as such to support this case:\r\n\r\n```ts\r\nexport interface YuzuState {\r\n  ...\r\n  transientDevices: {\r\n    [id: string]: DeviceState | undefined,\r\n  },\r\n  ...\r\n}\r\nexport interface DeviceState {\r\n  status: string,\r\n  ...\r\n}\r\n```\r\n\r\nNote the union type.\r\n\r\nThis can be written to from the server like so:\r\n\r\n```ts\r\nyuzu.state.transientDevices[\"device1\"] = { ... }; // Set device to initial value\r\nyuzu.state.transientDevices[\"device1\"] = { ... }; // Overwrite device value\r\nyuzu.state.transientDevices[\"device1\"].status = \" ... \"; // Update single key in device\r\nyuzu.state.transientDevices[\"device1\"] = undefined; // Remove device\r\n```\r\n\r\nAnd listened to from the client like so:\r\n\r\n```ts\r\n// Receives all updates\r\nyuzu.state$.transientDevices.subscribe(\r\n  (allDevicesObj: { [id: string]: DeviceState | undefined }) => { ... },\r\n);\r\n// Receives all updates, on the last update the parameter is undefined\r\nyuzu.state$.transientDevices[\"device1\"].subscribe((device: DeviceState | undefined) => { ... });\r\n// Receives one update, when the status is explicitly updated\r\nyuzu.state$.transientDevices[\"device1\"].status.subscribe((status: string) => { ... });\r\n```\r\n\r\n### Arrays in State Tree\r\n\r\nArrays are fully supported, as are all the mutation methods (e.g. `push`, `splice`, etc.).\r\n\r\nHowever, due to the way they are updated internally, updates can end up being relatively \"chatty\" compared to objects.\r\n\r\nFor example, the push operation below:\r\n\r\n```ts\r\nserver.state.myArray = [1, 2, 3, 4, 5];\r\nserver.state.myArray.push(10, 11);\r\n```\r\n\r\nresults in three patches:\r\n\r\n```\r\n[ \"myArray\", \"5\" ]: undefined => 10\r\n[ \"myArray\", \"6\" ]: undefined => 11\r\n[ \"myArray\", \"length\" ]: 5 => 7\r\n```\r\n\r\n## Development\r\n\r\n```sh\r\ngit clone https://github.com/hypcn/yuzu\r\ncd yuzu\r\nnpm i\r\nnpm run dev\r\n```\r\n\r\nThis starts a hot-reloading example of both client and server usage, and opens the client in the default browser.\r\n\r\n### TODO\r\n\r\n- [ ] More docs?\r\n- [ ] More error handling?\r\n- [ ] Add performance benchmarks\r\n- [ ] Add mutation testing\r\n- [ ] Increase coverage > 90%\r\n- [ ] Add E2E tests for real-world scenarios\r\n- [ ] Consider optimisation for array operations\r\n- [ ] ? Add CI/CD\r\n","readmeFilename":"README.md"}