{"_id":"@a4turp/multithreading","_rev":"11-f6f8a220474b7c9dbd7f7f38c4060e3a","name":"@a4turp/multithreading","dist-tags":{"latest":"1.0.0"},"versions":{"0.6.1":{"name":"@a4turp/multithreading","version":"0.6.1","author":{"name":"Artur Papikian"},"license":"MIT","description":"Light and easy JS tool for accessing multiple threads via web workers.","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"require":"./dist/index.js","import":"./dist/index.mjs"}},"comment//":"publish: pnpm build --onSuccess 'echo 1' for later automations...","repository":{"type":"git","url":"git+https://github.com/ArturNiko/multithread-js.git"},"devDependencies":{"typescript":"^5.0.3","vite":"^4.2.1"},"keywords":["multithreading","multithread","multicore","workers","pools","typescript","ts","javascript","js"],"scripts":{"clear":"rm -rf ./dist","build":"pnpm clear && tsup src/index.ts --format cjs,esm --dts --clean","watch":"pnpm build --watch"},"bugs":{"url":"https://github.com/ArturNiko/multithread-js/issues"},"homepage":"https://github.com/ArturNiko/multithread-js#readme","_id":"@a4turp/multithreading@0.6.1","_integrity":"sha512-2WC9TqCD4pTcEo4K9VZ/Dy9KwIUlK7SCLVBaN/RO9a38/Rx3PZyewlN0E7sbSo0sFXpbRCQLnM02hWASf8clLg==","_resolved":"/private/var/folders/q_/8mxw09g170926yzpgmy69wnw0000gn/T/a5bd378ff9e704579afc2db260afef5b/a4turp-multithreading-0.6.1.tgz","_from":"file:a4turp-multithreading-0.6.1.tgz","_nodeVersion":"19.8.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-2WC9TqCD4pTcEo4K9VZ/Dy9KwIUlK7SCLVBaN/RO9a38/Rx3PZyewlN0E7sbSo0sFXpbRCQLnM02hWASf8clLg==","shasum":"dc58b41e353d61d3ab1462b3f8a28f80347537fb","tarball":"https://registry.npmjs.org/@a4turp/multithreading/-/multithreading-0.6.1.tgz","fileCount":9,"unpackedSize":161641,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDG9qg8vKopVwwWjLq54d1l4MUnZ0yhgxO/G47lBEGU0AiA1r37swPPmYijCQhEX4CYKynuqB4vchGSJ+ziUr8mGKw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkL9MZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqEdRAApFGh84LqAhu9ceFtNpQw+xppqY9lrQ7aWjUyGoWgOLxLlvAW\r\ndOte0tltIacnuy0bBvbc32cV8PkCXdvFW/+ZLxKBaQme8ByM8jPffnzflCkG\r\nZCgdIGgDBvuRyf1hClPT4BHsVN4hekD7ljm2wZCOvgdVGKRwOSIFLy21/UA9\r\ne15aZQyer+E64zMRicvirppIt7dZJ6aQabtHL4oPjHeCLbHjUE/bBZ1Os+N+\r\nrLnCuRCjE8QPcE7TWom0+f88ww3TxXgY8wTfoIMcmVvWvagZoljwrLX57oiK\r\ntlLt0jTc0OYht/E7oMvVUwAcxnrh0QZeXlhFl/6sw6nICNwG1WB7expi/578\r\n/d7OgN7WW6RiGRTxKL2oPIRo11QdoF2xAbcz2V9oIKO15Tkd9BkDRvT/Z9BE\r\nRI0JxQilKZtkVbhxJJPXKl3v8Sif1bB0+qoklz4HYnAE4+wgeiK6j1t6cXrx\r\nB9V8U5rF6c0yBDiKtzHywu8J9XQ9YYsVmPek89TxRNcWYLNdugSw0OIXXSL5\r\nxMAv365UHuqJ1zVOpNVK3mE7QjpjXDc5g9Ukv8QwftR9vAMKaYKeUFSGHPWl\r\n8QT5FrxiUF81c4DkGmPphmPojElFISHjg5ZLMLGUJYA32A/6l65KzcOHY0AS\r\nWvv32pNRUdJB07O3MrBbRDC6y+n3jS1zdJ8=\r\n=XNI+\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"a4turp","email":"artur.niko.super@gmail.com"},"directories":{},"maintainers":[{"name":"a4turp","email":"artur.niko.super@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multithreading_0.6.1_1680855833034_0.25348641297369157"},"_hasShrinkwrap":false,"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.6.3":{"name":"@a4turp/multithreading","version":"0.6.3","author":{"name":"Artur Papikian"},"license":"MIT","description":"Light and easy web-tool for accessing multiple threads via web workers.","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"require":"./dist/index.js","import":"./dist/index.mjs"}},"comment//":"publish: pnpm build --onSuccess 'echo 1' for later automations...","scripts":{"clear":"rm -rf ./dist","build":"pnpm clear && tsup src/index.ts --format cjs,esm --dts --clean","watch":"pnpm build --watch"},"repository":{"type":"git","url":"git+https://github.com/ArturNiko/multithread-js.git"},"devDependencies":{"typescript":"^5.0.3","vite":"^4.2.1"},"keywords":["multithreading","multithread","multicore","workers","pools","typescript","ts","javascript","js"],"gitHead":"ba06e3846f1e4775cd81a079f453649b6127e905","bugs":{"url":"https://github.com/ArturNiko/multithread-js/issues"},"homepage":"https://github.com/ArturNiko/multithread-js#readme","_id":"@a4turp/multithreading@0.6.3","_nodeVersion":"19.8.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-mnaOHasARnWNPeU5W77UhJpHam2xkio4KPtsL6+ztPsaDt8dTSTVXlgfHrAme8qd2iubi3ZjiTrMI7jvY1FwgA==","shasum":"741ee24f9b81c4d2f4bcea4c8411b354131ff182","tarball":"https://registry.npmjs.org/@a4turp/multithreading/-/multithreading-0.6.3.tgz","fileCount":7,"unpackedSize":47518,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICUT1BFO7LkSFw7G+kzGAVKOKUfXImOrEdR1KR0evM8tAiEA0Px5fvk5eJQhsnfen0Mus/2wJ7LcnSiQ9Y9XI4RIgXw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNsFoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpe5w/+I0uCbl2N4IARvPjYkQsUo0MrUQtV3jxJvalYEBtf2rsxIwk+\r\nquxY4VcS1LVdAGrc53n6937V8WnB2xe+XDNTZvaDq4Di03/v4EsQ82Uk2eKx\r\nALek/P6BUJV81nSK84+QNhKorU7t8aif1ss0SOs/Bx451FgaWBr6OZ5S3qXN\r\nhY+GbwpVGNXrhKlgR97cZCRaWBA8I1iV2/KijdBat0wpYXNWZkc9fAqf43TJ\r\n501eUygsBYhN4/JXoU0i+C6OIyo8DOpAoJolzpJGQpPgj/Uu5hLG78SdZLs7\r\nljSTYDsfemIhEOwDCJwwVsqgpok86d7kSSBp+LiZReNHl7fLQEp58bWgU817\r\nWd9AcCtXTIximgdquctUzfp2KjuBfJE1SDj/hsDpfDvWUo27eFT4kYIzoNbQ\r\nlumx/GZcSHecwhu74GE2LRb3DCbMaGj7Wtv4ovBFvD0KnV3dlsGbn9tgZ0Cv\r\ni5UCyS9HhqLIeZI0jrCHcvMIMWekb5PAiLQiIwKzOYL97t0AGJCxkELkzMAc\r\nr6MLLvNJEHKU0RRegkn6Ju4JL32/pcPO4EGFh9cnNQ2IY8CTFXoeCzq3+pIv\r\n8ql4yMFTC1pH4hBd18+o6Cgj9zMUJmCd8VqBiEkV7cjBnvlFsXaaVvHyewFm\r\nKOb3j+kJpYKJ7YK9Mvzi0l+ZZMt4AZZngZE=\r\n=dbvu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"a4turp","email":"artur.niko.super@gmail.com"},"directories":{},"maintainers":[{"name":"a4turp","email":"artur.niko.super@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multithreading_0.6.3_1681310055887_0.9089876919036066"},"_hasShrinkwrap":false,"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0":{"name":"@a4turp/multithreading","version":"1.0.0","author":{"name":"Artur Papikian"},"license":"MIT","description":"Light and easy web-tool for accessing multiple threads via web workers.","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"require":"./dist/index.js","import":"./dist/index.mjs"}},"comment//":"publish: pnpm build --onSuccess 'echo 1' for later automations...","scripts":{"clear":"rm -rf ./dist","build":"pnpm clear && tsup src/index.ts --format cjs,esm --dts --clean","watch":"pnpm build --watch","test":"vitest run ./tests/module.test.mjs && jest ./tests/common.test.js","deploy":"npm publish"},"repository":{"type":"git","url":"git+https://github.com/ArturNiko/multithread-js.git"},"devDependencies":{"@types/node":"^18.15.11","happy-dom":"^9.7.1","jest":"^29.5.0","jest-environment-jsdom":"^29.5.0","tsup":"^6.7.0","typescript":"^5.0.4","vite":"^4.2.1","vitest":"^0.30.1"},"keywords":["multithreading","multithread","multicore","workers","pools","typescript","ts","javascript","js"],"gitHead":"6ac1e797eb3b73c0ea95b60595d26015235c05f7","bugs":{"url":"https://github.com/ArturNiko/multithread-js/issues"},"homepage":"https://github.com/ArturNiko/multithread-js#readme","_id":"@a4turp/multithreading@1.0.0","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-tGuLh2exhHeJUloH8E1JvP8ARneSYGWn8U7Xj89+0xHbidRRNasCHMtAjEVqe5k0AOXjuPcxw/qF32vd6g3qhw==","shasum":"cd20f1e43c06a4a61ed426d130d501456ff3e988","tarball":"https://registry.npmjs.org/@a4turp/multithreading/-/multithreading-1.0.0.tgz","fileCount":11,"unpackedSize":165798,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8fMj7ZduQsrWVnwXkQ/nd2CFdlnNbI1JTILHTrMWDRQIgJ2b8Vw68We87Gkf5T/lnE8mkFnAAUVATruI0H7hkN6Q="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQrhbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp+Aw/+I/zxJEuCYlX7MS+YNTe10GlXhD7Ir7RVyof29ZWtyCc4Gr6V\r\nkRso6GgvyUBoPzEM6RB9CMcvjrgGdOCHC9p7nrqk3t/QKgJCdeXHGr37Qm9v\r\nzL2SPixUbNstjBQ4HViXrsmu5nPma/t/4SWniZgfKy45s4kV5aGiIncAgx0n\r\ngiFdf6a/Cpa+irU3CQofXmrrmqwm42m2OKJXZJ8H+Ur1ZvIZNQIekqmI9bSe\r\nR0SWmU4x/OmgdEFNpLCkkhRnX4hv/LR5qxW1rBBdq5ZNfkLJAt35wA6NdVp9\r\ncl0eWZ5yf9ylZIHst53BqcY3y3pkTEg6ej7bV0frRYngNDncU8wUrCCmfm+V\r\nvIfKoGcBGza/0fIWI0/MLK3uldJhLbfKcIaC8roqzJaAKE7sbE8Q4oEL6qbL\r\ncer13ONF+IOXJk7NxSWpTctXbpO+yPjyDn8q1p5/KygbTMS20CNA+fbk1Y+x\r\nstzDqV2Dq9MUqheNfMcGBc+sWjyX7uvSxHOb/vYMb5rlkNOHh/beyA9/VkV2\r\nNTIwatRxEPb3ZTJK3yRi7e9EUhDMv7M60oGts4RxlEFT9/iTq8yqApBKsqys\r\nlhQCS9iwNHZ91qDsh83GIoktzQbotSR1USw9dzHZcwMiLZHjZlRfvQ25jJC5\r\nIZsPnPMgPfzoVqME8VSkMfFBm19+tKpGe+o=\r\n=/lac\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"a4turp","email":"artur.niko.super@gmail.com"},"directories":{},"maintainers":[{"name":"a4turp","email":"artur.niko.super@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multithreading_1.0.0_1682094170816_0.2969201929174543"},"_hasShrinkwrap":false,"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."}},"time":{"created":"2023-04-06T23:56:39.609Z","0.6.0":"2023-04-06T23:56:39.936Z","modified":"2023-12-26T18:44:39.953Z","0.6.1":"2023-04-07T08:23:53.216Z","0.6.2":"2023-04-12T14:27:34.429Z","0.6.3":"2023-04-12T14:34:16.103Z","0.6.4":"2023-04-17T01:05:07.971Z","0.6.5":"2023-04-17T01:12:02.770Z","1.0.0":"2023-04-21T16:22:51.116Z"},"maintainers":[{"name":"a4turp","email":"artur.niko.super@gmail.com"}],"description":"Light and easy web-tool for accessing multiple threads via web workers.","homepage":"https://github.com/ArturNiko/multithread-js#readme","keywords":["multithreading","multithread","multicore","workers","pools","typescript","ts","javascript","js"],"repository":{"type":"git","url":"git+https://github.com/ArturNiko/multithread-js.git"},"author":{"name":"Artur Papikian"},"bugs":{"url":"https://github.com/ArturNiko/multithread-js/issues"},"license":"MIT","readme":"<img src=\"./assets/MC_Dark.png\">\n\n\n### Light and easy web-tool for accessing multiple threads via web workers.\n<br />\n\n## Features \n\n- Access to multiple threads.\n- Possibility to chain workers for each individual thread (Up to 64).\n- Multiple modes for each thread pool (keep alive | remove | First Keep Alive Rest Remove).\n- Race and regular modus for all threads.\n- Access to object parameters (\"rescoping\") and their modification.\n<br />\n\n\n## Notes\n\nThis is **WEB**-tool.\n\n<br />\n\n\n## General\n\n```javascript\nimport MC from '@a4turp/multithreading'\n//or\nconst MC = require('@a4turp/multithreading').default\n\n/**\n * @param Number\n * Limits the number of created threads. \n * Maximum number is 'navigator.hardwareConcurrency - 1' value.\n * \n * @description Initializes new threads/worker wrappers.\n */\nMC.initialize(999)\n\n\n```\n\n```javascript\n/**\n * @param Boolean\n * Log out showcase notifications.\n * \n * @description Runs a showcase.\n */\nMC.test(true)\n```\n\n```javascript\n/**\n * @param any\n * The Parameter which is going to be passed to the functions of every worker in every thread pool.\n * @return Promise<Any>\n *     \n * @description Runs every available thread pool and returns the fastest resolved response.\n */\nawait MC.race()\n```\n\n```javascript\n/**\n * @param any\n * The Parameter which is going to be passed to the functions of every worker in every thread pool.\n * @return Promise<Array>\n *     \n * @description Runs every available thread pool and returns every resolved response in array.\n */\nawait MC.all()\n```\n\n```javascript\n/**\n * @description Restarts every thread pool.\n */\nMC.restart()\n```\n\n```javascript\n// Getters\nMC.limit //Thread count limit.\nMC.mode //Threads controller mode: regular | race.\n```\n\n```javascript\n// Setters\n\n/**\n * @type 'keep_alive'|'fkarr'|'remove'\n * @description sets pool mode for every thread pool.\n * 'keep_alive' After running thread, all workers remain.\n * 'fkarr' After running thread, only irst worker remains.\n * 'remove' After running thread, all workers are getting removed.\n *\n */\nMC.threadsMode\n```\n<br />\n\n\n## Individual pool\n\nAfter we initialized threads we can access our pools.\n\n```javascript\n\n/**\n *  @description \n *      Passed value is accessable under data subkey of the parameter.\n *      Chained function will get computed message of previous function.\n *      \n *  @note \n *      Chained methods will accept only their own parameters.\n *      It means: only 'message' and 'exec_time' keys are accessible from previous message.\n */\nfunction testFunc(message, exec_time) {\n    const start = performance.now()\n    let value = 0\n    for (let i = 0; i < 1000000000; i++) value += i\n    \n\n    //postMessage is mandatory and should be used instead of return\n    postMessage({\n        exec_time: performance.now() - start + (exec_time ?? 0),\n        message: message\n    })\n}\n\nMC.threads[0].add(testFunc, /* ... */)\nMC.add(0, testFunc, /* ... */)\n```\n\n```javascript\n/**\n * @param any\n * The Parameter which is going to be passed to the functions of every worker.\n * @return Promise<any>\n *\n * @description Runs every worker one after the other in the pool.\n */\nMC.threads[0].run('your massage')\nMC.run(0, 'your massage')\n```\n\n```javascript\n/**\n * @param Number\n * Position of the worker in array.\n * \n * @description Removes worker from the pool.\n */\nMC.threads[0].remove()\nMC.remove(0)\n```\n\n```javascript\n/**\n * @description Removes last worker from the pool.\n */\nMC.threads[0].pop()\nMC.pop(0)\n```\n\n```javascript\n/**\n * @description Clears the pool.\n */\nMC.threads[0].clear()\nMC.clear(0)\n```\n\n```javascript\n/**\n * @description Terminates only the worker in the pool.\n */\nMC.threads[0].softTerminate()\nMC.softTerminate(0)\n```\n\n```javascript\n/**\n * @description Terminates the worker and its settings in the pool.\n */\nMC.threads[0].terminate()\nMC.terminate(0)\n```\n\n```javascript\n/**\n * @description Restarts workers in the pool. \n */\nMC.threads[0].restart()\nMC.restart(0)\n```\n\n```javascript\n// Getters\nMC.threads[0].state //State of the pool.\nMC.threads[0].pool //Workers array.\nMC.threads[0].name //Name of the pool.\nMC.threads[0].mode //Pool mode 'keep_alive'|'fkarr'|'remove'.\n\nMC.threads[0].isKeepingAlive //Pool keeps workers alive?\nMC.threads[0].isFKARR //Pool keeps only first worker alive?\nMC.threads[0].isRemoving //Pool removes all workers?\n```\n\n```javascript\n// Setters\n\n/**\n * @type 'keep_alive'|'fkarr'|'remove'\n * @description sets pool mode.\n * 'keep_alive' After running thread, all workers remain.\n * 'fkarr' After running thread, only first worker remains.\n * 'remove' After running thread, all workers are getting removed.\n * \n */\nMC.threads[0].pool[0].mode\n```\n<br />\n\n\n## Individual thread\n\nAfter adding workers in our thread pools, we can access each of them in `pool` sub key of WorkerPool class.\n\n```javascript\n// .....\n\nfunction testFunc(message) { /*...*/ }\n\n/**\n * @param Function?\n * Function that will be called every time, when worker is called.\n * If no function passed, 'create' will be ignored.\n * \n * @description Initializes worker in certain thread pool.\n */\n\nMC.threads[0].pool[0].initialize(testFunc, testFunc)\n```\n\n```javascript\n/**\n * @param any\n * The Parameter which is going to be passed to the function.\n * @return Promise<any>\n * \n * @description Executes the worker function.\n */\nawait MC.threads[0].pool[0].run('your message')\n```\n\n```javascript\n/**\n * @description Restarts the worker.\n */\nMC.threads[0].pool[0].restart()\n```\n\n```javascript\n/**\n * @description Terminates only the worker.\n */\nMC.threads[0].pool[0].softTerminate()\n```\n\n```javascript\n/**\n * @description Terminates the worker and its settings.\n */\nMC.threads[0].pool[0].terminate()\n```\n\n```javascript\n// Getters\nMC.threads[0].pool[0].state //state of the worker.\nMC.threads[0].pool[0].method //eval(method).\nMC.threads[0].pool[0].bytes //uint8 array buffer of method.\nMC.threads[0].pool[0].url //worker url.\n\nMC.threads[0].pool[0].isReady //worker is ready?\nMC.threads[0].pool[0].isRunning //worker is running?\nMC.threads[0].pool[0].isSleeping //worker is sleeping?\n```\n<br />\n\n\n## Changes\n\n| Version |  Type   |   Date   | Description                                                      |\n|---------|:-------:|:--------:|:-----------------------------------------------------------------|\n| 0.2.0   | change  | 10.02.23 | Callback is not editable.                                        |\n| 0.4.0   | change  | 28.03.23 | Threads limit changed to `navigator.hardwareConcurrency` - 1.    |\n| 0.4.0   | change  | 28.03.23 | Threads are located in 'threads' array parameter.                |\n| 0.4.0   | change  | 28.03.23 | Threads are pools of worker wrappers.                            |\n| 0.4.0   | feature | 28.03.23 | Pools are able to chain functions. 🤩                            |\n| 0.4.0   | change  | 28.03.23 | Workers are now getting initialized my `initialize` method.      |\n| 0.4.1   |  fix⚠️  | 29.03.23 | Fixed method parsing for static and regular class methods.       |\n| 0.5.0   |  fix⚠️  | 30.03.23 | Finally fixed import for npm.                                    |\n| 0.5.0   | feature | 30.03.23 | Finally added `require` support.                                 |\n| 0.6.0   | feature | 07.04.23 | Support of scope modification. ⭐️                                |\n| 0.6.0   | change  | 07.04.23 | Pool access shortcuts.                                           |\n| 0.6.2   |  fix⚠️  | 12.04.23 | Fixed module `requiring`.                                        |\n| 0.6.3   |  fix⚠️  | 12.04.23 | Removed assets.                                                  |\n| 0.6.*   |  dev🧪  | 17.04.23 | Development changes.                                             |\n| 1.0.0   |  fix⚠️  | 17.04.23 | Fixed short key assigning issue.                                 |\n\n","readmeFilename":"README.md"}