{"_id":"2mqjs","_rev":"11-cc29e90cea6297f02f5564fd4ae79564","name":"2mqjs","dist-tags":{"latest":"0.1.6"},"versions":{"0.0.1":{"name":"2mqjs","version":"0.0.1","license":"MIT","_id":"2mqjs@0.0.1","maintainers":[{"name":"poliklot","email":"poliklot@vk.com"}],"homepage":"https://github.com/your-org/2mqjs#readme","bugs":{"url":"https://github.com/your-org/2mqjs/issues"},"dist":{"shasum":"bea7800662c5799f26e4703e79e64eb108d6c6c7","tarball":"https://registry.npmjs.org/2mqjs/-/2mqjs-0.0.1.tgz","fileCount":19,"integrity":"sha512-N0IPulzhY4cRPekwRj3AkBjEZYQdFxf+GvBtRC1qRp+6g8bvqErHbTAYL5cCYrxdCc89qqo6YUr0K21pc0C/Mw==","signatures":[{"sig":"MEQCID0jYdr31yQR8bqQIxlib5/NskhW95lLu3B3/AUy+UT9AiAlNAJiu4434nSyaTImErVAZalQ34/0F9h91EJ+9Vn3WQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63811},"main":"./dist/main.js","type":"module","types":"./dist/main.d.ts","engines":{"node":">=18"},"exports":{".":{"import":"./dist/main.js","default":"./dist/main.js"},"./ports":{"import":"./dist/ports.js","default":"./dist/ports.js"},"./store":{"import":"./dist/store.js","default":"./dist/store.js"},"./tasks":{"import":"./dist/tasks.js","default":"./dist/tasks.js"},"./events":{"import":"./dist/events.js","default":"./dist/events.js"},"./workers":{"import":"./dist/workers.js","default":"./dist/workers.js"},"./components":{"import":"./dist/components.js","default":"./dist/components.js"},"./package.json":"./package.json"},"gitHead":"7ad96bfec2f56f46ecbdd16ec241a6fb9616decc","scripts":{"dev":"tsc --watch","build":"npm run clean && tsc","clean":"rm -rf dist","release":"node scripts/release.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"poliklot","email":"poliklot@vk.com"},"repository":{"url":"git+https://github.com/your-org/2mqjs.git","type":"git"},"_npmVersion":"11.4.1","description":"Архитектурная микробиблиотека для веб-приложений без фреймворков: компоненты, шина событий, воркеры, задачи, стор.","directories":{},"sideEffects":false,"_nodeVersion":"20.18.1","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/*.d.ts"],"ports":["dist/ports.d.ts"],"store":["dist/store.d.ts"],"tasks":["dist/tasks.d.ts"],"events":["dist/events.d.ts"],"workers":["dist/workers.d.ts"],"components":["dist/components.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"ora":"^8.2.0","chalk":"^5.5.0","inquirer":"^12.9.2","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/2mqjs_0.0.1_1755161657507_0.883800558738359","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"2mqjs","version":"0.0.2","license":"MIT","_id":"2mqjs@0.0.2","maintainers":[{"name":"poliklot","email":"poliklot@vk.com"}],"homepage":"https://github.com/poliklot/2mqjs#readme","bugs":{"url":"https://github.com/poliklot/2mqjs/issues"},"dist":{"shasum":"ecc3a76b50df3e3174cf29d7e77d9646253dff6a","tarball":"https://registry.npmjs.org/2mqjs/-/2mqjs-0.0.2.tgz","fileCount":19,"integrity":"sha512-Hx78mWzzbJ6GZKiVLXE9UgxtS5oXkUW5pvK9iYY05TEZXnkeMlKOHjUaObo/d1jzv3VJJpOzPvBvSqMpkY53RQ==","signatures":[{"sig":"MEYCIQCo8a77TgKk6n4Y5PmPnXjAU3UwHGjwLJG6RdBzUJtPVgIhAOly0mSbOkJVMZpQcpfYyfrvBlWbTJQrLhGKAzgMTxnN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63506},"main":"./dist/main.js","type":"module","types":"./dist/main.d.ts","engines":{"node":">=18"},"exports":{".":{"import":"./dist/main.js","default":"./dist/main.js"},"./ports":{"import":"./dist/ports.js","default":"./dist/ports.js"},"./store":{"import":"./dist/store.js","default":"./dist/store.js"},"./tasks":{"import":"./dist/tasks.js","default":"./dist/tasks.js"},"./events":{"import":"./dist/events.js","default":"./dist/events.js"},"./workers":{"import":"./dist/workers.js","default":"./dist/workers.js"},"./components":{"import":"./dist/components.js","default":"./dist/components.js"},"./package.json":"./package.json"},"gitHead":"301b29f40aa37f5a9896f8a4c9c8477dfafa444b","scripts":{"dev":"tsc --watch","build":"npm run clean && tsc","clean":"rm -rf dist","release":"node scripts/release.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"poliklot","email":"poliklot@vk.com"},"repository":{"url":"git+https://github.com/poliklot/2mqjs.git","type":"git"},"_npmVersion":"11.4.1","description":"Архитектурная микробиблиотека для веб-приложений без фреймворков: компоненты, шина событий, воркеры, задачи, стор.","directories":{},"sideEffects":false,"_nodeVersion":"20.18.1","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/*.d.ts"],"ports":["dist/ports.d.ts"],"store":["dist/store.d.ts"],"tasks":["dist/tasks.d.ts"],"events":["dist/events.d.ts"],"workers":["dist/workers.d.ts"],"components":["dist/components.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"ora":"^8.2.0","chalk":"^5.5.0","inquirer":"^12.9.2","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/2mqjs_0.0.2_1755162606138_0.6224718772575868","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"2mqjs","version":"0.0.3","license":"MIT","_id":"2mqjs@0.0.3","maintainers":[{"name":"poliklot","email":"poliklot@vk.com"}],"homepage":"https://github.com/poliklot/2mqjs#readme","bugs":{"url":"https://github.com/poliklot/2mqjs/issues"},"dist":{"shasum":"de76571c5a939a6b0d75952ec3b8ac686cd61149","tarball":"https://registry.npmjs.org/2mqjs/-/2mqjs-0.0.3.tgz","fileCount":19,"integrity":"sha512-qDsIcFj+HjLK725VCSrIbE35E1Y2leQRXWXF1zCKCzsgz7Rb/QNQDdZG7zSuqq7TR/5ZF3HXwflPI+48yKMnFQ==","signatures":[{"sig":"MEUCIQDHZCaOukcMc3oJ8leCIVfX61xigpCqg/UR+SKQ6nx1EgIgem9XGy2PTYW03SiOoiWe3n4Ohok0LpTFmSAK04kagWk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63376},"main":"./dist/main.js","type":"module","types":"./dist/main.d.ts","engines":{"node":">=18"},"exports":{"./ports":{"import":"./dist/ports.js","default":"./dist/ports.js"},"./store":{"import":"./dist/store.js","default":"./dist/store.js"},"./tasks":{"import":"./dist/tasks.js","default":"./dist/tasks.js"},"./events":{"import":"./dist/events.js","default":"./dist/events.js"},"./workers":{"import":"./dist/workers.js","default":"./dist/workers.js"},"./components":{"import":"./dist/components.js","default":"./dist/components.js"},"./package.json":"./package.json"},"gitHead":"4972f9b387c46c19427c1a41c62c62d1bc49a1ae","scripts":{"dev":"tsc --watch","build":"npm run clean && tsc","clean":"rm -rf dist","release":"node scripts/release.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"poliklot","email":"poliklot@vk.com"},"repository":{"url":"git+https://github.com/poliklot/2mqjs.git","type":"git"},"_npmVersion":"11.4.1","description":"Архитектурная микробиблиотека для веб-приложений без фреймворков: компоненты, шина событий, воркеры, задачи, стор.","directories":{},"sideEffects":false,"_nodeVersion":"20.18.1","publishConfig":{"access":"public"},"typesVersions":{"*":{"ports":["dist/ports.d.ts"],"store":["dist/store.d.ts"],"tasks":["dist/tasks.d.ts"],"events":["dist/events.d.ts"],"workers":["dist/workers.d.ts"],"components":["dist/components.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"ora":"^8.2.0","chalk":"^5.5.0","inquirer":"^12.9.2","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/2mqjs_0.0.3_1755163714657_0.9188985217738415","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"2mqjs","version":"0.0.4","license":"MIT","_id":"2mqjs@0.0.4","maintainers":[{"name":"poliklot","email":"poliklot@vk.com"}],"homepage":"https://github.com/poliklot/2mqjs#readme","bugs":{"url":"https://github.com/poliklot/2mqjs/issues"},"dist":{"shasum":"d27f239b2e82e1a6b9e949da519d4a1bbaa529fa","tarball":"https://registry.npmjs.org/2mqjs/-/2mqjs-0.0.4.tgz","fileCount":20,"integrity":"sha512-Wy3H7P3AZOQzJmsFWSCE9IVBySx5ODmRDT7P4d+nBvl/XxDgGZhc7XnYRMow8LxPPvW/RCAzhhPVlcaRZaP4ng==","signatures":[{"sig":"MEUCIQDg5cgBeEjgtqZefUZfreWbK3pKQLTUrFAiwFfWCye7mwIgK5UcNX1lNRJsrDiTncwmAgla8QID0H8hSGU6BOoAZnw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63725},"main":"./dist/main.js","type":"module","types":"./dist/types-compat.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types-compat.d.ts","import":"./dist/main.js","default":"./dist/main.js"},"./ports":{"import":"./dist/ports.js","default":"./dist/ports.js"},"./store":{"import":"./dist/store.js","default":"./dist/store.js"},"./tasks":{"import":"./dist/tasks.js","default":"./dist/tasks.js"},"./events":{"import":"./dist/events.js","default":"./dist/events.js"},"./workers":{"import":"./dist/workers.js","default":"./dist/workers.js"},"./components":{"import":"./dist/components.js","default":"./dist/components.js"},"./package.json":"./package.json"},"gitHead":"dedfafcab3c259431c58f94465026778286bb46a","scripts":{"dev":"tsc --watch","build":"npm run clean && tsc && node scripts/postbuild.js","clean":"rm -rf dist","release":"node scripts/release.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"poliklot","email":"poliklot@vk.com"},"repository":{"url":"git+https://github.com/poliklot/2mqjs.git","type":"git"},"_npmVersion":"11.4.1","description":"Архитектурная микробиблиотека для веб-приложений без фреймворков: компоненты, шина событий, воркеры, задачи, стор.","directories":{},"sideEffects":false,"_nodeVersion":"20.18.1","publishConfig":{"access":"public"},"typesVersions":{"*":{"ports":["dist/ports.d.ts"],"store":["dist/store.d.ts"],"tasks":["dist/tasks.d.ts"],"events":["dist/events.d.ts"],"workers":["dist/workers.d.ts"],"components":["dist/components.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"ora":"^8.2.0","chalk":"^5.5.0","inquirer":"^12.9.2","typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/2mqjs_0.0.4_1755164324017_0.99460900357162","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"2mqjs","version":"0.1.0","keywords":["web-performance","vanilla-js","typescript","lazy-loading","web-workers","event-bus","state-management","frontend-architecture"],"author":{"name":"Poliklot"},"license":"MIT","_id":"2mqjs@0.1.0","maintainers":[{"name":"poliklot","email":"poliklot@vk.com"}],"homepage":"https://github.com/Poliklot/2mqjs#readme","bugs":{"url":"https://github.com/Poliklot/2mqjs/issues"},"dist":{"shasum":"43d140f56301cb0e8f2ddeec2b991d9155f39f51","tarball":"https://registry.npmjs.org/2mqjs/-/2mqjs-0.1.0.tgz","fileCount":22,"integrity":"sha512-Sg/fAwJ1KPU8OedN6Qncbph+ObhN3xsGgXEDQO2cGK46VkCkzWNCEaDDAcSs+FzyPUi1Aala8JlrhgtT9a/mmQ==","signatures":[{"sig":"MEUCIQCDM0ScKGtLXmvGgfAHFGjaaqhPoFE4O523t2qnOdBcsAIgW6KxZ8q+9V9OD/aJE98oCEGx1ZoN01stBxisMvKhY6U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/2mqjs@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76405},"main":"./dist/main.js","type":"module","types":"./dist/types-compat.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types-compat.d.ts","import":"./dist/main.js","default":"./dist/main.js"},"./ports":{"import":"./dist/ports.js","default":"./dist/ports.js"},"./store":{"import":"./dist/store.js","default":"./dist/store.js"},"./tasks":{"import":"./dist/tasks.js","default":"./dist/tasks.js"},"./events":{"import":"./dist/events.js","default":"./dist/events.js"},"./workers":{"import":"./dist/workers.js","default":"./dist/workers.js"},"./components":{"import":"./dist/components.js","default":"./dist/components.js"},"./package.json":"./package.json"},"gitHead":"cd80e7c2fdda927ca9a8d6a3097b4c37005a7c68","scripts":{"dev":"tsc --watch","build":"npm run clean && tsc && node scripts/postbuild.js","check":"npm run release:check","clean":"rm -rf dist","pack:dry-run":"npm_config_cache=/tmp/2mqjs-npm-cache npm pack --dry-run","release:check":"npm run build && npm run smoke:package && npm run pack:dry-run","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run release:check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1f3b4e69-42a2-44ca-aaf4-fe4a9f7da978"}},"repository":{"url":"git+https://github.com/Poliklot/2mqjs.git","type":"git"},"_npmVersion":"11.13.0","description":"A tiny performance-first architecture toolkit for framework-free web apps: lazy components, event ports, workers, tasks, and an off-main-thread store.","directories":{},"sideEffects":false,"_nodeVersion":"24.17.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"ports":["dist/ports.d.ts"],"store":["dist/store.d.ts"],"tasks":["dist/tasks.d.ts"],"events":["dist/events.d.ts"],"workers":["dist/workers.d.ts"],"components":["dist/components.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/2mqjs_0.1.0_1782726982524_0.8634283182568565","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"2mqjs","version":"0.1.1","keywords":["web-performance","vanilla-js","typescript","lazy-loading","web-workers","event-bus","state-management","frontend-architecture"],"author":{"name":"Poliklot"},"license":"MIT","_id":"2mqjs@0.1.1","maintainers":[{"name":"poliklot","email":"poliklot@vk.com"}],"homepage":"https://github.com/Poliklot/2mqjs#readme","bugs":{"url":"https://github.com/Poliklot/2mqjs/issues"},"dist":{"shasum":"5c32d742b5ac08a9d2e1ed25f297e6f3fbf98f3d","tarball":"https://registry.npmjs.org/2mqjs/-/2mqjs-0.1.1.tgz","fileCount":22,"integrity":"sha512-b/4HFZoUEdOhXEZ3HW49J7MMGorF17jdqfd/cIkbyDwqURX1BFvArMrIXdS0l2YSZ7v8IvlG9YYX2ct8RR6VMw==","signatures":[{"sig":"MEUCID+to0cFOmF1WO24dZjoc1A0ZnPbMxcZBz/SMQT0ubQAAiEAlmD3zf54Fm7IWyDjoC1hi/xsq0wKn8bLYahpjFcW6u8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/2mqjs@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76645},"main":"./dist/main.js","type":"module","types":"./dist/types-compat.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types-compat.d.ts","import":"./dist/main.js","default":"./dist/main.js"},"./ports":{"import":"./dist/ports.js","default":"./dist/ports.js"},"./store":{"import":"./dist/store.js","default":"./dist/store.js"},"./tasks":{"import":"./dist/tasks.js","default":"./dist/tasks.js"},"./events":{"import":"./dist/events.js","default":"./dist/events.js"},"./workers":{"import":"./dist/workers.js","default":"./dist/workers.js"},"./components":{"import":"./dist/components.js","default":"./dist/components.js"},"./package.json":"./package.json"},"gitHead":"26689af1dedffb3e4d914fb9cc2398004810fad1","scripts":{"dev":"tsc --watch","build":"npm run clean && tsc && node scripts/postbuild.js","check":"npm run release:check","clean":"rm -rf dist","pack:dry-run":"npm_config_cache=/tmp/2mqjs-npm-cache npm pack --dry-run","release:check":"npm run build && npm run smoke:package && npm run pack:dry-run","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run release:check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1f3b4e69-42a2-44ca-aaf4-fe4a9f7da978"}},"repository":{"url":"git+https://github.com/Poliklot/2mqjs.git","type":"git"},"_npmVersion":"11.13.0","description":"A tiny performance-first architecture toolkit for framework-free web apps: lazy components, event ports, workers, tasks, and an off-main-thread store.","directories":{},"sideEffects":false,"_nodeVersion":"24.17.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"ports":["dist/ports.d.ts"],"store":["dist/store.d.ts"],"tasks":["dist/tasks.d.ts"],"events":["dist/events.d.ts"],"workers":["dist/workers.d.ts"],"components":["dist/components.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/2mqjs_0.1.1_1782727767040_0.010247474834627068","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"2mqjs","version":"0.1.2","keywords":["web-performance","vanilla-js","typescript","lazy-loading","web-workers","event-bus","state-management","frontend-architecture"],"author":{"name":"Poliklot"},"license":"MIT","_id":"2mqjs@0.1.2","maintainers":[{"name":"poliklot","email":"poliklot@vk.com"}],"homepage":"https://github.com/Poliklot/2mqjs#readme","bugs":{"url":"https://github.com/Poliklot/2mqjs/issues"},"dist":{"shasum":"5a61a92f2ed52165e5c5eef206f8396a415f6128","tarball":"https://registry.npmjs.org/2mqjs/-/2mqjs-0.1.2.tgz","fileCount":22,"integrity":"sha512-f1nuqHoJkbaq8mSB4WPhpeeRBimXTXOzymR8Y3NZRpLeeAj1sg2nl6cRb2DKegqxxZ6YTIthtTpj8ivEGDB+hg==","signatures":[{"sig":"MEUCIQC8LwSdLr6Ocq6cvC6sHsjsN89hZ5LDASHBQ2E5+G2SvQIgOmm5op3tK2/hmeSs6ngxvNR9RkjvcGr3aEEHSW4CYmA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/2mqjs@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71294},"main":"./dist/main.js","type":"module","types":"./dist/types-compat.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types-compat.d.ts","import":"./dist/main.js","default":"./dist/main.js"},"./ports":{"import":"./dist/ports.js","default":"./dist/ports.js"},"./store":{"import":"./dist/store.js","default":"./dist/store.js"},"./tasks":{"import":"./dist/tasks.js","default":"./dist/tasks.js"},"./events":{"import":"./dist/events.js","default":"./dist/events.js"},"./workers":{"import":"./dist/workers.js","default":"./dist/workers.js"},"./components":{"import":"./dist/components.js","default":"./dist/components.js"},"./package.json":"./package.json"},"gitHead":"f78ce51395cb96878ac597b5cb6688e1dbb2e776","scripts":{"dev":"tsc --watch","test":"npm run test:unit && npm run test:e2e","build":"npm run clean && tsc && node scripts/postbuild.js","check":"npm run release:check","clean":"rm -rf dist","test:e2e":"playwright test","test:unit":"vitest run tests/unit","test:manual":"vite tests/manual --host 127.0.0.1 --port 4173 --strictPort","pack:dry-run":"npm_config_cache=/tmp/2mqjs-npm-cache npm pack --dry-run","release:check":"npm run test && npm run build && npm run smoke:package && npm run pack:dry-run","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run release:check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1f3b4e69-42a2-44ca-aaf4-fe4a9f7da978"}},"repository":{"url":"git+https://github.com/Poliklot/2mqjs.git","type":"git"},"_npmVersion":"11.16.0","description":"A tiny performance-first architecture toolkit for framework-free web apps: lazy components, event ports, workers, tasks, and an off-main-thread store.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"ports":["dist/ports.d.ts"],"store":["dist/store.d.ts"],"tasks":["dist/tasks.d.ts"],"events":["dist/events.d.ts"],"workers":["dist/workers.d.ts"],"components":["dist/components.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.3","vitest":"^3.2.7","typescript":"^7.0.2","@playwright/test":"^1.61.0"},"_npmOperationalInternal":{"tmp":"tmp/2mqjs_0.1.2_1784813593875_0.6329538782537174","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"2mqjs","version":"0.1.3","keywords":["web-performance","vanilla-js","typescript","lazy-loading","web-workers","event-bus","state-management","frontend-architecture"],"author":{"name":"Poliklot"},"license":"MIT","_id":"2mqjs@0.1.3","maintainers":[{"name":"poliklot","email":"poliklot@vk.com"}],"homepage":"https://github.com/Poliklot/2mqjs#readme","bugs":{"url":"https://github.com/Poliklot/2mqjs/issues"},"dist":{"shasum":"e67eb55716e18a30c67e332feb9b1fbeb3fe6a5c","tarball":"https://registry.npmjs.org/2mqjs/-/2mqjs-0.1.3.tgz","fileCount":22,"integrity":"sha512-rZTB0oFUrncvAUSu4RxZS3B7aStDnsQxfq4dQf1QRpZuIh+5nH/ZhNS0zg1t4xgGObPjXG8fP9lMMQKMC1qjQQ==","signatures":[{"sig":"MEYCIQC5TW4yG59raJoBvFgrmBxiZvSZma4NDSzOzvWuHVl3vgIhAOMz2Y5wBxDMXpJb34JM+y3UHZK0fMZtV2/7/FU7gsOC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/2mqjs@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71728},"main":"./dist/main.js","type":"module","types":"./dist/types-compat.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types-compat.d.ts","import":"./dist/main.js","default":"./dist/main.js"},"./ports":{"import":"./dist/ports.js","default":"./dist/ports.js"},"./store":{"import":"./dist/store.js","default":"./dist/store.js"},"./tasks":{"import":"./dist/tasks.js","default":"./dist/tasks.js"},"./events":{"import":"./dist/events.js","default":"./dist/events.js"},"./workers":{"import":"./dist/workers.js","default":"./dist/workers.js"},"./components":{"import":"./dist/components.js","default":"./dist/components.js"},"./package.json":"./package.json"},"gitHead":"dce13e7369a90c06f8ac872dbc565827706d5c50","scripts":{"dev":"tsc --watch","test":"npm run test:unit && npm run test:e2e","build":"npm run clean && tsc && node scripts/postbuild.js","check":"npm run release:check","clean":"rm -rf dist","test:e2e":"playwright test","test:unit":"vitest run tests/unit","test:manual":"vite tests/manual --host 127.0.0.1 --port 4173 --strictPort","pack:dry-run":"npm_config_cache=/tmp/2mqjs-npm-cache npm pack --dry-run","release:check":"npm run test && npm run build && npm run smoke:package && npm run pack:dry-run","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run release:check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1f3b4e69-42a2-44ca-aaf4-fe4a9f7da978"}},"repository":{"url":"git+https://github.com/Poliklot/2mqjs.git","type":"git"},"_npmVersion":"11.16.0","description":"A tiny performance-first architecture toolkit for framework-free web apps: lazy components, event ports, workers, tasks, and an off-main-thread store.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"ports":["dist/ports.d.ts"],"store":["dist/store.d.ts"],"tasks":["dist/tasks.d.ts"],"events":["dist/events.d.ts"],"workers":["dist/workers.d.ts"],"components":["dist/components.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.4.3","vitest":"^3.2.7","typescript":"^7.0.2","@playwright/test":"^1.61.0"},"_npmOperationalInternal":{"tmp":"tmp/2mqjs_0.1.3_1784814467085_0.36922683907172615","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"2mqjs","version":"0.1.4","keywords":["web-performance","vanilla-js","typescript","lazy-loading","web-workers","event-bus","state-management","frontend-architecture"],"author":{"name":"Poliklot"},"license":"MIT","_id":"2mqjs@0.1.4","maintainers":[{"name":"poliklot","email":"poliklot@vk.com"}],"homepage":"https://github.com/Poliklot/2mqjs#readme","bugs":{"url":"https://github.com/Poliklot/2mqjs/issues"},"dist":{"shasum":"c567f1476ae651a631b8f0e3bd7caabaaa9b8a3b","tarball":"https://registry.npmjs.org/2mqjs/-/2mqjs-0.1.4.tgz","fileCount":22,"integrity":"sha512-0KmjwD96o0UczKiPibMoVwVVOZitmyq11E3YZRMn/4KNFDxKttRDD0SUk4TOM40kGO7SaV18YYKwH10Q3SUKoA==","signatures":[{"sig":"MEUCIHfh0GhYjAtAYakRZGLGX5Cr3Xuibbtk5DbkdOxvVNeFAiEA4pZezsK57zU5VYtcWapzBjaWvWx85YTcuGuYml3ZV+A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/2mqjs@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71927},"main":"./dist/main.js","type":"module","types":"./dist/types-compat.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types-compat.d.ts","import":"./dist/main.js","default":"./dist/main.js"},"./ports":{"import":"./dist/ports.js","default":"./dist/ports.js"},"./store":{"import":"./dist/store.js","default":"./dist/store.js"},"./tasks":{"import":"./dist/tasks.js","default":"./dist/tasks.js"},"./events":{"import":"./dist/events.js","default":"./dist/events.js"},"./workers":{"import":"./dist/workers.js","default":"./dist/workers.js"},"./components":{"import":"./dist/components.js","default":"./dist/components.js"},"./package.json":"./package.json"},"gitHead":"0af2f4847ef79a893639da19ccd60b51176f3431","scripts":{"dev":"tsc --watch","test":"npm run test:unit && npm run test:e2e","build":"npm run clean && tsc && node scripts/postbuild.js","check":"npm run release:check","clean":"rm -rf dist","test:e2e":"playwright test","test:unit":"vitest run tests/unit","test:manual":"vite tests/manual --host 127.0.0.1 --port 4173 --strictPort","pack:dry-run":"npm_config_cache=/tmp/2mqjs-npm-cache npm pack --dry-run","release:check":"npm run test && npm run build && npm run smoke:package && npm run pack:dry-run","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run release:check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1f3b4e69-42a2-44ca-aaf4-fe4a9f7da978"}},"repository":{"url":"git+https://github.com/Poliklot/2mqjs.git","type":"git"},"_npmVersion":"11.16.0","description":"A tiny performance-first architecture toolkit for framework-free web apps: lazy components, event ports, workers, tasks, and an off-main-thread store.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"ports":["dist/ports.d.ts"],"store":["dist/store.d.ts"],"tasks":["dist/tasks.d.ts"],"events":["dist/events.d.ts"],"workers":["dist/workers.d.ts"],"components":["dist/components.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.5","vitest":"^4.1.10","typescript":"^7.0.2","@playwright/test":"^1.62.0"},"_npmOperationalInternal":{"tmp":"tmp/2mqjs_0.1.4_1785230356009_0.6628876252531448","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"2mqjs","version":"0.1.5","keywords":["web-performance","vanilla-js","typescript","lazy-loading","web-workers","event-bus","state-management","frontend-architecture"],"author":{"name":"Poliklot"},"license":"MIT","_id":"2mqjs@0.1.5","maintainers":[{"name":"poliklot","email":"poliklot@vk.com"}],"homepage":"https://github.com/Poliklot/2mqjs#readme","bugs":{"url":"https://github.com/Poliklot/2mqjs/issues"},"dist":{"shasum":"50a73b9b91be0bba2a6dabf1a14bd53d73522369","tarball":"https://registry.npmjs.org/2mqjs/-/2mqjs-0.1.5.tgz","fileCount":22,"integrity":"sha512-xFC+30/odAF7cjS5oYswvl+q2BZJzPxTYFyuhq6fooeJk1o+ILNFUk7tEFiDlSQfb3ZLKORxizI0vkARC42eng==","signatures":[{"sig":"MEUCIQCGc5OOGP443xePhPc/10OopqTVTwJmDBsEV8+XJozbfQIgV6fPGkVRqXb7qhaVbulpD3niFeJmxmfNclX9o7BXc4w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/2mqjs@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":83565},"main":"./dist/main.js","type":"module","types":"./dist/types-compat.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types-compat.d.ts","import":"./dist/main.js","default":"./dist/main.js"},"./ports":{"import":"./dist/ports.js","default":"./dist/ports.js"},"./store":{"import":"./dist/store.js","default":"./dist/store.js"},"./tasks":{"import":"./dist/tasks.js","default":"./dist/tasks.js"},"./events":{"import":"./dist/events.js","default":"./dist/events.js"},"./workers":{"import":"./dist/workers.js","default":"./dist/workers.js"},"./components":{"import":"./dist/components.js","default":"./dist/components.js"},"./package.json":"./package.json"},"gitHead":"792b584636a7d8cbc625c527b35710e277bf9cf3","scripts":{"dev":"tsc --watch","test":"npm run test:unit && npm run test:e2e","build":"npm run clean && tsc && node scripts/postbuild.js","check":"npm run release:check","clean":"rm -rf dist","test:e2e":"playwright test","test:unit":"vitest run tests/unit","test:manual":"vite tests/manual --host 127.0.0.1 --port 4173 --strictPort","pack:dry-run":"npm_config_cache=/tmp/2mqjs-npm-cache npm pack --dry-run","release:check":"npm run test && npm run build && npm run smoke:package && npm run pack:dry-run","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run release:check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1f3b4e69-42a2-44ca-aaf4-fe4a9f7da978"}},"repository":{"url":"git+https://github.com/Poliklot/2mqjs.git","type":"git"},"_npmVersion":"11.16.0","description":"A tiny performance-first architecture toolkit for framework-free web apps: lazy components, event ports, workers, tasks, and an off-main-thread store.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"ports":["dist/ports.d.ts"],"store":["dist/store.d.ts"],"tasks":["dist/tasks.d.ts"],"events":["dist/events.d.ts"],"workers":["dist/workers.d.ts"],"components":["dist/components.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.5","vitest":"^4.1.10","typescript":"^7.0.2","@playwright/test":"^1.62.0"},"_npmOperationalInternal":{"tmp":"tmp/2mqjs_0.1.5_1785317387507_0.33275722439332434","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"2mqjs","description":"A tiny performance-first architecture toolkit for framework-free web apps: lazy components, event ports, workers, tasks, and an off-main-thread store.","version":"0.1.6","type":"module","main":"./dist/main.js","types":"./dist/types-compat.d.ts","exports":{".":{"import":"./dist/main.js","default":"./dist/main.js","types":"./dist/types-compat.d.ts"},"./ports":{"import":"./dist/ports.js","default":"./dist/ports.js"},"./events":{"import":"./dist/events.js","default":"./dist/events.js"},"./workers":{"import":"./dist/workers.js","default":"./dist/workers.js"},"./components":{"import":"./dist/components.js","default":"./dist/components.js"},"./tasks":{"import":"./dist/tasks.js","default":"./dist/tasks.js"},"./store":{"import":"./dist/store.js","default":"./dist/store.js"},"./package.json":"./package.json"},"typesVersions":{"*":{"ports":["dist/ports.d.ts"],"events":["dist/events.d.ts"],"workers":["dist/workers.d.ts"],"components":["dist/components.d.ts"],"tasks":["dist/tasks.d.ts"],"store":["dist/store.d.ts"]}},"sideEffects":false,"scripts":{"clean":"rm -rf dist","build":"npm run clean && tsc && node scripts/postbuild.js","test":"npm run test:unit && npm run test:e2e","test:unit":"vitest run tests/unit","test:e2e":"playwright test","test:manual":"vite tests/manual --host 127.0.0.1 --port 4173 --strictPort","dev":"tsc --watch","check":"npm run release:check","release:check":"npm run test && npm run build && npm run smoke:package && npm run pack:dry-run","smoke:package":"node scripts/smoke-package.mjs","pack:dry-run":"npm_config_cache=/tmp/2mqjs-npm-cache npm pack --dry-run","prepublishOnly":"npm run release:check"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Poliklot/2mqjs.git"},"bugs":{"url":"https://github.com/Poliklot/2mqjs/issues"},"homepage":"https://github.com/Poliklot/2mqjs#readme","engines":{"node":">=18"},"publishConfig":{"access":"public"},"devDependencies":{"@playwright/test":"^1.62.0","typescript":"^7.0.2","vite":"^8.1.5","vitest":"^4.1.10"},"keywords":["web-performance","vanilla-js","typescript","lazy-loading","web-workers","event-bus","state-management","frontend-architecture"],"author":{"name":"Poliklot"},"gitHead":"5c143b0b45df5efd6db7a9ca67eeecb930ce6602","_id":"2mqjs@0.1.6","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-ClE66E9Tfggfz2PbXQYbvHBHG0x+8qnavzMmPYmSYbTMTiBBgN4HqW81uT5DtPoEWLphFROeQmfTU+GgFDVuyg==","shasum":"d48147b115afca047edd76f3954a92ed29a22943","tarball":"https://registry.npmjs.org/2mqjs/-/2mqjs-0.1.6.tgz","fileCount":22,"unpackedSize":83816,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/2mqjs@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEV04PqvS0B9HA1KkDfo5ueZfiw0FB4dP7GStSExjfMaAiAe8X4917dfsEfTMZm1iz7qpIIt64ZTpN/hu7Tu/gJPgw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1f3b4e69-42a2-44ca-aaf4-fe4a9f7da978"}},"directories":{},"maintainers":[{"name":"poliklot","email":"poliklot@vk.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/2mqjs_0.1.6_1786448854974_0.5625644821365641"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-14T08:54:17.432Z","modified":"2026-08-11T11:47:35.516Z","0.0.1":"2025-08-14T08:54:17.744Z","0.0.2":"2025-08-14T09:10:06.317Z","0.0.3":"2025-08-14T09:28:34.854Z","0.0.4":"2025-08-14T09:38:44.189Z","0.1.0":"2026-06-29T09:56:22.666Z","0.1.1":"2026-06-29T10:09:27.191Z","0.1.2":"2026-07-23T13:33:14.019Z","0.1.3":"2026-07-23T13:47:47.236Z","0.1.4":"2026-07-28T09:19:16.166Z","0.1.5":"2026-07-29T09:29:47.645Z","0.1.6":"2026-08-11T11:47:35.177Z"},"bugs":{"url":"https://github.com/Poliklot/2mqjs/issues"},"author":{"name":"Poliklot"},"license":"MIT","homepage":"https://github.com/Poliklot/2mqjs#readme","keywords":["web-performance","vanilla-js","typescript","lazy-loading","web-workers","event-bus","state-management","frontend-architecture"],"repository":{"type":"git","url":"git+https://github.com/Poliklot/2mqjs.git"},"description":"A tiny performance-first architecture toolkit for framework-free web apps: lazy components, event ports, workers, tasks, and an off-main-thread store.","maintainers":[{"name":"poliklot","email":"poliklot@vk.com"}],"readme":"# 2mqjs\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/Poliklot/2mqjs/master/assets/logo.svg\" alt=\"2mqjs logo\" width=\"420\" />\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/2mqjs\"><img src=\"https://img.shields.io/npm/v/2mqjs.svg\" alt=\"npm version\" /></a>\n  <a href=\"https://github.com/Poliklot/2mqjs/actions/workflows/ci.yml\"><img src=\"https://github.com/Poliklot/2mqjs/actions/workflows/ci.yml/badge.svg\" alt=\"CI\" /></a>\n  <a href=\"https://github.com/Poliklot/2mqjs/actions/workflows/codeql.yml\"><img src=\"https://github.com/Poliklot/2mqjs/actions/workflows/codeql.yml/badge.svg\" alt=\"CodeQL\" /></a>\n  <a href=\"https://packagephobia.com/result?p=2mqjs\"><img src=\"https://badgen.net/packagephobia/install/2mqjs\" alt=\"install size\" /></a>\n  <img src=\"https://img.shields.io/badge/TypeScript-strict-blue\" alt=\"TypeScript strict\" />\n  <img src=\"https://img.shields.io/badge/license-MIT-green.svg\" alt=\"MIT license\" />\n</p>\n\n<p align=\"center\">\n  <strong>Маленький performance-first архитектурный набор для веб-приложений без фреймворков.</strong>\n</p>\n\n<p align=\"center\">\n  <a href=\"./README.md\">English version</a> ·\n  <a href=\"./docs/COMPONENTS.md\">Components</a> ·\n  <a href=\"./docs/PORTS.md\">Ports</a> ·\n  <a href=\"./docs/WORKERS.md\">Workers</a> ·\n  <a href=\"./docs/TASKS.md\">Tasks</a> ·\n  <a href=\"./docs/STORE.md\">Store</a> ·\n  <a href=\"./docs/EVENTS.md\">Events</a>\n</p>\n\n---\n\n## Что это?\n\n**2mqjs** помогает разбить vanilla TypeScript/JavaScript сайт на небольшие runtime-слои:\n\n- **UI-компоненты** загружаются только тогда, когда они реально нужны.\n- **Бизнес-логика** может уехать в Web Workers.\n- **События** идут через явные ports, а не через скрытые связи между модулями.\n- **Tasks** управляют порядком запуска, видимостью, idle-временем, готовностью данных и воркеров.\n- **Store** может жить вне main thread и сохраняться между перезагрузками.\n\nБиблиотека нужна для страниц, где важны **маленький initial JS, меньше работы в main thread и предсказуемый порядок инициализации**.\n\n## Установка\n\n```bash\nnpm i 2mqjs\n# или\npnpm add 2mqjs\n# или\nyarn add 2mqjs\n```\n\nПроект должен использовать ESM:\n\n```jsonc\n{\n  \"type\": \"module\"\n}\n```\n\n## Импортируйте только нужное\n\n2mqjs публикует subpath exports, чтобы bundler мог не тянуть лишнее:\n\n```ts\nimport { registerComponent } from '2mqjs/components';\nimport { emitPort, onPort } from '2mqjs/ports';\nimport { registerTask } from '2mqjs/tasks';\n```\n\nКорневой экспорт тоже доступен, если удобнее:\n\n```ts\nimport { registerComponent, emitPort, registerTask } from '2mqjs';\n```\n\n## Быстрый старт\n\n### 1. Ленивые UI-компоненты\n\n```ts\nimport { registerComponent, runComponentLoader } from '2mqjs/components';\n\nregisterComponent({\n  name: 'product-card',\n  load: () => import('./components/product-card.js'),\n  when: 'visible',\n  hasDisplay: true,\n});\n\nrunComponentLoader();\n```\n\n```html\n<article data-component=\"product-card\"></article>\n```\n\nМодуль компонента:\n\n```ts\nexport function display(el: Element) {\n  el.innerHTML = '<button data-add>Добавить в корзину</button>';\n}\n\nexport function boot(el: Element) {\n  el.querySelector('[data-add]')?.addEventListener('click', () => {\n    // Тяжёлая логика стартует только после появления компонента.\n  });\n}\n```\n\n### 2. Ports: явные события приложения\n\n```ts\nimport { emitPort, onPort } from '2mqjs/ports';\n\nconst off = onPort<{ id: string }>('cart:add', ({ id }) => {\n  console.log('Добавить товар', id);\n});\n\nemitPort('cart:add', { id: 'sku-42' });\noff();\n```\n\n### 3. Tasks: предсказуемый порядок запуска\n\n```ts\nimport { registerTask, runTasks } from '2mqjs/tasks';\n\nregisterTask({\n  id: 'hydrate-products',\n  stage: 'bootstrap',\n  when: 'idle',\n  run: async () => {\n    // Некритичная работа ждёт idle-времени.\n  },\n});\n\nawait runTasks('bootstrap');\n```\n\n### 4. Workers: тяжёлая логика вне main thread\n\n```ts\nimport { registerWorker, emitPort } from '2mqjs/workers';\n\nawait registerWorker({\n  name: 'productData',\n  src: () => import('./workers/productData.worker.js'),\n});\n\nemitPort('productData:init', { page: 'catalog' });\n```\n\n### 5. Store: состояние в dedicated worker\n\n```ts\nimport { defineGlobalStore } from '2mqjs/store';\n\nconst app = defineGlobalStore({\n  name: 'shop',\n  initial: { cart: [] as string[] },\n  persist: ['cart'],\n});\n\nawait app.ready;\n\napp.watch('cart', cart => {\n  console.log('Корзина изменилась', cart);\n});\n\napp.add('cart', 'sku-42');\n```\n\n## Модули\n\n| Модуль | Для чего | Импорт |\n| --- | --- | --- |\n| Components | Ленивые UI-модули, `display`/`boot`, запуск по видимости и взаимодействию | `2mqjs/components` |\n| Ports | Лёгкий pub/sub со snapshot/replay | `2mqjs/ports` |\n| Workers | Регистрация воркеров и port-based messaging | `2mqjs/workers` |\n| Tasks | Оркестрация запуска, зависимости и runtime-условия | `2mqjs/tasks` |\n| Store | Глобальное состояние вне main thread + persist | `2mqjs/store` |\n| Events | DOM-утилиты: делегирование событий и resize subscriptions | `2mqjs/events` |\n\n## Принципы runtime\n\n- **Откладывать по умолчанию.** Запускать дорогой UI и логику только когда они нужны.\n- **Держать слои явными.** UI, данные, воркеры и orchestration общаются через маленькие контракты.\n- **Не привязывать к фреймворку.** Можно использовать рядом с SSR, islands, виджетами или обычным HTML.\n- **Следить за размером.** Subpath exports и release smoke checks защищают package shape и bundle budgets.\n\n## Текущий roadmap\n\nСледующий цикл разработки сфокусирован на production-grade производительности:\n\n- lazy components без потери первого interaction;\n- shared observers и cache в component loader;\n- cleanup жизненного цикла listeners в ports/tasks/events/workers;\n- patch-based store updates вместо отправки всего state;\n- `SharedWorker` mode для синхронизации стора между вкладками;\n- улучшение scheduler: DAG validation, cancellation, timeouts, concurrency limits;\n- browser smoke tests, benchmarks и bundle-size budgets.\n\nПодробный backlog — в [open issues](https://github.com/Poliklot/2mqjs/issues).\n\n## Релизы\n\n2mqjs теперь использует GitHub automation:\n\n- **CI** гоняет release gate на поддерживаемых версиях Node.js.\n- **CodeQL** сканирует JavaScript/TypeScript код.\n- **Dependabot** группирует обновления npm и GitHub Actions.\n- **Release Please** создаёт release PR из Conventional Commits.\n- npm-публикация идёт через GitHub Actions с provenance.\n\nЛокальная проверка перед релизом:\n\n```bash\nnpm run release:check\n```\n\n## Лицензия\n\n[MIT](./LICENSE)\n","readmeFilename":"README.ru.md"}