{"_id":"ha-coding","_rev":"44-d011b87e84d94d0cb95d152acf16263e","name":"ha-coding","dist-tags":{"latest":"1.0.8"},"versions":{"0.0.1-alpha":{"name":"ha-coding","version":"0.0.1-alpha","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-alpha","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"ce9806b594ec0acad93626c06622cc3e30ed0f20","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-alpha.tgz","fileCount":39,"integrity":"sha512-PD+KkTshmHcCdaq42umNkJDNK63pyPBuEFP1u0HLTOT4hrG2tO/L+ptJfKk1ZKHOaqAz3w17lzMevx24PXnUng==","signatures":[{"sig":"MEUCIHuwULvLrD59Yk+wfXnqwG8ix1LnEupaViJQtHOR4ahRAiEA49b1LTJ9teB/Alnw2YL/lW7W8XUtZTLDHHi2U9V8jYU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52340},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"61dc743cc30b8689f236411408b8f9b610e3f9e5","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-alpha_1737366215542_0.4042162724900471","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-alpha.2":{"name":"ha-coding","version":"0.0.1-alpha.2","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-alpha.2","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"273e87eeec1aab86f6d72bc729ba3b95f3adaed5","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-alpha.2.tgz","fileCount":39,"integrity":"sha512-IuSussFUDty6XPr+xDsr9QD49b6Q1XeDYPaa3611cP9fpQU69Cjsr8S9aQVY72pfmG1TJMafJd/7FaNQD6cw+A==","signatures":[{"sig":"MEUCIFZ+82n/+T6gGdmwP66Vov7LQk0JizNEImt39CtQLVOVAiEAkT4JWzQ6Cij3wJ4aLc8FZY+IG+T5TdS540zyGv5ZKq8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52816},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"7d62f9b20a19be5ff6e2b4c2012ce184e91cf648","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-alpha.2_1737372270700_0.5509571192313074","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-alpha.3":{"name":"ha-coding","version":"0.0.1-alpha.3","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-alpha.3","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"15fdbad9a3d60b79a32473355bc4071d3e472497","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-alpha.3.tgz","fileCount":40,"integrity":"sha512-KsTyXoZRm9JlP94qTzCjgcZyu/im8xYW4uS1mG8pQ+3akhkuZ482RIumHQzcLHlhiArzZYWK/87dV0cYqq+riw==","signatures":[{"sig":"MEUCIQDpLmWe2OAIQQQBtzrjmoPIL6hSmEVd7WObXyyNYcaLMgIgRRl81psUleIx9Hn3YBh8GK6MBuKktH2yZEsMQPpv560=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54248},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"35d68c6ffbfa58444e6e148fbee09ae09d6df30f","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-alpha.3_1737513732256_0.9132410825006443","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-alpha.4":{"name":"ha-coding","version":"0.0.1-alpha.4","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-alpha.4","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"59f02a69620635c341077c129db282c03e10b953","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-alpha.4.tgz","fileCount":33,"integrity":"sha512-0v8fOxGLay/KfSYVZ5P2hct2gkOQ+wo6XBAu2yAKSeaSm7m3VGuZv8BhPThptIO4FKSTWqKY8a9pnRHHVZ200w==","signatures":[{"sig":"MEUCIQCkMvw6UTJQ4R/ONsRbOXgslf8CA6OS8TIn/gXAi9gwfAIgP3/Pf1mazmPnLD9EVNTJTQu5dGLnRuUBMv60EA6ZqU0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50637},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"02752c225b69f8da6fdf0a544be4b861b23aa14b","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-alpha.4_1737515930458_0.7023458673809917","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-alpha.5":{"name":"ha-coding","version":"0.0.1-alpha.5","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-alpha.5","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"603b0cf4fcbb8706eb707dc7ce0381d08cc4296d","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-alpha.5.tgz","fileCount":33,"integrity":"sha512-QoY0+nFWoAXvz12OsbXgXwV/3UwbPDZY4Nxn6OcWU9iQtzKy9ICd1NRLpnQfJCuB7ErBSTxIZI7irckRzKGgHg==","signatures":[{"sig":"MEQCIHfHwigRzYBdAIGT5lIoxGuRL29HuiDKkr9zKbSJpF92AiA5ybS+X/LU8RaYRrzB2XvOeqsxzwFEMz/M6FGVTx320w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59729},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"8f2b39ad5aef1a09c30645935ec0de0e887970c4","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-alpha.5_1737517671537_0.6926611656420776","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-alpha.6":{"name":"ha-coding","version":"0.0.1-alpha.6","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-alpha.6","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"e0e9f2f21e742e47e0fd485a2f6b14cf8e9ae40a","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-alpha.6.tgz","fileCount":33,"integrity":"sha512-3cn9hsPwBFblLMKpNoCiMxIvNox0PMXIbvQKOG0m9CdUTiKvdQroSkkR+boO7+yRMAWI7l2D+4ibLGJ5ei0+pA==","signatures":[{"sig":"MEUCIChq/GyNWtxRIHjp7TyZ3zRGMF86yHEIwLE5BWiXq2W9AiEAvLUXBMXnBOVg0bFCYdvt00UQw+fhJ3bR1uxoqkGIDn4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50716},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"f2334779ea935e96aba3f70a1db6b074ce8da88a","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-alpha.6_1737518436094_0.8573989051642079","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.1":{"name":"ha-coding","version":"0.0.1-beta.1","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.1","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"a18087fdff46463d794a3deb45feb749e1d1f49d","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.1.tgz","fileCount":75,"integrity":"sha512-nscjixHChxAzM8AmCX7iro/sIY2A86uXD+VQB0yoIBOsZDju4PHDuE6fzbSXuYak/E83vIPT1RWY7psj0Ld4XA==","signatures":[{"sig":"MEUCIHpuHndix69+UEwEQ+gOXJ2jZj3CiSgIKz2roJQxtmDhAiEA6xPaPCjFqnD8g/p/rlW10oeZkVPeXL7ngS+Rh7ZdbwE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112757},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"f44ab9ef53d959827cba2d2bae91c78efef2303e","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.1_1740189276951_0.23510165674765582","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.2":{"name":"ha-coding","version":"0.0.1-beta.2","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.2","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"27e3243f63874276c8a247d91409787be916c2fd","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.2.tgz","fileCount":35,"integrity":"sha512-W3H5difxsa9CzbcjXTSCngC/6v+OWLgzNopZXj8VDM0y/bz5ej/bHol7NEqDAg20LoXz/exdjFg53oiIGeyeHw==","signatures":[{"sig":"MEUCID2QkQhf8xoRU4D7v/C3B+4+dQO7WWcssFhhvfv+WYrkAiEA7i5zG1CtxurgE54HKsgl+hueXQ+4jlLuc8rAEm5C5XA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63872},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"90eb350701532b18611c38be0a19df3386c9f636","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.2_1740203424869_0.3301941085869404","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.3":{"name":"ha-coding","version":"0.0.1-beta.3","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.3","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"c7541fa57bf57b6904794bc58f194a4d5f130ded","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.3.tgz","fileCount":35,"integrity":"sha512-tWZFvPT4aXtSASyxip/jlvqLzMCo8b2AMZO3FfsflrnMrOOYmQyQMGOVngjbGQDubMoMgIquaSiOJZ0c/izkCA==","signatures":[{"sig":"MEQCIBkDh+9p1OP75FGJd1EvI/EeHttv9u/fgQdhpyzjY/wfAiAR1okdebUg0J5XJrJ9t8TrCk65Yobxjm6mK8AUU8vTCg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64078},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"3b6a583befbd5ac506a922f9885cbf8b453ac275","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.3_1740457999349_0.24593114538190708","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.4":{"name":"ha-coding","version":"0.0.1-beta.4","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.4","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"c3ba839a74e2003da791ff34ec97f33022472f3a","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.4.tgz","fileCount":35,"integrity":"sha512-vrJdAqmOAmcw03/pjqz1/aPF0Ya5LLqWNNO4xpOTtNzjlk8pI5ZPCFqupIbiaZQNYp6FJs/iRmV7y7DexPwlmw==","signatures":[{"sig":"MEUCIQD08OmmPu+0UaYq0ST5JZKtpIbt4cS4erVy7LmaDHL73gIgRwhWgoVci44HXyAiPR2dXVyZxPbhy1P8rfx8YYkzMO4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64363},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"56fd5dd3074520f3124741c9a06c7fdcd5b4a18c","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.4_1740975614747_0.2168609638860055","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.5":{"name":"ha-coding","version":"0.0.1-beta.5","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.5","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"53002a01fe154efc5438d98184e03b06205611f7","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.5.tgz","fileCount":36,"integrity":"sha512-9NIBbzajtpCcHqr1dZ7iBWVEsBFIlSEgpoCAXNy68M5EW8vWyq0ODCRKSDgpZ9VRfdNTi0fe4QMynTI7dl7AoA==","signatures":[{"sig":"MEUCIQDfHzkV14bD5qL5th8NMp1YlIc1ORBqwSCESyOAFLZlCgIgU6AugjD2mqeWyNtoBzpavmgj76KHlOjScuC/0rJ03Kc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65801},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"09bc39295f2ec7a3b15978bd7110e390f9097a98","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.5_1741063667462_0.6426391644785754","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.6":{"name":"ha-coding","version":"0.0.1-beta.6","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.6","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"ac6912b3bdf78cf79e14840d9689ded10731a3e4","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.6.tgz","fileCount":36,"integrity":"sha512-+QI1JNG5IXSpgV3RbUkcpj4znZWX2V+vynz9C0kX/C9g4ffhXdjlpfYW7n+3S/MJCfj+CGnsbfqMT1oktZptHw==","signatures":[{"sig":"MEQCIGhwA08oWTzcaljJzejMctTTgPNQQhazJdnw92C5TUBVAiB1TR2y0lm3KIis/FifwD18TvVo9GKv6yFlMUIC95BCCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65931},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"499174de84e3e583623bdfb79bb62d18e2d7d868","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.6_1741315564223_0.37910748430189","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.7":{"name":"ha-coding","version":"0.0.1-beta.7","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.7","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"21f9bd574410bd230e779c6ebe8c2d64d9a2932a","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.7.tgz","fileCount":36,"integrity":"sha512-d3h6ygBBPaLIHs4Edp4dqicPhUeZ8kZD+VIeVVA5oHi4/pkKl63mWCJFEuZBjWoXtfZfeJbHCGDFfyNRr6p56w==","signatures":[{"sig":"MEUCIGDRCsvIRPQhLUyupA+ojGW/cL+5hSQjf8sWdE4mrhFdAiEA7124BZPrXqdgOjKJZevkWDQJKH1MJib2OEKY2pQWhwM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66568},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"b7e692674af0b5b77c7825f6f968d0b874754a2c","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.7_1741330010236_0.2607277532334702","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.8":{"name":"ha-coding","version":"0.0.1-beta.8","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.8","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"49ee586eebacee077409c5d9a69e8e50e0241128","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.8.tgz","fileCount":36,"integrity":"sha512-Mtb2kVK/v2k3TVRVPAtHYIcq8F7Gvu3G5Ubn5CrUjKJsT8bg0hRTjYozKxR8YnzZ82qSuLFquF2EQMZMni5GMg==","signatures":[{"sig":"MEUCIGESrNor3DGHj/whMiAUBVf4UFbzJPkY9pa7RdvEs/N2AiEAzSZr294dkGbni5vKfWQTvGsbQ+bjrW7Ii4LsHLLDCe8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66568},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"3ddc41e2fa986adf641df9f0c0343c5b9d62a21e","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.8_1741330208688_0.8059660754977631","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.9":{"name":"ha-coding","version":"0.0.1-beta.9","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.9","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"a15ed19bd285a7b895032d2f7e27a01da172081c","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.9.tgz","fileCount":36,"integrity":"sha512-DLMCUxW6dVDVYQNSA5aMwPObAMguE3aacNtIpmJ/+MVjZg3mNYHHlkSJzP+fSF+Gus/qcalhQPcdJXo1vwNUIw==","signatures":[{"sig":"MEUCIHIp9MBBheerlYwbCcdbOMCeKx53CWOy/pYQfDUuJoT1AiEAkHR5UNY/3w9acAtyhhaR1/YWBvhF5CjQrCgHdYgJC9k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66206},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"2b086d2b257fecc3b51da9d2116ab3aa3cc70a11","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.9_1741427003943_0.08765169886786972","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.10":{"name":"ha-coding","version":"0.0.1-beta.10","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.10","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"2afdb3354a7a395c8ce1c6ebe6f576663d5b5e71","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.10.tgz","fileCount":36,"integrity":"sha512-YdzJ8ZcpohH/YAcd329FsgIEgFePZNMr1yF61MR1TN3XgRhTdhx1/llWnoF4GZSQ3r8GPVKkAEMq2VRD4Qb1OQ==","signatures":[{"sig":"MEYCIQCelJrjM7qOtOKdR/kFv2sdUUHerQeCitJy8XKtGn5fqwIhAP6ef8tY/7+WtFCvtICbmGVhx5Bau5yiAOdsAo6nbt8H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66344},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"a51d341322a11400bc96575ac370a7a7bbe0171c","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.10_1741574901980_0.43760167360472013","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.12":{"name":"ha-coding","version":"0.0.1-beta.12","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.12","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"32694e3b3d10ef490b6b987fb85ac0fe15f43811","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.12.tgz","fileCount":37,"integrity":"sha512-JR5WiVnAHIz3JPT4EMV34O/qPzpWLTpzWzS/zx5zjFsjm+DD6iJ8QA7nithlBXbl+c95kJJpQXep0ORsaBBpog==","signatures":[{"sig":"MEUCIQCWrabHqo5ale57sAxa1qmd35rrvhGN8LLm8WPOlgm8cwIgZJXMoT3ghvA7gYfoi/j5HhEtyY1vlpd9N79zDsSaA1U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68113},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"999042b25de00911ca65fa1d7161a4194d833409","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.12_1741757857331_0.5883921205213969","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.13":{"name":"ha-coding","version":"0.0.1-beta.13","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.13","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"e39c7dfae62b9220ada1a76f955a337f66c5af90","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.13.tgz","fileCount":37,"integrity":"sha512-TgxbuMcoXq7ioBhfZrAp5FDNqxMNyD3Ujy3q7xOe9cYSzEuBu/d5kLwacJdgtiuJpRiLM794jxrZz7QQAZcX5g==","signatures":[{"sig":"MEUCIEYv7xQMKJH/hAhZgHi/ArpmJ/yTeEvWNLFWmkQR97cUAiEAsvg/j+j08YjrVVl1LA6hM1sbRgt6cldu0DD22VIkgH8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68567},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"b41a1d51c9500b0c90b8e7208029a4e6ab4f8bfa","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.13_1741761032119_0.9992404492524598","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.14":{"name":"ha-coding","version":"0.0.1-beta.14","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.14","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"6f7b3ed683999c6e13f1c1ad03e73a2b291d069b","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.14.tgz","fileCount":37,"integrity":"sha512-c4cTqEYXihKdGnhpMUTD0uoNa9YkgzMIA+QhhJsJKvt9ggbWMV+9DSciX5SjcbsW0rynrWHox87/x1GEKpHeyg==","signatures":[{"sig":"MEUCIBeoNTU0RLQSv4ULeeJiBb1+K/+Ir8a+icxmqkW9+/hDAiEA70MdZk5I4kfWBVUXdUhp4/L/mzHVUzAiSCNTGJ9xtdI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68580},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"ade07cc64cd3917dd23d8802e60525314f5271d7","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.14_1741761491489_0.6263726892739592","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.15":{"name":"ha-coding","version":"0.0.1-beta.15","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.15","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"6fceab183f57ed44a1d2bdec556092fa72bec103","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.15.tgz","fileCount":37,"integrity":"sha512-X3xXFBsae0Jv/9himsLjfOKgsLS0iEejVwzwoRbCBJrHFK3hnBWnJ6cOQRdwUljcuoKa5bAFSUD1WbosWMoO7Q==","signatures":[{"sig":"MEQCIA4QtCPyKl72sEqI//dafoZx1H6pyz81yeQLgvduJXaRAiAr4SyCB+PP0OqEgeuYqSU0rQSLtnsQiIQp+9ZLSvL1EQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68998},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"d001fa94638c0a494abdd987db9f94a4a0443955","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.15_1741852243863_0.9322878178850813","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.16":{"name":"ha-coding","version":"0.0.1-beta.16","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.16","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"680a254e42b17e330f387be4651b4f2a2aa11112","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.16.tgz","fileCount":37,"integrity":"sha512-XKA1B+IYexNDocorz6r0J7NjbPXcuLcrGY1NuwIj44l/hb/m+7ccG53mGHF4FF0bOaCuc5FJ2QJ8QLZ0WD02qA==","signatures":[{"sig":"MEUCIAS5SZsALswGxms/Jw7AYffV/VHchKf8n4TYwQ+vfAHsAiEAqKGpZtZ9dFlM1sWKSfjdttxizs3zrhhr5/md3t5jR+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69414},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"c187ceb818659259cfd3de949cda7a55674a559e","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.16_1741855503607_0.5649541934147131","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.17":{"name":"ha-coding","version":"0.0.1-beta.17","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.17","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"0b024df6d6d66e054e384ef2749a986e61ac8850","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.17.tgz","fileCount":37,"integrity":"sha512-tTUHOZ8h5lz0Ln3mGLS8f6MH5s2sXDKRhVHSovVrBIgbXt7NhwhGlBO9mNu7Q0B8Te3/XU4s57ksUVdYllMrqw==","signatures":[{"sig":"MEQCIAvLiOpeC11ROzIjfzc0hWrVczmI6IJE72UHKMC0cxb0AiBPryBcIIYYkxYU+dDMfeX6eachTuBOws0SEidvo5qVRw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69483},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"b5224bdf4f195f584af7d26cd25c94110a1e1d07","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.17_1742018337089_0.025542511208705543","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.18":{"name":"ha-coding","version":"0.0.1-beta.18","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.18","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"9082116a3338fc881869ffee6e86b37ce98ccc6c","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.18.tgz","fileCount":37,"integrity":"sha512-yJRoOR2zSWOTbzv0H3VYdLH74JTiBCRVn0n0XcsMiO6wGg83uRpMhTfBguzzJSxoXWQbi99rwf2xJRbsGoGHrg==","signatures":[{"sig":"MEUCIEipX0LCGj7NMguNOMnMio4yIxzlTDZfftuWCkGPa+aPAiEA87zUz/w8foyazwYJ6xklGLNNKMEycigeTtJAcJ7Oa0k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69910},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"00b091b70b198ecac335f8191ee68c1560c61ce2","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.18_1742190967292_0.17365595295377023","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.19":{"name":"ha-coding","version":"0.0.1-beta.19","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.19","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"bfe601630fbbf944e4763cc1ec5d6b6e0bc30afd","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.19.tgz","fileCount":37,"integrity":"sha512-SYZIaJunFidYnRHduggOUr6OJVel0crbsQPtRh0l8hY/mBxTN5bDkGO4JWRlosZ2toq9QDHArmZ+k7uDlzEspQ==","signatures":[{"sig":"MEUCIQC+UjPj2hBp7kzyYfh52M8fIQOOKM7SDuSjHsP9P4x2dwIgd4SFAzB2dvX0drf6xHkP2op21FvJvb1dAIqldxdGJeg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70118},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"af998e256324be0d43dbb5560a86cf39e64c9e25","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.19_1742265139348_0.16314839669258396","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.20":{"name":"ha-coding","version":"0.0.1-beta.20","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.20","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"1ad208513c68e4bda4fca395c540f34a68bc65e1","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.20.tgz","fileCount":39,"integrity":"sha512-uYHlo4ypaXi/w1DqcEACICjeSdenrJmIoM3LWr0r6pF2Mt6SNacDxS3QNJnsn6/hQBy8g+nyPLh8JqInf+WGFQ==","signatures":[{"sig":"MEQCIEc9zwSJ/0P0aMG6l9lSoBB61Jo/5vW9yh9UiaOrmoYKAiAuAr1GilihiUZQNE7upD0qP2e34wbxd8JGQ0+AyVRFTQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76271},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"cf4dc69b6f2993989bd7db0f09ac38dafea9c1b8","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.20_1742470951483_0.6690738915341592","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.21":{"name":"ha-coding","version":"0.0.1-beta.21","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.21","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"26b761612c4291ef34bb00082718b693d88448c4","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.21.tgz","fileCount":39,"integrity":"sha512-0dBYBV7L5WAthKal1qjmotkbWTtV+ME3jKQBu1sgdHPDPQz1FBhRbN/Z6e98fh8UJpAjYPaew156BRXfRWL+pQ==","signatures":[{"sig":"MEUCIQC9hxzYjogi8GwFZ0c9OrU0sp+iq8AIl511VsNqE/omBgIgFU5sQZdx85XQt/fTqfpd+dMrbyTPl3lBjstL+T9Z10s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77201},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"895fe0b421e3b5e8ec95967830d526113ec26eaa","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.21_1742536609405_0.5117537956793259","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.22":{"name":"ha-coding","version":"0.0.1-beta.22","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.22","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"b0bf33e3b988c600140396e29a61ad2dbcbfae92","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.22.tgz","fileCount":39,"integrity":"sha512-Q03jBCOrIOSGEAfCMptaFwy5tgD35oydjtLpuhUASDXfocc+AenYlwRd4MYGV+gs+MBOxigDnQ2scAzC0AMqVA==","signatures":[{"sig":"MEYCIQDRPbmSIosA0KRysayCL2g4xIBvnF30LWd4s28AeeTT0AIhAO8RvXTjN/aryq4wm0DI2ftK0srMKeNZQo24iWoRtmBh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77977},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"7c15e4201a103af039133bbf1d00238ec71d02fa","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.22_1742800599158_0.2806554484882957","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.23":{"name":"ha-coding","version":"0.0.1-beta.23","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.23","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"275e520157c4adb1efe9d81d470e5f6603f95fcf","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.23.tgz","fileCount":39,"integrity":"sha512-IMsbyOOWSo28ygRN6Jlj6Dg3p5Mzvhhrp4SoIioE4tRkWbyRgfD9QmXywkQg1vfRo8jGLxJxU5ETVIGtGQydlg==","signatures":[{"sig":"MEUCIEzG3hEkYKHGepErQbrxG1mCpKI8etLxh2qgZ8C7YaqJAiEAzK74cz5A7jtAHq8G5IW1HUO+plo7JVspeWWsvhotSU4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81304},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"062f4cbee616457aef165d7e01337276b06c1ddf","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.23_1743042632581_0.2135891978045703","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.24":{"name":"ha-coding","version":"0.0.1-beta.24","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.24","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"7c09e323e7202768fbe7b7c4dec0e5336fc5d632","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.24.tgz","fileCount":72,"integrity":"sha512-bJdQ1xk2CCQkiXDu0RlBAayPNSjjKLaMFLXPJO1+i5SxWs37lVE+/d7wp+KMT+czhK0YSiv7bt9ILDNy1bzqSA==","signatures":[{"sig":"MEYCIQCUKT9GxhMxng+JVrwoq8TrB72omSF4FR+xtfpx5itsqwIhALYBdOsFFrLEjZh9IkblOk7Kj7CLN6TXkGb20KOqCM+j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135610},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"5b6672ae99c35143b56fd23bb8c913ffe786b144","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.24_1743227883470_0.3943786212119318","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.25":{"name":"ha-coding","version":"0.0.1-beta.25","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.25","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"f963e3f2cc7193d21701a0f7cb82e1e2b7c7eef7","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.25.tgz","fileCount":39,"integrity":"sha512-xMwwG0eTqWcsrP8CatMO5P8/ZS60a2DRZYR0wb9Ix0Q7fzwTJS5n515EGgEbX0NJqBAMmMcpn8xrCm4eAucNRA==","signatures":[{"sig":"MEYCIQCeb7oRK5oPG3fqsFRAoP/HYo5lVdg5aAsnBtCB+4MoEAIhAKyxV0Mv+1eLR2v7v6PvkrOlPIg9zcjm+cgHPJl6+oWc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82407},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"8ff42237511c36009330625f687337d46e34b798","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.25_1743562309248_0.40182933701046486","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.26":{"name":"ha-coding","version":"0.0.1-beta.26","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.26","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"3e33160386dd05d5a6ae080179f8cba75c09f8f9","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.26.tgz","fileCount":39,"integrity":"sha512-QtsC6Wnno9uRHuXl5FkUW+xM29FzT3Bvk9NzCYHJhbWcq0X8FDER/DtHb1OzX2RJUsH8RPqmFLuuL7kiMfdM7A==","signatures":[{"sig":"MEYCIQCVq9Y+n8LZ32XhzdaqaCPm195hA0+GHjUeI9NboLkBJgIhAJzrVm4LTuE5CUq6rKxFZAmkmwpiq1oVeFHHmn2r2tEw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82579},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"a9e197d575c7e642122526a5cd8561cd0799afeb","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.26_1743567084887_0.19555499667636678","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.27":{"name":"ha-coding","version":"0.0.1-beta.27","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.27","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"ac6d865b0aaddcd71b73ef2529e287208590d578","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.27.tgz","fileCount":39,"integrity":"sha512-Xom8Jg6DlQlqqf0VHfEkcEd3eMJgUMU7Ep0WXpD3uQuleWgm6tpcOZbJXEyEnJfuE9VGoFK6kxYnmPutB0xGig==","signatures":[{"sig":"MEYCIQDs/z3GGRBZ0WPU9wCADCHjcZpABewMGQ9CK0iqGeXiyAIhANv1MkrQ7zP0gZpgJEu589aRu+zjySKx/MW7MtTjQGxq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82692},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"c4efb385785c45cd1439fca0269876b6c30f0e53","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.0","description":"ha-coding","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.27_1744199944998_0.969886198147971","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-beta.28":{"name":"ha-coding","version":"0.0.1-beta.28","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@0.0.1-beta.28","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"f5775df596b82bc868382bb105cbf2963b71c8cf","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-0.0.1-beta.28.tgz","fileCount":39,"integrity":"sha512-f1BkLa3Ci3FyfJ4F8ix+gozScd8QA4GwC/zPCAnqeCE7VapCFJb/CkzkaZZzrOf1K2JnxjtkEQ45PRmTKR4SHg==","signatures":[{"sig":"MEQCIHDE8BwxYtGVI5JQn78V8AzEFdSMiNLYKF0tZ5DmatF1AiAfeobci8vezZMoYn3ofSf+7M+Ju8nLL45ARYI+rL9cQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82837},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"dfa53f3201cade134646e46d1f1772b2de687971","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_0.0.1-beta.28_1744704631735_0.9640625878262343","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"ha-coding","version":"1.0.0","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@1.0.0","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"443865db0e19a78f423aa313d13473e28ab6e7a3","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-1.0.0.tgz","fileCount":39,"integrity":"sha512-tCvzkYAU36xZxMNLaMxf7ksJLBsCwpBgDBdda9OJFTmgymnDfyKNGut2PPr5lYhbeEa2zK7Y9hYOsONYxQcgsw==","signatures":[{"sig":"MEYCIQCTYR0FQG08/g1+1KZwZQrbAf6rMM7YX+3H7dMKy7STMgIhAIHLszZloB8DEtgXqlKV+ADlfFNt9OhzB8Qtt3mfCS6H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82993},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"2747af89e100a86d7e5e41f8114aeb3050b8cccd","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_1.0.0_1753029916322_0.7874709641798951","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"ha-coding","version":"1.0.1","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@1.0.1","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"06c697d44160daf7c8b6c4d3fa975599c74e5072","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-1.0.1.tgz","fileCount":72,"integrity":"sha512-LX8R2O/v57i+ErRI3ValYIo0GruQ2fa9bkZ4WPqcaR8PxiFe+V53beB6scjFHOJrc9O0WHI+4urwBNgSdvBaTw==","signatures":[{"sig":"MEUCIEYMScL1z8Ynq/aoFxK6oar55utaxwqbd7lw78ZHASarAiEA0gwMGHpnXmNzQAB8tYkHY4rDwSio/YSB54IGEGQmLxw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139355},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"4886c464923175ac6f9adb1db1ba789db8d87544","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_1.0.1_1772864716291_0.024736242501581795","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"ha-coding","version":"1.0.2","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@1.0.2","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"84f33b3ff52c9c1fbd545f821c2a0a35a7c5584b","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-1.0.2.tgz","fileCount":41,"integrity":"sha512-s1yC7KfHIJjzHTh541qcihOPbL0IFWP1hUZjgm7voCVhSBlbjnAanNc1+rPlWRmQIxFY/N15j1AZ/HuRjMh3eA==","signatures":[{"sig":"MEYCIQCxXcUbJJv8xCaKY7TQflkP8wrj5mUOxCiPYCQLWpE3PAIhAII+gOgeMVXF1FmO74SvyEczd7H7p/gA5ZeICPxWUVDl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99178},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"6aa20a4dee04305b14617fa14cfd3c1c530aa094","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_1.0.2_1774081709847_0.9476565639599275","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"ha-coding","version":"1.0.3","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@1.0.3","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"8570068293b02a06d2cc0b7e849a98be9b5af056","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-1.0.3.tgz","fileCount":76,"integrity":"sha512-V/P58NehGMG9Q/a0fjCN0EawVIUBaIeW0ItPDYPrfi+Me7BL/6TodNqcN5Op1oM/13TXu6jY8IcRvu2wgjg1Mg==","signatures":[{"sig":"MEUCIQDS/rE3ZKoqceqWlqJrLJt5CvM55rW2RZE2O4Yso0CVCgIgTVepMdfXI4vgr4blt+9lxVtfmgenbQzhHnq/wrCofa0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162592},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"c2ef8e35dc913685f8587efb9f523f8f4f76b9f7","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_1.0.3_1774709817882_0.22749004186814425","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"ha-coding","version":"1.0.4","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@1.0.4","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"5fc719e799388a1754bf4daca99763f26eb6eb7d","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-1.0.4.tgz","fileCount":76,"integrity":"sha512-ojrUhzC+dw17onnFrMXMrHD0RZ35exapx6YTBj/NCoa3IkCkrRoMO/YIsaI+a4etqUNe6fEZKth8K4eJcDoRcA==","signatures":[{"sig":"MEYCIQD/AEbPzDJtlF/nYsUexyWR/NEpRCCIvTnlkLYPqqFYFgIhALt7XpLGjs/8+898BO+VgDxYpcdWPCNjNO7D4m9wDMZT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162686},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"80e34e0bf8f0e4eadbdc7619bea2844ff7c4c24d","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && cd .dist/tests && node index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_1.0.4_1774712332571_0.28120779511728755","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"ha-coding","version":"1.0.5","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@1.0.5","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"1e4853c14c528dbf76837f8f2de04b6961efaf36","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-1.0.5.tgz","fileCount":41,"integrity":"sha512-K7A1OsR3FRPPJrA/Lv6ybLpDv/pTzNwpVAT/Wi1GBxvXCx2GTePLjPf43L9xzdBg3M5OhaX0FgBwcpA7hqOVkQ==","signatures":[{"sig":"MEUCIHB4rDg5Mtqs5CbMLUPTXO2VW/GQghi+x2PTONBuKPfTAiEA3GHbzVQLBK/+PjNsR9ZXn1WxznITWI/azIc19WCtUH8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99479},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"9c698e9d4758899645c2990dc5121e21888b86b9","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/tests/index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.8.2","description":"ha-coding","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_1.0.5_1775832503454_0.8601532674741463","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"ha-coding","version":"1.0.6","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@1.0.6","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"1854b88fe91a6f036a1cd4f0d042b6a73a11b8fa","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-1.0.6.tgz","fileCount":77,"integrity":"sha512-U/TmkeLP/UMlyMU3wQXz3CYsrRGicIEjP8ex11mT6kXZFcN3mjYwXXEKR0TaOIqrchJFFGi+TgCDHdoOvPKQaQ==","signatures":[{"sig":"MEYCIQDzkxFkrNHQvuQiYGzbIAnAw7aJWF76BvOluo68lwynGgIhAPQlkGAZw5tn+WrDiKPEKvc88MUcqNgCjWNhFKskNvxd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167039},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"7c5779940d6b1a9e48af964496d7881a86a233d0","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/tests/index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.8","description":"ha-coding","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_1.0.6_1784272875856_0.5952911830505063","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"ha-coding","version":"1.0.7","author":{"name":"qm"},"license":"MIT","_id":"ha-coding@1.0.7","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"dist":{"shasum":"32f8e6dc24fdd3117c0255284d8a38fb5725c728","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-1.0.7.tgz","fileCount":108,"integrity":"sha512-vDl1U72E79ui9dTovqz9R3nGztplMA/28v1VPpxc2yKj8wN6kNC1Ro/2AcX9UboUaCashl8+Za1hYykFFIfjtg==","signatures":[{"sig":"MEQCICzJibWWYdCMbkrPSDTVzTIVa2F1DYhGDes5EdEQxhyMAiBsbCh2oj1JFwBoHp32BYMATAEjICB/rjhmdvONHWF5Lg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":419342},"main":"index.js","type":"module","types":"index.d.ts","gitHead":"57e406640d979bdf223a64ce50d02732e09d2221","scripts":{"test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/tests/index.js","build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist"},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"_npmVersion":"10.9.8","description":"ha-coding","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ws":"^8.18.0","axios":"^1.7.9","dayjs":"^1.11.13","suncalc":"^1.9.0","lodash-es":"^4.17.21","node-localstorage":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/suncalc":"^1.9.2","@types/lodash-es":"^4.17.12","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/ha-coding_1.0.7_1787793686473_0.37363408252467445","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"ha-coding","version":"1.0.8","main":"index.js","types":"index.d.ts","type":"module","scripts":{"build":"tsc --sourceMap false --outDir .dist && copy index.js .dist && copy index.d.ts .dist && copy config.js .dist && copy package.json .dist && copy LICENSE .dist && copy README.md .dist && rd /s /q .dist\\tests","build-for-debug":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist","start":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/index.js","test":"tsc --outDir .dist && copy index.js .dist && copy config.js .dist && node .dist/tests/index.js"},"author":{"name":"qm"},"license":"MIT","description":"ha-coding","dependencies":{"axios":"^1.7.9","dayjs":"^1.11.13","lodash-es":"^4.17.21","node-localstorage":"^3.0.5","suncalc":"^1.9.0","ws":"^8.18.0"},"devDependencies":{"@types/lodash-es":"^4.17.12","@types/node":"^22.10.2","@types/node-localstorage":"^1.3.3","@types/suncalc":"^1.9.2","@types/ws":"^8.5.13","tslib":"^2.8.1","typescript":"^5.7.2"},"_id":"ha-coding@1.0.8","gitHead":"422ccdf2815b0cfa3a29db00cd63543f7ddb7939","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-pUJ4sAva3NT156zfmlA1WQ+GAeIQmtLOGq3EsC0JtG0ySY+BxE0ipfVHe7huZPNwRZ3idYlDlrjmSu6wuGLWxQ==","shasum":"303420605d5375449e9f0cb5126f849507faef3f","tarball":"https://registry.npmjs.org/ha-coding/-/ha-coding-1.0.8.tgz","fileCount":41,"unpackedSize":117310,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCNfW6CAbHxV23Iksh202JewR6KYuapQCen1SyzYt4XyQIhALxSnm+vu6PRDt9yzMRUOtC1UVjfe1qeIIrLtgjHdDCr"}]},"_npmUser":{"name":"big-bear3","email":"yyizp@vip.qq.com"},"directories":{},"maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ha-coding_1.0.8_1787795187018_0.03843033239518445"},"_hasShrinkwrap":false}},"time":{"created":"2025-01-20T09:43:35.540Z","modified":"2026-08-27T01:46:27.386Z","0.0.1-alpha":"2025-01-20T09:43:35.761Z","0.0.1-alpha.2":"2025-01-20T11:24:30.839Z","0.0.1-alpha.3":"2025-01-22T02:42:12.433Z","0.0.1-alpha.4":"2025-01-22T03:18:50.647Z","0.0.1-alpha.5":"2025-01-22T03:47:51.729Z","0.0.1-alpha.6":"2025-01-22T04:00:36.259Z","0.0.1-beta.1":"2025-02-22T01:54:37.176Z","0.0.1-beta.2":"2025-02-22T05:50:25.111Z","0.0.1-beta.3":"2025-02-25T04:33:19.547Z","0.0.1-beta.4":"2025-03-03T04:20:14.921Z","0.0.1-beta.5":"2025-03-04T04:47:47.628Z","0.0.1-beta.6":"2025-03-07T02:46:04.396Z","0.0.1-beta.7":"2025-03-07T06:46:50.474Z","0.0.1-beta.8":"2025-03-07T06:50:08.874Z","0.0.1-beta.9":"2025-03-08T09:43:24.144Z","0.0.1-beta.10":"2025-03-10T02:48:22.169Z","0.0.1-beta.11":"2025-03-12T05:13:58.316Z","0.0.1-beta.12":"2025-03-12T05:37:37.523Z","0.0.1-beta.13":"2025-03-12T06:30:32.339Z","0.0.1-beta.14":"2025-03-12T06:38:11.674Z","0.0.1-beta.15":"2025-03-13T07:50:44.055Z","0.0.1-beta.16":"2025-03-13T08:45:03.792Z","0.0.1-beta.17":"2025-03-15T05:58:57.263Z","0.0.1-beta.18":"2025-03-17T05:56:07.467Z","0.0.1-beta.19":"2025-03-18T02:32:19.536Z","0.0.1-beta.20":"2025-03-20T11:42:31.665Z","0.0.1-beta.21":"2025-03-21T05:56:49.586Z","0.0.1-beta.22":"2025-03-24T07:16:39.331Z","0.0.1-beta.23":"2025-03-27T02:30:32.757Z","0.0.1-beta.24":"2025-03-29T05:58:03.666Z","0.0.1-beta.25":"2025-04-02T02:51:49.450Z","0.0.1-beta.26":"2025-04-02T04:11:25.063Z","0.0.1-beta.27":"2025-04-09T11:59:05.219Z","0.0.1-beta.28":"2025-04-15T08:10:31.941Z","1.0.0":"2025-07-20T16:45:16.513Z","1.0.1":"2026-03-07T06:25:16.463Z","1.0.2":"2026-03-21T08:28:29.995Z","1.0.3":"2026-03-28T14:56:58.028Z","1.0.4":"2026-03-28T15:38:52.720Z","1.0.5":"2026-04-10T14:48:23.595Z","1.0.6":"2026-07-17T07:21:16.084Z","1.0.7":"2026-08-27T01:21:26.683Z","1.0.8":"2026-08-27T01:46:27.186Z"},"author":{"name":"qm"},"license":"MIT","description":"ha-coding","maintainers":[{"name":"big-bear3","email":"yyizp@vip.qq.com"}],"readme":"## 面向Home Assistant，使用TypeScript编写全平台自动化！更自由，更灵活！\r\n# 用法风格概览\r\n```ts\r\n// 监听卫生间人在传感器有人无人变化\r\nonChange(\r\n    () => bathroom.occupySensor.occupied, // 有人无人状态\r\n    (occupied) => {\r\n        if (occupied) {\r\n            // 如果有人则开灯\r\n            bathroom.lamp.on = true;\r\n        } else {\r\n            // 如果无人则关灯\r\n            bathroom.lamp.on = false;\r\n        }\r\n    }\r\n);\r\n```\r\n# 快速上手\r\n**前提：**\r\n1. 已经安装好 [Home Assistant](https://www.home-assistant.io/) 以及相关集成。\r\n2. 已经安装好 [Nodejs](https://nodejs.org/zh-cn) 环境。\r\n3. 已经安装好 [VS Code](https://code.visualstudio.com/) 开发工具。\r\n\r\n**下载项目模版：**\r\n[下载页面](https://github.com/Big-Bear3/ha-coding/blob/main/my-home.zip)  （进入页面后点击下载按钮下载）\r\n\r\n**安装：**\r\n解压项目模板文件并在终端中打开，执行以下命令：\r\n```bash\r\ncd my-home\r\nnpm install\r\nnpm install ha-coding\r\n```\r\n**配置项目：**\r\n用VS Code打开项目，打开根目录下的 config.js 文件，并配置成你的 Home Assistant 的相关配置\r\n```ts\r\nexport default {\r\n    /** HomeAssistant后台ip地址:端口号，如：192.168.31.156:8123 */\r\n    IP_ADDRESS_PORT: '',\r\n    /** HomeAssistant用户名 */\r\n    HA_USER_NAME: '',\r\n    /** HomeAssistant密码 */\r\n    HA_PASSWORD: '',\r\n    /** 可选：ws 连接/重连的单次等待超时（毫秒），默认 30000 */\r\n    HA_WS_CONNECT_TIMEOUT: 30000\r\n};\r\n```\r\n**启动项目：**\r\n在终端中执行以下命令：\r\n```bash\r\nnpm start\r\n```\r\n等待几秒后控制台打印 “HA Coding 启动成功！”，则证明启动成功。如果控制台报错，则为启动失败。\r\n如果启动时 HomeAssistant 尚未就绪（例如服务器开机时所有容器同时启动），会打印失败原因并自动每隔 `HA_WS_CONNECT_TIMEOUT` 毫秒重试，直到连接成功。\r\n连接成功后可通过 `getHaWsHealth()` 获取 HA websocket 的健康状态（`ready`：订阅是否就绪；`lastMessageAt`：最近一条消息时间戳，健康时 29 秒内必有更新），可用于对外暴露健康检查端点。\r\n# 使用说明\r\n## 定义设备\r\n<br>定义设备是为了告知系统每个设备是如何与 Home Assistant 交互的，推荐在项目的 devices-def 文件夹下定义\r\n```ts\r\n@Device()\r\nexport class MiLight implements DeviceDef {\r\n    $entityIds: { light: string };\r\n\r\n    @State(function (this: MiLight, value: MiLight['on']) {\r\n        return { service: value ? 'turn_on' : 'turn_off', entityId: this.$entityIds.light };\r\n    })\r\n    on: boolean;\r\n\r\n    @State(function (this: MiLight, value: MiLight['brightness']) {\r\n        return {\r\n            service: 'turn_on',\r\n            serviceData: {\r\n                brightness_pct: value\r\n            },\r\n            entityId: this.$entityIds.light\r\n        };\r\n    })\r\n    brightness: number;\r\n\r\n    @State(function (this: MiLight, value: MiLight['colorTemperature']) {\r\n        return {\r\n            service: 'turn_on',\r\n            serviceData: {\r\n                color_temp_kelvin: value\r\n            },\r\n            entityId: this.$entityIds.light\r\n        };\r\n    })\r\n    colorTemperature: number;\r\n\r\n    $onEvent({ a, s }: MiLightEvent, entityId: string): void {\r\n        if (entityId !== this.$entityIds.light) return;\r\n\r\n        if (s === 'on') {\r\n            this.on = true;\r\n        } else if (s === 'off') {\r\n            this.on = false;\r\n        }\r\n\r\n        if (a.brightness !== undefined && a.brightness !== null) {\r\n            this.brightness = Math.round((a.brightness * 100) / 255);\r\n        }\r\n\r\n        if (a.color_temp_kelvin !== undefined && a.color_temp_kelvin !== null) {\r\n            this.colorTemperature = a.color_temp_kelvin;\r\n        }\r\n    }\r\n}\r\n```\r\n如上定义了一个米家智能灯设备：\r\n1. 创建一个 MiLight 类并实现 DeviceDef 接口，并使用 @Device() 装饰器装饰 MiLight 类。\r\n2. 创建 $entityIds 成员变量，用于存放该设备下的所有实体id。\r\n3. 定义设备的属性 on（开关状态）、brightness（亮度）、colorTemperature（色温），并使用 @State() 装饰器装饰。@State() 装饰器中的参数回调方法返回发送信息来告知系统当该属性发生变化时，如何发送到Home Assistant上。\r\n4. 定义 $onEvent 方法，当 Home Assistant 产生事件时会调用该方法，将事件信息映射到设备的属性上。\r\n\r\n事件信息和发送信息可以在 Home Assistant 网页上使用 F12 查看 WebSocket 记录查询到。\r\n\r\n<a id=\"createDevice\"></a>\r\n## 创建设备实例\r\n<br>在定义好设备后，我们需要创建这些设备的实例，以便在后续为这些设备编写自动化，推荐在项目的devices文件夹下创建\r\n```ts\r\nexport const bathroom = {\r\n    lamp: createDevice(MiLight, { light: 'your entity id' }),\r\n    occupySensor: createDevice(MiTrio, {\r\n        allArea: 'your entity id',\r\n        illumination: 'your entity id',\r\n        area1: 'your entity id',\r\n        area2: 'your entity id'\r\n    })\r\n};\r\n```\r\n如上使用 createDevice() 方法创建了卫生间的一个米家智能灯设备和一个Trio人在传感器设备，createDevice() 方法的第一个参数为设备的定义类，第二个参数为该设备下的所有实体id。\r\n\r\n## 编写自动化\r\n<br>在创建好设备后，我们就可以为这些设备编写自动化了，推荐在项目的automation文件夹下创建\r\n```ts\r\n// 监听卫生间人在传感器区域1有人无人变化\r\nonChange(\r\n    () => bathroom.occupySensor.area1Occupied, // 区域1有人无人状态\r\n    (area1Occupied) => {\r\n        if (area1Occupied) {\r\n            // 如果有人则开灯\r\n            bathroom.lamp.on = true;\r\n        } else {\r\n            // 如果无人则关灯\r\n            bathroom.lamp.on = false;\r\n        }\r\n    }\r\n);\r\n```\r\n如上使用onChange()方法，监听区域1有人无人状态，如果区域1有人则开灯，无人则关灯。更多的使用说明可以在下面的 API 中查询。\r\n\r\n# API\r\n## onChange()\r\n```ts\r\nfunction onChange<T>(\r\n    statesGetter: () => T,\r\n    cb: (states: CbStates<T>, oldStates: CbStates<T>) => void,\r\n    onChangeOptions?: {\r\n        immediate?: boolean;\r\n    }\r\n): {\r\n    pause: () => void;\r\n    resume: () => void;\r\n};\r\n```\r\nonChange() 方法用于监听设备的状态变化，执行相关的逻辑。\r\n\r\n参数：\r\n- statesGetter - 用于指定需要监听的设备状态，可以同时监听多个设备的多个状态。\r\n- cb - 状态变化后调用的回调方法。\r\n- onChangeOptions - 指定 onChange() 方法的监听选项：\r\n  - immediate - 是否在调用 onChange() 方法后，立即执行一次回调方法。\r\n\r\n返回值：\r\n- pause - 调用该方法以暂停监听\r\n- resume - 调用该方法以恢复监听\r\n\r\n## onSwitch()\r\n```ts\r\nfunction onSwitch<T>(\r\n    statesGetter: () => T,\r\n    from: T | '*' | '**',\r\n    to: T | '*' | '**',\r\n    cb: (states: CbStates<T>, oldStates: CbStates<T>) => void\r\n): {\r\n    pause: () => void;\r\n    resume: () => void;\r\n};\r\n```\r\nonSwitch() 方法用于监听设备状态从特定值变为另一个特定值时，执行相关逻辑。支持通配符匹配。\r\n\r\n参数：\r\n- statesGetter - 用于指定需要监听的设备状态。\r\n- from - 变化前的值。可以是具体值、`'*'`（匹配任意值，但排除 `to` 的值）或 `'**'`（匹配任意值，包括 `to` 的值）。\r\n- to - 变化后的值。可以是具体值、`'*'`（匹配任意值，但排除 `from` 的值）或 `'**'`（匹配任意值，包括 `from` 的值）。\r\n- cb - 匹配到指定转换后调用的回调方法。\r\n\r\n返回值：\r\n- pause - 调用该方法以暂停监听\r\n- resume - 调用该方法以恢复监听\r\n\r\n示例：\r\n```ts\r\n// 精确匹配：有人 → 无人\r\nonSwitch(() => sensor.occupied, true, false, () => {\r\n    bathroom.lamp.on = false;\r\n});\r\n\r\n// 通配符：任意值 → 关闭（排除 关闭→关闭）\r\nonSwitch(() => light.on, '*', false, () => {\r\n    console.log('灯被关闭了');\r\n});\r\n\r\n// 从特定值 → 任意值\r\nonSwitch(() => light.colorTemperature, 4000, '*', () => {\r\n    console.log('色温从4000变为了其他值');\r\n});\r\n```\r\n\r\n## onKeep()\r\n```ts\r\nfunction onKeep(\r\n    statesPredicate: () => boolean,\r\n    cb: () => void,\r\n    keepTime?: number,\r\n    lifecycle?: { onMatch?: () => void; onBreak?: () => void }\r\n): {\r\n    stop: () => void;\r\n    resume: () => void;\r\n    skip: () => void;\r\n    hit: () => void;\r\n};\r\n```\r\nonKeep() 方法用于在设备状态维持了一段时间后，执行相关逻辑。\r\n\r\n参数：\r\n- statesPredicate - 状态是否符合预期。\r\n- cb - 状态符合预期并维持了指定时长后的回调方法。\r\n- keepTime - 指定设备状态维持的时长（单位：毫秒）。\r\n- lifecycle - 生命周期：onMatch - 每次符合条件时的回调函数。 onBreak - 每次不符合条件时的回调函数。\r\n\r\n返回值：\r\n- stop - 调用该方法以停止监听，并将维持时间清零\r\n- resume - 调用该方法以恢复监听\r\n- skip - 调用该方法以舍弃本次状态符合预期的延时任务\r\n- hit - 调用该方法以舍弃本次状态符合预期的延时任务，并直接调用回调方法\r\n\r\n## stage()\r\n```ts\r\nfunction stage<T extends [ReturnType<typeof step<any>>, ReturnType<typeof step<any>>, ...ReturnType<typeof step<any>>[]]>(\r\n    ...steps: T\r\n): {\r\n    next: (waitingTime?: number) => void;\r\n    prev: (waitingTime?: number) => void;\r\n    goto: (stepIndex: ArrayIndexes<T>) => void;\r\n    reset: () => void;\r\n    pause: () => void;\r\n    resume: () => void;\r\n}\r\n```\r\nstage() 方法用于在事件或状态先后发生后，执行相关逻辑。\r\n\r\n参数：\r\n- steps - 事件的阶段\r\n\r\n返回值：\r\n- next - 进入下一个阶段。 waitingTime - 下一个阶段等待的时长（单位：毫秒），超时则重置到第一个阶段。\r\n- prev - 进入上一个阶段。 waitingTime - 上一个阶段等待的时长（单位：毫秒），超时则重置到第一个阶段。\r\n- goto - 进入指定阶段。 waitingTime - 指定阶段等待的时长（单位：毫秒），超时则重置到第一个阶段。\r\n- reset - 重置到第一个阶段。\r\n- pause - 暂停当前阶段的监听。\r\n- resume - 恢复当前阶段的监听。\r\n\r\n## step()\r\n```ts\r\nfunction step<T>(\r\n    statesGetter: () => T,\r\n    cb: (states: CbStates<T>, oldStates: CbStates<T>) => void,\r\n    onChangeOptions?: {\r\n        immediate?: boolean;\r\n    }\r\n): Parameters<typeof onChange<T>>;\r\n```\r\nstep() 方法用于定义 stage() 中的每个阶段，参数与 onChange() 一致。\r\n\r\n## Timer\r\n```ts\r\nclass Timer {\r\n    constructor();\r\n    after: (cb: () => void, time: number) => () => void;\r\n    cancel: () => void;\r\n}\r\n```\r\nTimer类用于延时执行某段逻辑，需要实例化后使用。\r\n\r\n方法: \r\n- after() - 延时执行某段逻辑，再次调用会取消上一次的延时执行逻辑。 cb - 要执行逻辑的回调方法。 time - 延时的时间（单位：毫秒）。 返回值 - 取消延时执行这段逻辑。\r\n- cancel() - 取消延时执行某段逻辑。\r\n\r\n## delay()\r\n```ts\r\nfunction delay(cb: () => void, time: number): () => void;\r\n```\r\ndelay() 方法用于延时执行某段逻辑，与 Timer 不同的是，再次调用不会取消上一次的延时执行逻辑。\r\n\r\n参数：\r\n- cb - 要执行逻辑的回调方法。\r\n- time - 延时的时间（单位：毫秒）。\r\n\r\n## schedule()\r\n```ts\r\nfunction schedule(\r\n    time: TimeStr | TimeStr[] | ((date: DateStr, week: number) => TimeStr | TimeStr[]),\r\n    cb: () => void,\r\n    repeatType?: RepeatType\r\n): {\r\n    pause: () => void;\r\n    resume: () => void;\r\n};\r\n```\r\nschedule() 方法用于在当天定时执行某段逻辑。\r\n\r\n参数：\r\n- time - 定时的时间。格式为时间字符串，如：\"16:21:00\"，也支持传入时间字符串数组来设置多个定时时间。也可以通过回调方法返回时间字符串或时间字符串数组，回调方法参数 date - 当天的日期，week - 当天是周几（0是周日，1是周一，2是周二 ...以此类推）。\r\n- cb - 到设定的定时时间的回调方法。\r\n- repeatType - 重复类型，默认为 'EVERY_DAY'。可选的值如下：\r\n```ts\r\nexport type RepeatType =\r\n    | 'EVERY_DAY'  // 每天（默认）\r\n    | 'WEEK_DAY' // 周一到周五\r\n    | 'WEEKEND' // 周六日\r\n    | 'WORK_DAY' // 工作日（算上调休日）\r\n    | 'NON_WORK_DAY' // 周六日和法定节假日\r\n    | WEEK[] // 指定星期几\r\n    | ((date: DateStr, week: number) => boolean); // 返回值为真则当日执行，为假当日不执行。 date - 当天的日期，week - 当天是周几（0是周日，1是周一，2是周二 ...以此类推）。\r\n```\r\n\r\n返回值：\r\n- pause - 调用该方法以暂停定时任务\r\n- resume - 调用该方法以恢复定时任务\r\n\r\n## onDetect()\r\n```ts\r\nfunction onDetect<T>(\r\n    statesGetter: () => T,\r\n    cb: (states: CbStates<T>, historyStates: CbStates<T>[]) => void,\r\n    period: number\r\n): {\r\n    pause: () => void;\r\n    resume: () => void;\r\n    reset: () => void;\r\n};\r\n```\r\nonDetect() 方法用于记录一段时间内的状态，供用户判断，并执行相关逻辑。如：温度在3小时内变化超过5度，执行某段逻辑。\r\n\r\n参数：\r\n- statesGetter - 用于指定需要监听的设备状态，可以同时监听多个设备的多个状态。\r\n- cb - 状态变化后调用的回调方法。\r\n- period - 指定时间段（单位：毫秒）。\r\n\r\n返回值：\r\n- pause - 调用该方法以暂停监听\r\n- resume - 调用该方法以恢复监听\r\n- reset - 重置（清除历史状态）\r\n\r\n## @Device()\r\n```ts\r\nfunction Device(): ClassDecorator;\r\n```\r\n@Device() 装饰器用于装饰设备定义类，设备定义类被其装饰才会有本篇说明的一系列效果。\r\n\r\n## @State()\r\n```ts\r\nfunction State(): PropertyDecorator;\r\nfunction State(callInfoGetter: CallInfoGetter): PropertyDecorator;\r\nfunction State(stateOptions: StateOptions): PropertyDecorator;\r\nfunction State(callInfoGetter: CallInfoGetter, stateOptions: StateOptions): PropertyDecorator;\r\n```\r\n@State() 装饰器装饰的变量会变为响应式变量，可以被 onChange()、onSwitch()、onKeep() 等方法监听。\r\n参数：\r\n- callInfoGetter - 返回CallInfo对象，告知系统如何向 Home Assistant 发送报文以更新设备状态。\r\n- stateOptions\r\n  - persistentKeyGetter - 返回持久化状态使用的唯一 key。状态变化时会保存到磁盘，下次启动时恢复的值优先于成员变量的初始值。\r\n\r\n## @Action()\r\n```ts\r\nfunction Action(): MethodDecorator;\r\n```\r\n@Action() 装饰器用于装饰设备的无状态事件（如：无线开关的单击事件）的方法，该方法被调用时，可以被 onChange()、onSwitch()、onKeep() 等方法监听到。\r\n\r\n被装饰方法的返回值会原样返回调用方。方法返回 `Promise` 或其他 `PromiseLike` 对象时，成功结果会在完成后传递给监听回调，回调参数类型为 `Awaited<ReturnType>`；失败时不触发监听回调，原返回值仍保持失败状态。\r\n\r\n例如，门铃事件需要先异步完成人脸识别，再把识别结果交给自动化：\r\n```ts\r\n@Action()\r\nasync visitorDetected(imageUrl: string): Promise<Visitor> {\r\n    return faceRecognitionService.identify(imageUrl);\r\n}\r\n\r\nonChange(() => doorbell.visitorDetected, (visitor) => {\r\n    // visitor 的类型是 Visitor\r\n});\r\n```\r\n\r\n## ref()\r\n```ts\r\nfunction ref<T>(value?: T): Ref<T>;\r\n```\r\nref() 方法用于创建响应式变量，与被State()装饰器装饰的变量一样，同样可以被 onChange()、onSwitch()、onKeep() 等方法监听。\r\n\r\n参数：\r\n- value - 变量的初始值。\r\n\r\n返回值：\r\n创建的响应式变量。该变量有3个属性：\r\n- value - 响应式变量的值。\r\n- trigger - 调用 trigger 方法以立即触发监听该 ref 对象的所有回调方法。\r\n- asPersistent - 调用此方法可以将这个 ref 对象的值进行持久化（保存到磁盘上），该方法需要向其传递一个 key，并保证其唯一性，每次这个 ref 对象的值变化时，系统将用这个 key 作为键存储这个值。下次系统启动时，系统会根据这个 key，取回持久化的值赋值给 ref 对象 (ref.value)。取回的值的优先级大于传入 ref 方法的参数值，如：const r = ref(123).asPersistent('my_key'); r.value = 456; 下次进入系统时，r.value 的值为 456。\r\n\r\n## createDevice()\r\n```ts\r\ncreateDevice<T extends Class<DeviceDef>>(\r\n    deviceDef: T,\r\n    entityIds: InstanceType<T>['$entityIds'],\r\n    ...cps: ConstructorParameters<T>\r\n): InstanceType<T>;\r\n```\r\ncreateDevice() 方法用于创建设备的实例。具体用法可以参考[创建设备实例章节](#createDevice)。\r\n\r\n## createExternalDevice()\r\n```ts\r\ncreateExternalDevice<T extends Class<ExternalDeviceDef>>(\r\n    deviceDef: T,\r\n    ...cps: ConstructorParameters<T>\r\n): InstanceType<T>;\r\n```\r\ncreateExternalDevice() 用于创建不由 Home Assistant 实体驱动的设备，例如直接连接云 API、局域网协议或 TCP 设备的集成。设备会正式注册到 HA Coding，`@State`、`@Action`、状态持久化以及 onChange()、onKeep() 等监听能力均可正常使用。\r\n\r\n```ts\r\n@Device()\r\nclass CloudAirConditioner implements ExternalDeviceDef {\r\n    @State()\r\n    on = false;\r\n}\r\n\r\nconst airConditioner = createExternalDevice(CloudAirConditioner);\r\n```\r\n\r\n外部设备的接入代码负责同步状态和执行控制，因此不需要 `$entityIds` 与 `$onEvent`。接入代码可以使用 onChange() 监听设备状态，并把控制转交给云 API、局域网协议或 TCP 服务。\r\n\r\n## onStartup()\r\n```ts\r\nfunction onStartup(cb: () => void): void;\r\n```\r\nonStartup() 方法用于在 HA Coding 启动时添加一个回调函数，HA Coding 启动时会调用这个函数。\r\n\r\n## call()\r\n```ts\r\nexport interface CallInfo {\r\n    entityId: string;\r\n    service: string;\r\n    serviceData?: Record<string, any>;\r\n    unmergeable?: boolean;\r\n}\r\n\r\ncall(callInfo: CallInfo): void;\r\n```\r\ncall() 方法用于下发要对某一设备执行的操作。\r\n\r\n## sendNotification()\r\n```ts\r\nexport interface NotificationInfo {\r\n    entityId: string;\r\n    content: string;\r\n}\r\n\r\nsendNotification(notificationInfo: NotificationInfo): void;\r\n```\r\nsendNotification() 方法用于为某一设备实体发送通知。\r\n\r\n## customSubscribe()\r\n```ts\r\ncustomSubscribe(cb: (msgData: ObjectType) => boolean): number\r\n```\r\ncustomSubscribe() 方法用于自定义订阅Home assistant Websocket返回的消息。\r\n\r\n## removeCustomSubscribe()\r\n```ts\r\nremoveCustomSubscribe(customSubscribeId: number): void;\r\n```\r\nremoveCustomSubscribe() 方法用于移除自定义订阅。\r\n\r\n## sendMessage()\r\n```ts\r\nsendMessage(msg: string | ObjectType): void;\r\n```\r\nsendMessage() 方法用于向Home assistant Websocket发送自定义消息。\r\n\r\n## getUnavailableEntities()\r\n```ts\r\nfunction getUnavailableEntities(): Ref<string[]>;\r\n```\r\ngetUnavailableEntities() 方法用于获取在 Home Assistant 中不可用的设备（大概率是离线设备）。返回值是Ref包装的当前不可用的设备下的实体ID数组，可以被 onChange、onSwitch、onKeep 等监听。\r\n\r\n## logger\r\n```ts\r\nimport { logger } from 'ha-coding';\r\n\r\nlogger.info(...args: any[]): void;\r\nlogger.warn(...args: any[]): void;\r\nlogger.error(...args: any[]): void;\r\nlogger.mark(desc: string): void;\r\nlogger.print(...args: any[]): void;\r\nlogger.printWarn(...args: any[]): void;\r\nlogger.printError(...args: any[]): void;\r\n```\r\nlogger 对象用于记录日志。所有日志会自动写入项目根目录下的 `logs/` 文件夹，日志文件按天自动轮转（文件名格式：`YYYY-MM-DD.log`）。\r\n\r\n方法：\r\n- info(...args) - 记录 INFO 级别日志。\r\n- warn(...args) - 记录 WARN 级别日志。\r\n- error(...args) - 记录 ERROR 级别日志。\r\n- mark(desc) - 在 onChange、onSwitch、onKeep、onDetect、stage、schedule、delay、timer 的回调方法中调用，标记本次回调需要记录日志。框架会自动根据所在 action 的类型格式化输出日志。只在 cb 同步执行期间有效。\r\n- print(...args) - 记录 INFO 级别日志，并始终输出到控制台。\r\n- printWarn(...args) - 记录 WARN 级别日志，并始终输出到控制台。\r\n- printError(...args) - 记录 ERROR 级别日志，并始终输出到控制台。\r\n\r\n各 action 中的日志输出格式：\r\n```\r\n[2026-03-15 12:00:00] [INFO] 你的日志内容\r\n[2026-03-15 12:00:01] [WARN] 警告信息\r\n[2026-03-15 12:00:02] [ERROR] 错误信息\r\n\r\n// onChange / onSwitch / onDetect - 带状态变化\r\n[2026-03-15 12:00:03] [INFO] [onChange:卫生间人在感应] false → true\r\n[2026-03-15 12:00:03] [INFO] [onSwitch:灯开关状态] true → false\r\n[2026-03-15 12:00:03] [INFO] [onDetect:温度检测] 22 → 28\r\n\r\n// stage - 自动带步骤序号\r\n[2026-03-15 12:00:04] [INFO] [stage(0):按钮点击] undefined → true\r\n[2026-03-15 12:00:05] [INFO] [stage(1):人在检测] false → true\r\n\r\n// onKeep - 区分 cb / hit / onMatch / onBreak\r\n[2026-03-15 12:00:06] [INFO] [onKeep:设置台灯]\r\n[2026-03-15 12:00:06] [INFO] [onKeep(hit):设置台灯]\r\n[2026-03-15 12:00:06] [INFO] [onKeep(onMatch):条件匹配]\r\n[2026-03-15 12:00:06] [INFO] [onKeep(onBreak):条件中断]\r\n\r\n// schedule / delay / timer - 无状态变化\r\n[2026-03-15 12:00:07] [INFO] [schedule:开灯]\r\n[2026-03-15 12:00:08] [INFO] [delay:延时操作]\r\n[2026-03-15 12:00:09] [INFO] [timer:定时操作]\r\n```\r\n\r\n示例：\r\n```ts\r\nimport { onChange, onSwitch, onKeep, schedule, delay, logger } from 'ha-coding';\r\n\r\n// 手动记录日志\r\nlogger.info('卫生间灯已开启');\r\nlogger.warn('传感器信号不稳定', sensorId);\r\nlogger.error('设备控制失败', error);\r\n\r\n// 配合 onChange：每次状态变化都记录\r\nonChange(\r\n    () => bathroom.occupySensor.occupied,\r\n    (occupied) => {\r\n        logger.mark('卫生间人在感应');\r\n        bathroom.lamp.on = occupied;\r\n    }\r\n);\r\n\r\n// 配合 onChange：条件内调用 mark，只在匹配时记录\r\nonChange(\r\n    () => gateway.virtualEventOccur,\r\n    (eventName) => {\r\n        if (eventName === 'v-查询温度') {\r\n            logger.mark('查询温度');\r\n            xiaoaiPlayText(`当前温度${sensor.temperature}度`);\r\n        }\r\n    }\r\n);\r\n\r\n// 配合 onSwitch\r\nonSwitch(\r\n    () => light.on,\r\n    true,\r\n    false,\r\n    () => {\r\n        logger.mark('灯开关状态');\r\n        logger.info('灯被关闭，执行后续操作');\r\n    }\r\n);\r\n\r\n// 配合 onKeep\r\nonKeep(\r\n    () => bathroom.occupySensor.occupied,\r\n    () => {\r\n        logger.mark('关灯');\r\n        bathroom.lamp.on = false;\r\n    },\r\n    5 * 60 * 1000,\r\n    {\r\n        onMatch: () => { logger.mark('无人开始计时'); },\r\n        onBreak: () => { logger.mark('有人取消计时'); }\r\n    }\r\n);\r\n\r\n// 配合 schedule\r\nschedule('08:00:00', () => {\r\n    logger.mark('早间开灯');\r\n    livingRoom.lamp.on = true;\r\n});\r\n```\r\n\r\n## 其他\r\n```ts\r\n/** 深拷贝一个对象 */\r\nexport function cloneDeep<T>(value: T): T;\r\n\r\n/** 判断两个对象中的属性是否全部相等 */\r\nexport function isEqual(value: any, other: any): boolean;\r\n\r\n/** 判断是否是周一到周五 */\r\nexport function isWeekday(date?: DateStr): boolean;\r\n\r\n/** 判断是否是周六日 */\r\nexport function isWeekend(date?: DateStr): boolean;\r\n\r\n/** 判断是否是工作日（算上调休日） */\r\nexport function isWorkDay(date?: DateStr): boolean;\r\n\r\n/** 判断是否是周六日或法定节假日 */\r\nexport function isNotWorkDay(date?: DateStr): boolean;\r\n\r\n/** 获取太阳相关信息 */\r\nexport interface SunInfo {\r\n    nadir: TimeStr; // 正午夜时间\r\n    nightEnd: TimeStr; // 夜晚结束时间 (天即将开始亮)\r\n    nauticalDawn: TimeStr; // 航海黎明时间 (天开始蒙蒙亮)\r\n    dawn: TimeStr; // 黎明时间\r\n    sunrise: TimeStr; // 日出时间 (太阳的顶部边缘和地平线相切)\r\n    sunriseEnd: TimeStr; // 日出结束时间 (太阳的底部边缘和地平线相切)\r\n    goldenHourEnd: TimeStr; // 清晨金色太阳结束时间\r\n    solarNoon: TimeStr; // 正午时间\r\n    goldenHour: TimeStr; // 傍晚太阳开始变成金色时间\r\n    sunsetStart: TimeStr; // 日落开始时间 (太阳的底部边缘和地平线相切)\r\n    sunset: TimeStr; // 日落时间 (太阳的顶部边缘和地平线相切)\r\n    dusk: TimeStr; // 黄昏时间\r\n    nauticalDusk: TimeStr; // 航海黄昏时间 (天基本上黑了)\r\n    night: TimeStr; // 夜晚开始时间 (天已经足够暗)\r\n}\r\n\r\nexport function getSunInfo(date?: DateStr): SunInfo;\r\n\r\n/** 获取日出时间 */\r\nexport function getSunriseTime(date?: DateStr): TimeStr;\r\n\r\n/** 获取日落时间 */\r\nexport function getSunsetTime(date?: DateStr): TimeStr;\r\n\r\n/** 判断是否在某一时间范围内 */\r\nexport function inTimeRange(startTime: TimeStr, endTime: TimeStr): boolean;\r\n\r\n/** 获取在 Home Assistant 中设置的地理位置 [纬度, 经度, 海拔] */\r\nexport function getGeographicLocation(): [number, number, number];\r\n\r\n/** 判断当前实体在 Home Assistant 中的状态是否为 \"不可用\" */\r\nexport function isUnavailableEntity(entityId: string): boolean;\r\n\r\n/** 获取指定实体所属的设备对象 */\r\nexport function getBelongingDevice(entityId: string): DeviceDef;\r\n```\r\n","readmeFilename":"README.md"}