{"_id":"worker","_rev":"26-22dea04c1ab103ac106cf1221289d59e","name":"worker","dist-tags":{"latest":"0.4.0"},"versions":{"0.2.1":{"name":"worker","version":"0.2.1","directories":{"lib":"./lib","example":"./example","test":"./test"},"main":"./lib/worker","_id":"worker@0.2.1","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"https://registry.npmjs.org/worker/-/worker-0.2.1.tgz","shasum":"4124dddc1ffacd1cd69c1a7ade51dc9eae0f41cd","integrity":"sha512-odoTh6MPEnIFpMFUVFAJVM3G59Xpm+GUViTdud17Z4i/P+pPRE+g71No7PA6qUjwU79YlaWKlBsXHVFbAgrqDw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICuFRimHekn95UV1wRxrxyMe3KIrSb9URUw1qaSFviOQAiEA4+B1GuVheZuUXcclpkOEC9C91bOWYdO5EvShtqJdTyM="}]}},"0.3.0":{"name":"worker","version":"0.3.0","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./dist/main/node/locals.js":false},"files":["dist"],"main":"dist/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{},"devDependencies":{"browserify":"^15.0.0","chai":"^4.1.2","gulp":"^3.9.1","gulp-beautify":"^2.0.1","gulp-debug":"^3.1.0","gulp-istanbul":"^1.1.2","gulp-log":"0.0.0","gulp-mocha":"^4.3.1","gulp-plumber":"^1.1.0","gulp-rename":"^1.2.2","gulp-soda":"^0.5.2","gulp-sourcemaps":"^2.6.3","gulp-tap":"^1.0.1","gulp-util":"^3.0.8","jmacs":"0.0.3","vinyl-buffer":"^1.0.1","vinyl-source-stream":"^2.0.0"},"dependencies":{"shmmap":"^0.1.3"},"gitHead":"a099802aaf749087a6a24ec164446207a872b834","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.3.0","_npmVersion":"5.5.1","_nodeVersion":"8.7.0","_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"dist":{"integrity":"sha512-rAwJkJUUhvlXCmi9gt9SdIxxBSSHjnCrNyqpX8L6ZA3QAYkm1fq3XeDQQpzJWI+BEKSgDIKwf1Q+L5tee0/i1g==","shasum":"743e078d4304b011ba9702112d279f6923579de5","tarball":"https://registry.npmjs.org/worker/-/worker-0.3.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFmFNNDCM5ICNMr+HQrgUiNj1Hj0pxEaZRuDwLsIHzOdAiEA45/hDboGdOpDwF3V33fnz2992vvihevh7/RJUSq0SbQ="}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker-0.3.0.tgz_1515192141293_0.21774131851270795"},"directories":{}},"0.3.1":{"name":"worker","version":"0.3.1","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./dist/main/node/locals.js":false},"files":["dist"],"main":"dist/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{},"devDependencies":{"browserify":"^15.0.0","chai":"^4.1.2","gulp":"^3.9.1","gulp-beautify":"^2.0.1","gulp-debug":"^3.1.0","gulp-istanbul":"^1.1.2","gulp-log":"0.0.0","gulp-mocha":"^4.3.1","gulp-plumber":"^1.1.0","gulp-rename":"^1.2.2","gulp-soda":"^0.5.2","gulp-sourcemaps":"^2.6.3","gulp-tap":"^1.0.1","gulp-util":"^3.0.8","jmacs":"0.0.3","vinyl-buffer":"^1.0.1","vinyl-source-stream":"^2.0.0"},"dependencies":{"shmmap":"^0.1.3"},"gitHead":"d5fbbf593ccd92fddcc291c7e79de3082a1861e3","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.3.1","_npmVersion":"5.5.1","_nodeVersion":"8.7.0","_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"dist":{"integrity":"sha512-gICc0X7J+7a+sJDW9rOR/eOIZdX6TuOXG/mqeiDvJSvmO6yR/gIa5pUucJa6x03evSqziwSkNBMNTvlpBTX4wQ==","shasum":"2dce832a15311288579ee40b3166ac3d1aa421a6","tarball":"https://registry.npmjs.org/worker/-/worker-0.3.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC569Na0CkBOJWOzIH9LjTan60lV+4dCzGJCwsFAwdnJwIgG9FGsbwd3Bl6goTGyWits2RWJRU8MaSGb16TnKhwyuE="}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker-0.3.1.tgz_1515569673214_0.5006837809924036"},"directories":{}},"0.3.2":{"name":"worker","version":"0.3.2","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./dist/main/node/locals.js":false},"files":["dist"],"main":"dist/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{},"devDependencies":{"browserify":"^15.0.0","chai":"^4.1.2","gulp":"^3.9.1","gulp-beautify":"^2.0.1","gulp-debug":"^3.1.0","gulp-istanbul":"^1.1.2","gulp-log":"0.0.0","gulp-mocha":"^4.3.1","gulp-plumber":"^1.1.0","gulp-rename":"^1.2.2","gulp-soda":"^0.5.2","gulp-sourcemaps":"^2.6.3","gulp-tap":"^1.0.1","gulp-util":"^3.0.8","jmacs":"0.0.3","vinyl-buffer":"^1.0.1","vinyl-source-stream":"^2.0.0"},"dependencies":{"colors":"^1.1.2","shmmap":"^0.1.3","uuid":"^3.2.1","uuidv5":"^1.0.0"},"gitHead":"bc9a68d4deb541ae5976bcb0f171db30073df59c","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.3.2","_npmVersion":"5.6.0","_nodeVersion":"8.7.0","_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"dist":{"integrity":"sha512-otc4AdTa9jJ7Xg72HX3poKqu2j1402w8lhfg4pPGuYL4KMdb40VvGrZt7MslVwqw32TSmoYZdTcHg8iPNnbOcg==","shasum":"0e7aa27e7b2b99b7f2dd558a8a31498aff067aee","tarball":"https://registry.npmjs.org/worker/-/worker-0.3.2.tgz","fileCount":42,"unpackedSize":175891,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIExuQ2/Pv9s7S+KUsyOUt3PrqQssnLogy6UuXNEzx4daAiEAvS8mSUeL6d8oogEeghCQJC6OUwZRLbFAqSwd7vLND+w="}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker_0.3.2_1518820675376_0.07046209919170754"},"_hasShrinkwrap":false},"0.3.3":{"name":"worker","version":"0.3.3","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./dist/main/node/locals.js":false},"files":["dist"],"main":"dist/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{},"devDependencies":{"browserify":"^15.0.0","chai":"^4.1.2","gulp":"^3.9.1","gulp-beautify":"^2.0.1","gulp-debug":"^3.1.0","gulp-istanbul":"^1.1.2","gulp-log":"0.0.0","gulp-mocha":"^4.3.1","gulp-plumber":"^1.1.0","gulp-rename":"^1.2.2","gulp-soda":"^0.5.2","gulp-sourcemaps":"^2.6.3","gulp-tap":"^1.0.1","gulp-util":"^3.0.8","jmacs":"0.0.3","vinyl-buffer":"^1.0.1","vinyl-source-stream":"^2.0.0"},"dependencies":{"colors":"^1.1.2","shmmap":"^0.1.3","uuid":"^3.2.1","uuidv5":"^1.0.0"},"gitHead":"ecc110756b2dfa1a141eab8f89af234eb7394f0f","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.3.3","_npmVersion":"5.6.0","_nodeVersion":"8.7.0","_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"dist":{"integrity":"sha512-LaKGJZu1/4L0oRMP1gWA4UJJXIdWsEgHxe/i21xNFzsnBKUzjj/f1mphNH73+J0Y9BPj/7soNgQuu3k/2FiIlQ==","shasum":"d4f1a6ed69ea718e3f3eccfda2906be759b9761b","tarball":"https://registry.npmjs.org/worker/-/worker-0.3.3.tgz","fileCount":42,"unpackedSize":175903,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH5NG7dWQ0/GD3RrOWbcvpNNeMu0pq5czjfm/w05DF1qAiEA1j8YXfrljeVusvG40sA0RJwbZDaxsu2Jt5jm2HBubH0="}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker_0.3.3_1518823776134_0.2440698101770551"},"_hasShrinkwrap":false},"0.3.4":{"name":"worker","version":"0.3.4","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./dist/main/node/locals.js":false},"files":["dist"],"main":"dist/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{},"devDependencies":{"browserify":"^15.0.0","chai":"^4.1.2","gulp":"^3.9.1","gulp-beautify":"^2.0.1","gulp-debug":"^3.1.0","gulp-istanbul":"^1.1.2","gulp-log":"0.0.0","gulp-mocha":"^4.3.1","gulp-plumber":"^1.1.0","gulp-rename":"^1.2.2","gulp-soda":"^0.5.2","gulp-sourcemaps":"^2.6.3","gulp-tap":"^1.0.1","gulp-util":"^3.0.8","jmacs":"0.0.3","vinyl-buffer":"^1.0.1","vinyl-source-stream":"^2.0.0"},"dependencies":{"colors":"^1.1.2","shmmap":"^0.2.0","uuid":"^3.2.1","uuidv5":"^1.0.0"},"gitHead":"e4c748db28d6e8cbf6d4afe901429c085d1c55ae","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.3.4","_npmVersion":"5.6.0","_nodeVersion":"8.7.0","_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"dist":{"integrity":"sha512-fcyNV+PWGq+PMBJExZF/Vzvm3pwYZBWCyrBnogVEpfhalz1g4YdizsgTPK3XHlt6cclTe4c03jwSb3t/paFuZg==","shasum":"d7e2f564e2b6c9e249ade287adf8643ff53eba8c","tarball":"https://registry.npmjs.org/worker/-/worker-0.3.4.tgz","fileCount":42,"unpackedSize":175903,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE8S+QnK7M9xmKpMynHpERWlXuH1/1SjxbW+JLrx6VS/AiEAhDFAeRuNFa8oGm6b4CYKsvQPzPx1mYa6vw8BeA/JL2A="}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker_0.3.4_1518824505955_0.9485000841382023"},"_hasShrinkwrap":false},"0.3.5":{"name":"worker","version":"0.3.5","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./dist/main/node/locals.js":false},"files":["dist"],"main":"dist/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{},"devDependencies":{"browserify":"^15.0.0","chai":"^4.1.2","gulp":"^3.9.1","gulp-beautify":"^2.0.1","gulp-debug":"^3.1.0","gulp-istanbul":"^1.1.2","gulp-log":"0.0.0","gulp-mocha":"^4.3.1","gulp-plumber":"^1.1.0","gulp-rename":"^1.2.2","gulp-soda":"^0.5.2","gulp-sourcemaps":"^2.6.3","gulp-tap":"^1.0.1","gulp-util":"^3.0.8","jmacs":"0.0.3","vinyl-buffer":"^1.0.1","vinyl-source-stream":"^2.0.0"},"dependencies":{"colors":"^1.1.2","shmmap":"^0.2.0","uuid":"^3.2.1","uuidv5":"^1.0.0"},"gitHead":"5e530dbd30656a2a0ce228a1fa9d0f376d7d8190","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.3.5","_npmVersion":"5.6.0","_nodeVersion":"8.7.0","_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"dist":{"integrity":"sha512-eY8ZxTlQj6Cmj5KP9yD2UKsJQBh6RWvhYfryqVPfCz4FEpCbzJr1DsibxKx6Dn9sojexCe3B3ydk1xH0wogDyg==","shasum":"3a3eff42eae7ccfc69b6aee96158cf79ab890f7d","tarball":"https://registry.npmjs.org/worker/-/worker-0.3.5.tgz","fileCount":42,"unpackedSize":176581,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKogOsLEYlFspxETgU8iOS09uvM46vv00uhQTcHUGcSwIgYyWk9xb9tWHz1V8SQB5a8qOP8VyWAx5izdpAqjyqIVQ="}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker_0.3.5_1518924532478_0.7547262620887027"},"_hasShrinkwrap":false},"0.3.7":{"name":"worker","version":"0.3.7","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./build/main/node/locals.js":false},"files":["build"],"main":"build/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{"build":"mk","test":"mk test/main/bundle.js && mocha test/main/module.js"},"devDependencies":{"browserify":"^16.2.0","chai":"^4.1.2","jmacs":"1.0.4","mkjs-cli":"0.0.9","mocha":"^5.1.1"},"dependencies":{"colors":"^1.2.1","shmmap":"^0.2.0","uuid":"^3.2.1","uuidv5":"^1.0.0"},"gitHead":"2202930b7099736189960393830f3e445321cfe4","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.3.7","_npmVersion":"5.7.1","_nodeVersion":"9.11.1","_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"dist":{"integrity":"sha512-3Ai+THGsYhmvxzmH9Y0dsdB5p00sQb5kjrmCI6kQpXfGk90aOZH7PEsyxTPJKN+vWqKAgRW6VjJzjhlKUvw86g==","shasum":"886d080ed217527c2b2327291679ee1a5441eb2f","tarball":"https://registry.npmjs.org/worker/-/worker-0.3.7.tgz","fileCount":30,"unpackedSize":161488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4ki6CRA9TVsSAnZWagAAEkMP/RbbjzAgZfOGtcwqamc4\ntc6zFi1fPvSOJ9ApqaNss53mn/vzWuPpLCPFOjux+BCbx2BUB4lrbXXjW2+V\nCVSFpB/SOEPW13a6Nonerr1c1mZ3PgC3uJ7mNl2r34y1aw4u+dN5b3WqDlvK\nYe73FkqxJuTuWCSyp1+n/4o4ijJ389m8tkd/YtsLKbzCGgE0/T9707gnJRQK\nhLGMeYIX0NGyJbtOglDAuYimy9l+tfUHUlwGqwXuWNaoJYHeifMboBn+vOoG\n7GkJrfd12nry9txhN6dTdS2gIyxcl5chuyuwWD6Horat7fqge9Ae6TAzltis\no7NpbGWNo4rA20Gv2UVh7BP9g+QjeGXebnGcnyfdXeUdTXX/A4xAFPuoQvZj\n7bWkX2MhCYQYYSQPvHtT92uQBBfSPGtw+GZv2LN9RHyZRdVKDsUFtAWpiVHE\n6Cc0Cy5IzeNtaHsqgVQO5eTTE/CbMkgbZsf4PT8jWs18YrgUJkRLNywIrcCi\nfgL19EFczuW0GiYD6Hwba0LRUjlEDHi98BzVZlpYjrCj7bUJWtS49Eu+wPJw\nxh+r1+9tl0SNYd92jgwo4v3gfqUpn2m03OllTxmad0UAG1S/qo/w6JWzsDVv\nWO7yPnhN6TeRMo3rA3wX0CVHOH+exLPCISbwMwJ8C3oD4XD4Afyi+80OyeuA\nBV2j\r\n=1BYz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPoCrr9uaBP7D1biZQSBxxTFRsGgchHDVFHMtYVGQpDwIgY9LzON/rXONfRbo+CaDYprWv9dBZqtdSRShw1qesG0M="}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker_0.3.7_1524779192284_0.8677870151976732"},"_hasShrinkwrap":false},"0.3.8":{"name":"worker","version":"0.3.8","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./build/main/node/locals.js":false},"files":["build"],"main":"build/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{"build":"mk","test":"mk test/main/bundle.js && mocha test/main/module.js"},"devDependencies":{"browserify":"^16.2.0","chai":"^4.1.2","jmacs":"1.0.4","mkjs-cli":"0.0.9","mocha":"^5.1.1"},"dependencies":{"colors":"^1.2.1","uuid":"^3.2.1","uuidv5":"^1.0.0","shmmap":"^0.2.0"},"optionalDependencies":{"shmmap":"^0.2.0"},"gitHead":"7a8d686b9dfb619bdaf9ade06c6d5e6913f4453b","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.3.8","_npmVersion":"5.7.1","_nodeVersion":"9.11.1","_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"dist":{"integrity":"sha512-P+2USjnMznBaJSKvhHFhxIzob1ls4VHo5BpwoAhSzxEG3Zt7G2Ocl2ancum7YyNtBi1rUxNnMb63K0X0vUOS0w==","shasum":"378315b764ee8145ebf8cba2a3e0bf727ca8c5f2","tarball":"https://registry.npmjs.org/worker/-/worker-0.3.8.tgz","fileCount":30,"unpackedSize":162140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa5CNpCRA9TVsSAnZWagAArHwP/288FjQNvjaE56UXjQ4s\nipFyHNEqZRfylaqc+uM1qgEqqkbqMJFGgdhumuXj5B73xmDSYynmqkY3wQ0X\nqZOop6z9CBBZjru5hg+RnHkNBKToypjHD4EwEhjzINPW85rEsn/O8kgtysow\nNSsQ4dBL65//+ZmBYUF/uKtKlPd01GT4lKsthWve2kUmRtliceCxE7U2Y2Gj\nluNd0HOm4o8ZpRYDkqDT49hMexL20gzBQS9NuN0jxnQ0FXrLCqVyZS3Zonxb\nnM244OQgcydnwL0hWWb03Pgly7pXv2NmzKjKo6RuIBu31Jxwgo+/zlINzTgr\n+TIaLAmD1ElIVANhtxk7K6tI8GsbatRugfvEhtNNFQUcn066vD2KHi0P1pP6\nxSVdhcOPCasC9R6pmYb7TsNfZ/vuy114GMjWz+38AHPSGkFQUxDVYVLZiuC2\nyvjm+aFXdaaweuBEA++8zWpbeBiHSeuRwyS/bJ9plpDsj95MZs9j3BiDRpk+\nQqxEF2RbLHNCOmdnFwyKs7AzQwA4w+hIOxcFOO5XgbyA1aE7l7o6AlXy1nWQ\nMroLC39/BnGysvXgRjSoNEtPnjM0U+QTQDEBBHkB9GQDaeeJy51a9EnX4RWe\nT9ZN52T4mBape5wKZOK2hDnPx35ZcSvthUW8UcLzt8/Ffx6VOclvZlLaavb5\nc9EC\r\n=Lq4D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCP62cLRMytEzOnJ4DWWz807L/wah2B372ooudmuqgqWAIgRB4y3lVdK53fsV99DYPhVWcQBAOzJJXuFQE7bPeGJYc="}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker_0.3.8_1524900711856_0.8537397952117518"},"_hasShrinkwrap":false},"0.3.9":{"name":"worker","version":"0.3.9","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./build/main/node/locals.js":false},"files":["build"],"main":"build/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{"build":"mk","test":"mk test/main/bundle.js && mocha test/main/module.js"},"devDependencies":{"browserify":"^16.2.0","chai":"^4.1.2","jmacs":"1.0.4","mkjs-cli":"0.0.9","mocha":"^5.1.1"},"dependencies":{"colors":"^1.2.1","uuid":"^3.2.1","uuidv5":"^1.0.0","shmmap":"^0.2.0"},"optionalDependencies":{"shmmap":"^0.2.0"},"gitHead":"cc1912b82070a9b72084afb676344b1e32197c4b","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.3.9","_npmVersion":"6.0.1","_nodeVersion":"10.3.0","_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"dist":{"integrity":"sha512-KIWdBMy6QLZBqOB5+rmVjAjdAeKZYgdAr6HI3rRQlDDwSlvgPupyXhdsQ5vof2g8VkHOsZQjKefc8f2QK4kuXA==","shasum":"26cb1c2d01421a38adcb966b50ed5f3af1dd7125","tarball":"https://registry.npmjs.org/worker/-/worker-0.3.9.tgz","fileCount":30,"unpackedSize":163204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbNygnCRA9TVsSAnZWagAAORwP/0B0maZ4/q3cyBAQwaKr\nWKiNONgSY/IasLot5gpX5tg5WMoz2aP9sKx+xOkxzq8CaKvRzv/VYcnW546Z\napy19yswwadG+SCd2wPoA7034ELa8/ose7DkFuxEWo7ixCbwJ47vb+QrObjA\n0Rqv2ob9yBDQRE5dH5QglMafx5JeMG5ys32JLV0FQUk0BmeKwbZIFRS0Q1FQ\nIjOW7ZkgngB8tcmxcIIp44ooFp0QUluOI3lidJY7dWdQCtB2PswOhqXy/KoQ\nW9fiiYt5KX+tyr+rjOE0RWSYGW7rrf54jXTIgmhfOxrxBzJMlYnJUNXQDObP\nWCy9HcZuNyJ/h7uRu7myCCIeh3XdYZ3RaenPW9iFntA/km7HU6t2FLUCM39C\njimAxIsesMOyKH++1lF7VgsxnQCzpLs/Twj2mPUkZJ1cS7iTy+L55aSiLrk3\nsi04FBZAay08V9QodEVNYfs/nKljOaZea8MBHbqLOACRb5U7mlvOdPy5DdJq\nbbIbJr4+1OurCWeXjxVtCd6qT0S5zBPj8j6FcnGc9YnS2SzKrS0m/0j/mvDe\nQQqCGY+324aV0bNNQeVfUGAC1hEBn+Gkd17BKmZeVGUmwKOuYM1rDtt2wUVp\nDMbk70hO95XggDG2YgqnEKOmw5aVAYnhvfNk6Gh/EE9fCkkx+BD7Q7XN4T9I\n5wdK\r\n=gWKU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG0Ele9urioYr9uMDrBHNnddiV9sFtypPul+eWhrBwVWAiAPdMXc2TMhgks3HKKeuNoBQodWDjiJRZDTG3DltLoOSQ=="}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker_0.3.9_1530341415429_0.677671452766363"},"_hasShrinkwrap":false},"0.3.10":{"name":"worker","version":"0.3.10","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./build/main/node/locals.js":false},"files":["build"],"main":"build/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{"build":"mk","test":"mk test/main/bundle.js && mocha test/main/module.js"},"devDependencies":{"browserify":"^16.2.0","chai":"^4.1.2","jmacs":"1.0.4","mkjs-cli":"0.0.9","mocha":"^5.1.1"},"dependencies":{"colors":"^1.2.1","uuid":"^3.2.1","uuidv5":"^1.0.0","shmmap":"^0.2.0"},"optionalDependencies":{"shmmap":"^0.2.0"},"gitHead":"712e316c6dbc1be1d1de63d4dcc7b8697d56ff30","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.3.10","_npmVersion":"6.0.1","_nodeVersion":"10.3.0","_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"dist":{"integrity":"sha512-+XJkPTVxp1cINdVTfboLhhGdFrg00c8TlnQIAPnYEu/4NN34aqYX270qrB3RVkJrOVEWTwNOW6HWHq1R/h74Ww==","shasum":"3fb081784687abf40c3294a5259e979ace500c21","tarball":"https://registry.npmjs.org/worker/-/worker-0.3.10.tgz","fileCount":30,"unpackedSize":163205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbNylLCRA9TVsSAnZWagAAywoP/29FBG0t6JKreD3eaBt+\nlKl6Wpw8RkvMtTar7UWKW9Dun1upw26NlWc4H4Zr7vrykRqM155hvKkHhIZ8\n/dD+3iQD/J6APVC7uC88bKD/9J0Ci+Fk2R+MWYuMGWG9qnKff9Imv9EKpIEy\nz+eIFsSDn34Z5Nbw4aEyOtFyjpyV2g9rQWNpj34yZP+/5/YAOluT1vr7RF2S\n/8neYNtKHIJMWdIvv9KK44q10om8SFClSJGrxK4pjWIl0MaAo1vUmW7GjQ5V\nwRjeIClWINny3jagY9G+h1pf+o3wjGYMJbBFv/cJn4yvQrUk6gS9BA03QkKA\nutzPB9hYlz3p5i1JQ2BoHz0JD7rAXDf1oGRanW3VQz/5OtlXZ9GWrlDHTUub\nZtFbehtmvh3Tg2MThnM3B6guqyLKPJhIl/ZEhE13ow5SC57+cqeZUpekLJMR\nrC0cEL3klrzGL14EUqfNBO0iJF+yJbvwz0lgdu5bWuBA6LDOxrfdIR7/s5sS\nAh6hKrFAXu3Qz99t3WIk7fMS6OPVZV6+4DCFMU/bFnAeij68nmh7XQXu6LKa\nRasNtzVjEUS+toPoCg/Rr3bQY3/C0cpeyCJw3u380K/eC3tGWaLBZrCCb5g+\nVTg19gSSSSn47zvypAfT8J2s1OKOGc64hgArF5kzodi1aP14uJZOSI8iqAFo\nb3QH\r\n=5D+5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqOQKm8A6tOmLp9HYolWn6QP3J5UcPVkEq2IIQJnuYIAIhAKkBRX0IrXf/w+XMwxznW7i7kDCtm2FDjOEwVX9tnflg"}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker_0.3.10_1530341707298_0.4358571529579527"},"_hasShrinkwrap":false},"0.3.11":{"name":"worker","version":"0.3.11","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./build/main/node/locals.js":false},"files":["build"],"main":"build/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{"build":"mk","test":"mk test/main/bundle.js && mocha test/main/module.js"},"devDependencies":{"browserify":"^16.2.0","chai":"^4.1.2","jmacs":"1.0.4","mkjs-cli":"0.0.9","mocha":"^5.1.1"},"dependencies":{"colors":"^1.2.1","uuid":"^3.2.1","uuidv5":"^1.0.0","shmmap":"^0.2.0"},"optionalDependencies":{"shmmap":"^0.2.0"},"gitHead":"9c4f07f58fa1726644fe93af78e8ce5762930bf2","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.3.11","_npmVersion":"6.0.1","_nodeVersion":"10.3.0","_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"dist":{"integrity":"sha512-yZQ73wr+y1Y3aw1nj64UbEStIExZ+DrhrGEJKmRk1KQQdjK7KNPJHim7/dZxsrOBzHlUnQJ4jnyoriEvozIF3w==","shasum":"64ab7bf4c95ce7fd2c7f6da9756b7b4e596ea09f","tarball":"https://registry.npmjs.org/worker/-/worker-0.3.11.tgz","fileCount":30,"unpackedSize":163187,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbNzZeCRA9TVsSAnZWagAAK70P/1MntrEuvEek4/Zx5JRi\nwckr9JC7sGuO2qDYOA2R6XfXqtP70cO8XNKO4IDjpOyufev8QDGYMOX8QoXm\nkBRMMneZJLidwEjvK+nmW1bnRiAlDE9vfSFpjjei0+UrHsgCyX75gqXCdHYW\nDXxsMtLI+MRmvYv0fG4VIDD/BGK/Xu2TuKxnsT6RVTLxOKZZcTMZyV6Be70c\nwpCgxNw0Stu/91xdA80n8P+IalYmjdbrXYBn+jt21qzVtM7R2GAsAIkQppLB\n52QUQHhLxcMzwyIYZKjHC8kYn18z/4s7L3dC5gdyXhHULFMvluWQyFvMdXZk\n+M4zvtbrvwTilMy5I7ftSUPEQc/vlhViz4VBkhDGvnOvAF2+pDxIf/f1XZZx\neUIfUoJxSdCm34qYgsRaLPeT8HRufRUCThG3jS1m8it7wcIYazgxtvqk6MlF\n5XWbTYvMWJ9O2+DrIP/OFUMH0lILhQXwV9BOWKZbd8QohftHaZs5zR/cCdgV\ncHNy7dmOCqmGB/GanSHCIbnbHFXbgg/w43AeMBVTNjDr7Cr8YN/76zxAloz6\n4NX3fQYaI3guSikh5GSdz1B5iQV0O6QIUzVwMabt13muBFuxoU3y5j6fLsiZ\nDCjw3OPv7fDOck0OZF3Sxd/S/SlhXNKiHTTXfSxv1jhshYZ3J66JUq2h37De\nblqg\r\n=1RDM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7BSEJ0G8gREtKLAwI4olzwL2oYAddsrrUiafqpXaKvwIhAPv6MyF+OctW4ZTj7VdnZObMTXs4TwGQlDwdcgqHxzL+"}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker_0.3.11_1530345054196_0.027672734916283304"},"_hasShrinkwrap":false},"0.3.12":{"name":"worker","version":"0.3.12","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./build/main/node/locals.js":false},"main":"build/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{"build":"npx emk","test":"npx emk test"},"devDependencies":{"browserify":"^16.2.3","chai":"^4.2.0","emk":"^1.4.3","eslint":"^5.7.0","eslint-plugin-jmacs":"^1.2.2","jmacs":"^1.2.3","mocha":"^5.2.0"},"dependencies":{"colors":"^1.3.2","uuid":"^3.3.2","uuidv5":"^1.0.0","shmmap":"^0.2.0"},"optionalDependencies":{"shmmap":"^0.2.0"},"gitHead":"df0f50a37e81b86a823deb2dd32805d03582ecd2","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.3.12","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"dist":{"integrity":"sha512-MpMGtx/1StdaVwiLqoxUqEkl/2yFs1MqzOPmM8nW9livO4b+/i+WZW6fCBJjDxX6P2fP0hJmTchAQJTMC7u8AQ==","shasum":"6d7cc8150adffb1295202d51dd337dc371ce89c6","tarball":"https://registry.npmjs.org/worker/-/worker-0.3.12.tgz","fileCount":58,"unpackedSize":301790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0OVNCRA9TVsSAnZWagAATPUP/jDuF5S7/SkSUWVCohXs\nlqyVkKfqPuOpVpJP2RkuIac5aAvegzUy7zjTIu5dvsKHpFAj4MDQrAI939GR\noKpirDUfDpyuSeK5rBaEfIuCYFjVBuNG1YZEOR3t5KF8hoXIbLZbCmpcIwV+\nu78lwdJpyKeEsEUefy78GhIzRRnM+/o+WOI/AxtQdn8jY+zk3Of7QEwGgpxA\nNAr1wzoscrG43YF3y2DTjXnSrTAWLe6H3fdJE5eWY5ddWIsWvMf8gQvVKSiX\nEtzxvbw2AGZK8F9T6QDzJ0F3AOvBYRU/vdUvHYDjBTXdqPG1k2TrihoJnLhQ\ny3aSl7ku2qY41P4ruFxngbApYZvWWvjRO2iQ56pdU56OKU1PjJWL8iBJuBWb\n/sMF0/P5Qc/a3FRHiUIGZzv8yvtX+Uoa4o1Kn9Uhp+Pq4GW76CqPEnP3e1WE\n0fhiMkukSWG2tu3bxbcR8htVBY5Fvta/bRZx709RcBQfRdt8wKV79JfO2YCA\nb09RmOC343b44fulrv9GdF1cmtxjrufHYS25CahMsW1DuJg9twT3vAEQcJRi\nJGD9hTqVo2XBUrqJItdSUPFPbmCf3t/fjcBNhCbU1WZS+Ez11zG3UMUVbgOb\ntwTDIlM1SVXndSsgzTttXFATF7gxUC8l56aSS6qneXbbXajZVJopThv5poUe\nXPIe\r\n=CAix\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGuzBkSWrAlsomBmNW1KdPaW5Pzc380VHG+d4o/FFQufAiArmmOzoGJhTxft36FK/XqzLhVEXEaVRyoJ0xJWvLMnxQ=="}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker_0.3.12_1540416844312_0.06158080632888474"},"_hasShrinkwrap":false},"0.4.0":{"name":"worker","version":"0.4.0","description":"Dual-paradigm parallelization API for both node.js and the browser","license":"ISC","author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"browser":{"./build/main/node/locals.js":false},"main":"build/main/module.js","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"scripts":{"build":"npx emk","test":"npx emk test"},"devDependencies":{"browserify":"^16.3.0","chai":"^4.2.0","emk":"^1.7.2","eslint":"^6.1.0","eslint-plugin-jmacs":"^1.2.2","jmacs":"^1.2.7","mocha":"^6.2.0"},"dependencies":{"colors":"^1.3.3","uuid":"^3.3.2","uuidv5":"^1.0.0","shmmap":"^1.0.0"},"optionalDependencies":{"shmmap":"^1.0.0"},"gitHead":"d21105329f33d7e8c56c0429edac9d08c2c33fdc","bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"homepage":"https://github.com/blake-regalia/worker.js#readme","_id":"worker@0.4.0","_nodeVersion":"12.7.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-aMfS0j8Kz22OVFT2C/Ys35DmrfYV0cdHXk5AgKubn+Nn9qx35LJVvn+/vuEkc5sEKG0kH2Su3l9MeiB3kTtrVA==","shasum":"df22f45d96f9aadc7ee92e3e7d336312020c4a74","tarball":"https://registry.npmjs.org/worker/-/worker-0.4.0.tgz","fileCount":58,"unpackedSize":301823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdP52GCRA9TVsSAnZWagAAnWMP/A8iB1z11JjKtg8XSxzp\nZ9ua08zsiv41VM+1ca2ADMexlh5aOrUxBxsYc4nXvrPsWlGZdadduiWoLnRh\nYwCVrtz6O+GZ6PpFm13+LKNSefHe2dhP1sYVeXYNhUsfbh3+PXo9nT3XgyAk\n6KYeT9uDNMskaWyRBO0y4vR8voxRKMoSx2vqVy0gJaw4cAxR2qp+TXroLltI\n+xXRltCN7MojBZ1g6cQKGhsI1XJq2DtuW2jvq9p0KKHxZa2cIoxE5ZEsLN9X\n7XBfpJe78O4o3RYcsib4/Jv98WQGb/M0SHdKS/DjJiX9uWNDdDlX7f+PpsYQ\nxpzlo5psq+6goGaVlcEb6Skm70uYVis2mGnyBQMC7Rw45NvAbZ4sCW/5X0su\nrBlY5PQhmCeqT5QO94I5ySVFg2trfEaIeTXQfO7SUsfUUCcBNOOy1EfHQB9w\naWToS5AM1TvJVLagw8xFBvjt9m3CR5ZF+n9fV96Yd6ZSlQ1H9t++N3GPvTJv\n8soZElulzK5EpwOHDIYVs9xQ/Rm+3acGg8IGdHk91JCil2g4MJttm1sPyz6D\no79F8QVbshITLs9KCAHRAbHsbK867l3AUJnRL1bWCTCcX2rkIhaZ4/XASIyD\nTC8R6gKcTYHQzvIDTNux6fKrcxt6ZiBeX32XTO48spQ3eZYr3d3OyjGdZQ8A\np0lO\r\n=tJJ1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDZ/vcTCr70DnbHwm41UgcFakqVo6635JLPz9gEPpXAwIgBxJfb7cIxWMeais3nPzltjne458TA8pyWIlgdwEDONk="}]},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"_npmUser":{"name":"blake.regalia","email":"blake.regalia@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/worker_0.4.0_1564450181436_0.21520767248658967"},"_hasShrinkwrap":false}},"maintainers":[{"email":"blake.regalia@gmail.com","name":"blake.regalia"}],"readme":"# worker.js 🔧\n[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] \n\nA library most strongly suited for facilitating [data parallelism](https://en.wikipedia.org/wiki/Data_parallelism) within a series of orchestrated tasks that run in worker threads. Works with both node.js and the browser (including w/ browserify and webpack) in an abstraction that unifies Worker and Child Process.\n\n### Features\n - Enables the use of *pseudo-Transferable* objects in node.js between threads by using shared memory when available (meaning faster messaging with less overhead when passing large objects).\n - Serializes messages in node.js using the [Structured Clone Algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm), meaning you can pass actual JavaScript objects (not just JSON as is with process.send) between threads.\n - Allows subworkers (i.e., the ability for a worker to spawn its own nested worker) in all enviornments, including a workaround for browsers that do not support it natively.\n - Supports transmitting/receiving *streams* across threads (including special treatment for [File](https://developer.mozilla.org/en-US/docs/Web/API/File) and [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) in the browser).\n - Compatible with [Browserify](http://browserify.org/) and [webpack](https://webpack.js.org/)\n\n> If running on node.js, requires v8.0.0 or higher (for v8 serializer)\n\n\n## Contents\n-----------\n - [Example](#example)\n - [Intro](#intro)\n - [Documentation](#api-documentation)\n - [Building with browserify or webpack for the browser](#browser)\n\n## Example\n----------\nLet's take a long list of words, reverse the letters in each word, and then sort that list. Pretty straightforward. Here's a single-threaded way to do it:\n\n*serial.js*:\n```js\nconst fs = require('fs');\n\n// load a few hundred thousand words into an array\nlet a_words = fs.readFileSync('/usr/share/dict/words', 'utf8').split('\\n');\n\n// start the timer\nconsole.time('serially');\n\n// reverse each word, then sort that list\nlet a_sorted_words_reversed = a_words\n    .map(s => s.split('').reverse().join(''))\n    .sort((s_a, s_b) => s_a.localeCompare(s_b));\n\n// write to disk\nfs.writeFile('out', a_sorted_words_reversed.join('\\n'), (e_write) => {\n  if(e_write) throw new Error(e_write);\n\n    // stop the timer\n    console.timeEnd('serially');\n});\n```\n\n\n#### Parallelize\nIn this scenario, we can save a bit of time by breaking down the transformation into multiple units, and then dividing the workload among multiple cores.\n\nFirst, we define tasks in *the-worker.js*:\n```js\nconst worker = require('worker');\n\nconst F_SORT_ALPHABETICAL = (s_a, s_b) => s_a.localeCompare(s_b);\n\nworker.dedicated({\n    // take a list of words and reverse the letters in each word\n    reverse_letters(a_list) {\n        return a_list.map(s => s.split('').reverse().join(''));\n    },\n\n    // take a list of words and sort them alphabetically\n    sort(a_list) {\n        return a_list.sort(F_SORT_ALPHABETICAL);\n    },\n\n    // take two sorted lists of words and merge them in sorted order\n    merge(a_list_a, a_list_b) {\n        return worker.merge_sorted(a_list_a, a_list_b, F_SORT_ALPHABETICAL);\n    },\n});\n```\n\nThen, we define how to use those tasks in *the-master.js*:\n```js\nconst fs = require('fs');\nconst worker = require('worker');\n\n// load a few hundred thousand words into an array\nlet a_words = fs.readFileSync('/usr/share/dict/words', 'utf8').split('\\n');\n\n// start the timer\nconsole.time('parallel');\n\n// create a group of workers (size defaults to os.cpus().length)\nlet k_group = worker.group('./the-worker.js');\n\n// processing pipeline\nk_group\n    // bind data from our list, dividing array evenly among workers\n    .data(a_words)\n\n    // send data to workers and push them thru the first transform\n    .map('reverse_letters')\n\n    // as soon as each worker finishes its previous task, forward each result\n    //   to a new task in the same thread (keeping data in the same thread)\n    .thru('sort')\n\n    // reduce multiple results into a single one\n    .reduce('merge').then((a_sorted_words_reversed) => {\n        fs.writeFile('out', a_sorted_words_reversed.join('\\n'), (e_write) => {\n            if(e_write) throw new Error(e_write);\n\n            // stop the timer\n            console.timeEnd('parallel');\n        });\n    });\n```\n\n#### Results\nThis is just a demonstration to show how to use this library, and the results from my machine here shows the potential benefit of dividing such a task:\n```\nserially: 2328.937ms\nparallel: 1355.964ms\n```\n\n## Intro\n--------\n\n### Data Parallelism\nOne form of parallelization is to divide a large set of data across multiple processors by spawning workers that run identical code but are assigned different *subsets* of the data.\n\n### Task Parallelism\nAnother form of parallelization is to assign a different *task* to each processor. An effective approach to parallelism can combine both forms together. With `worker`, you can use [Group](#group) to emply both forms cooperatively (i.e., cores perform data parallelism while individually advancing to the next serial task), in order to maximize use of all available processing power.\n\n### Pseudo-Datatypes:\nThroughout this API document, the following datatypes are used to represent expectations imposed on primitive-datatyped parameters to functions, uses of primitives in class methods, and so forth:\n - `key` - a string used for accessing an arbitrary value in a plain object\n - `path` - a string that conforms to an expected syntax (e.g., URL, file path, etc.)\n - `struct` - an interface for a plain object (i.e., one that has expected key names)\n - `hash` - a plain object whose keys are arbitrary (i.e., defined by you, the user)\n - `list` - a one-dimensional array containing only elments of the same type/class\n - `uint` - a non-negative integer\n - `any` - any object or primitive data type **that are serializable via the [Structured Clone Algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)**\n\n## API Documentation\n------\n - [Factory](#worker-factory)\n - [Worker](#worker)\n - [Pool](#pool)\n - [Group](#group)\n   - [ArmedGroup](#armed-group)\n   - [ActiveGroup](#active-group)\n   - [TaskResultCallback](#task-result-callback)\n - [WorkerOptions](#worker-options)\n - [EventHash](#event-hash) \n - [Manifest](#manifest)\n - [Streams](#streams)\n - [TaskHandler](#task-handler)\n - [SharedMemory](#shared-memory)\n - [DivisionStrategies](#division-strategies)\n   - [EqualDivisionStrategy](#equal-division-strategy)\n\n<a name=\"worker-factory\" />\n\n### **Factory**\nThe module's main export is the **Factory**.\n`const worker = require('worker');`\n\n**Constructors:**\n - `worker.spawn(source: path[, options: `[`WorkerOptions`](#worker-options)`)` -- spawn a single worker at the given `path`. Additional options can be specified in `options`.\n   - **returns** a [new Worker](#worker)\n   - *example:*\n     ```js\n     let k_worker = worker.spawn('./eg.js');\n     ```\n - `worker.pool(source: path[, limit: int][, options: `[`WorkerOptions`](#worker-options)`)` -- create a pool that will spawn up to `limit` workers (defaults to number of cores, i.e., `navigator.hardwareConcurrency` or `os.cpus().length`). If `limit` is negative, it indicates how many cores to attempt to reserve (such as `os.cpus().length -1`), but if there are not enough cores, then the final number of workers in the pool will always end up greater than or equal to `1`. Each worker will be spawned from the same source. Additional options for spawning the workers can be specified in `options`.\n   - **returns** a [new Pool](#pool)\n   - *example:*\n     ```js\n     let k_pool = worker.pool('./eg.js');\n     ```\n - `worker.group(source: path[, count: int][, options: `[`WorkerOptions`](#worker-options)`)` -- create a group (i.e., a cooperative pool) that will spawn up to `count` workers (defaults to number of cores, i.e., `navigator.hardwareConcurrency` or `os.cpus().length`). If `count` is negative, it indicates how many cores to attempt to reserve (such as `os.cpus().length -1`), but if there are not enough cores, then the final number of workers in the group will always end up greater than or equal to `1`. Each worker will be spawned from the same source. Additional options for spawning the workers can be specified in `options`.\n   - **returns** a [new Group](#group)\n   - *example:*\n     ```js\n     let k_group = worker.group('./eg.js');\n     ```\n - `worker.manifest(args: Array<any>[, transfers: list<Paths>])` -- create an object that encapsulates the serializable objects in `args`, optionally declaring a list of those objects that are (a) instances of stream or (b) [Transferable](#https://developer.mozilla.org/en-US/docs/Web/API/Transferable) (for the browser) or [SharedMemory](#shared-memory) (for node.js). If `transfers` is omitted or `true`, then each item in `args` will be exhaustively searched to find all streams/Transferable/SharedMemory objects. Providing a list of `transfers` spares the extra computation.\n   - **returns** a [new Manifest](#manifest)\n   - *example:*\n     ```js\n     let h_album = {\n        name: 'pics',\n        images: [\n            new Uint32Array(800*600),\n            new Uint32Array(1024*768),\n        ],\n     };\n     let km_args = worker.manifest([h_album], [\n        [0, 'images', 0],  // paths to transferable items\n        [0, 'images', 1],\n          /* OR */\n        [0, 'images'],  // path to container of all transferable items\n     ]);\n     worker.spawn('./eg.js').run('collage', km_args);\n     ```\n\n**Methods:**\n - `worker.dedicated(tasks: hash{name => `[`TaskHandler`](#task-handler)`})` -- declare the current thread as a dedicated worker while passing a *hash* of tasks that associates a task's `name` to its corresponding [TaskHandler](#task-handler).\n   - **returns** `undefined`\n   - *example:*\n     ```js\n     // i-am-a-worker.js\n     worker.dedicated({\n        namedTask1(a_subset) {...},\n        namedTask2(a_subset) {...},\n        ...\n     });\n     ```\n - `worker.globals([scope: Object])` -- get and optionally set the identifiers for [SharedMemory](#shared-memory), such as `Uint8ArrayS`.\n   - **returns** `scope`, or a new *struct*\n   - *example:*\n     ```js\n     worker.globals(global);  // or `window`, e.g.\n     let at_test = new Uint8ArrayS();\n     ```\n - `worker.merge_sorted(left: list<any>, right: list<any>[, sort: callback])` -- helper function for merging two sorted lists; useful on the *worker* side.\n   - **returns** a `list<any>` that is the sorted combination of `left` and `right`\n   - *example:*\n     - See [the main example](#example).\n\n<a name=\"worker\" />\n\n### class **Worker**\nAn abstraction of a [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Worker) or [ChildProcess](https://nodejs.org/api/child_process.html#child_process_class_childprocess). Create an instance by using the [Factory](#factory) method `worker.spawn()`.\n\n**Methods:**\n - `.run(taskName: string[, args: Array<any> |`[`Manifest`](#manifest)`[, events: `[`EventHash`](#event-hash)`])` -- run the task given by `taskName` on the worker, optionally passing `args` and `events`. For understanding whether or not you need to create a Manifest object, see the [Manifest](#manifest) documentation.\n   - **returns** a [new Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)\n   - *example:*\n     ```js\n     async function example() {\n        let k_worker = worker.spawn('./eg.js');\n        \n        // example of a simple call with an arg, using await to get return value\n        let x_result_1 = await k_worker.run('factorial', [170]);\n        \n        // example with event callbacks\n        await k_worker.run('examine', [s_latex_doc], {\n           paragraph() { ... },\n           figure() { ... },\n        });\n     }\n     ```\n - `.kill([signal='SIGTERM': string | uint])` -- terminate the worker, optionally sending a kill `signal` to the child process if running on node.js\n   - **returns** a [new Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)\n   - *example:*\n     ```js\n     k_worker.kill().then(() => {\n        // worker is gone\n     });\n     ```\n\n\n<a name=\"pool\" />\n\n### class **Pool**\nA pool of [Workers](#worker) for simple task parallelism. Create an instance by using the [Factory](#factory) method `worker.pool()`.\n\n**Methods:**\n- `.run(taskName: string[, args: Array<any> |`[`Manifest`](#manifest)`[, events: `[`EventHash`](#event-hash)`])` -- pull a single [Worker](#worker) out of the pool and assign it this task, or queue this task if all workers in the pool are busy.\n   - **returns** a [new Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)\n- `.start()` -- starts a new point in the queue from which to wait until all further queued tasks will complete\n   - **returns** `undefined`\n- `.stop()` -- wait until all previously queued tasks (starting at the *start* point and ending here) have completed. This also implicitly calls `.start()`, resetting the start point to here.\n   - **returns** a [new Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)\n - `.kill([signal='SIGTERM': string | uint])` -- terminate all workers in the pool, optionally sending a kill `signal` to the child process if running on node.js.\n   - **returns** a [new Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)\n \n*Example:*\n```js\nlet k_pool = worker.pool('./eg.js', 3);\n\n// start a task on one worker\nk_pool.run('render');\n\n// a series of tasks is about to be queued\nk_pool.start();\n\n// start several more tasks as workers become available\na_downloads.forEach(async (p_url) => {\n    let d_blob = await k_pool.run('download', [p_url]);\n    download_complete(p_url, d_blob);\n});\n\n// as soon as the last download is done, start uploading\nk_pool.stop().then(() => {\n    k_pool.run('upload');\n});\n```\n\n\n<a name=\"group\" />\n\n### class **Group**\nA group is a cooperative pool of [Workers](#worker) that are spawned from the same source. Create an instance of this class by using the [Factory](#factory) method `worker.group()`.\n\n**Methods:**\n - `.data(items: Array[, strategy: DivisionStrategy])` -- divide `items` into multiple *subsets* using the [EqualDivisionStrategy](#equal-division-strategy) by default, or by specifying a different `strategy`.\n   - **returns** a [new ArmedGroup](#armed-group)\n - `.use(subsets: list<any>)` -- assign each item in `subsets` to a worker. The length of `subsets` must be less than or equal to the number of workers in this group.\n   - **returns** a [new ArmedGroup](#armed-group)\n - `.wait` -- declare an event listener, or a list of events that should be triggered consequently, for the given event(s)\n   - *...*`(lock|s: string|list<string>, unlocked: callback)` -- calls `unlocked` once the event named `lock`, or each and every event listed in `locks`, is triggered.\n   - *...*`(lock|s: string|list<string>, dependency|ies: string|list<string>)` -- triggers the event named `dependency`, or each and every event listed in `dependencies`, once the event named `lock`, or each and every event listed in `locks`, is triggered.\n   - **returns** `this`\n - `.unlock` -- triggers any callbacks that are currently waiting for the given event(s), or as soon as they attach a listener. In other words, event binding via `.wait()` can occur before or after `.unlock()` and the results will be the same.\n   - *...*`(lock: string)` -- triggers the event named `lock`.\n   - *...*`(locks: list<string>)` -- triggers each event listed in `locks`.\n   - **returns** `this`\n\n\n<a name=\"armed-group\" />\n\n### class **ArmedGroup**\nA  [Group](#group) that has data attached but has not yet been assigned any tasks.\n\n**Methods:**\n - `.map(taskName: string[, args: Array<any> | `[`Manifest`](#manifest)`[, events: `[`EventHash`](#event-hash)`]])` -- dispatch workers to run the task given by `taskName`, on the currently binded data, in parallel. The first argument to each task's call will be its corresponding *subset*, followed by `args`. For understanding whether or not you need to create a Manifest object, see the [Manifest](#manifest) documentation.\n   - **returns** a [new ActiveGroup](#active-group)\n   - *example:*\n     ```js\n     let a_sequence = [1, 2, 3, 4];\n     worker.group('./eg.js').data(a_sequence)\n        .map('multiply', [2])\n        .reduce('sum', (x_actual) => {\n            let x_expect = a_sequence.map(x => x*2).reduce((c, x) => c + x, 0);\n            assert.equal(x_actual, x_expect);\n        });\n     ```\n\n\n<a name=\"active-group\" />\n\n### class **ActiveGroup**\nA  [Group](#group) that has data attached and has been assigned at least one task.\n\n**Methods:**\n - `.thru(taskName: string[, args: Array<any> | `[`Manifest`](#manifest)`[, events: `[`EventHash`](#event-hash)`]])` -- rather than passing the result back to the master thread, keep each worker's result data in their own thread and simply forward it to another task. For understanding whether or not you need to create a Manifest object, see the [Manifest](#manifest) documentation.\n   - **returns** a [new ActiveGroup](#active-group)\n - `.each(each: `[`TaskResultCallback`](#task-result-callback)`[, then: callback(error=null)])` -- handle each task result as soon as it completes, calling `each` for each subset of data whether or not they happen to be ready in order. If an error is thrown by one of the workers, or once all tasks complete, `then` will be called.\n   - **returns** a [new ArmedGroup](#armed-group)\n - `.series(each: `[`TaskResultCallback`](#task-result-callback)`[, then: callback(error=nul)])` -- handle each task result in order, calling `each` for each subset of data once it has been processed by the preceeding task. If an error is thrown by one of the workers, or once all tasks complete, `then` will be called.\n   - **returns** a [new ArmedGroup](#armed-group)\n - `.end([then: callback(error)])` -- once all the previous tasks end, call `then` if it is given. This essentially ignores the results returned by the workers. The returned Promise resolves after the last worker has finished *and* after `await then()` if it is given.\n   - **returns** a [new Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)\n - `.reduce(taskName: string[, args: Array<any> | `[`Manifest`](#manifest)`[, events: `[`EventHash`](#event-hash)`]])` -- merge adjacent task results until there is one single result remaining.  For understanding whether or not you need to create a Manifest object, see the [Manifest](#manifest) documentation.\n   - **returns** a [new Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)\n\n\n<a name=\"task-result-callback\" />\n\n### callback **TaskResultCallback**\nA function to implement on the 'master' side that gets called when a task successfully completes along with the `result` it returned. As indicated by the signature, this can optionally be an async function which returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n\n**Signature:** `[async] function(result: any, subsetIndex: uint)`\n\n**Parameters:**\n 0. `result: any` -- what the worker returned\n 1. `subsetIndex: uint` -- the index (from 0 to # workers - 1) of the subset that this result derives from\n\n**Returning** one of the following will carry the result *downstream*:\n - An `instanceof` a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) that resolves with something that is not an `instanceof` Error and is not `undefined`.\n - Anything that is not `undefined`\n\n**Returning** one of the following will take whatever action is defined by the task stream for handling errors:\n - An `instanceof` an [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)\n - An `instanceof` a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) that rejects with some reason.\n - `undefined`\n\n<a name=\"worker-options\" />\n\n### interface **WorkerOptions**\nA *struct* that specifies options for spawning a worker.\n\n**Keys for Worker:**\n - [*Those given by the specification*](https://developer.mozilla.org/en-US/docs/Web/API/Worker/Worker)\n\n**Keys for ChildProcess:**\n - `args: Array<string>` -- Arguments to append to the `ChildProcess#spawn` args list for the script.\n - `env: hash` -- Extend/overwrite a clone of the current `process.env` object before sending it to the worker.\n - `exec: string` -- Defaults to `process.execPath`.\n - `cwd: string` -- Defaults to `process.cwd()`.\n - `node_args: Array<string>` -- Arguments to inject in the `ChildProcess#spawn` args list for the executable (e.g., `'--max-old-space-size=8192'`)\n - `inspect: struct` -- Enables debugger on the spawned worker(s)\n   - **keys:**\n     - `brk: boolean` -- Whether or not to break on the first line of execution\n     - `port: number` -- Specifies a single port to attach the debugger (only useful for single worker)\n     - `range: Array[low, high]` -- Specifies a range of ports to use for attaching debuggers (useful for [`Pool`](#pool) and [`Group`](#group)\n\n\n<a name=\"event-hash\" />\n\n### interface **EventHash**\nA *hash* that binds callback listener functions to arbitrary event names, which can be emitted by the worker.\n\n**Signature:** `[eventName] => callback([subsetIndex: uint, ]...arguments: any)`\n\n**Arguments:**\n 0. `subsetIndex: uint` -- the index (from 0 to # workers - 1) of the subset that this event was emitted from (only present for instances of [Group](#group)).\n *rest*. `arguments: any` -- argument data emitted by the worker.\n\n**Example:**\n```js\nworker.spawn('./eg.js').run('scan', [fs.createReadStream('./input.txt')], {\n    line() {\n        // newline encountered\n    },\n});\n```\n\n<a name=\"manifest\" />\n\n### class **Manifest**\nAn array of objects to transmit/receive between master and worker threads such that *special* objects are handled properly, i.e., such that streams can be transmitted across threads, [Transferable](#https://developer.mozilla.org/en-US/docs/Web/API/Transferable) objects can be handled by the browser, or that [SharedMemory](#shared-memory) objects can be exchanged over IPC. Create an instance by using [Factory's](#worker-factory) `worker.manifest()`.\n\nFor convenience, any method that accepts a Manifest argument can also accept an `Array<any>`. In this context, the Array **must not contain any *special* objects below one traversable depth**. In other words, so long as you are passing *special* objects at the top level of the Array, or no *special* objects at all, then you do not need to create a Manifest.\n\n**Example:**\n```js\n// without explicitly creating a Manifest:\nworker.spawn('./eg.js').run('parse', [\n    // OK: just some serializable objects\n    'hello', 42, /structured_clone(_algorithm)?/i,\n\n    // OK: stream is at top level in array\n    fs.createReadStream('./package.json'),\n    \n    // OK: shareable object is at top level in array\n    new Uint8ArrayS(1024),\n    \n    // NOT OK: shareable object is nested; need to use Manifest instead\n    {\n        type: 'img',\n        data: new Uint8ArrayS(1024),\n    },\n]);\n\n// with Manifest, we can nest special objects\nworker.spawn('./eg.js').run('parse', worker.manifest([\n    {\n        type: 'img',\n        data: new Uint8ArrayS(1024),\n    },\n], [\n    // optional: tell Manifest where to find special objects\n    [0, 'data'],\n]))...\n```\n\n\n<a name=\"streams\" />\n\n### Streams\n\nWhen working in node.js, instances of [ReadableStream and WritableStream](https://nodejs.org/api/stream.html) can be passed between threads thru worker's standard messaging interface. Each event and method call on such streams are transmitted across threads, so keep in mind the additional overhead costs this may incur when streaming data. See [Manifest](#manifest) for an example.\n\nWhen deploying in the browser, the same rules apply to streams as with node.js since a reliable stream module can be used by both parties.\n\n\n\n<a name=\"task-handler\" />\n\n### function **TaskHandler**\nA function to implement on the 'worker' side that accepts an input *subset* as its first argument and any user-defined values for the rest of its arguments.\n\n**Signature:** `[async] function(subset: Array[, ...args])`\n\n**Must return** one of the following:\n  - An `instanceof` a [Response](#response).\n  - An `instanceof` a `Promise`, which itself resolves to one of these options.\n  - Anything supported by the [Structured Clone Algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm).\n\n*Example:*\n```js\nworker.dedicated({\n    // simple synchronous task returning serializable object\n    add(a_nums, x_value) {\n        return a_nums.map(x => x + x_value);\n    },\n    // synchronous task returning transferable data\n    encode(a_strings) {\n        let a_encoded = a_strings.map(s_string => (new TextEncoder()).encode(s_string));\n        return worker.response(a_encoded, true);  // auto-find transferable objects\n    },\n    // asynchronous task returning promise that resolves to serializable object\n    async info(s_wikipedia_page) {\n        let s_html = await fetch('http://en.wikipedia.org/wiki/'+x);\n        return extract_infobox(s_html);\n    },\n});\n```\n\nEach time a task handler function is called, its `this` will have the following fields:\n - **Properties:**\n   - `.events`: `hash{name => 1}` -- a 'simple set' of events that the user requests to be notified about. Useful for determining if a certain event even needs to be emitted.\n\n - **Methods:**\n   - `.put(key: string, data: any)`\n     - stores `data` under the given `key` to a hash store that will be available for future tasks in the current pipeline running on the same thread.\n     - > Note: this hash store is safe to use even if the current thread is reassigned to repeat the same task on a different *subset*; i.e., it protects against task-level collisions.\n   - `.get(key: string)`\n     - retrieves data from the previous task(s) in the current *thread pipeline*.\n     - **returns** `data` set by the user during a call to `.put`\n   - `.emit(eventName: string[, ...args])`\n     - emits the event given by `eventName` along with the given `args` by sending a message to the current worker's *master* thread.\n     > Note: each of the `args` must be serializable by the [Structured Clone Algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm).\n\n     - *example:*\n       ```js\n       // worker.js\n       worker.dedicated({\n           parse(at_code) {\n               ds_stream.on('data', (s_data) => {\n                   if(s_data.startsWith('warn:')) this.emit('warn', s_data);\n               });\n           },\n       });\n\n       // master.js (using single worker)\n       k_worker.run('parse', [at_code], {\n           warn(s_warning) {\n               console.warn(s_warning);\n           },\n       });\n\n       // -- or --\n\n       // master.js (using worker group)\n       k_group.data(a_codes)\n           .map('parse', [at_code], {\n               warn(i_subset, s_warning) {\n                   console.warn('['+i_subset+'] '+s_warning);\n               },\n           });\n       ```\n\n\n<a name=\"shared-memory\" />\n\n### SharedMemory\n----------------\nIn node.js, this library spawns a new process for each worker. Communication between processes (IPC) is normally done via pipes, which is a copy-on-write operation requiring outgoing data to be duplicated in memory. To alleviate the overhead when transferring larger objects between processes, you can allocate ArrayBuffers and TypedArrays in shared memory space before filling them with data.\n\nThe following classes are provided to ease the process of creating shared memory. They behave the same as their corresponding [TypedArray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) constructors:\n```\nArrayBufferS\nInt8ArrayS\nUint8ArrayS\nUint8ClampedArrayS\nInt16ArrayS\nUint16ArrayS\nInt32ArrayS\nUint32ArrayS\nFloat32ArrayS\nFloat64ArrayS\n```\n\nIn the browser, each of these classes will invoke the [SharedArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) constructor to create shared memory.\n\nIn node.js, each of these classes will attempt to create shared memory on the operating system (right now only support for systems that support POSIX shm and mmap).\n\n\nAlternatively, you may wish to *transfer* objects in the browser rather than creating shared memory. In node.js however, IPC still requires shared memory. For this scenario, you can use the *transfer-if-able* TypedArray constructors:\n```\nArrayBufferT\nInt8ArrayT\nUint8ArrayT\nUint8ClampedArrayT\nInt16ArrayT\nUint16ArrayT\nInt32ArrayT\nUint32ArrayT\nFloat32ArrayT\nFloat64ArrayT\n```\n\n\n<a name=\"division-strategies\" />\n\n## DivisionStrategies\n---------------------\nA division strategy is an algorithm that divides a list of elements into multiple subsets, so as to share the load among workers in a data parallelism paradigm.\n\n\n<a name=\"equal-division-strategy\" />\n\n### EqualDivisionStrategy\nA default division strategy that will attempt to divide the input data into equal *subsets* over the number of workers in the current [Group](#group). Inputs that are not evenly divisible by the number of workers in their [Group](#group) will result in slightly larger *subsets* nearer the end, increasing the liklihood that the workers assigned the first *subsets* finish before those assigned the last *subsets*; an outcome intended to favor responses that process results based on their order within the original input data.\n\n\n\n<a name=\"browser\" />\n\n## Building with browserify or webpack for the browser\n\nThis module ships ready-to-go with browserify. Just `npm install worker` in your project and require normally.\n\nFor webpack however, you will need to add the following to your `webpack.config.js`:\n```js\nmodule.exports = {\n  resolve: {\n    aliasFields: ['browser'],\n  },\n};\n```\n\nThis will let webpack know to use the `browser` key/value pair of worker's `package.json` file.\n\n\n[npm-image]: https://badge.fury.io/js/worker.svg\n[npm-url]: https://npmjs.org/package/worker\n[travis-image]: https://travis-ci.org/blake-regalia/worker.js.svg?branch=master\n[travis-url]: https://travis-ci.org/blake-regalia/worker.js\n[daviddm-image]: https://david-dm.org/blake-regalia/worker.js.svg?theme=shields.io\n[daviddm-url]: https://david-dm.org/blake-regalia/worker.js\n","readmeFilename":"README.md","time":{"modified":"2022-06-29T03:19:14.622Z","created":"2017-11-14T00:22:43.069Z","0.2.1":"2017-11-14T00:22:43.069Z","0.3.0":"2018-01-05T22:42:21.486Z","0.3.1":"2018-01-10T07:34:33.365Z","0.3.2":"2018-02-16T22:37:55.455Z","0.3.3":"2018-02-16T23:29:36.733Z","0.3.4":"2018-02-16T23:41:46.082Z","0.3.5":"2018-02-18T03:28:52.598Z","0.3.7":"2018-04-26T21:46:32.439Z","0.3.8":"2018-04-28T07:31:51.945Z","0.3.9":"2018-06-30T06:50:15.527Z","0.3.10":"2018-06-30T06:55:07.374Z","0.3.11":"2018-06-30T07:50:54.329Z","0.3.12":"2018-10-24T21:34:04.585Z","0.4.0":"2019-07-30T01:29:41.659Z"},"description":"Dual-paradigm parallelization API for both node.js and the browser","homepage":"https://github.com/blake-regalia/worker.js#readme","keywords":["worker","web worker","parallel","parallelization","concurrency","cluster"],"repository":{"type":"git","url":"git+https://github.com/blake-regalia/worker.js.git"},"author":{"name":"Blake Regalia","email":"blake.regalia@gmail.com"},"bugs":{"url":"https://github.com/blake-regalia/worker.js/issues"},"license":"ISC"}