rahad-media-downloader 2.1.10 → 2.1.13
Sign up to get free protection for your applications and to get access to all the features.
- package/.cache/replit/modules/nodejs-20.res +1 -0
- package/.cache/replit/modules/replit.res +1 -0
- package/.cache/typescript/5.3/node_modules/.package-lock.json +6 -0
- package/.cache/typescript/5.3/node_modules/@types/qs/LICENSE +21 -0
- package/.cache/typescript/5.3/node_modules/@types/qs/README.md +15 -0
- package/.cache/typescript/5.3/node_modules/@types/qs/index.d.ts +79 -0
- package/.cache/typescript/5.3/node_modules/@types/qs/package.json +65 -0
- package/.cache/typescript/5.3/package-lock.json +7 -0
- package/.cache/typescript/5.3/package.json +1 -1
- package/.cache/typescript/5.4/node_modules/.package-lock.json +185 -0
- package/.cache/typescript/5.4/node_modules/@types/caseless/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/caseless/README.md +48 -0
- package/.cache/typescript/5.4/node_modules/@types/caseless/index.d.ts +29 -0
- package/.cache/typescript/5.4/node_modules/@types/caseless/package.json +35 -0
- package/.cache/typescript/5.4/node_modules/@types/domhandler/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/domhandler/README.md +92 -0
- package/.cache/typescript/5.4/node_modules/@types/domhandler/index.d.ts +73 -0
- package/.cache/typescript/5.4/node_modules/@types/domhandler/package.json +25 -0
- package/.cache/typescript/5.4/node_modules/@types/domutils/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/domutils/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/domutils/index.d.ts +124 -0
- package/.cache/typescript/5.4/node_modules/@types/domutils/package.json +27 -0
- package/.cache/typescript/5.4/node_modules/@types/htmlparser2/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/htmlparser2/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/htmlparser2/index.d.ts +120 -0
- package/.cache/typescript/5.4/node_modules/@types/htmlparser2/package.json +45 -0
- package/.cache/typescript/5.4/node_modules/@types/node/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/node/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/node/assert/strict.d.ts +8 -0
- package/.cache/typescript/5.4/node_modules/@types/node/assert.d.ts +1040 -0
- package/.cache/typescript/5.4/node_modules/@types/node/async_hooks.d.ts +541 -0
- package/.cache/typescript/5.4/node_modules/@types/node/buffer.d.ts +2363 -0
- package/.cache/typescript/5.4/node_modules/@types/node/child_process.d.ts +1542 -0
- package/.cache/typescript/5.4/node_modules/@types/node/cluster.d.ts +578 -0
- package/.cache/typescript/5.4/node_modules/@types/node/console.d.ts +452 -0
- package/.cache/typescript/5.4/node_modules/@types/node/constants.d.ts +19 -0
- package/.cache/typescript/5.4/node_modules/@types/node/crypto.d.ts +4522 -0
- package/.cache/typescript/5.4/node_modules/@types/node/dgram.d.ts +596 -0
- package/.cache/typescript/5.4/node_modules/@types/node/diagnostics_channel.d.ts +545 -0
- package/.cache/typescript/5.4/node_modules/@types/node/dns/promises.d.ts +473 -0
- package/.cache/typescript/5.4/node_modules/@types/node/dns.d.ts +853 -0
- package/.cache/typescript/5.4/node_modules/@types/node/dom-events.d.ts +124 -0
- package/.cache/typescript/5.4/node_modules/@types/node/domain.d.ts +170 -0
- package/.cache/typescript/5.4/node_modules/@types/node/events.d.ts +884 -0
- package/.cache/typescript/5.4/node_modules/@types/node/fs/promises.d.ts +1245 -0
- package/.cache/typescript/5.4/node_modules/@types/node/fs.d.ts +4317 -0
- package/.cache/typescript/5.4/node_modules/@types/node/globals.d.ts +411 -0
- package/.cache/typescript/5.4/node_modules/@types/node/globals.global.d.ts +1 -0
- package/.cache/typescript/5.4/node_modules/@types/node/http.d.ts +1889 -0
- package/.cache/typescript/5.4/node_modules/@types/node/http2.d.ts +2418 -0
- package/.cache/typescript/5.4/node_modules/@types/node/https.d.ts +550 -0
- package/.cache/typescript/5.4/node_modules/@types/node/index.d.ts +89 -0
- package/.cache/typescript/5.4/node_modules/@types/node/inspector.d.ts +2746 -0
- package/.cache/typescript/5.4/node_modules/@types/node/module.d.ts +315 -0
- package/.cache/typescript/5.4/node_modules/@types/node/net.d.ts +996 -0
- package/.cache/typescript/5.4/node_modules/@types/node/os.d.ts +495 -0
- package/.cache/typescript/5.4/node_modules/@types/node/package.json +217 -0
- package/.cache/typescript/5.4/node_modules/@types/node/path.d.ts +191 -0
- package/.cache/typescript/5.4/node_modules/@types/node/perf_hooks.d.ts +645 -0
- package/.cache/typescript/5.4/node_modules/@types/node/process.d.ts +1747 -0
- package/.cache/typescript/5.4/node_modules/@types/node/punycode.d.ts +117 -0
- package/.cache/typescript/5.4/node_modules/@types/node/querystring.d.ts +153 -0
- package/.cache/typescript/5.4/node_modules/@types/node/readline/promises.d.ts +150 -0
- package/.cache/typescript/5.4/node_modules/@types/node/readline.d.ts +540 -0
- package/.cache/typescript/5.4/node_modules/@types/node/repl.d.ts +430 -0
- package/.cache/typescript/5.4/node_modules/@types/node/sea.d.ts +153 -0
- package/.cache/typescript/5.4/node_modules/@types/node/stream/consumers.d.ts +12 -0
- package/.cache/typescript/5.4/node_modules/@types/node/stream/promises.d.ts +83 -0
- package/.cache/typescript/5.4/node_modules/@types/node/stream/web.d.ts +367 -0
- package/.cache/typescript/5.4/node_modules/@types/node/stream.d.ts +1707 -0
- package/.cache/typescript/5.4/node_modules/@types/node/string_decoder.d.ts +67 -0
- package/.cache/typescript/5.4/node_modules/@types/node/test.d.ts +1470 -0
- package/.cache/typescript/5.4/node_modules/@types/node/timers/promises.d.ts +97 -0
- package/.cache/typescript/5.4/node_modules/@types/node/timers.d.ts +240 -0
- package/.cache/typescript/5.4/node_modules/@types/node/tls.d.ts +1217 -0
- package/.cache/typescript/5.4/node_modules/@types/node/trace_events.d.ts +197 -0
- package/.cache/typescript/5.4/node_modules/@types/node/tty.d.ts +208 -0
- package/.cache/typescript/5.4/node_modules/@types/node/url.d.ts +944 -0
- package/.cache/typescript/5.4/node_modules/@types/node/util.d.ts +2276 -0
- package/.cache/typescript/5.4/node_modules/@types/node/v8.d.ts +764 -0
- package/.cache/typescript/5.4/node_modules/@types/node/vm.d.ts +921 -0
- package/.cache/typescript/5.4/node_modules/@types/node/wasi.d.ts +181 -0
- package/.cache/typescript/5.4/node_modules/@types/node/worker_threads.d.ts +691 -0
- package/.cache/typescript/5.4/node_modules/@types/node/zlib.d.ts +530 -0
- package/.cache/typescript/5.4/node_modules/@types/node-fetch/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/node-fetch/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/node-fetch/externals.d.ts +32 -0
- package/.cache/typescript/5.4/node_modules/@types/node-fetch/index.d.ts +238 -0
- package/.cache/typescript/5.4/node_modules/@types/node-fetch/package.json +83 -0
- package/.cache/typescript/5.4/node_modules/@types/qs/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/qs/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/qs/index.d.ts +79 -0
- package/.cache/typescript/5.4/node_modules/@types/qs/package.json +65 -0
- package/.cache/typescript/5.4/node_modules/@types/request/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/request/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/request/index.d.ts +395 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/License +19 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/README.md +350 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/README.md.bak +350 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/index.d.ts +51 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/lib/browser.js +2 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/lib/form_data.js +483 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/lib/populate.js +10 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/package.json +68 -0
- package/.cache/typescript/5.4/node_modules/@types/request/package.json +70 -0
- package/.cache/typescript/5.4/node_modules/@types/tough-cookie/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/tough-cookie/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/tough-cookie/index.d.ts +321 -0
- package/.cache/typescript/5.4/node_modules/@types/tough-cookie/package.json +35 -0
- package/.cache/typescript/5.4/node_modules/asynckit/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/asynckit/README.md +233 -0
- package/.cache/typescript/5.4/node_modules/asynckit/bench.js +76 -0
- package/.cache/typescript/5.4/node_modules/asynckit/index.js +6 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/abort.js +29 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/async.js +34 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/defer.js +26 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/iterate.js +75 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/readable_asynckit.js +91 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/readable_parallel.js +25 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/readable_serial.js +25 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/readable_serial_ordered.js +29 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/state.js +37 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/streamify.js +141 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/terminator.js +29 -0
- package/.cache/typescript/5.4/node_modules/asynckit/package.json +63 -0
- package/.cache/typescript/5.4/node_modules/asynckit/parallel.js +43 -0
- package/.cache/typescript/5.4/node_modules/asynckit/serial.js +17 -0
- package/.cache/typescript/5.4/node_modules/asynckit/serialOrdered.js +75 -0
- package/.cache/typescript/5.4/node_modules/asynckit/stream.js +21 -0
- package/.cache/typescript/5.4/node_modules/combined-stream/License +19 -0
- package/.cache/typescript/5.4/node_modules/combined-stream/Readme.md +138 -0
- package/.cache/typescript/5.4/node_modules/combined-stream/lib/combined_stream.js +208 -0
- package/.cache/typescript/5.4/node_modules/combined-stream/package.json +25 -0
- package/.cache/typescript/5.4/node_modules/combined-stream/yarn.lock +17 -0
- package/.cache/typescript/5.4/node_modules/delayed-stream/License +19 -0
- package/.cache/typescript/5.4/node_modules/delayed-stream/Makefile +7 -0
- package/.cache/typescript/5.4/node_modules/delayed-stream/Readme.md +141 -0
- package/.cache/typescript/5.4/node_modules/delayed-stream/lib/delayed_stream.js +107 -0
- package/.cache/typescript/5.4/node_modules/delayed-stream/package.json +27 -0
- package/.cache/typescript/5.4/node_modules/domelementtype/LICENSE +11 -0
- package/.cache/typescript/5.4/node_modules/domelementtype/index.js +15 -0
- package/.cache/typescript/5.4/node_modules/domelementtype/package.json +16 -0
- package/.cache/typescript/5.4/node_modules/domelementtype/readme.md +1 -0
- package/.cache/typescript/5.4/node_modules/domhandler/.travis.yml +6 -0
- package/.cache/typescript/5.4/node_modules/domhandler/LICENSE +11 -0
- package/.cache/typescript/5.4/node_modules/domhandler/index.js +217 -0
- package/.cache/typescript/5.4/node_modules/domhandler/lib/element.js +20 -0
- package/.cache/typescript/5.4/node_modules/domhandler/lib/node.js +44 -0
- package/.cache/typescript/5.4/node_modules/domhandler/package.json +41 -0
- package/.cache/typescript/5.4/node_modules/domhandler/readme.md +116 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/01-basic.json +57 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/02-single_tag_1.json +21 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/03-single_tag_2.json +21 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/04-unescaped_in_script.json +27 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/05-tags_in_comment.json +18 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/06-comment_in_script.json +18 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/07-unescaped_in_style.json +20 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/08-extra_spaces_in_tag.json +20 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/09-unquoted_attrib.json +20 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/10-singular_attribute.json +15 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/11-text_outside_tags.json +40 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/12-text_only.json +11 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/13-comment_in_text.json +19 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/14-comment_in_text_in_script.json +18 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/15-non-verbose.json +22 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/16-normalize_whitespace.json +47 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/17-xml_namespace.json +18 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/18-enforce_empty_tags.json +16 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/19-ignore_empty_tags.json +20 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/20-template_script_tags.json +20 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/21-conditional_comments.json +15 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/22-lowercase_tags.json +41 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/23-dom-lvl1.json +131 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/24-with-start-indices.json +85 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/25-with-end-indices.json +86 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/tests.js +60 -0
- package/.cache/typescript/5.4/node_modules/form-data/License +19 -0
- package/.cache/typescript/5.4/node_modules/form-data/README.md.bak +358 -0
- package/.cache/typescript/5.4/node_modules/form-data/Readme.md +358 -0
- package/.cache/typescript/5.4/node_modules/form-data/index.d.ts +62 -0
- package/.cache/typescript/5.4/node_modules/form-data/lib/browser.js +2 -0
- package/.cache/typescript/5.4/node_modules/form-data/lib/form_data.js +501 -0
- package/.cache/typescript/5.4/node_modules/form-data/lib/populate.js +10 -0
- package/.cache/typescript/5.4/node_modules/form-data/package.json +68 -0
- package/.cache/typescript/5.4/node_modules/mime-db/HISTORY.md +507 -0
- package/.cache/typescript/5.4/node_modules/mime-db/LICENSE +23 -0
- package/.cache/typescript/5.4/node_modules/mime-db/README.md +100 -0
- package/.cache/typescript/5.4/node_modules/mime-db/db.json +8519 -0
- package/.cache/typescript/5.4/node_modules/mime-db/index.js +12 -0
- package/.cache/typescript/5.4/node_modules/mime-db/package.json +60 -0
- package/.cache/typescript/5.4/node_modules/mime-types/HISTORY.md +397 -0
- package/.cache/typescript/5.4/node_modules/mime-types/LICENSE +23 -0
- package/.cache/typescript/5.4/node_modules/mime-types/README.md +113 -0
- package/.cache/typescript/5.4/node_modules/mime-types/index.js +188 -0
- package/.cache/typescript/5.4/node_modules/mime-types/package.json +44 -0
- package/.cache/typescript/5.4/node_modules/types-registry/README.md +2 -0
- package/.cache/typescript/5.4/node_modules/types-registry/index.json +1 -0
- package/.cache/typescript/5.4/node_modules/types-registry/package.json +20 -0
- package/.cache/typescript/5.4/node_modules/undici-types/README.md +6 -0
- package/.cache/typescript/5.4/node_modules/undici-types/agent.d.ts +31 -0
- package/.cache/typescript/5.4/node_modules/undici-types/api.d.ts +43 -0
- package/.cache/typescript/5.4/node_modules/undici-types/balanced-pool.d.ts +18 -0
- package/.cache/typescript/5.4/node_modules/undici-types/cache.d.ts +36 -0
- package/.cache/typescript/5.4/node_modules/undici-types/client.d.ts +97 -0
- package/.cache/typescript/5.4/node_modules/undici-types/connector.d.ts +34 -0
- package/.cache/typescript/5.4/node_modules/undici-types/content-type.d.ts +21 -0
- package/.cache/typescript/5.4/node_modules/undici-types/cookies.d.ts +28 -0
- package/.cache/typescript/5.4/node_modules/undici-types/diagnostics-channel.d.ts +67 -0
- package/.cache/typescript/5.4/node_modules/undici-types/dispatcher.d.ts +241 -0
- package/.cache/typescript/5.4/node_modules/undici-types/errors.d.ts +128 -0
- package/.cache/typescript/5.4/node_modules/undici-types/fetch.d.ts +209 -0
- package/.cache/typescript/5.4/node_modules/undici-types/file.d.ts +39 -0
- package/.cache/typescript/5.4/node_modules/undici-types/filereader.d.ts +54 -0
- package/.cache/typescript/5.4/node_modules/undici-types/formdata.d.ts +108 -0
- package/.cache/typescript/5.4/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- package/.cache/typescript/5.4/node_modules/undici-types/global-origin.d.ts +7 -0
- package/.cache/typescript/5.4/node_modules/undici-types/handlers.d.ts +9 -0
- package/.cache/typescript/5.4/node_modules/undici-types/header.d.ts +4 -0
- package/.cache/typescript/5.4/node_modules/undici-types/index.d.ts +63 -0
- package/.cache/typescript/5.4/node_modules/undici-types/interceptors.d.ts +5 -0
- package/.cache/typescript/5.4/node_modules/undici-types/mock-agent.d.ts +50 -0
- package/.cache/typescript/5.4/node_modules/undici-types/mock-client.d.ts +25 -0
- package/.cache/typescript/5.4/node_modules/undici-types/mock-errors.d.ts +12 -0
- package/.cache/typescript/5.4/node_modules/undici-types/mock-interceptor.d.ts +93 -0
- package/.cache/typescript/5.4/node_modules/undici-types/mock-pool.d.ts +25 -0
- package/.cache/typescript/5.4/node_modules/undici-types/package.json +55 -0
- package/.cache/typescript/5.4/node_modules/undici-types/patch.d.ts +71 -0
- package/.cache/typescript/5.4/node_modules/undici-types/pool-stats.d.ts +19 -0
- package/.cache/typescript/5.4/node_modules/undici-types/pool.d.ts +28 -0
- package/.cache/typescript/5.4/node_modules/undici-types/proxy-agent.d.ts +30 -0
- package/.cache/typescript/5.4/node_modules/undici-types/readable.d.ts +61 -0
- package/.cache/typescript/5.4/node_modules/undici-types/webidl.d.ts +220 -0
- package/.cache/typescript/5.4/node_modules/undici-types/websocket.d.ts +131 -0
- package/.cache/typescript/5.4/package-lock.json +197 -0
- package/.cache/typescript/5.4/package.json +1 -0
- package/index.js +1 -1
- package/package.json +37 -2
- package/.cache/replit/modules/nodejs-20:v32-20240401-269b323.res +0 -1
- package/.cache/replit/modules/replit:v8-20240329-787bc7d.res +0 -1
@@ -0,0 +1,691 @@
|
|
1
|
+
/**
|
2
|
+
* The `node:worker_threads` module enables the use of threads that execute
|
3
|
+
* JavaScript in parallel. To access it:
|
4
|
+
*
|
5
|
+
* ```js
|
6
|
+
* const worker = require('node:worker_threads');
|
7
|
+
* ```
|
8
|
+
*
|
9
|
+
* Workers (threads) are useful for performing CPU-intensive JavaScript operations.
|
10
|
+
* They do not help much with I/O-intensive work. The Node.js built-in
|
11
|
+
* asynchronous I/O operations are more efficient than Workers can be.
|
12
|
+
*
|
13
|
+
* Unlike `child_process` or `cluster`, `worker_threads` can share memory. They do
|
14
|
+
* so by transferring `ArrayBuffer` instances or sharing `SharedArrayBuffer` instances.
|
15
|
+
*
|
16
|
+
* ```js
|
17
|
+
* const {
|
18
|
+
* Worker, isMainThread, parentPort, workerData,
|
19
|
+
* } = require('node:worker_threads');
|
20
|
+
*
|
21
|
+
* if (isMainThread) {
|
22
|
+
* module.exports = function parseJSAsync(script) {
|
23
|
+
* return new Promise((resolve, reject) => {
|
24
|
+
* const worker = new Worker(__filename, {
|
25
|
+
* workerData: script,
|
26
|
+
* });
|
27
|
+
* worker.on('message', resolve);
|
28
|
+
* worker.on('error', reject);
|
29
|
+
* worker.on('exit', (code) => {
|
30
|
+
* if (code !== 0)
|
31
|
+
* reject(new Error(`Worker stopped with exit code ${code}`));
|
32
|
+
* });
|
33
|
+
* });
|
34
|
+
* };
|
35
|
+
* } else {
|
36
|
+
* const { parse } = require('some-js-parsing-library');
|
37
|
+
* const script = workerData;
|
38
|
+
* parentPort.postMessage(parse(script));
|
39
|
+
* }
|
40
|
+
* ```
|
41
|
+
*
|
42
|
+
* The above example spawns a Worker thread for each `parseJSAsync()` call. In
|
43
|
+
* practice, use a pool of Workers for these kinds of tasks. Otherwise, the
|
44
|
+
* overhead of creating Workers would likely exceed their benefit.
|
45
|
+
*
|
46
|
+
* When implementing a worker pool, use the `AsyncResource` API to inform
|
47
|
+
* diagnostic tools (e.g. to provide asynchronous stack traces) about the
|
48
|
+
* correlation between tasks and their outcomes. See `"Using AsyncResource for a Worker thread pool"` in the `async_hooks` documentation for an example implementation.
|
49
|
+
*
|
50
|
+
* Worker threads inherit non-process-specific options by default. Refer to `Worker constructor options` to know how to customize worker thread options,
|
51
|
+
* specifically `argv` and `execArgv` options.
|
52
|
+
* @see [source](https://github.com/nodejs/node/blob/v20.12.2/lib/worker_threads.js)
|
53
|
+
*/
|
54
|
+
declare module "worker_threads" {
|
55
|
+
import { Blob } from "node:buffer";
|
56
|
+
import { Context } from "node:vm";
|
57
|
+
import { EventEmitter } from "node:events";
|
58
|
+
import { EventLoopUtilityFunction } from "node:perf_hooks";
|
59
|
+
import { FileHandle } from "node:fs/promises";
|
60
|
+
import { Readable, Writable } from "node:stream";
|
61
|
+
import { URL } from "node:url";
|
62
|
+
import { X509Certificate } from "node:crypto";
|
63
|
+
const isMainThread: boolean;
|
64
|
+
const parentPort: null | MessagePort;
|
65
|
+
const resourceLimits: ResourceLimits;
|
66
|
+
const SHARE_ENV: unique symbol;
|
67
|
+
const threadId: number;
|
68
|
+
const workerData: any;
|
69
|
+
/**
|
70
|
+
* Instances of the `worker.MessageChannel` class represent an asynchronous,
|
71
|
+
* two-way communications channel.
|
72
|
+
* The `MessageChannel` has no methods of its own. `new MessageChannel()` yields an object with `port1` and `port2` properties, which refer to linked `MessagePort` instances.
|
73
|
+
*
|
74
|
+
* ```js
|
75
|
+
* const { MessageChannel } = require('node:worker_threads');
|
76
|
+
*
|
77
|
+
* const { port1, port2 } = new MessageChannel();
|
78
|
+
* port1.on('message', (message) => console.log('received', message));
|
79
|
+
* port2.postMessage({ foo: 'bar' });
|
80
|
+
* // Prints: received { foo: 'bar' } from the `port1.on('message')` listener
|
81
|
+
* ```
|
82
|
+
* @since v10.5.0
|
83
|
+
*/
|
84
|
+
class MessageChannel {
|
85
|
+
readonly port1: MessagePort;
|
86
|
+
readonly port2: MessagePort;
|
87
|
+
}
|
88
|
+
interface WorkerPerformance {
|
89
|
+
eventLoopUtilization: EventLoopUtilityFunction;
|
90
|
+
}
|
91
|
+
type TransferListItem = ArrayBuffer | MessagePort | FileHandle | X509Certificate | Blob;
|
92
|
+
/**
|
93
|
+
* Instances of the `worker.MessagePort` class represent one end of an
|
94
|
+
* asynchronous, two-way communications channel. It can be used to transfer
|
95
|
+
* structured data, memory regions and other `MessagePort`s between different `Worker`s.
|
96
|
+
*
|
97
|
+
* This implementation matches [browser `MessagePort`](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort) s.
|
98
|
+
* @since v10.5.0
|
99
|
+
*/
|
100
|
+
class MessagePort extends EventEmitter {
|
101
|
+
/**
|
102
|
+
* Disables further sending of messages on either side of the connection.
|
103
|
+
* This method can be called when no further communication will happen over this `MessagePort`.
|
104
|
+
*
|
105
|
+
* The `'close' event` is emitted on both `MessagePort` instances that
|
106
|
+
* are part of the channel.
|
107
|
+
* @since v10.5.0
|
108
|
+
*/
|
109
|
+
close(): void;
|
110
|
+
/**
|
111
|
+
* Sends a JavaScript value to the receiving side of this channel. `value` is transferred in a way which is compatible with
|
112
|
+
* the [HTML structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm).
|
113
|
+
*
|
114
|
+
* In particular, the significant differences to `JSON` are:
|
115
|
+
*
|
116
|
+
* * `value` may contain circular references.
|
117
|
+
* * `value` may contain instances of builtin JS types such as `RegExp`s, `BigInt`s, `Map`s, `Set`s, etc.
|
118
|
+
* * `value` may contain typed arrays, both using `ArrayBuffer`s
|
119
|
+
* and `SharedArrayBuffer`s.
|
120
|
+
* * `value` may contain [`WebAssembly.Module`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module) instances.
|
121
|
+
* * `value` may not contain native (C++-backed) objects other than:
|
122
|
+
*
|
123
|
+
* ```js
|
124
|
+
* const { MessageChannel } = require('node:worker_threads');
|
125
|
+
* const { port1, port2 } = new MessageChannel();
|
126
|
+
*
|
127
|
+
* port1.on('message', (message) => console.log(message));
|
128
|
+
*
|
129
|
+
* const circularData = {};
|
130
|
+
* circularData.foo = circularData;
|
131
|
+
* // Prints: { foo: [Circular] }
|
132
|
+
* port2.postMessage(circularData);
|
133
|
+
* ```
|
134
|
+
*
|
135
|
+
* `transferList` may be a list of [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer), `MessagePort`, and `FileHandle` objects.
|
136
|
+
* After transferring, they are not usable on the sending side of the channel
|
137
|
+
* anymore (even if they are not contained in `value`). Unlike with `child processes`, transferring handles such as network sockets is currently
|
138
|
+
* not supported.
|
139
|
+
*
|
140
|
+
* If `value` contains [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instances, those are accessible
|
141
|
+
* from either thread. They cannot be listed in `transferList`.
|
142
|
+
*
|
143
|
+
* `value` may still contain `ArrayBuffer` instances that are not in `transferList`; in that case, the underlying memory is copied rather than moved.
|
144
|
+
*
|
145
|
+
* ```js
|
146
|
+
* const { MessageChannel } = require('node:worker_threads');
|
147
|
+
* const { port1, port2 } = new MessageChannel();
|
148
|
+
*
|
149
|
+
* port1.on('message', (message) => console.log(message));
|
150
|
+
*
|
151
|
+
* const uint8Array = new Uint8Array([ 1, 2, 3, 4 ]);
|
152
|
+
* // This posts a copy of `uint8Array`:
|
153
|
+
* port2.postMessage(uint8Array);
|
154
|
+
* // This does not copy data, but renders `uint8Array` unusable:
|
155
|
+
* port2.postMessage(uint8Array, [ uint8Array.buffer ]);
|
156
|
+
*
|
157
|
+
* // The memory for the `sharedUint8Array` is accessible from both the
|
158
|
+
* // original and the copy received by `.on('message')`:
|
159
|
+
* const sharedUint8Array = new Uint8Array(new SharedArrayBuffer(4));
|
160
|
+
* port2.postMessage(sharedUint8Array);
|
161
|
+
*
|
162
|
+
* // This transfers a freshly created message port to the receiver.
|
163
|
+
* // This can be used, for example, to create communication channels between
|
164
|
+
* // multiple `Worker` threads that are children of the same parent thread.
|
165
|
+
* const otherChannel = new MessageChannel();
|
166
|
+
* port2.postMessage({ port: otherChannel.port1 }, [ otherChannel.port1 ]);
|
167
|
+
* ```
|
168
|
+
*
|
169
|
+
* The message object is cloned immediately, and can be modified after
|
170
|
+
* posting without having side effects.
|
171
|
+
*
|
172
|
+
* For more information on the serialization and deserialization mechanisms
|
173
|
+
* behind this API, see the `serialization API of the node:v8 module`.
|
174
|
+
* @since v10.5.0
|
175
|
+
*/
|
176
|
+
postMessage(value: any, transferList?: readonly TransferListItem[]): void;
|
177
|
+
/**
|
178
|
+
* Opposite of `unref()`. Calling `ref()` on a previously `unref()`ed port does _not_ let the program exit if it's the only active handle left (the default
|
179
|
+
* behavior). If the port is `ref()`ed, calling `ref()` again has no effect.
|
180
|
+
*
|
181
|
+
* If listeners are attached or removed using `.on('message')`, the port
|
182
|
+
* is `ref()`ed and `unref()`ed automatically depending on whether
|
183
|
+
* listeners for the event exist.
|
184
|
+
* @since v10.5.0
|
185
|
+
*/
|
186
|
+
ref(): void;
|
187
|
+
/**
|
188
|
+
* Calling `unref()` on a port allows the thread to exit if this is the only
|
189
|
+
* active handle in the event system. If the port is already `unref()`ed calling `unref()` again has no effect.
|
190
|
+
*
|
191
|
+
* If listeners are attached or removed using `.on('message')`, the port is `ref()`ed and `unref()`ed automatically depending on whether
|
192
|
+
* listeners for the event exist.
|
193
|
+
* @since v10.5.0
|
194
|
+
*/
|
195
|
+
unref(): void;
|
196
|
+
/**
|
197
|
+
* Starts receiving messages on this `MessagePort`. When using this port
|
198
|
+
* as an event emitter, this is called automatically once `'message'` listeners are attached.
|
199
|
+
*
|
200
|
+
* This method exists for parity with the Web `MessagePort` API. In Node.js,
|
201
|
+
* it is only useful for ignoring messages when no event listener is present.
|
202
|
+
* Node.js also diverges in its handling of `.onmessage`. Setting it
|
203
|
+
* automatically calls `.start()`, but unsetting it lets messages queue up
|
204
|
+
* until a new handler is set or the port is discarded.
|
205
|
+
* @since v10.5.0
|
206
|
+
*/
|
207
|
+
start(): void;
|
208
|
+
addListener(event: "close", listener: () => void): this;
|
209
|
+
addListener(event: "message", listener: (value: any) => void): this;
|
210
|
+
addListener(event: "messageerror", listener: (error: Error) => void): this;
|
211
|
+
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
212
|
+
emit(event: "close"): boolean;
|
213
|
+
emit(event: "message", value: any): boolean;
|
214
|
+
emit(event: "messageerror", error: Error): boolean;
|
215
|
+
emit(event: string | symbol, ...args: any[]): boolean;
|
216
|
+
on(event: "close", listener: () => void): this;
|
217
|
+
on(event: "message", listener: (value: any) => void): this;
|
218
|
+
on(event: "messageerror", listener: (error: Error) => void): this;
|
219
|
+
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
220
|
+
once(event: "close", listener: () => void): this;
|
221
|
+
once(event: "message", listener: (value: any) => void): this;
|
222
|
+
once(event: "messageerror", listener: (error: Error) => void): this;
|
223
|
+
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
224
|
+
prependListener(event: "close", listener: () => void): this;
|
225
|
+
prependListener(event: "message", listener: (value: any) => void): this;
|
226
|
+
prependListener(event: "messageerror", listener: (error: Error) => void): this;
|
227
|
+
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
228
|
+
prependOnceListener(event: "close", listener: () => void): this;
|
229
|
+
prependOnceListener(event: "message", listener: (value: any) => void): this;
|
230
|
+
prependOnceListener(event: "messageerror", listener: (error: Error) => void): this;
|
231
|
+
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
232
|
+
removeListener(event: "close", listener: () => void): this;
|
233
|
+
removeListener(event: "message", listener: (value: any) => void): this;
|
234
|
+
removeListener(event: "messageerror", listener: (error: Error) => void): this;
|
235
|
+
removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
236
|
+
off(event: "close", listener: () => void): this;
|
237
|
+
off(event: "message", listener: (value: any) => void): this;
|
238
|
+
off(event: "messageerror", listener: (error: Error) => void): this;
|
239
|
+
off(event: string | symbol, listener: (...args: any[]) => void): this;
|
240
|
+
}
|
241
|
+
interface WorkerOptions {
|
242
|
+
/**
|
243
|
+
* List of arguments which would be stringified and appended to
|
244
|
+
* `process.argv` in the worker. This is mostly similar to the `workerData`
|
245
|
+
* but the values will be available on the global `process.argv` as if they
|
246
|
+
* were passed as CLI options to the script.
|
247
|
+
*/
|
248
|
+
argv?: any[] | undefined;
|
249
|
+
env?: NodeJS.Dict<string> | typeof SHARE_ENV | undefined;
|
250
|
+
eval?: boolean | undefined;
|
251
|
+
workerData?: any;
|
252
|
+
stdin?: boolean | undefined;
|
253
|
+
stdout?: boolean | undefined;
|
254
|
+
stderr?: boolean | undefined;
|
255
|
+
execArgv?: string[] | undefined;
|
256
|
+
resourceLimits?: ResourceLimits | undefined;
|
257
|
+
/**
|
258
|
+
* Additional data to send in the first worker message.
|
259
|
+
*/
|
260
|
+
transferList?: TransferListItem[] | undefined;
|
261
|
+
/**
|
262
|
+
* @default true
|
263
|
+
*/
|
264
|
+
trackUnmanagedFds?: boolean | undefined;
|
265
|
+
/**
|
266
|
+
* An optional `name` to be appended to the worker title
|
267
|
+
* for debuggin/identification purposes, making the final title as
|
268
|
+
* `[worker ${id}] ${name}`.
|
269
|
+
*/
|
270
|
+
name?: string | undefined;
|
271
|
+
}
|
272
|
+
interface ResourceLimits {
|
273
|
+
/**
|
274
|
+
* The maximum size of a heap space for recently created objects.
|
275
|
+
*/
|
276
|
+
maxYoungGenerationSizeMb?: number | undefined;
|
277
|
+
/**
|
278
|
+
* The maximum size of the main heap in MB.
|
279
|
+
*/
|
280
|
+
maxOldGenerationSizeMb?: number | undefined;
|
281
|
+
/**
|
282
|
+
* The size of a pre-allocated memory range used for generated code.
|
283
|
+
*/
|
284
|
+
codeRangeSizeMb?: number | undefined;
|
285
|
+
/**
|
286
|
+
* The default maximum stack size for the thread. Small values may lead to unusable Worker instances.
|
287
|
+
* @default 4
|
288
|
+
*/
|
289
|
+
stackSizeMb?: number | undefined;
|
290
|
+
}
|
291
|
+
/**
|
292
|
+
* The `Worker` class represents an independent JavaScript execution thread.
|
293
|
+
* Most Node.js APIs are available inside of it.
|
294
|
+
*
|
295
|
+
* Notable differences inside a Worker environment are:
|
296
|
+
*
|
297
|
+
* * The `process.stdin`, `process.stdout`, and `process.stderr` streams may be redirected by the parent thread.
|
298
|
+
* * The `require('node:worker_threads').isMainThread` property is set to `false`.
|
299
|
+
* * The `require('node:worker_threads').parentPort` message port is available.
|
300
|
+
* * `process.exit()` does not stop the whole program, just the single thread,
|
301
|
+
* and `process.abort()` is not available.
|
302
|
+
* * `process.chdir()` and `process` methods that set group or user ids
|
303
|
+
* are not available.
|
304
|
+
* * `process.env` is a copy of the parent thread's environment variables,
|
305
|
+
* unless otherwise specified. Changes to one copy are not visible in other
|
306
|
+
* threads, and are not visible to native add-ons (unless `worker.SHARE_ENV` is passed as the `env` option to the `Worker` constructor). On Windows, unlike the main thread, a copy of the
|
307
|
+
* environment variables operates in a case-sensitive manner.
|
308
|
+
* * `process.title` cannot be modified.
|
309
|
+
* * Signals are not delivered through `process.on('...')`.
|
310
|
+
* * Execution may stop at any point as a result of `worker.terminate()` being invoked.
|
311
|
+
* * IPC channels from parent processes are not accessible.
|
312
|
+
* * The `trace_events` module is not supported.
|
313
|
+
* * Native add-ons can only be loaded from multiple threads if they fulfill `certain conditions`.
|
314
|
+
*
|
315
|
+
* Creating `Worker` instances inside of other `Worker`s is possible.
|
316
|
+
*
|
317
|
+
* Like [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) and the `node:cluster module`, two-way communication
|
318
|
+
* can be achieved through inter-thread message passing. Internally, a `Worker` has
|
319
|
+
* a built-in pair of `MessagePort` s that are already associated with each
|
320
|
+
* other when the `Worker` is created. While the `MessagePort` object on the parent
|
321
|
+
* side is not directly exposed, its functionalities are exposed through `worker.postMessage()` and the `worker.on('message')` event
|
322
|
+
* on the `Worker` object for the parent thread.
|
323
|
+
*
|
324
|
+
* To create custom messaging channels (which is encouraged over using the default
|
325
|
+
* global channel because it facilitates separation of concerns), users can create
|
326
|
+
* a `MessageChannel` object on either thread and pass one of the`MessagePort`s on that `MessageChannel` to the other thread through a
|
327
|
+
* pre-existing channel, such as the global one.
|
328
|
+
*
|
329
|
+
* See `port.postMessage()` for more information on how messages are passed,
|
330
|
+
* and what kind of JavaScript values can be successfully transported through
|
331
|
+
* the thread barrier.
|
332
|
+
*
|
333
|
+
* ```js
|
334
|
+
* const assert = require('node:assert');
|
335
|
+
* const {
|
336
|
+
* Worker, MessageChannel, MessagePort, isMainThread, parentPort,
|
337
|
+
* } = require('node:worker_threads');
|
338
|
+
* if (isMainThread) {
|
339
|
+
* const worker = new Worker(__filename);
|
340
|
+
* const subChannel = new MessageChannel();
|
341
|
+
* worker.postMessage({ hereIsYourPort: subChannel.port1 }, [subChannel.port1]);
|
342
|
+
* subChannel.port2.on('message', (value) => {
|
343
|
+
* console.log('received:', value);
|
344
|
+
* });
|
345
|
+
* } else {
|
346
|
+
* parentPort.once('message', (value) => {
|
347
|
+
* assert(value.hereIsYourPort instanceof MessagePort);
|
348
|
+
* value.hereIsYourPort.postMessage('the worker is sending this');
|
349
|
+
* value.hereIsYourPort.close();
|
350
|
+
* });
|
351
|
+
* }
|
352
|
+
* ```
|
353
|
+
* @since v10.5.0
|
354
|
+
*/
|
355
|
+
class Worker extends EventEmitter {
|
356
|
+
/**
|
357
|
+
* If `stdin: true` was passed to the `Worker` constructor, this is a
|
358
|
+
* writable stream. The data written to this stream will be made available in
|
359
|
+
* the worker thread as `process.stdin`.
|
360
|
+
* @since v10.5.0
|
361
|
+
*/
|
362
|
+
readonly stdin: Writable | null;
|
363
|
+
/**
|
364
|
+
* This is a readable stream which contains data written to `process.stdout` inside the worker thread. If `stdout: true` was not passed to the `Worker` constructor, then data is piped to the
|
365
|
+
* parent thread's `process.stdout` stream.
|
366
|
+
* @since v10.5.0
|
367
|
+
*/
|
368
|
+
readonly stdout: Readable;
|
369
|
+
/**
|
370
|
+
* This is a readable stream which contains data written to `process.stderr` inside the worker thread. If `stderr: true` was not passed to the `Worker` constructor, then data is piped to the
|
371
|
+
* parent thread's `process.stderr` stream.
|
372
|
+
* @since v10.5.0
|
373
|
+
*/
|
374
|
+
readonly stderr: Readable;
|
375
|
+
/**
|
376
|
+
* An integer identifier for the referenced thread. Inside the worker thread,
|
377
|
+
* it is available as `require('node:worker_threads').threadId`.
|
378
|
+
* This value is unique for each `Worker` instance inside a single process.
|
379
|
+
* @since v10.5.0
|
380
|
+
*/
|
381
|
+
readonly threadId: number;
|
382
|
+
/**
|
383
|
+
* Provides the set of JS engine resource constraints for this Worker thread.
|
384
|
+
* If the `resourceLimits` option was passed to the `Worker` constructor,
|
385
|
+
* this matches its values.
|
386
|
+
*
|
387
|
+
* If the worker has stopped, the return value is an empty object.
|
388
|
+
* @since v13.2.0, v12.16.0
|
389
|
+
*/
|
390
|
+
readonly resourceLimits?: ResourceLimits | undefined;
|
391
|
+
/**
|
392
|
+
* An object that can be used to query performance information from a worker
|
393
|
+
* instance. Similar to `perf_hooks.performance`.
|
394
|
+
* @since v15.1.0, v14.17.0, v12.22.0
|
395
|
+
*/
|
396
|
+
readonly performance: WorkerPerformance;
|
397
|
+
/**
|
398
|
+
* @param filename The path to the Worker’s main script or module.
|
399
|
+
* Must be either an absolute path or a relative path (i.e. relative to the current working directory) starting with ./ or ../,
|
400
|
+
* or a WHATWG URL object using file: protocol. If options.eval is true, this is a string containing JavaScript code rather than a path.
|
401
|
+
*/
|
402
|
+
constructor(filename: string | URL, options?: WorkerOptions);
|
403
|
+
/**
|
404
|
+
* Send a message to the worker that is received via `require('node:worker_threads').parentPort.on('message')`.
|
405
|
+
* See `port.postMessage()` for more details.
|
406
|
+
* @since v10.5.0
|
407
|
+
*/
|
408
|
+
postMessage(value: any, transferList?: readonly TransferListItem[]): void;
|
409
|
+
/**
|
410
|
+
* Opposite of `unref()`, calling `ref()` on a previously `unref()`ed worker does _not_ let the program exit if it's the only active handle left (the default
|
411
|
+
* behavior). If the worker is `ref()`ed, calling `ref()` again has
|
412
|
+
* no effect.
|
413
|
+
* @since v10.5.0
|
414
|
+
*/
|
415
|
+
ref(): void;
|
416
|
+
/**
|
417
|
+
* Calling `unref()` on a worker allows the thread to exit if this is the only
|
418
|
+
* active handle in the event system. If the worker is already `unref()`ed calling `unref()` again has no effect.
|
419
|
+
* @since v10.5.0
|
420
|
+
*/
|
421
|
+
unref(): void;
|
422
|
+
/**
|
423
|
+
* Stop all JavaScript execution in the worker thread as soon as possible.
|
424
|
+
* Returns a Promise for the exit code that is fulfilled when the `'exit' event` is emitted.
|
425
|
+
* @since v10.5.0
|
426
|
+
*/
|
427
|
+
terminate(): Promise<number>;
|
428
|
+
/**
|
429
|
+
* Returns a readable stream for a V8 snapshot of the current state of the Worker.
|
430
|
+
* See `v8.getHeapSnapshot()` for more details.
|
431
|
+
*
|
432
|
+
* If the Worker thread is no longer running, which may occur before the `'exit' event` is emitted, the returned `Promise` is rejected
|
433
|
+
* immediately with an `ERR_WORKER_NOT_RUNNING` error.
|
434
|
+
* @since v13.9.0, v12.17.0
|
435
|
+
* @return A promise for a Readable Stream containing a V8 heap snapshot
|
436
|
+
*/
|
437
|
+
getHeapSnapshot(): Promise<Readable>;
|
438
|
+
addListener(event: "error", listener: (err: Error) => void): this;
|
439
|
+
addListener(event: "exit", listener: (exitCode: number) => void): this;
|
440
|
+
addListener(event: "message", listener: (value: any) => void): this;
|
441
|
+
addListener(event: "messageerror", listener: (error: Error) => void): this;
|
442
|
+
addListener(event: "online", listener: () => void): this;
|
443
|
+
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
444
|
+
emit(event: "error", err: Error): boolean;
|
445
|
+
emit(event: "exit", exitCode: number): boolean;
|
446
|
+
emit(event: "message", value: any): boolean;
|
447
|
+
emit(event: "messageerror", error: Error): boolean;
|
448
|
+
emit(event: "online"): boolean;
|
449
|
+
emit(event: string | symbol, ...args: any[]): boolean;
|
450
|
+
on(event: "error", listener: (err: Error) => void): this;
|
451
|
+
on(event: "exit", listener: (exitCode: number) => void): this;
|
452
|
+
on(event: "message", listener: (value: any) => void): this;
|
453
|
+
on(event: "messageerror", listener: (error: Error) => void): this;
|
454
|
+
on(event: "online", listener: () => void): this;
|
455
|
+
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
456
|
+
once(event: "error", listener: (err: Error) => void): this;
|
457
|
+
once(event: "exit", listener: (exitCode: number) => void): this;
|
458
|
+
once(event: "message", listener: (value: any) => void): this;
|
459
|
+
once(event: "messageerror", listener: (error: Error) => void): this;
|
460
|
+
once(event: "online", listener: () => void): this;
|
461
|
+
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
462
|
+
prependListener(event: "error", listener: (err: Error) => void): this;
|
463
|
+
prependListener(event: "exit", listener: (exitCode: number) => void): this;
|
464
|
+
prependListener(event: "message", listener: (value: any) => void): this;
|
465
|
+
prependListener(event: "messageerror", listener: (error: Error) => void): this;
|
466
|
+
prependListener(event: "online", listener: () => void): this;
|
467
|
+
prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
468
|
+
prependOnceListener(event: "error", listener: (err: Error) => void): this;
|
469
|
+
prependOnceListener(event: "exit", listener: (exitCode: number) => void): this;
|
470
|
+
prependOnceListener(event: "message", listener: (value: any) => void): this;
|
471
|
+
prependOnceListener(event: "messageerror", listener: (error: Error) => void): this;
|
472
|
+
prependOnceListener(event: "online", listener: () => void): this;
|
473
|
+
prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
474
|
+
removeListener(event: "error", listener: (err: Error) => void): this;
|
475
|
+
removeListener(event: "exit", listener: (exitCode: number) => void): this;
|
476
|
+
removeListener(event: "message", listener: (value: any) => void): this;
|
477
|
+
removeListener(event: "messageerror", listener: (error: Error) => void): this;
|
478
|
+
removeListener(event: "online", listener: () => void): this;
|
479
|
+
removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
480
|
+
off(event: "error", listener: (err: Error) => void): this;
|
481
|
+
off(event: "exit", listener: (exitCode: number) => void): this;
|
482
|
+
off(event: "message", listener: (value: any) => void): this;
|
483
|
+
off(event: "messageerror", listener: (error: Error) => void): this;
|
484
|
+
off(event: "online", listener: () => void): this;
|
485
|
+
off(event: string | symbol, listener: (...args: any[]) => void): this;
|
486
|
+
}
|
487
|
+
interface BroadcastChannel extends NodeJS.RefCounted {}
|
488
|
+
/**
|
489
|
+
* Instances of `BroadcastChannel` allow asynchronous one-to-many communication
|
490
|
+
* with all other `BroadcastChannel` instances bound to the same channel name.
|
491
|
+
*
|
492
|
+
* ```js
|
493
|
+
* 'use strict';
|
494
|
+
*
|
495
|
+
* const {
|
496
|
+
* isMainThread,
|
497
|
+
* BroadcastChannel,
|
498
|
+
* Worker,
|
499
|
+
* } = require('node:worker_threads');
|
500
|
+
*
|
501
|
+
* const bc = new BroadcastChannel('hello');
|
502
|
+
*
|
503
|
+
* if (isMainThread) {
|
504
|
+
* let c = 0;
|
505
|
+
* bc.onmessage = (event) => {
|
506
|
+
* console.log(event.data);
|
507
|
+
* if (++c === 10) bc.close();
|
508
|
+
* };
|
509
|
+
* for (let n = 0; n < 10; n++)
|
510
|
+
* new Worker(__filename);
|
511
|
+
* } else {
|
512
|
+
* bc.postMessage('hello from every worker');
|
513
|
+
* bc.close();
|
514
|
+
* }
|
515
|
+
* ```
|
516
|
+
* @since v15.4.0
|
517
|
+
*/
|
518
|
+
class BroadcastChannel {
|
519
|
+
readonly name: string;
|
520
|
+
/**
|
521
|
+
* Invoked with a single \`MessageEvent\` argument when a message is received.
|
522
|
+
* @since v15.4.0
|
523
|
+
*/
|
524
|
+
onmessage: (message: unknown) => void;
|
525
|
+
/**
|
526
|
+
* Invoked with a received message cannot be deserialized.
|
527
|
+
* @since v15.4.0
|
528
|
+
*/
|
529
|
+
onmessageerror: (message: unknown) => void;
|
530
|
+
constructor(name: string);
|
531
|
+
/**
|
532
|
+
* Closes the `BroadcastChannel` connection.
|
533
|
+
* @since v15.4.0
|
534
|
+
*/
|
535
|
+
close(): void;
|
536
|
+
/**
|
537
|
+
* @since v15.4.0
|
538
|
+
* @param message Any cloneable JavaScript value.
|
539
|
+
*/
|
540
|
+
postMessage(message: unknown): void;
|
541
|
+
}
|
542
|
+
/**
|
543
|
+
* Mark an object as not transferable. If `object` occurs in the transfer list of
|
544
|
+
* a `port.postMessage()` call, it is ignored.
|
545
|
+
*
|
546
|
+
* In particular, this makes sense for objects that can be cloned, rather than
|
547
|
+
* transferred, and which are used by other objects on the sending side.
|
548
|
+
* For example, Node.js marks the `ArrayBuffer`s it uses for its `Buffer pool` with this.
|
549
|
+
*
|
550
|
+
* This operation cannot be undone.
|
551
|
+
*
|
552
|
+
* ```js
|
553
|
+
* const { MessageChannel, markAsUntransferable } = require('node:worker_threads');
|
554
|
+
*
|
555
|
+
* const pooledBuffer = new ArrayBuffer(8);
|
556
|
+
* const typedArray1 = new Uint8Array(pooledBuffer);
|
557
|
+
* const typedArray2 = new Float64Array(pooledBuffer);
|
558
|
+
*
|
559
|
+
* markAsUntransferable(pooledBuffer);
|
560
|
+
*
|
561
|
+
* const { port1 } = new MessageChannel();
|
562
|
+
* port1.postMessage(typedArray1, [ typedArray1.buffer ]);
|
563
|
+
*
|
564
|
+
* // The following line prints the contents of typedArray1 -- it still owns
|
565
|
+
* // its memory and has been cloned, not transferred. Without
|
566
|
+
* // `markAsUntransferable()`, this would print an empty Uint8Array.
|
567
|
+
* // typedArray2 is intact as well.
|
568
|
+
* console.log(typedArray1);
|
569
|
+
* console.log(typedArray2);
|
570
|
+
* ```
|
571
|
+
*
|
572
|
+
* There is no equivalent to this API in browsers.
|
573
|
+
* @since v14.5.0, v12.19.0
|
574
|
+
*/
|
575
|
+
function markAsUntransferable(object: object): void;
|
576
|
+
/**
|
577
|
+
* Transfer a `MessagePort` to a different `vm` Context. The original `port` object is rendered unusable, and the returned `MessagePort` instance
|
578
|
+
* takes its place.
|
579
|
+
*
|
580
|
+
* The returned `MessagePort` is an object in the target context and
|
581
|
+
* inherits from its global `Object` class. Objects passed to the [`port.onmessage()`](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/onmessage) listener are also created in the
|
582
|
+
* target context
|
583
|
+
* and inherit from its global `Object` class.
|
584
|
+
*
|
585
|
+
* However, the created `MessagePort` no longer inherits from [`EventTarget`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget), and only
|
586
|
+
* [`port.onmessage()`](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/onmessage) can be used to receive
|
587
|
+
* events using it.
|
588
|
+
* @since v11.13.0
|
589
|
+
* @param port The message port to transfer.
|
590
|
+
* @param contextifiedSandbox A `contextified` object as returned by the `vm.createContext()` method.
|
591
|
+
*/
|
592
|
+
function moveMessagePortToContext(port: MessagePort, contextifiedSandbox: Context): MessagePort;
|
593
|
+
/**
|
594
|
+
* Receive a single message from a given `MessagePort`. If no message is available,`undefined` is returned, otherwise an object with a single `message` property
|
595
|
+
* that contains the message payload, corresponding to the oldest message in the `MessagePort`'s queue.
|
596
|
+
*
|
597
|
+
* ```js
|
598
|
+
* const { MessageChannel, receiveMessageOnPort } = require('node:worker_threads');
|
599
|
+
* const { port1, port2 } = new MessageChannel();
|
600
|
+
* port1.postMessage({ hello: 'world' });
|
601
|
+
*
|
602
|
+
* console.log(receiveMessageOnPort(port2));
|
603
|
+
* // Prints: { message: { hello: 'world' } }
|
604
|
+
* console.log(receiveMessageOnPort(port2));
|
605
|
+
* // Prints: undefined
|
606
|
+
* ```
|
607
|
+
*
|
608
|
+
* When this function is used, no `'message'` event is emitted and the `onmessage` listener is not invoked.
|
609
|
+
* @since v12.3.0
|
610
|
+
*/
|
611
|
+
function receiveMessageOnPort(port: MessagePort):
|
612
|
+
| {
|
613
|
+
message: any;
|
614
|
+
}
|
615
|
+
| undefined;
|
616
|
+
type Serializable = string | object | number | boolean | bigint;
|
617
|
+
/**
|
618
|
+
* Within a worker thread, `worker.getEnvironmentData()` returns a clone
|
619
|
+
* of data passed to the spawning thread's `worker.setEnvironmentData()`.
|
620
|
+
* Every new `Worker` receives its own copy of the environment data
|
621
|
+
* automatically.
|
622
|
+
*
|
623
|
+
* ```js
|
624
|
+
* const {
|
625
|
+
* Worker,
|
626
|
+
* isMainThread,
|
627
|
+
* setEnvironmentData,
|
628
|
+
* getEnvironmentData,
|
629
|
+
* } = require('node:worker_threads');
|
630
|
+
*
|
631
|
+
* if (isMainThread) {
|
632
|
+
* setEnvironmentData('Hello', 'World!');
|
633
|
+
* const worker = new Worker(__filename);
|
634
|
+
* } else {
|
635
|
+
* console.log(getEnvironmentData('Hello')); // Prints 'World!'.
|
636
|
+
* }
|
637
|
+
* ```
|
638
|
+
* @since v15.12.0, v14.18.0
|
639
|
+
* @param key Any arbitrary, cloneable JavaScript value that can be used as a {Map} key.
|
640
|
+
*/
|
641
|
+
function getEnvironmentData(key: Serializable): Serializable;
|
642
|
+
/**
|
643
|
+
* The `worker.setEnvironmentData()` API sets the content of `worker.getEnvironmentData()` in the current thread and all new `Worker` instances spawned from the current context.
|
644
|
+
* @since v15.12.0, v14.18.0
|
645
|
+
* @param key Any arbitrary, cloneable JavaScript value that can be used as a {Map} key.
|
646
|
+
* @param value Any arbitrary, cloneable JavaScript value that will be cloned and passed automatically to all new `Worker` instances. If `value` is passed as `undefined`, any previously set value
|
647
|
+
* for the `key` will be deleted.
|
648
|
+
*/
|
649
|
+
function setEnvironmentData(key: Serializable, value: Serializable): void;
|
650
|
+
|
651
|
+
import {
|
652
|
+
BroadcastChannel as _BroadcastChannel,
|
653
|
+
MessageChannel as _MessageChannel,
|
654
|
+
MessagePort as _MessagePort,
|
655
|
+
} from "worker_threads";
|
656
|
+
global {
|
657
|
+
/**
|
658
|
+
* `BroadcastChannel` class is a global reference for `require('worker_threads').BroadcastChannel`
|
659
|
+
* https://nodejs.org/api/globals.html#broadcastchannel
|
660
|
+
* @since v18.0.0
|
661
|
+
*/
|
662
|
+
var BroadcastChannel: typeof globalThis extends {
|
663
|
+
onmessage: any;
|
664
|
+
BroadcastChannel: infer T;
|
665
|
+
} ? T
|
666
|
+
: typeof _BroadcastChannel;
|
667
|
+
/**
|
668
|
+
* `MessageChannel` class is a global reference for `require('worker_threads').MessageChannel`
|
669
|
+
* https://nodejs.org/api/globals.html#messagechannel
|
670
|
+
* @since v15.0.0
|
671
|
+
*/
|
672
|
+
var MessageChannel: typeof globalThis extends {
|
673
|
+
onmessage: any;
|
674
|
+
MessageChannel: infer T;
|
675
|
+
} ? T
|
676
|
+
: typeof _MessageChannel;
|
677
|
+
/**
|
678
|
+
* `MessagePort` class is a global reference for `require('worker_threads').MessagePort`
|
679
|
+
* https://nodejs.org/api/globals.html#messageport
|
680
|
+
* @since v15.0.0
|
681
|
+
*/
|
682
|
+
var MessagePort: typeof globalThis extends {
|
683
|
+
onmessage: any;
|
684
|
+
MessagePort: infer T;
|
685
|
+
} ? T
|
686
|
+
: typeof _MessagePort;
|
687
|
+
}
|
688
|
+
}
|
689
|
+
declare module "node:worker_threads" {
|
690
|
+
export * from "worker_threads";
|
691
|
+
}
|