756325fe1d34296f170a09870fa6e2551bfa42a22f2b772a31314f7d98458abe59fb7a33551a95728079c6bd359eb63cba0b92ff95f92d3a86be5c8e52d722 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623
  1. /**
  2. * We strongly discourage the use of the `async_hooks` API.
  3. * Other APIs that can cover most of its use cases include:
  4. *
  5. * * [`AsyncLocalStorage`](https://nodejs.org/docs/latest-v24.x/api/async_context.html#class-asynclocalstorage) tracks async context
  6. * * [`process.getActiveResourcesInfo()`](https://nodejs.org/docs/latest-v24.x/api/process.html#processgetactiveresourcesinfo) tracks active resources
  7. *
  8. * The `node:async_hooks` module provides an API to track asynchronous resources.
  9. * It can be accessed using:
  10. *
  11. * ```js
  12. * import async_hooks from 'node:async_hooks';
  13. * ```
  14. * @experimental
  15. * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/async_hooks.js)
  16. */
  17. declare module "async_hooks" {
  18. /**
  19. * ```js
  20. * import { executionAsyncId } from 'node:async_hooks';
  21. * import fs from 'node:fs';
  22. *
  23. * console.log(executionAsyncId()); // 1 - bootstrap
  24. * const path = '.';
  25. * fs.open(path, 'r', (err, fd) => {
  26. * console.log(executionAsyncId()); // 6 - open()
  27. * });
  28. * ```
  29. *
  30. * The ID returned from `executionAsyncId()` is related to execution timing, not
  31. * causality (which is covered by `triggerAsyncId()`):
  32. *
  33. * ```js
  34. * const server = net.createServer((conn) => {
  35. * // Returns the ID of the server, not of the new connection, because the
  36. * // callback runs in the execution scope of the server's MakeCallback().
  37. * async_hooks.executionAsyncId();
  38. *
  39. * }).listen(port, () => {
  40. * // Returns the ID of a TickObject (process.nextTick()) because all
  41. * // callbacks passed to .listen() are wrapped in a nextTick().
  42. * async_hooks.executionAsyncId();
  43. * });
  44. * ```
  45. *
  46. * Promise contexts may not get precise `executionAsyncIds` by default.
  47. * See the section on [promise execution tracking](https://nodejs.org/docs/latest-v24.x/api/async_hooks.html#promise-execution-tracking).
  48. * @since v8.1.0
  49. * @return The `asyncId` of the current execution context. Useful to track when something calls.
  50. */
  51. function executionAsyncId(): number;
  52. /**
  53. * Resource objects returned by `executionAsyncResource()` are most often internal
  54. * Node.js handle objects with undocumented APIs. Using any functions or properties
  55. * on the object is likely to crash your application and should be avoided.
  56. *
  57. * Using `executionAsyncResource()` in the top-level execution context will
  58. * return an empty object as there is no handle or request object to use,
  59. * but having an object representing the top-level can be helpful.
  60. *
  61. * ```js
  62. * import { open } from 'node:fs';
  63. * import { executionAsyncId, executionAsyncResource } from 'node:async_hooks';
  64. *
  65. * console.log(executionAsyncId(), executionAsyncResource()); // 1 {}
  66. * open(new URL(import.meta.url), 'r', (err, fd) => {
  67. * console.log(executionAsyncId(), executionAsyncResource()); // 7 FSReqWrap
  68. * });
  69. * ```
  70. *
  71. * This can be used to implement continuation local storage without the
  72. * use of a tracking `Map` to store the metadata:
  73. *
  74. * ```js
  75. * import { createServer } from 'node:http';
  76. * import {
  77. * executionAsyncId,
  78. * executionAsyncResource,
  79. * createHook,
  80. * } from 'node:async_hooks';
  81. * const sym = Symbol('state'); // Private symbol to avoid pollution
  82. *
  83. * createHook({
  84. * init(asyncId, type, triggerAsyncId, resource) {
  85. * const cr = executionAsyncResource();
  86. * if (cr) {
  87. * resource[sym] = cr[sym];
  88. * }
  89. * },
  90. * }).enable();
  91. *
  92. * const server = createServer((req, res) => {
  93. * executionAsyncResource()[sym] = { state: req.url };
  94. * setTimeout(function() {
  95. * res.end(JSON.stringify(executionAsyncResource()[sym]));
  96. * }, 100);
  97. * }).listen(3000);
  98. * ```
  99. * @since v13.9.0, v12.17.0
  100. * @return The resource representing the current execution. Useful to store data within the resource.
  101. */
  102. function executionAsyncResource(): object;
  103. /**
  104. * ```js
  105. * const server = net.createServer((conn) => {
  106. * // The resource that caused (or triggered) this callback to be called
  107. * // was that of the new connection. Thus the return value of triggerAsyncId()
  108. * // is the asyncId of "conn".
  109. * async_hooks.triggerAsyncId();
  110. *
  111. * }).listen(port, () => {
  112. * // Even though all callbacks passed to .listen() are wrapped in a nextTick()
  113. * // the callback itself exists because the call to the server's .listen()
  114. * // was made. So the return value would be the ID of the server.
  115. * async_hooks.triggerAsyncId();
  116. * });
  117. * ```
  118. *
  119. * Promise contexts may not get valid `triggerAsyncId`s by default. See
  120. * the section on [promise execution tracking](https://nodejs.org/docs/latest-v24.x/api/async_hooks.html#promise-execution-tracking).
  121. * @return The ID of the resource responsible for calling the callback that is currently being executed.
  122. */
  123. function triggerAsyncId(): number;
  124. interface HookCallbacks {
  125. /**
  126. * Called when a class is constructed that has the possibility to emit an asynchronous event.
  127. * @param asyncId A unique ID for the async resource
  128. * @param type The type of the async resource
  129. * @param triggerAsyncId The unique ID of the async resource in whose execution context this async resource was created
  130. * @param resource Reference to the resource representing the async operation, needs to be released during destroy
  131. */
  132. init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void;
  133. /**
  134. * When an asynchronous operation is initiated or completes a callback is called to notify the user.
  135. * The before callback is called just before said callback is executed.
  136. * @param asyncId the unique identifier assigned to the resource about to execute the callback.
  137. */
  138. before?(asyncId: number): void;
  139. /**
  140. * Called immediately after the callback specified in `before` is completed.
  141. *
  142. * If an uncaught exception occurs during execution of the callback, then `after` will run after the `'uncaughtException'` event is emitted or a `domain`'s handler runs.
  143. * @param asyncId the unique identifier assigned to the resource which has executed the callback.
  144. */
  145. after?(asyncId: number): void;
  146. /**
  147. * Called when a promise has resolve() called. This may not be in the same execution id
  148. * as the promise itself.
  149. * @param asyncId the unique id for the promise that was resolve()d.
  150. */
  151. promiseResolve?(asyncId: number): void;
  152. /**
  153. * Called after the resource corresponding to asyncId is destroyed
  154. * @param asyncId a unique ID for the async resource
  155. */
  156. destroy?(asyncId: number): void;
  157. }
  158. interface AsyncHook {
  159. /**
  160. * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
  161. */
  162. enable(): this;
  163. /**
  164. * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled.
  165. */
  166. disable(): this;
  167. }
  168. /**
  169. * Registers functions to be called for different lifetime events of each async
  170. * operation.
  171. *
  172. * The callbacks `init()`/`before()`/`after()`/`destroy()` are called for the
  173. * respective asynchronous event during a resource's lifetime.
  174. *
  175. * All callbacks are optional. For example, if only resource cleanup needs to
  176. * be tracked, then only the `destroy` callback needs to be passed. The
  177. * specifics of all functions that can be passed to `callbacks` is in the `Hook Callbacks` section.
  178. *
  179. * ```js
  180. * import { createHook } from 'node:async_hooks';
  181. *
  182. * const asyncHook = createHook({
  183. * init(asyncId, type, triggerAsyncId, resource) { },
  184. * destroy(asyncId) { },
  185. * });
  186. * ```
  187. *
  188. * The callbacks will be inherited via the prototype chain:
  189. *
  190. * ```js
  191. * class MyAsyncCallbacks {
  192. * init(asyncId, type, triggerAsyncId, resource) { }
  193. * destroy(asyncId) {}
  194. * }
  195. *
  196. * class MyAddedCallbacks extends MyAsyncCallbacks {
  197. * before(asyncId) { }
  198. * after(asyncId) { }
  199. * }
  200. *
  201. * const asyncHook = async_hooks.createHook(new MyAddedCallbacks());
  202. * ```
  203. *
  204. * Because promises are asynchronous resources whose lifecycle is tracked
  205. * via the async hooks mechanism, the `init()`, `before()`, `after()`, and`destroy()` callbacks _must not_ be async functions that return promises.
  206. * @since v8.1.0
  207. * @param callbacks The `Hook Callbacks` to register
  208. * @return Instance used for disabling and enabling hooks
  209. */
  210. function createHook(callbacks: HookCallbacks): AsyncHook;
  211. interface AsyncResourceOptions {
  212. /**
  213. * The ID of the execution context that created this async event.
  214. * @default executionAsyncId()
  215. */
  216. triggerAsyncId?: number | undefined;
  217. /**
  218. * Disables automatic `emitDestroy` when the object is garbage collected.
  219. * This usually does not need to be set (even if `emitDestroy` is called
  220. * manually), unless the resource's `asyncId` is retrieved and the
  221. * sensitive API's `emitDestroy` is called with it.
  222. * @default false
  223. */
  224. requireManualDestroy?: boolean | undefined;
  225. }
  226. /**
  227. * The class `AsyncResource` is designed to be extended by the embedder's async
  228. * resources. Using this, users can easily trigger the lifetime events of their
  229. * own resources.
  230. *
  231. * The `init` hook will trigger when an `AsyncResource` is instantiated.
  232. *
  233. * The following is an overview of the `AsyncResource` API.
  234. *
  235. * ```js
  236. * import { AsyncResource, executionAsyncId } from 'node:async_hooks';
  237. *
  238. * // AsyncResource() is meant to be extended. Instantiating a
  239. * // new AsyncResource() also triggers init. If triggerAsyncId is omitted then
  240. * // async_hook.executionAsyncId() is used.
  241. * const asyncResource = new AsyncResource(
  242. * type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false },
  243. * );
  244. *
  245. * // Run a function in the execution context of the resource. This will
  246. * // * establish the context of the resource
  247. * // * trigger the AsyncHooks before callbacks
  248. * // * call the provided function `fn` with the supplied arguments
  249. * // * trigger the AsyncHooks after callbacks
  250. * // * restore the original execution context
  251. * asyncResource.runInAsyncScope(fn, thisArg, ...args);
  252. *
  253. * // Call AsyncHooks destroy callbacks.
  254. * asyncResource.emitDestroy();
  255. *
  256. * // Return the unique ID assigned to the AsyncResource instance.
  257. * asyncResource.asyncId();
  258. *
  259. * // Return the trigger ID for the AsyncResource instance.
  260. * asyncResource.triggerAsyncId();
  261. * ```
  262. */
  263. class AsyncResource {
  264. /**
  265. * AsyncResource() is meant to be extended. Instantiating a
  266. * new AsyncResource() also triggers init. If triggerAsyncId is omitted then
  267. * async_hook.executionAsyncId() is used.
  268. * @param type The type of async event.
  269. * @param triggerAsyncId The ID of the execution context that created
  270. * this async event (default: `executionAsyncId()`), or an
  271. * AsyncResourceOptions object (since v9.3.0)
  272. */
  273. constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions);
  274. /**
  275. * Binds the given function to the current execution context.
  276. * @since v14.8.0, v12.19.0
  277. * @param fn The function to bind to the current execution context.
  278. * @param type An optional name to associate with the underlying `AsyncResource`.
  279. */
  280. static bind<Func extends (this: ThisArg, ...args: any[]) => any, ThisArg>(
  281. fn: Func,
  282. type?: string,
  283. thisArg?: ThisArg,
  284. ): Func;
  285. /**
  286. * Binds the given function to execute to this `AsyncResource`'s scope.
  287. * @since v14.8.0, v12.19.0
  288. * @param fn The function to bind to the current `AsyncResource`.
  289. */
  290. bind<Func extends (...args: any[]) => any>(fn: Func): Func;
  291. /**
  292. * Call the provided function with the provided arguments in the execution context
  293. * of the async resource. This will establish the context, trigger the AsyncHooks
  294. * before callbacks, call the function, trigger the AsyncHooks after callbacks, and
  295. * then restore the original execution context.
  296. * @since v9.6.0
  297. * @param fn The function to call in the execution context of this async resource.
  298. * @param thisArg The receiver to be used for the function call.
  299. * @param args Optional arguments to pass to the function.
  300. */
  301. runInAsyncScope<This, Result>(
  302. fn: (this: This, ...args: any[]) => Result,
  303. thisArg?: This,
  304. ...args: any[]
  305. ): Result;
  306. /**
  307. * Call all `destroy` hooks. This should only ever be called once. An error will
  308. * be thrown if it is called more than once. This **must** be manually called. If
  309. * the resource is left to be collected by the GC then the `destroy` hooks will
  310. * never be called.
  311. * @return A reference to `asyncResource`.
  312. */
  313. emitDestroy(): this;
  314. /**
  315. * @return The unique `asyncId` assigned to the resource.
  316. */
  317. asyncId(): number;
  318. /**
  319. * @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor.
  320. */
  321. triggerAsyncId(): number;
  322. }
  323. interface AsyncLocalStorageOptions {
  324. /**
  325. * The default value to be used when no store is provided.
  326. */
  327. defaultValue?: any;
  328. /**
  329. * A name for the `AsyncLocalStorage` value.
  330. */
  331. name?: string | undefined;
  332. }
  333. /**
  334. * This class creates stores that stay coherent through asynchronous operations.
  335. *
  336. * While you can create your own implementation on top of the `node:async_hooks` module, `AsyncLocalStorage` should be preferred as it is a performant and memory
  337. * safe implementation that involves significant optimizations that are non-obvious
  338. * to implement.
  339. *
  340. * The following example uses `AsyncLocalStorage` to build a simple logger
  341. * that assigns IDs to incoming HTTP requests and includes them in messages
  342. * logged within each request.
  343. *
  344. * ```js
  345. * import http from 'node:http';
  346. * import { AsyncLocalStorage } from 'node:async_hooks';
  347. *
  348. * const asyncLocalStorage = new AsyncLocalStorage();
  349. *
  350. * function logWithId(msg) {
  351. * const id = asyncLocalStorage.getStore();
  352. * console.log(`${id !== undefined ? id : '-'}:`, msg);
  353. * }
  354. *
  355. * let idSeq = 0;
  356. * http.createServer((req, res) => {
  357. * asyncLocalStorage.run(idSeq++, () => {
  358. * logWithId('start');
  359. * // Imagine any chain of async operations here
  360. * setImmediate(() => {
  361. * logWithId('finish');
  362. * res.end();
  363. * });
  364. * });
  365. * }).listen(8080);
  366. *
  367. * http.get('http://localhost:8080');
  368. * http.get('http://localhost:8080');
  369. * // Prints:
  370. * // 0: start
  371. * // 0: finish
  372. * // 1: start
  373. * // 1: finish
  374. * ```
  375. *
  376. * Each instance of `AsyncLocalStorage` maintains an independent storage context.
  377. * Multiple instances can safely exist simultaneously without risk of interfering
  378. * with each other's data.
  379. * @since v13.10.0, v12.17.0
  380. */
  381. class AsyncLocalStorage<T> {
  382. /**
  383. * Creates a new instance of `AsyncLocalStorage`. Store is only provided within a
  384. * `run()` call or after an `enterWith()` call.
  385. */
  386. constructor(options?: AsyncLocalStorageOptions);
  387. /**
  388. * Binds the given function to the current execution context.
  389. * @since v19.8.0
  390. * @param fn The function to bind to the current execution context.
  391. * @return A new function that calls `fn` within the captured execution context.
  392. */
  393. static bind<Func extends (...args: any[]) => any>(fn: Func): Func;
  394. /**
  395. * Captures the current execution context and returns a function that accepts a
  396. * function as an argument. Whenever the returned function is called, it
  397. * calls the function passed to it within the captured context.
  398. *
  399. * ```js
  400. * const asyncLocalStorage = new AsyncLocalStorage();
  401. * const runInAsyncScope = asyncLocalStorage.run(123, () => AsyncLocalStorage.snapshot());
  402. * const result = asyncLocalStorage.run(321, () => runInAsyncScope(() => asyncLocalStorage.getStore()));
  403. * console.log(result); // returns 123
  404. * ```
  405. *
  406. * AsyncLocalStorage.snapshot() can replace the use of AsyncResource for simple
  407. * async context tracking purposes, for example:
  408. *
  409. * ```js
  410. * class Foo {
  411. * #runInAsyncScope = AsyncLocalStorage.snapshot();
  412. *
  413. * get() { return this.#runInAsyncScope(() => asyncLocalStorage.getStore()); }
  414. * }
  415. *
  416. * const foo = asyncLocalStorage.run(123, () => new Foo());
  417. * console.log(asyncLocalStorage.run(321, () => foo.get())); // returns 123
  418. * ```
  419. * @since v19.8.0
  420. * @return A new function with the signature `(fn: (...args) : R, ...args) : R`.
  421. */
  422. static snapshot(): <R, TArgs extends any[]>(fn: (...args: TArgs) => R, ...args: TArgs) => R;
  423. /**
  424. * Disables the instance of `AsyncLocalStorage`. All subsequent calls
  425. * to `asyncLocalStorage.getStore()` will return `undefined` until `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again.
  426. *
  427. * When calling `asyncLocalStorage.disable()`, all current contexts linked to the
  428. * instance will be exited.
  429. *
  430. * Calling `asyncLocalStorage.disable()` is required before the `asyncLocalStorage` can be garbage collected. This does not apply to stores
  431. * provided by the `asyncLocalStorage`, as those objects are garbage collected
  432. * along with the corresponding async resources.
  433. *
  434. * Use this method when the `asyncLocalStorage` is not in use anymore
  435. * in the current process.
  436. * @since v13.10.0, v12.17.0
  437. * @experimental
  438. */
  439. disable(): void;
  440. /**
  441. * Returns the current store.
  442. * If called outside of an asynchronous context initialized by
  443. * calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it
  444. * returns `undefined`.
  445. * @since v13.10.0, v12.17.0
  446. */
  447. getStore(): T | undefined;
  448. /**
  449. * The name of the `AsyncLocalStorage` instance if provided.
  450. * @since v24.0.0
  451. */
  452. readonly name: string;
  453. /**
  454. * Runs a function synchronously within a context and returns its
  455. * return value. The store is not accessible outside of the callback function.
  456. * The store is accessible to any asynchronous operations created within the
  457. * callback.
  458. *
  459. * The optional `args` are passed to the callback function.
  460. *
  461. * If the callback function throws an error, the error is thrown by `run()` too.
  462. * The stacktrace is not impacted by this call and the context is exited.
  463. *
  464. * Example:
  465. *
  466. * ```js
  467. * const store = { id: 2 };
  468. * try {
  469. * asyncLocalStorage.run(store, () => {
  470. * asyncLocalStorage.getStore(); // Returns the store object
  471. * setTimeout(() => {
  472. * asyncLocalStorage.getStore(); // Returns the store object
  473. * }, 200);
  474. * throw new Error();
  475. * });
  476. * } catch (e) {
  477. * asyncLocalStorage.getStore(); // Returns undefined
  478. * // The error will be caught here
  479. * }
  480. * ```
  481. * @since v13.10.0, v12.17.0
  482. */
  483. run<R>(store: T, callback: () => R): R;
  484. run<R, TArgs extends any[]>(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R;
  485. /**
  486. * Runs a function synchronously outside of a context and returns its
  487. * return value. The store is not accessible within the callback function or
  488. * the asynchronous operations created within the callback. Any `getStore()` call done within the callback function will always return `undefined`.
  489. *
  490. * The optional `args` are passed to the callback function.
  491. *
  492. * If the callback function throws an error, the error is thrown by `exit()` too.
  493. * The stacktrace is not impacted by this call and the context is re-entered.
  494. *
  495. * Example:
  496. *
  497. * ```js
  498. * // Within a call to run
  499. * try {
  500. * asyncLocalStorage.getStore(); // Returns the store object or value
  501. * asyncLocalStorage.exit(() => {
  502. * asyncLocalStorage.getStore(); // Returns undefined
  503. * throw new Error();
  504. * });
  505. * } catch (e) {
  506. * asyncLocalStorage.getStore(); // Returns the same object or value
  507. * // The error will be caught here
  508. * }
  509. * ```
  510. * @since v13.10.0, v12.17.0
  511. * @experimental
  512. */
  513. exit<R, TArgs extends any[]>(callback: (...args: TArgs) => R, ...args: TArgs): R;
  514. /**
  515. * Transitions into the context for the remainder of the current
  516. * synchronous execution and then persists the store through any following
  517. * asynchronous calls.
  518. *
  519. * Example:
  520. *
  521. * ```js
  522. * const store = { id: 1 };
  523. * // Replaces previous store with the given store object
  524. * asyncLocalStorage.enterWith(store);
  525. * asyncLocalStorage.getStore(); // Returns the store object
  526. * someAsyncOperation(() => {
  527. * asyncLocalStorage.getStore(); // Returns the same object
  528. * });
  529. * ```
  530. *
  531. * This transition will continue for the _entire_ synchronous execution.
  532. * This means that if, for example, the context is entered within an event
  533. * handler subsequent event handlers will also run within that context unless
  534. * specifically bound to another context with an `AsyncResource`. That is why `run()` should be preferred over `enterWith()` unless there are strong reasons
  535. * to use the latter method.
  536. *
  537. * ```js
  538. * const store = { id: 1 };
  539. *
  540. * emitter.on('my-event', () => {
  541. * asyncLocalStorage.enterWith(store);
  542. * });
  543. * emitter.on('my-event', () => {
  544. * asyncLocalStorage.getStore(); // Returns the same object
  545. * });
  546. *
  547. * asyncLocalStorage.getStore(); // Returns undefined
  548. * emitter.emit('my-event');
  549. * asyncLocalStorage.getStore(); // Returns the same object
  550. * ```
  551. * @since v13.11.0, v12.17.0
  552. * @experimental
  553. */
  554. enterWith(store: T): void;
  555. }
  556. /**
  557. * @since v17.2.0, v16.14.0
  558. * @return A map of provider types to the corresponding numeric id.
  559. * This map contains all the event types that might be emitted by the `async_hooks.init()` event.
  560. */
  561. namespace asyncWrapProviders {
  562. const NONE: number;
  563. const DIRHANDLE: number;
  564. const DNSCHANNEL: number;
  565. const ELDHISTOGRAM: number;
  566. const FILEHANDLE: number;
  567. const FILEHANDLECLOSEREQ: number;
  568. const FIXEDSIZEBLOBCOPY: number;
  569. const FSEVENTWRAP: number;
  570. const FSREQCALLBACK: number;
  571. const FSREQPROMISE: number;
  572. const GETADDRINFOREQWRAP: number;
  573. const GETNAMEINFOREQWRAP: number;
  574. const HEAPSNAPSHOT: number;
  575. const HTTP2SESSION: number;
  576. const HTTP2STREAM: number;
  577. const HTTP2PING: number;
  578. const HTTP2SETTINGS: number;
  579. const HTTPINCOMINGMESSAGE: number;
  580. const HTTPCLIENTREQUEST: number;
  581. const JSSTREAM: number;
  582. const JSUDPWRAP: number;
  583. const MESSAGEPORT: number;
  584. const PIPECONNECTWRAP: number;
  585. const PIPESERVERWRAP: number;
  586. const PIPEWRAP: number;
  587. const PROCESSWRAP: number;
  588. const PROMISE: number;
  589. const QUERYWRAP: number;
  590. const SHUTDOWNWRAP: number;
  591. const SIGNALWRAP: number;
  592. const STATWATCHER: number;
  593. const STREAMPIPE: number;
  594. const TCPCONNECTWRAP: number;
  595. const TCPSERVERWRAP: number;
  596. const TCPWRAP: number;
  597. const TTYWRAP: number;
  598. const UDPSENDWRAP: number;
  599. const UDPWRAP: number;
  600. const SIGINTWATCHDOG: number;
  601. const WORKER: number;
  602. const WORKERHEAPSNAPSHOT: number;
  603. const WRITEWRAP: number;
  604. const ZLIB: number;
  605. const CHECKPRIMEREQUEST: number;
  606. const PBKDF2REQUEST: number;
  607. const KEYPAIRGENREQUEST: number;
  608. const KEYGENREQUEST: number;
  609. const KEYEXPORTREQUEST: number;
  610. const CIPHERREQUEST: number;
  611. const DERIVEBITSREQUEST: number;
  612. const HASHREQUEST: number;
  613. const RANDOMBYTESREQUEST: number;
  614. const RANDOMPRIMEREQUEST: number;
  615. const SCRYPTREQUEST: number;
  616. const SIGNREQUEST: number;
  617. const TLSWRAP: number;
  618. const VERIFYREQUEST: number;
  619. }
  620. }
  621. declare module "node:async_hooks" {
  622. export * from "async_hooks";
  623. }