{"_id":"@actualwave/worker-dispatcher","_rev":"7-ffb08c1651234451f82dca41660e002c","name":"@actualwave/worker-dispatcher","dist-tags":{"latest":"1.3.3"},"versions":{"1.1.8":{"name":"@actualwave/worker-dispatcher","version":"1.1.8","keywords":["events","webworker","worker","fire","handle","listener","dispatcher"],"author":{"url":"http://actualwave.com/","name":"Oleg Galaburda","email":"burdiuz@gmail.com"},"license":"MIT","_id":"@actualwave/worker-dispatcher@1.1.8","maintainers":[{"name":"actualwave","email":"burdiuz@gmail.com"}],"homepage":"https://github.com/burdiuz/js-worker-event-dispatcher","bugs":{"url":"https://github.com/burdiuz/js-worker-event-dispatcher/issues","email":"burdiuz@gmail.com"},"dist":{"shasum":"da984078910c73a9431eeb81feb65e5004cdacc1","tarball":"https://registry.npmjs.org/@actualwave/worker-dispatcher/-/worker-dispatcher-1.1.8.tgz","fileCount":42,"integrity":"sha512-Exkt08GAWcacbthol5e+3RedCEjEuOWg0v5dkbYLMaFzrPUmdsyK8wf4XT7vPYrDP9PtdFnMNaj1EPxvdmVWWg==","signatures":[{"sig":"MEUCIQCuO/lpL5k1qaBn/sIAsAbQog3/pWcZipJbMa9+S6ADVQIgdmEafsTMJXk1GKYoGWwkdpATv9dBstYjONlMtsHlaHo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":619886},"main":"dist/worker-dispatcher.min.js","gitHead":"0797b8e82b87ccc06c433a02c9ae629dc37631ce","scripts":{"flow":"flow","lint":"eslint \"source/**/!(*.spec).js\"","test":"karma start --single-run --browsers Firefox karma.conf.js","start":"webpack","server":"webpack-dev-server --port 8081 --config webpack.config.main.js --open","lint:spec":"eslint -c eslintrc.spec.json \"source/**/*.spec.js\"","test:watch":"karma start --auto-watch --browsers Firefox karma.conf.js"},"_npmUser":{"name":"actualwave","email":"burdiuz@gmail.com"},"repository":{"url":"git+https://github.com/burdiuz/js-worker-event-dispatcher.git","type":"git"},"_npmVersion":"5.6.0","description":"WorkerDispatcher is a JavaScript class that adds events layer to Worker API","directories":{},"_nodeVersion":"8.11.1","dependencies":{"@actualwave/event-dispatcher":"^1.1.13","@actualwave/messageport-dispatcher":"^1.0.9"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","karma":"^1.7.1","mocha":"^4.0.1","sinon":"^4.0.1","eslint":"^4.9.0","webpack":"^3.8.1","flow-bin":"^0.57.3","babel-core":"^6.26.0","sinon-chai":"^2.14.0","karma-mocha":"^1.3.0","babel-eslint":"^8.0.1","babel-loader":"^7.1.2","karma-webpack":"^2.0.5","karma-coverage":"^1.1.1","karma-coveralls":"^1.1.2","babel-preset-env":"^1.6.1","karma-sinon-chai":"^1.3.2","webpack-dev-server":"^2.9.3","eslint-plugin-react":"^7.4.0","eslint-config-airbnb":"^16.1.0","eslint-plugin-import":"^2.8.0","babel-plugin-istanbul":"^4.1.5","eslint-plugin-jsx-a11y":"^6.0.2","karma-firefox-launcher":"^1.0.1","karma-sourcemap-loader":"^0.3.7","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-flow-strip-types":"^6.22.0"},"_npmOperationalInternal":{"tmp":"tmp/worker-dispatcher_1.1.8_1523186332659_0.38511134952553183","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@actualwave/worker-dispatcher","version":"1.2.0","keywords":["events","webworker","worker","fire","handle","listener","dispatcher"],"author":{"url":"http://actualwave.com/","name":"Oleg Galaburda","email":"burdiuz@gmail.com"},"license":"MIT","_id":"@actualwave/worker-dispatcher@1.2.0","maintainers":[{"name":"actualwave","email":"burdiuz@gmail.com"}],"homepage":"https://github.com/burdiuz/js-worker-event-dispatcher","bugs":{"url":"https://github.com/burdiuz/js-worker-event-dispatcher/issues","email":"burdiuz@gmail.com"},"dist":{"shasum":"de55521db432cb6c601e81313f0d08c898404053","tarball":"https://registry.npmjs.org/@actualwave/worker-dispatcher/-/worker-dispatcher-1.2.0.tgz","fileCount":15,"integrity":"sha512-rP0qnRSoiwKDOpJ1lWx3mvOzOBkmhgf7+l5P9qTaX2cdMuUDXR0FeaSMltFf6UQ104zXgxjqWztteN7VBcBVWQ==","signatures":[{"sig":"MEQCICOLpLiVFA5x/YP+6hjbcm18hzYmW92WQreM27wOkMIKAiAMNreC6Niq0dp2MmRb8nunP0Qqg90NdYKoAcxaDgAjdQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":201421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxhl1CRA9TVsSAnZWagAAqZ0P/2LuXQ47hWc05QTxScM3\nmHn5YsaQWdy+QYk4P/eBTM3FBjyX3lrU1Hr4TSET7V6xRest1oztfxWDdiS0\nA13PPuJuw32U9EAlB8UDm8ms6H666j/a21abN3eTteSC+sFHEdsz9asvrpSC\n4RxWLO4Evp/n1CCKiFWF7njPcVRnNJM2PpBBuHv48RBYIvsUbkvP4bd8pmnk\nwm2iPRYCaTx7aLNtc0JrlXXEO+Pu5MPzAhbgZ39ph/lfDCZ03GXCPiRfLJ4G\nh3YUZU/hSj2BrU/ftivhfuz9dcxNXZ1TmGftA6pYt8KK0Dfe83NxXquEq/Aq\n/Z1p9ejnx9c0xEocpaNrqG5HRvB74B523FhuiVVN3MerSmYgzrrOHBqUZT1z\nMNbOxaj+d7+jEIU0W4v7q3v3NVu+csM/ezsqCYo/OsdoQ6nopDSX8xZh6+tY\nmNoQk+NBXqDDk6p+PFRdJZoljFCnJYOxVcBbmGoxwckBmKgW0JSn/rNPindA\niJsvqzrdYev8tNQ+En5ewtSoLK0G/PrVsattGZu1WNznEOUDbmRGvaehyu7c\nBLimTi3cFfdO8FRg6ShcDvbyRXi4HywufiLGk9W+DjVrvEKVY7IMR7mcdgrl\ntZCGA89ERIqvq/rHKdX+E7ZUGxoYK/9Gyl0D37v/2aRgyYGxNxui2D/dGvXT\nQZmN\r\n=CJw2\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"collectCoverage":true,"coverageDirectory":"coverage","coverageReporters":["json","lcov"],"collectCoverageFrom":["source/**/*.js","!**/node_modules/**","!**/vendor/**"],"modulePathIgnorePatterns":["\\/\\.","\\.history"]},"main":"index.js","babel":{"env":{"test":{"plugins":["babel-plugin-transform-es2015-modules-commonjs","babel-plugin-transform-flow-strip-types","babel-plugin-transform-class-properties",["babel-plugin-transform-object-rest-spread",{"useBuiltIns":true}]],"presets":["jest"]}}},"gitHead":"16de784c3856be6c84175fa69e07eb66e4988a7d","scripts":{"flow":"flow","lint":"eslint \"source/**/*.js\"","test":"jest --colors","build":"rollup --config","start":"npm run build","server":"rollup --config rollup.serve.js","precommit":"npm run build && npm run test && npm run lint-staged","test:watch":"jest --colors --watch","build:watch":"rollup --config --watch \"./source\"","lint-staged":"lint-staged"},"_npmUser":{"name":"actualwave","email":"burdiuz@gmail.com"},"repository":{"url":"git+https://github.com/burdiuz/js-worker-event-dispatcher.git","type":"git"},"_npmVersion":"5.6.0","description":"WorkerDispatcher is a JavaScript class that adds events layer to Worker API","directories":{},"lint-staged":{"source/**/*.js":["prettier --write","eslint --fix","git add"]},"_nodeVersion":"8.11.2","dependencies":{"@actualwave/event-dispatcher":"^1.2.2","@actualwave/messageport-dispatcher":"^1.1.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","husky":"^1.0.1","eslint":"^5.6.1","chokidar":"^2.0.4","flow-bin":"^0.81.0","prettier":"^1.14.3","@babel/core":"^7.1.2","lint-staged":"^7.3.0","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","babel-preset-jest":"^23.2.0","rollup-plugin-json":"^3.1.0","eslint-plugin-react":"^7.11.1","rollup-plugin-babel":"^4.0.3","rollup-plugin-serve":"^0.6.0","eslint-config-airbnb":"^17.1.0","eslint-plugin-import":"^2.14.0","rollup-plugin-terser":"^3.0.0","babel-plugin-istanbul":"^5.0.1","eslint-plugin-jsx-a11y":"^6.1.1","rollup-plugin-commonjs":"^9.1.8","rollup-plugin-livereload":"^0.6.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-external-helpers":"^7.0.0","@babel/plugin-syntax-object-rest-spread":"^7.0.0","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-flow-strip-types":"^6.22.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-es2015-modules-commonjs":"^6.26.2"},"_npmOperationalInternal":{"tmp":"tmp/worker-dispatcher_1.2.0_1539709300553_0.734103546682956","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"@actualwave/worker-dispatcher","version":"1.3.0","keywords":["events","webworker","worker","fire","handle","listener","dispatcher"],"author":{"url":"http://actualwave.com/","name":"Oleg Galaburda","email":"burdiuz@gmail.com"},"license":"MIT","_id":"@actualwave/worker-dispatcher@1.3.0","maintainers":[{"name":"actualwave","email":"burdiuz@gmail.com"}],"homepage":"https://github.com/burdiuz/js-worker-event-dispatcher","bugs":{"url":"https://github.com/burdiuz/js-worker-event-dispatcher/issues","email":"burdiuz@gmail.com"},"dist":{"shasum":"8f7fa38f6874efff028eb19f548c298fc20c8843","tarball":"https://registry.npmjs.org/@actualwave/worker-dispatcher/-/worker-dispatcher-1.3.0.tgz","fileCount":16,"integrity":"sha512-q6Qig/oXwUFG+y+zKLRyE9T8AFKhslweDWFTA981qMt6REwDeJ6vaZMoADKYohWokS6bNivU5QbI0UA60mLgdA==","signatures":[{"sig":"MEQCIHRXJc4xIi+tOTFGgjkx0rhLANtL8vRdN2AH139FjdMCAiBjTzO6ol/7vGS1QNWykU0mjmMAYHAAVlCZiyuM1Kg5lQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258323,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdMERwCRA9TVsSAnZWagAAHbIP/329uSNQaOxtFQkVFCDV\nQBKOq377PXvAn77TouBfIMiKnT8TlzSv6hroZ6jLsO43DFTDO1tlYhw6tLrN\nudQGafaJwdI6rg4GklMaXN6J45zTrtkaCcGe2H+31iZEeNRnMpfpco9fM3gf\nTKpw6jCscJxex7I2ek0nUdo2WAlqlEJO8CeaGHbVvZLtIuxx1vW3mRnAYOOX\nSSwnSjv8k8p8m8C8MEnQnIs0AXf1bRkSyiI/6YGTZ1IQPROF//c285vvGgPd\n4YTA9Q3GZcyEXKEsJX0lzmEkdfvh84LQ+PoL0ar3+AIiLfEXodI5oSvyjzTC\nINUviHJ6bx/LxPa3/vjcxt+cJWQ+mDyDdTUR6DTzLiK+uIYIVzcx41t7OLsd\nxhpV57RQSuG2L7C29FuHKENFt+s9CAAotKormzhlih4aQd8d0Y4V6wA1jbQ4\nzy9u2ygfidlGAzCJkK7ODH8gFOLu1E0ZNS7Fu3DOyAfbXnCZqIPR4+kPUJbu\n6S+LJkqzX0T2UJuKGLsJnYpp75iSr9aE3kwZmEWthmmqGphOi36mwxe/upGP\nMwA2O4jYEyXaEHt8HGC2OtQCVwIfLt+1ZO270lo/4SwPphdVIk1Vk4wZh4bb\np67cAzgajTm/rFD7orzDkvri7RQFWkwG0TNN1Jgk7s42Vz5WRbikkpO8t67x\nHU4s\r\n=IEBB\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"collectCoverage":true,"coverageDirectory":"coverage","coverageReporters":["json","lcov"],"collectCoverageFrom":["source/**/*.js","!**/node_modules/**","!**/vendor/**"],"modulePathIgnorePatterns":["\\/\\.","\\.history"]},"main":"index.js","babel":{"env":{"test":{"plugins":["babel-plugin-transform-es2015-modules-commonjs","babel-plugin-transform-flow-strip-types","babel-plugin-transform-class-properties",["babel-plugin-transform-object-rest-spread",{"useBuiltIns":true}]],"presets":["jest"]}}},"gitHead":"fd8927bb8ef2140df843401e9e425413bc1151ce","scripts":{"flow":"flow","lint":"eslint \"source/**/*.js\"","test":"jest --colors","build":"rollup --config","start":"npm run build","server":"rollup --config rollup.serve.js","precommit":"npm run build && npm run test && npm run lint-staged","test:watch":"jest --colors --watch","build:watch":"rollup --config --watch \"./source\"","lint-staged":"lint-staged"},"_npmUser":{"name":"actualwave","email":"burdiuz@gmail.com"},"repository":{"url":"git+https://github.com/burdiuz/js-worker-event-dispatcher.git","type":"git"},"_npmVersion":"6.9.0","description":"WorkerDispatcher is a JavaScript class that adds events layer to Worker API","directories":{},"lint-staged":{"source/**/*.js":["prettier --write","eslint --fix","git add"]},"_nodeVersion":"10.16.0","dependencies":{"@actualwave/event-dispatcher":"^1.2.2","@actualwave/messageport-dispatcher":"^1.1.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","husky":"^3.0.0","eslint":"^6.0.1","chokidar":"^3.0.2","flow-bin":"^0.102.0","prettier":"^1.18.2","@babel/core":"^7.5.4","lint-staged":"^9.2.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.6","babel-preset-jest":"^24.6.0","rollup-plugin-json":"^4.0.0","eslint-plugin-react":"^7.14.2","rollup-plugin-babel":"^4.3.3","rollup-plugin-serve":"^1.0.1","eslint-config-airbnb":"^17.1.1","eslint-plugin-import":"^2.18.0","rollup-plugin-terser":"^5.1.1","babel-plugin-istanbul":"^5.1.4","eslint-plugin-jsx-a11y":"^6.2.3","rollup-plugin-commonjs":"^10.0.1","rollup-plugin-livereload":"^1.0.1","rollup-plugin-node-resolve":"^5.2.0","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-syntax-object-rest-spread":"^7.2.0","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-flow-strip-types":"^6.22.0","@babel/plugin-transform-flow-strip-types":"^7.4.4","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-es2015-modules-commonjs":"^6.26.2"},"_npmOperationalInternal":{"tmp":"tmp/worker-dispatcher_1.3.0_1563444335494_0.19497641507409247","host":"s3://npm-registry-packages"}},"1.3.1":{"name":"@actualwave/worker-dispatcher","version":"1.3.1","keywords":["events","webworker","worker","fire","handle","listener","dispatcher"],"author":{"url":"http://actualwave.com/","name":"Oleg Galaburda","email":"burdiuz@gmail.com"},"license":"MIT","_id":"@actualwave/worker-dispatcher@1.3.1","maintainers":[{"name":"actualwave","email":"burdiuz@gmail.com"}],"homepage":"https://github.com/burdiuz/js-worker-event-dispatcher","bugs":{"url":"https://github.com/burdiuz/js-worker-event-dispatcher/issues","email":"burdiuz@gmail.com"},"dist":{"shasum":"b2be3007ea6478f969687820579df130133019f2","tarball":"https://registry.npmjs.org/@actualwave/worker-dispatcher/-/worker-dispatcher-1.3.1.tgz","fileCount":16,"integrity":"sha512-AZ/xh/+7eX+5GteSxo7HPdwHpnCDHt8Sh+08ZvgPA2UA6WQ/0wR/QA9EINNr/iMwYBAqZs35Wv2JKQ2npUfjSA==","signatures":[{"sig":"MEYCIQCcL3AlnqPUnaclnryVSvxZgQ6Gj4rsW7eOyC9ZJPd2IgIhAJJWmRsWY1Y3dnnHqHywMyOU8eMbXacTkqkMpZ0BNi/W","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":259365,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSCQ8CRA9TVsSAnZWagAA7EMP/id9NYqIZB3K1Y6Rq7hr\nxg99PJbypycrg7+pUzvWWrCfoK1NX4BZN9qVwqofdQvChhQmUgrFa0LVYmbR\nflDHFIEDYfjr6iccNq8InxjK0pdyHaS/rapnrwgk8kfGhMZZGIEDw3dlMtzk\n/BRkvxC/qCEckH/R5u6hunb1uWT30QghJD1G0+NIFaMsQnuAjWLw46BFO6px\nxMoBxaw1cK+bdZhFam14vBiJdnhc4srhZkS67hm1jhrov0aTrgFYwTroNgNR\noNAslU0HVIieHax2Zsm/32ma37XZwkFEZ8tA9jwKwax+9zxED1TgmSy+vC9l\nbSsg3pIaqF7tJ23H0uFfHkguhDf0FKF1Qp6FN3DsbfFWjs9g2FrLkE9RoWJm\nYt9o5XHNOHqQhJ2KCoRy2GySHvPzSpsIyObzaVCcnD9KV4fdJsvEKASlg4TV\nn+/O4F6l1ooru75wdoQXcJjrYWXdoBl2FKynabXgSTC70wFwUeZNXY/cqa9x\nIK2JL1r0/7mFobBF5Vdiz9fbzzOLRU6MKVGSCPewibm6LWydjan7JjBO8MnI\nfBnUYTQjPFKMrFTmET7sZClOxg91KvUn3jP6HRAmxlsf67RTgpHETJLDmY7Z\nVBM6lrSvMAR0+yvctKUHbt2Iqx91WJUz4/INTD6xAxy6dyD4a+rErqMfI8Ih\nRroQ\r\n=i/Ph\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"collectCoverage":true,"coverageDirectory":"coverage","coverageReporters":["json","lcov"],"collectCoverageFrom":["source/**/*.js","!**/node_modules/**","!**/vendor/**"],"modulePathIgnorePatterns":["\\/\\.","\\.history"]},"main":"index.js","babel":{"env":{"test":{"plugins":["babel-plugin-transform-es2015-modules-commonjs","babel-plugin-transform-flow-strip-types","babel-plugin-transform-class-properties",["babel-plugin-transform-object-rest-spread",{"useBuiltIns":true}]],"presets":["jest"]}}},"gitHead":"fd8927bb8ef2140df843401e9e425413bc1151ce","scripts":{"flow":"flow","lint":"eslint \"source/**/*.js\"","test":"jest --colors","build":"rollup --config","start":"npm run build","server":"rollup --config rollup.serve.js","precommit":"npm run build && npm run test && npm run lint-staged","test:watch":"jest --colors --watch","build:watch":"rollup --config --watch \"./source\"","lint-staged":"lint-staged"},"_npmUser":{"name":"actualwave","email":"burdiuz@gmail.com"},"repository":{"url":"git+https://github.com/burdiuz/js-worker-event-dispatcher.git","type":"git"},"_npmVersion":"6.9.0","description":"WorkerDispatcher is a JavaScript class that adds events layer to Worker API","directories":{},"lint-staged":{"source/**/*.js":["prettier --write","eslint --fix","git add"]},"_nodeVersion":"10.16.0","dependencies":{"@actualwave/event-dispatcher":"^1.2.2","@actualwave/messageport-dispatcher":"^1.1.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","husky":"^3.0.0","eslint":"^6.0.1","chokidar":"^3.0.2","flow-bin":"^0.102.0","prettier":"^1.18.2","@babel/core":"^7.5.4","lint-staged":"^9.2.0","babel-eslint":"^10.0.2","babel-loader":"^8.0.6","babel-preset-jest":"^24.6.0","rollup-plugin-json":"^4.0.0","eslint-plugin-react":"^7.14.2","rollup-plugin-babel":"^4.3.3","rollup-plugin-serve":"^1.0.1","eslint-config-airbnb":"^17.1.1","eslint-plugin-import":"^2.18.0","rollup-plugin-terser":"^5.1.1","babel-plugin-istanbul":"^5.1.4","eslint-plugin-jsx-a11y":"^6.2.3","rollup-plugin-commonjs":"^10.0.1","rollup-plugin-livereload":"^1.0.1","rollup-plugin-node-resolve":"^5.2.0","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-syntax-object-rest-spread":"^7.2.0","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-flow-strip-types":"^6.22.0","@babel/plugin-transform-flow-strip-types":"^7.4.4","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-es2015-modules-commonjs":"^6.26.2"},"_npmOperationalInternal":{"tmp":"tmp/worker-dispatcher_1.3.1_1565008956280_0.32216108953560374","host":"s3://npm-registry-packages"}},"1.3.3":{"name":"@actualwave/worker-dispatcher","description":"WorkerDispatcher is a JavaScript class that adds events layer to Worker API","version":"1.3.3","main":"index.js","types":"types/index.d.ts","keywords":["events","webworker","worker","fire","handle","listener","dispatcher"],"homepage":"https://github.com/burdiuz/js-worker-event-dispatcher","bugs":{"url":"https://github.com/burdiuz/js-worker-event-dispatcher/issues","email":"burdiuz@gmail.com"},"license":"MIT","author":{"name":"Oleg Galaburda","email":"burdiuz@gmail.com","url":"http://actualwave.com/"},"repository":{"type":"git","url":"git+https://github.com/burdiuz/js-worker-event-dispatcher.git"},"dependencies":{"@actualwave/event-dispatcher":"1.3.3","@actualwave/messageport-dispatcher":"1.1.10"},"devDependencies":{"@jest/globals":"^29","@rollup/plugin-commonjs":"^29","@rollup/plugin-node-resolve":"^16","@rollup/plugin-terser":"^0.4","@rollup/plugin-typescript":"^12","@typescript-eslint/eslint-plugin":"^8","@typescript-eslint/parser":"^8","chokidar":"^3","eslint":"^8","husky":"^9","jest":"^29","lint-staged":"^15","prettier":"^3","rollup":"^4","rollup-plugin-copy":"^3.5.0","rollup-plugin-livereload":"^2","rollup-plugin-serve":"^2","ts-jest":"^29","tslib":"^2","typescript":"^5"},"lint-staged":{"src/**/*.ts":["prettier --write","eslint --fix"]},"jest":{"transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"testEnvironment":"node","testMatch":["**/*.spec.ts"],"collectCoverage":true,"coverageReporters":["json","lcov"],"coverageDirectory":"coverage","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!**/node_modules/**"],"modulePathIgnorePatterns":["\\/\\.","\\.history"]},"scripts":{"start":"npm run build","build":"rollup --config && npm run build:types","build:types":"tsc --project tsconfig.types.json","build:watch":"rollup --config --watch","lint":"eslint \"src/**/*.ts\"","typecheck":"tsc --noEmit","serve":"rollup --config rollup.serve.js","test":"jest --colors","test:watch":"jest --colors --watch","prepare":"husky","lint-staged":"lint-staged","precommit":"npm run build && npm run test && npm run lint-staged"},"_id":"@actualwave/worker-dispatcher@1.3.3","gitHead":"6ff1ece6fb7822637b4ffda5520270b734dd1fce","_nodeVersion":"24.6.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-ZMx2GRFrXLfC/w9j80byfReF9RQfmytu483YROFpFCRtmXpL0rqHeIarE1SxbVz3gGaGdkLvPxdQN7tQbybGyw==","shasum":"997cbda9107383b3075e39c7d38ff17bb45eed4f","tarball":"https://registry.npmjs.org/@actualwave/worker-dispatcher/-/worker-dispatcher-1.3.3.tgz","fileCount":23,"unpackedSize":217756,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBBvTQcPt9DWObswkC8N0VOok/i7QBoD7zv4lanhRhq/AiEAocc3h0snZtH+TrwZfZpSH0Q4W1EID002C/eIrX8srws="}]},"_npmUser":{"name":"actualwave","email":"burdiuz@gmail.com"},"directories":{},"maintainers":[{"name":"actualwave","email":"burdiuz@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/worker-dispatcher_1.3.3_1777845031314_0.04882493101650409"},"_hasShrinkwrap":false}},"time":{"created":"2018-04-08T11:18:52.601Z","modified":"2026-05-03T21:50:31.557Z","1.1.8":"2018-04-08T11:18:52.798Z","1.2.0":"2018-10-16T17:01:40.710Z","1.3.0":"2019-07-18T10:05:35.656Z","1.3.1":"2019-08-05T12:42:36.488Z","1.3.3":"2026-05-03T21:50:31.457Z"},"bugs":{"url":"https://github.com/burdiuz/js-worker-event-dispatcher/issues","email":"burdiuz@gmail.com"},"author":{"name":"Oleg Galaburda","email":"burdiuz@gmail.com","url":"http://actualwave.com/"},"license":"MIT","homepage":"https://github.com/burdiuz/js-worker-event-dispatcher","keywords":["events","webworker","worker","fire","handle","listener","dispatcher"],"repository":{"type":"git","url":"git+https://github.com/burdiuz/js-worker-event-dispatcher.git"},"description":"WorkerDispatcher is a JavaScript class that adds events layer to Worker API","maintainers":[{"name":"actualwave","email":"burdiuz@gmail.com"}],"readme":"# @actualwave/worker-dispatcher\n\n[![npm](https://img.shields.io/npm/v/@actualwave/worker-dispatcher)](https://www.npmjs.com/package/@actualwave/worker-dispatcher)\n\nNamed-event communication layer for Dedicated Workers, Shared Workers, and Service Workers. Built on top of [@actualwave/messageport-dispatcher](https://github.com/burdiuz/js-messageport-event-dispatcher), it replaces raw `postMessage`/`message` boilerplate with typed named events on both sides of every worker channel.\n\n## Installation\n\n```bash\nnpm install @actualwave/worker-dispatcher\n# or\nyarn add @actualwave/worker-dispatcher\n```\n\n## Core concepts\n\n- **`DedicatedWorkerDispatcher`** — wraps a `Worker` on the main thread (or `self` inside the worker).\n- **`SharedWorkerDispatcher`** — wraps a `SharedWorker` on the main thread; handles the `MessagePort` internally.\n- **`ServiceWorkerDispatcher`** — wraps a `MessageChannel` to the active Service Worker; auto-recovers when the worker restarts.\n- **Server dispatchers** (`SharedServerDispatcher`, `ServiceServerDispatcher`) — used inside the worker script to receive connections and events.\n- **Client dispatchers** (`SharedClientDispatcher`, `ServiceClientDispatcher`) — one instance per connected client, created automatically on each new connection.\n- **`WorkerEvent`** — extends `Event`; carries `nativeEvent`, `client`, `type`, and `data`.\n- **`WorkerType`** — string enum of all dispatcher type identifiers.\n\n## Usage\n\n### 1. Dedicated Worker\n\n**Main thread:**\n\n```typescript\nimport { DedicatedWorkerDispatcher } from '@actualwave/worker-dispatcher';\n\nconst dispatcher = new DedicatedWorkerDispatcher('/workers/worker.js');\n\ndispatcher.addEventListener('result', (event) => {\n  console.log('Worker result:', event.data);\n});\n\ndispatcher.dispatchEvent('compute', { input: [1, 2, 3] });\n```\n\n**Inside the worker (`worker.js`):**\n\n```typescript\nimport { createForSelf } from '@actualwave/worker-dispatcher';\n\nconst dispatcher = createForSelf();\n\ndispatcher.addEventListener('compute', (event) => {\n  dispatcher.dispatchEvent('result', { output: (event.data as any).input.map(Number) });\n});\n```\n\n### 2. Shared Worker\n\n**Main thread:**\n\n```typescript\nimport { SharedWorkerDispatcher } from '@actualwave/worker-dispatcher';\n\nconst dispatcher = new SharedWorkerDispatcher('/workers/shared.js');\n// start() is called automatically in the constructor\n\ndispatcher.addEventListener('broadcast', (event) => {\n  console.log('Broadcast from worker:', event.data);\n});\n\ndispatcher.dispatchEvent('subscribe', { topic: 'news' });\n```\n\n**Inside the shared worker (`shared.js`):**\n\n```typescript\nimport { createForSelf } from '@actualwave/worker-dispatcher';\nimport WorkerEvent from '@actualwave/worker-dispatcher/WorkerEvent';\n\nconst server = createForSelf(); // returns SharedServerDispatcher\n\nserver.addEventListener(WorkerEvent.CONNECT, (event) => {\n  const client = event.client; // SharedClientDispatcher\n  client.start();\n\n  client.addEventListener('subscribe', (e) => {\n    console.log('Client subscribed to', (e.data as any).topic);\n    client.dispatchEvent('broadcast', { message: 'Welcome!' });\n  });\n});\n```\n\nClose a client when done:\n\n```typescript\nclient.close();\n```\n\n### 3. Service Worker\n\n**Main thread (registers and communicates with a Service Worker):**\n\n```typescript\nimport { ServiceWorkerDispatcher } from '@actualwave/worker-dispatcher';\n\nconst dispatcher = new ServiceWorkerDispatcher();\n\ndispatcher.onReady((registration) => {\n  console.log('Service worker ready');\n  dispatcher.dispatchEvent('init', { config: { offline: true } });\n});\n\ndispatcher.addEventListener('push-received', (event) => {\n  console.log('Push data:', event.data);\n});\n```\n\n**Inside the service worker (`sw.js`):**\n\n```typescript\nimport { ServiceServerDispatcher } from '@actualwave/worker-dispatcher';\nimport WorkerEvent from '@actualwave/worker-dispatcher/WorkerEvent';\n\nconst server = new ServiceServerDispatcher();\n\nserver.addEventListener('init', (event) => {\n  console.log('Config received:', event.data);\n  const client = event.client; // ServiceClientDispatcher\n  if (client) {\n    client.dispatchEvent('ack', { ok: true });\n  }\n});\n\n// Lifecycle events are wired automatically\nserver.addEventListener(WorkerEvent.INSTALL, (e) => {\n  (e.nativeEvent as ExtendableEvent).waitUntil(caches.open('v1'));\n});\n```\n\n### 4. Factory functions\n\n```typescript\nimport {\n  create,\n  createForSelf,\n  createForDedicatedWorker,\n  createForSharedWorker,\n  createForServiceWorker,\n  WorkerType,\n} from '@actualwave/worker-dispatcher';\n\n// auto-detect from a target object\nconst d1 = create(worker, WorkerType.DEDICATED_WORKER);\nconst d2 = create(sharedWorker, WorkerType.SHARED_WORKER);\n\n// inside a worker script — auto-detects context\nconst dispatcher = createForSelf();\n\n// explicit per-type helpers\nconst dw = createForDedicatedWorker('/worker.js');\nconst sw = createForSharedWorker('/shared.js');\nconst svc = createForServiceWorker();\n```\n\n### 5. Event preprocessors\n\nTransform every incoming or outgoing event:\n\n```typescript\nimport type { EventProcessor } from '@actualwave/event-dispatcher';\n\nconst stamp: EventProcessor = (event) => ({\n  ...event,\n  data: { ...(event.data as object), ts: Date.now() },\n});\n\nconst dispatcher = new DedicatedWorkerDispatcher(\n  '/worker.js',\n  stamp,   // receiverEventPreprocessor\n  stamp,   // senderEventPreprocessor\n);\n```\n\n## API reference\n\n### `DedicatedWorkerDispatcher`\n\n```typescript\nnew DedicatedWorkerDispatcher(\n  worker?: Worker | string,\n  receiverEventPreprocessor?: EventProcessor | null,\n  senderEventPreprocessor?: EventProcessor | null,\n)\n```\n\n| Member | Description |\n|---|---|\n| `addEventListener(type, listener, priority?)` | Listen for events from the worker. |\n| `hasEventListener(type)` | Check if listener exists. |\n| `removeEventListener(type, listener)` | Remove a listener. |\n| `removeAllEventListeners(type)` | Remove all listeners for a type. |\n| `dispatchEvent(type, data?, transferList?)` | Send an event to the worker. |\n| `receiver` | `IEventDispatcher` for incoming events. |\n| `sender` | `IEventDispatcher` for outgoing echo. |\n| `target` | Underlying `Worker` or `WorkerLike`. |\n| `terminate()` | Terminate the worker and clean up listeners. |\n\n### `SharedWorkerDispatcher`\n\n```typescript\nnew SharedWorkerDispatcher(\n  target: SharedWorker | string,\n  name?: string,\n  receiverEventPreprocessor?: EventProcessor | null,\n  senderEventPreprocessor?: EventProcessor | null,\n)\n```\n\n| Member | Description |\n|---|---|\n| `start()` | Start the port (called automatically). |\n| `close()` | Close the port and clean up listeners. |\n| `worker` | The underlying `SharedWorker` instance. |\n| *(inherits all dispatcher methods)* | |\n\n### `ServiceWorkerDispatcher`\n\n```typescript\nnew ServiceWorkerDispatcher(\n  receiverEventPreprocessor?: EventProcessor | null,\n  senderEventPreprocessor?: EventProcessor | null,\n)\n```\n\n| Member | Description |\n|---|---|\n| `start()` | Start the internal `MessageChannel` port. |\n| `close()` | Close the port and remove error listeners. |\n| `ready` | `Promise<ServiceWorkerRegistration>` |\n| `onReady(handler)` | Calls handler when the SW registration resolves. Returns `Promise<void>`. |\n| *(inherits all dispatcher methods)* | |\n\nAuto-recovers the `MessageChannel` when the active Service Worker changes (e.g., after an update).\n\n### `SharedServerDispatcher` (inside a Shared Worker)\n\n```typescript\nnew SharedServerDispatcher(\n  target?: EventTarget,      // defaults to self\n  receiverEventPreprocessor?: EventProcessor,\n  clientReceiverEventPreprocessor?: EventProcessor,\n  clientSenderEventPreprocessor?: EventProcessor,\n)\n```\n\n| Member | Description |\n|---|---|\n| `addEventListener(type, listener)` | Listen for connect and worker-lifecycle events. |\n| `destroy()` | Remove all native listeners from the target. |\n| `receiver` | `IEventDispatcher` for dispatched events. |\n\nFires `WorkerEvent.CONNECT` whenever a new client connects. The event's `.client` is a `SharedClientDispatcher`.\n\n### `ServiceServerDispatcher` (inside a Service Worker)\n\n```typescript\nnew ServiceServerDispatcher(\n  target?: EventTarget,      // defaults to self\n  receiverEventPreprocessor?: EventProcessor,\n  clientReceiverEventPreprocessor?: EventProcessor,\n  clientSenderEventPreprocessor?: EventProcessor,\n)\n```\n\nAutomatically registers listeners for `error`, `messageerror`, `install`, `activate`, `fetch`, `sync`, and `push` on `target`. The event's `.client` is a `ServiceClientDispatcher` when a port was transferred.\n\n| Member | Description |\n|---|---|\n| `destroy()` | Remove all native listeners from the target. |\n\n### `SharedClientDispatcher` / `ServiceClientDispatcher`\n\nOne instance per client connection. Returned via `event.client` on connect/message events.\n\n| Member | Description |\n|---|---|\n| `start()` | Start the `MessagePort`. |\n| `close()` | Close the `MessagePort`. |\n| `dispatchEvent(type, data?)` | Send an event to this specific client. |\n| *(inherits all dispatcher methods)* | |\n\n### `WorkerEvent`\n\nStatic event type constants (all prefixed `worker:`):\n\n| Constant | Value | When fired |\n|---|---|---|\n| `WorkerEvent.CONNECT` | `'worker:connect'` | New client connected (Shared Worker) |\n| `WorkerEvent.MESSAGE` | `'worker:message'` | Incoming message |\n| `WorkerEvent.ERROR` | `'worker:error'` | Worker error |\n| `WorkerEvent.MESSAGEERROR` | `'worker:messageerror'` | Message deserialization error |\n| `WorkerEvent.LANGUAGECHANGE` | `'worker:languagechange'` | Language changed |\n| `WorkerEvent.ONLINE` | `'worker:online'` | Network online |\n| `WorkerEvent.OFFLINE` | `'worker:offline'` | Network offline |\n| `WorkerEvent.INSTALL` | `'worker:install'` | SW install event |\n| `WorkerEvent.ACTIVATE` | `'worker:activate'` | SW activate event |\n| `WorkerEvent.FETCH` | `'worker:fetch'` | SW fetch event |\n| `WorkerEvent.SYNC` | `'worker:sync'` | SW background sync |\n| `WorkerEvent.PUSH` | `'worker:push'` | SW push notification |\n\nInstance properties:\n\n| Property | Type | Description |\n|---|---|---|\n| `type` | `string` | The worker-prefixed event type |\n| `data` | `unknown` | Event payload |\n| `nativeEvent` | `unknown` | The original native DOM event |\n| `client` | `unknown` | Client dispatcher, or `null` |\n\n### `WorkerType`\n\nString constants used with `create()`:\n\n| Constant | Value |\n|---|---|\n| `WorkerType.DEDICATED_WORKER` | `'dedicated'` |\n| `WorkerType.SHARED_WORKER` | `'shared'` |\n| `WorkerType.SERVICE_WORKER` | `'service'` |\n\n### `NativeEventType`\n\nRaw DOM event type strings: `'connect'`, `'message'`, `'error'`, `'messageerror'`, `'install'`, `'activate'`, `'fetch'`, `'sync'`, `'push'`, `'languagechange'`, `'online'`, `'offline'`.\n\n### Utility: `dispatchWorkerEvent / dispatchWorkerEvents / dispatchWorkerErrorEvent`\n\nLower-level helpers that register native event listeners on an `EventTarget` and forward translated `WorkerEvent`s to an `IEventDispatcher`. Each returns a `() => void` cleanup function.\n\n```typescript\nimport { dispatchWorkerErrorEvent } from '@actualwave/worker-dispatcher/WorkerEvent';\n\nconst cleanup = dispatchWorkerErrorEvent(target, myDispatcher.receiver);\n// later:\ncleanup();\n```\n\n## TypeScript types\n\n```typescript\nimport type { WorkerTypeValue } from '@actualwave/worker-dispatcher/WorkerType';\nimport type { NativeEventHandler } from '@actualwave/worker-dispatcher/WorkerEvent';\nimport type { WorkerLike } from '@actualwave/worker-dispatcher/AbstractDispatcher';\n\nimport type {\n  EventObject,\n  IEventDispatcher,\n  EventProcessor,\n  EventListener,\n} from '@actualwave/event-dispatcher';\n```\n\n## Common edge cases\n\n- **Service Worker recovery**: `ServiceWorkerDispatcher` automatically recreates the `MessageChannel` and retransmits pending `port2` when the active worker changes. The first `dispatchEvent()` after construction always transfers `port2`.\n- **`destroy()` on server dispatchers**: Call `destroy()` when tearing down a `SharedServerDispatcher` or `ServiceServerDispatcher` to remove all native `addEventListener` registrations from `self`.\n- **`start()` on `SharedWorkerDispatcher`**: `start()` is called automatically in the constructor; calling it again is a no-op in most environments but safe.\n- **`WorkerEvent.MESSAGEERROR` value**: The correct value is `'worker:messageerror'`, not `'messageerror'`. Use the constant, not the string literal.\n- **`createForSelf()` auto-detection**: Checks `typeof self.postMessage === 'function'` (Dedicated Worker) then checks `self.registration.scope` (Service Worker), then falls back to `SharedServerDispatcher`.\n- **Preprocessors apply on both sides**: Pass the same preprocessor to receiver and sender if you want symmetric transformation; they are independent by default.\n","readmeFilename":"README.md"}