m06_task3.js 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (204) hide show
  1. package/.idea/.name +1 -0
  2. package/.idea/inspectionProfiles/Project_Default.xml +10 -0
  3. package/.idea/jsLibraryMappings.xml +6 -0
  4. package/.idea/modules.xml +8 -0
  5. package/.idea/node_lab_6.iml +12 -0
  6. package/06_task2.html +73 -0
  7. package/06_task2.js +52 -0
  8. package/06_task3.js +3 -0
  9. package/06_task4.js +3 -0
  10. package/m06_task3.js +28 -0
  11. package/package/index.js +28 -0
  12. package/package/node_modules/.package-lock.json +31 -0
  13. package/package/node_modules/@types/node/LICENSE +21 -0
  14. package/package/node_modules/@types/node/README.md +16 -0
  15. package/package/node_modules/@types/node/assert/strict.d.ts +8 -0
  16. package/package/node_modules/@types/node/assert.d.ts +961 -0
  17. package/package/node_modules/@types/node/async_hooks.d.ts +501 -0
  18. package/package/node_modules/@types/node/buffer.d.ts +2258 -0
  19. package/package/node_modules/@types/node/child_process.d.ts +1369 -0
  20. package/package/node_modules/@types/node/cluster.d.ts +410 -0
  21. package/package/node_modules/@types/node/console.d.ts +412 -0
  22. package/package/node_modules/@types/node/constants.d.ts +18 -0
  23. package/package/node_modules/@types/node/crypto.d.ts +3964 -0
  24. package/package/node_modules/@types/node/dgram.d.ts +545 -0
  25. package/package/node_modules/@types/node/diagnostics_channel.d.ts +153 -0
  26. package/package/node_modules/@types/node/dns/promises.d.ts +370 -0
  27. package/package/node_modules/@types/node/dns.d.ts +659 -0
  28. package/package/node_modules/@types/node/dom-events.d.ts +126 -0
  29. package/package/node_modules/@types/node/domain.d.ts +170 -0
  30. package/package/node_modules/@types/node/events.d.ts +678 -0
  31. package/package/node_modules/@types/node/fs/promises.d.ts +1138 -0
  32. package/package/node_modules/@types/node/fs.d.ts +3872 -0
  33. package/package/node_modules/@types/node/globals.d.ts +300 -0
  34. package/package/node_modules/@types/node/globals.global.d.ts +1 -0
  35. package/package/node_modules/@types/node/http.d.ts +1614 -0
  36. package/package/node_modules/@types/node/http2.d.ts +2134 -0
  37. package/package/node_modules/@types/node/https.d.ts +541 -0
  38. package/package/node_modules/@types/node/index.d.ts +133 -0
  39. package/package/node_modules/@types/node/inspector.d.ts +2741 -0
  40. package/package/node_modules/@types/node/module.d.ts +114 -0
  41. package/package/node_modules/@types/node/net.d.ts +869 -0
  42. package/package/node_modules/@types/node/os.d.ts +466 -0
  43. package/package/node_modules/@types/node/package.json +232 -0
  44. package/package/node_modules/@types/node/path.d.ts +191 -0
  45. package/package/node_modules/@types/node/perf_hooks.d.ts +625 -0
  46. package/package/node_modules/@types/node/process.d.ts +1482 -0
  47. package/package/node_modules/@types/node/punycode.d.ts +117 -0
  48. package/package/node_modules/@types/node/querystring.d.ts +131 -0
  49. package/package/node_modules/@types/node/readline/promises.d.ts +143 -0
  50. package/package/node_modules/@types/node/readline.d.ts +653 -0
  51. package/package/node_modules/@types/node/repl.d.ts +424 -0
  52. package/package/node_modules/@types/node/stream/consumers.d.ts +12 -0
  53. package/package/node_modules/@types/node/stream/promises.d.ts +42 -0
  54. package/package/node_modules/@types/node/stream/web.d.ts +330 -0
  55. package/package/node_modules/@types/node/stream.d.ts +1340 -0
  56. package/package/node_modules/@types/node/string_decoder.d.ts +67 -0
  57. package/package/node_modules/@types/node/test.d.ts +314 -0
  58. package/package/node_modules/@types/node/timers/promises.d.ts +68 -0
  59. package/package/node_modules/@types/node/timers.d.ts +94 -0
  60. package/package/node_modules/@types/node/tls.d.ts +1028 -0
  61. package/package/node_modules/@types/node/trace_events.d.ts +171 -0
  62. package/package/node_modules/@types/node/ts4.8/assert/strict.d.ts +8 -0
  63. package/package/node_modules/@types/node/ts4.8/assert.d.ts +961 -0
  64. package/package/node_modules/@types/node/ts4.8/async_hooks.d.ts +501 -0
  65. package/package/node_modules/@types/node/ts4.8/buffer.d.ts +2259 -0
  66. package/package/node_modules/@types/node/ts4.8/child_process.d.ts +1369 -0
  67. package/package/node_modules/@types/node/ts4.8/cluster.d.ts +410 -0
  68. package/package/node_modules/@types/node/ts4.8/console.d.ts +412 -0
  69. package/package/node_modules/@types/node/ts4.8/constants.d.ts +18 -0
  70. package/package/node_modules/@types/node/ts4.8/crypto.d.ts +3964 -0
  71. package/package/node_modules/@types/node/ts4.8/dgram.d.ts +545 -0
  72. package/package/node_modules/@types/node/ts4.8/diagnostics_channel.d.ts +153 -0
  73. package/package/node_modules/@types/node/ts4.8/dns/promises.d.ts +370 -0
  74. package/package/node_modules/@types/node/ts4.8/dns.d.ts +659 -0
  75. package/package/node_modules/@types/node/ts4.8/dom-events.d.ts +126 -0
  76. package/package/node_modules/@types/node/ts4.8/domain.d.ts +170 -0
  77. package/package/node_modules/@types/node/ts4.8/events.d.ts +678 -0
  78. package/package/node_modules/@types/node/ts4.8/fs/promises.d.ts +1138 -0
  79. package/package/node_modules/@types/node/ts4.8/fs.d.ts +3872 -0
  80. package/package/node_modules/@types/node/ts4.8/globals.d.ts +294 -0
  81. package/package/node_modules/@types/node/ts4.8/globals.global.d.ts +1 -0
  82. package/package/node_modules/@types/node/ts4.8/http.d.ts +1614 -0
  83. package/package/node_modules/@types/node/ts4.8/http2.d.ts +2134 -0
  84. package/package/node_modules/@types/node/ts4.8/https.d.ts +541 -0
  85. package/package/node_modules/@types/node/ts4.8/index.d.ts +88 -0
  86. package/package/node_modules/@types/node/ts4.8/inspector.d.ts +2741 -0
  87. package/package/node_modules/@types/node/ts4.8/module.d.ts +114 -0
  88. package/package/node_modules/@types/node/ts4.8/net.d.ts +869 -0
  89. package/package/node_modules/@types/node/ts4.8/os.d.ts +466 -0
  90. package/package/node_modules/@types/node/ts4.8/path.d.ts +191 -0
  91. package/package/node_modules/@types/node/ts4.8/perf_hooks.d.ts +625 -0
  92. package/package/node_modules/@types/node/ts4.8/process.d.ts +1482 -0
  93. package/package/node_modules/@types/node/ts4.8/punycode.d.ts +117 -0
  94. package/package/node_modules/@types/node/ts4.8/querystring.d.ts +131 -0
  95. package/package/node_modules/@types/node/ts4.8/readline/promises.d.ts +143 -0
  96. package/package/node_modules/@types/node/ts4.8/readline.d.ts +653 -0
  97. package/package/node_modules/@types/node/ts4.8/repl.d.ts +424 -0
  98. package/package/node_modules/@types/node/ts4.8/stream/consumers.d.ts +12 -0
  99. package/package/node_modules/@types/node/ts4.8/stream/promises.d.ts +42 -0
  100. package/package/node_modules/@types/node/ts4.8/stream/web.d.ts +330 -0
  101. package/package/node_modules/@types/node/ts4.8/stream.d.ts +1340 -0
  102. package/package/node_modules/@types/node/ts4.8/string_decoder.d.ts +67 -0
  103. package/package/node_modules/@types/node/ts4.8/test.d.ts +314 -0
  104. package/package/node_modules/@types/node/ts4.8/timers/promises.d.ts +68 -0
  105. package/package/node_modules/@types/node/ts4.8/timers.d.ts +94 -0
  106. package/package/node_modules/@types/node/ts4.8/tls.d.ts +1028 -0
  107. package/package/node_modules/@types/node/ts4.8/trace_events.d.ts +171 -0
  108. package/package/node_modules/@types/node/ts4.8/tty.d.ts +206 -0
  109. package/package/node_modules/@types/node/ts4.8/url.d.ts +897 -0
  110. package/package/node_modules/@types/node/ts4.8/util.d.ts +1850 -0
  111. package/package/node_modules/@types/node/ts4.8/v8.d.ts +396 -0
  112. package/package/node_modules/@types/node/ts4.8/vm.d.ts +509 -0
  113. package/package/node_modules/@types/node/ts4.8/wasi.d.ts +158 -0
  114. package/package/node_modules/@types/node/ts4.8/worker_threads.d.ts +689 -0
  115. package/package/node_modules/@types/node/ts4.8/zlib.d.ts +517 -0
  116. package/package/node_modules/@types/node/tty.d.ts +206 -0
  117. package/package/node_modules/@types/node/url.d.ts +897 -0
  118. package/package/node_modules/@types/node/util.d.ts +1850 -0
  119. package/package/node_modules/@types/node/v8.d.ts +396 -0
  120. package/package/node_modules/@types/node/vm.d.ts +509 -0
  121. package/package/node_modules/@types/node/wasi.d.ts +158 -0
  122. package/package/node_modules/@types/node/worker_threads.d.ts +689 -0
  123. package/package/node_modules/@types/node/zlib.d.ts +517 -0
  124. package/package/node_modules/@types/nodemailer/LICENSE +21 -0
  125. package/package/node_modules/@types/nodemailer/README.md +16 -0
  126. package/package/node_modules/@types/nodemailer/index.d.ts +83 -0
  127. package/package/node_modules/@types/nodemailer/lib/addressparser/index.d.ts +31 -0
  128. package/package/node_modules/@types/nodemailer/lib/base64/index.d.ts +22 -0
  129. package/package/node_modules/@types/nodemailer/lib/dkim/index.d.ts +45 -0
  130. package/package/node_modules/@types/nodemailer/lib/dkim/message-parser.d.ts +75 -0
  131. package/package/node_modules/@types/nodemailer/lib/dkim/relaxed-body.d.ts +75 -0
  132. package/package/node_modules/@types/nodemailer/lib/dkim/sign.d.ts +11 -0
  133. package/package/node_modules/@types/nodemailer/lib/fetch/cookies.d.ts +54 -0
  134. package/package/node_modules/@types/nodemailer/lib/fetch/index.d.ts +38 -0
  135. package/package/node_modules/@types/nodemailer/lib/json-transport/index.d.ts +50 -0
  136. package/package/node_modules/@types/nodemailer/lib/mail-composer/index.d.ts +25 -0
  137. package/package/node_modules/@types/nodemailer/lib/mailer/index.d.ts +230 -0
  138. package/package/node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts +28 -0
  139. package/package/node_modules/@types/nodemailer/lib/mime-funcs/index.d.ts +87 -0
  140. package/package/node_modules/@types/nodemailer/lib/mime-funcs/mime-types.d.ts +2 -0
  141. package/package/node_modules/@types/nodemailer/lib/mime-node/index.d.ts +137 -0
  142. package/package/node_modules/@types/nodemailer/lib/mime-node/last-newline.d.ts +9 -0
  143. package/package/node_modules/@types/nodemailer/lib/qp/index.d.ts +23 -0
  144. package/package/node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts +53 -0
  145. package/package/node_modules/@types/nodemailer/lib/sendmail-transport/le-unix.d.ts +7 -0
  146. package/package/node_modules/@types/nodemailer/lib/sendmail-transport/le-windows.d.ts +7 -0
  147. package/package/node_modules/@types/nodemailer/lib/ses-transport/index.d.ts +136 -0
  148. package/package/node_modules/@types/nodemailer/lib/shared/index.d.ts +51 -0
  149. package/package/node_modules/@types/nodemailer/lib/smtp-connection/data-stream.d.ts +11 -0
  150. package/package/node_modules/@types/nodemailer/lib/smtp-connection/http-proxy-client.d.ts +11 -0
  151. package/package/node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts +254 -0
  152. package/package/node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts +90 -0
  153. package/package/node_modules/@types/nodemailer/lib/smtp-pool/pool-resource.d.ts +66 -0
  154. package/package/node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts +115 -0
  155. package/package/node_modules/@types/nodemailer/lib/stream-transport/index.d.ts +56 -0
  156. package/package/node_modules/@types/nodemailer/lib/well-known/index.d.ts +6 -0
  157. package/package/node_modules/@types/nodemailer/lib/xoauth2/index.d.ts +110 -0
  158. package/package/node_modules/@types/nodemailer/package.json +37 -0
  159. package/package/node_modules/nodemailer/.gitattributes +6 -0
  160. package/package/node_modules/nodemailer/.prettierrc.js +8 -0
  161. package/package/node_modules/nodemailer/CHANGELOG.md +715 -0
  162. package/package/node_modules/nodemailer/CODE_OF_CONDUCT.md +76 -0
  163. package/package/node_modules/nodemailer/CONTRIBUTING.md +67 -0
  164. package/package/node_modules/nodemailer/LICENSE +16 -0
  165. package/package/node_modules/nodemailer/README.md +93 -0
  166. package/package/node_modules/nodemailer/SECURITY.txt +22 -0
  167. package/package/node_modules/nodemailer/lib/addressparser/index.js +313 -0
  168. package/package/node_modules/nodemailer/lib/base64/index.js +142 -0
  169. package/package/node_modules/nodemailer/lib/dkim/index.js +251 -0
  170. package/package/node_modules/nodemailer/lib/dkim/message-parser.js +155 -0
  171. package/package/node_modules/nodemailer/lib/dkim/relaxed-body.js +154 -0
  172. package/package/node_modules/nodemailer/lib/dkim/sign.js +117 -0
  173. package/package/node_modules/nodemailer/lib/fetch/cookies.js +281 -0
  174. package/package/node_modules/nodemailer/lib/fetch/index.js +269 -0
  175. package/package/node_modules/nodemailer/lib/json-transport/index.js +82 -0
  176. package/package/node_modules/nodemailer/lib/mail-composer/index.js +558 -0
  177. package/package/node_modules/nodemailer/lib/mailer/index.js +427 -0
  178. package/package/node_modules/nodemailer/lib/mailer/mail-message.js +315 -0
  179. package/package/node_modules/nodemailer/lib/mime-funcs/index.js +619 -0
  180. package/package/node_modules/nodemailer/lib/mime-funcs/mime-types.js +2102 -0
  181. package/package/node_modules/nodemailer/lib/mime-node/index.js +1290 -0
  182. package/package/node_modules/nodemailer/lib/mime-node/last-newline.js +33 -0
  183. package/package/node_modules/nodemailer/lib/mime-node/le-unix.js +43 -0
  184. package/package/node_modules/nodemailer/lib/mime-node/le-windows.js +52 -0
  185. package/package/node_modules/nodemailer/lib/nodemailer.js +143 -0
  186. package/package/node_modules/nodemailer/lib/qp/index.js +219 -0
  187. package/package/node_modules/nodemailer/lib/sendmail-transport/index.js +210 -0
  188. package/package/node_modules/nodemailer/lib/ses-transport/index.js +349 -0
  189. package/package/node_modules/nodemailer/lib/shared/index.js +639 -0
  190. package/package/node_modules/nodemailer/lib/smtp-connection/data-stream.js +108 -0
  191. package/package/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +143 -0
  192. package/package/node_modules/nodemailer/lib/smtp-connection/index.js +1786 -0
  193. package/package/node_modules/nodemailer/lib/smtp-pool/index.js +648 -0
  194. package/package/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +253 -0
  195. package/package/node_modules/nodemailer/lib/smtp-transport/index.js +416 -0
  196. package/package/node_modules/nodemailer/lib/stream-transport/index.js +135 -0
  197. package/package/node_modules/nodemailer/lib/well-known/index.js +47 -0
  198. package/package/node_modules/nodemailer/lib/well-known/services.json +286 -0
  199. package/package/node_modules/nodemailer/lib/xoauth2/index.js +376 -0
  200. package/package/node_modules/nodemailer/package.json +46 -0
  201. package/package/node_modules/nodemailer/postinstall.js +101 -0
  202. package/package/package-lock.json +60 -0
  203. package/package/package.json +6 -0
  204. package/package.json +19 -0
@@ -0,0 +1,501 @@
1
+ /**
2
+ * The `async_hooks` module provides an API to track asynchronous resources. It
3
+ * can be accessed using:
4
+ *
5
+ * ```js
6
+ * import async_hooks from 'async_hooks';
7
+ * ```
8
+ * @experimental
9
+ * @see [source](https://github.com/nodejs/node/blob/v18.0.0/lib/async_hooks.js)
10
+ */
11
+ declare module 'async_hooks' {
12
+ /**
13
+ * ```js
14
+ * import { executionAsyncId } from 'async_hooks';
15
+ *
16
+ * console.log(executionAsyncId()); // 1 - bootstrap
17
+ * fs.open(path, 'r', (err, fd) => {
18
+ * console.log(executionAsyncId()); // 6 - open()
19
+ * });
20
+ * ```
21
+ *
22
+ * The ID returned from `executionAsyncId()` is related to execution timing, not
23
+ * causality (which is covered by `triggerAsyncId()`):
24
+ *
25
+ * ```js
26
+ * const server = net.createServer((conn) => {
27
+ * // Returns the ID of the server, not of the new connection, because the
28
+ * // callback runs in the execution scope of the server's MakeCallback().
29
+ * async_hooks.executionAsyncId();
30
+ *
31
+ * }).listen(port, () => {
32
+ * // Returns the ID of a TickObject (process.nextTick()) because all
33
+ * // callbacks passed to .listen() are wrapped in a nextTick().
34
+ * async_hooks.executionAsyncId();
35
+ * });
36
+ * ```
37
+ *
38
+ * Promise contexts may not get precise `executionAsyncIds` by default.
39
+ * See the section on `promise execution tracking`.
40
+ * @since v8.1.0
41
+ * @return The `asyncId` of the current execution context. Useful to track when something calls.
42
+ */
43
+ function executionAsyncId(): number;
44
+ /**
45
+ * Resource objects returned by `executionAsyncResource()` are most often internal
46
+ * Node.js handle objects with undocumented APIs. Using any functions or properties
47
+ * on the object is likely to crash your application and should be avoided.
48
+ *
49
+ * Using `executionAsyncResource()` in the top-level execution context will
50
+ * return an empty object as there is no handle or request object to use,
51
+ * but having an object representing the top-level can be helpful.
52
+ *
53
+ * ```js
54
+ * import { open } from 'fs';
55
+ * import { executionAsyncId, executionAsyncResource } from 'async_hooks';
56
+ *
57
+ * console.log(executionAsyncId(), executionAsyncResource()); // 1 {}
58
+ * open(new URL(import.meta.url), 'r', (err, fd) => {
59
+ * console.log(executionAsyncId(), executionAsyncResource()); // 7 FSReqWrap
60
+ * });
61
+ * ```
62
+ *
63
+ * This can be used to implement continuation local storage without the
64
+ * use of a tracking `Map` to store the metadata:
65
+ *
66
+ * ```js
67
+ * import { createServer } from 'http';
68
+ * import {
69
+ * executionAsyncId,
70
+ * executionAsyncResource,
71
+ * createHook
72
+ * } from 'async_hooks';
73
+ * const sym = Symbol('state'); // Private symbol to avoid pollution
74
+ *
75
+ * createHook({
76
+ * init(asyncId, type, triggerAsyncId, resource) {
77
+ * const cr = executionAsyncResource();
78
+ * if (cr) {
79
+ * resource[sym] = cr[sym];
80
+ * }
81
+ * }
82
+ * }).enable();
83
+ *
84
+ * const server = createServer((req, res) => {
85
+ * executionAsyncResource()[sym] = { state: req.url };
86
+ * setTimeout(function() {
87
+ * res.end(JSON.stringify(executionAsyncResource()[sym]));
88
+ * }, 100);
89
+ * }).listen(3000);
90
+ * ```
91
+ * @since v13.9.0, v12.17.0
92
+ * @return The resource representing the current execution. Useful to store data within the resource.
93
+ */
94
+ function executionAsyncResource(): object;
95
+ /**
96
+ * ```js
97
+ * const server = net.createServer((conn) => {
98
+ * // The resource that caused (or triggered) this callback to be called
99
+ * // was that of the new connection. Thus the return value of triggerAsyncId()
100
+ * // is the asyncId of "conn".
101
+ * async_hooks.triggerAsyncId();
102
+ *
103
+ * }).listen(port, () => {
104
+ * // Even though all callbacks passed to .listen() are wrapped in a nextTick()
105
+ * // the callback itself exists because the call to the server's .listen()
106
+ * // was made. So the return value would be the ID of the server.
107
+ * async_hooks.triggerAsyncId();
108
+ * });
109
+ * ```
110
+ *
111
+ * Promise contexts may not get valid `triggerAsyncId`s by default. See
112
+ * the section on `promise execution tracking`.
113
+ * @return The ID of the resource responsible for calling the callback that is currently being executed.
114
+ */
115
+ function triggerAsyncId(): number;
116
+ interface HookCallbacks {
117
+ /**
118
+ * Called when a class is constructed that has the possibility to emit an asynchronous event.
119
+ * @param asyncId a unique ID for the async resource
120
+ * @param type the type of the async resource
121
+ * @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created
122
+ * @param resource reference to the resource representing the async operation, needs to be released during destroy
123
+ */
124
+ init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void;
125
+ /**
126
+ * When an asynchronous operation is initiated or completes a callback is called to notify the user.
127
+ * The before callback is called just before said callback is executed.
128
+ * @param asyncId the unique identifier assigned to the resource about to execute the callback.
129
+ */
130
+ before?(asyncId: number): void;
131
+ /**
132
+ * Called immediately after the callback specified in before is completed.
133
+ * @param asyncId the unique identifier assigned to the resource which has executed the callback.
134
+ */
135
+ after?(asyncId: number): void;
136
+ /**
137
+ * Called when a promise has resolve() called. This may not be in the same execution id
138
+ * as the promise itself.
139
+ * @param asyncId the unique id for the promise that was resolve()d.
140
+ */
141
+ promiseResolve?(asyncId: number): void;
142
+ /**
143
+ * Called after the resource corresponding to asyncId is destroyed
144
+ * @param asyncId a unique ID for the async resource
145
+ */
146
+ destroy?(asyncId: number): void;
147
+ }
148
+ interface AsyncHook {
149
+ /**
150
+ * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
151
+ */
152
+ enable(): this;
153
+ /**
154
+ * 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.
155
+ */
156
+ disable(): this;
157
+ }
158
+ /**
159
+ * Registers functions to be called for different lifetime events of each async
160
+ * operation.
161
+ *
162
+ * The callbacks `init()`/`before()`/`after()`/`destroy()` are called for the
163
+ * respective asynchronous event during a resource's lifetime.
164
+ *
165
+ * All callbacks are optional. For example, if only resource cleanup needs to
166
+ * be tracked, then only the `destroy` callback needs to be passed. The
167
+ * specifics of all functions that can be passed to `callbacks` is in the `Hook Callbacks` section.
168
+ *
169
+ * ```js
170
+ * import { createHook } from 'async_hooks';
171
+ *
172
+ * const asyncHook = createHook({
173
+ * init(asyncId, type, triggerAsyncId, resource) { },
174
+ * destroy(asyncId) { }
175
+ * });
176
+ * ```
177
+ *
178
+ * The callbacks will be inherited via the prototype chain:
179
+ *
180
+ * ```js
181
+ * class MyAsyncCallbacks {
182
+ * init(asyncId, type, triggerAsyncId, resource) { }
183
+ * destroy(asyncId) {}
184
+ * }
185
+ *
186
+ * class MyAddedCallbacks extends MyAsyncCallbacks {
187
+ * before(asyncId) { }
188
+ * after(asyncId) { }
189
+ * }
190
+ *
191
+ * const asyncHook = async_hooks.createHook(new MyAddedCallbacks());
192
+ * ```
193
+ *
194
+ * Because promises are asynchronous resources whose lifecycle is tracked
195
+ * via the async hooks mechanism, the `init()`, `before()`, `after()`, and`destroy()` callbacks _must not_ be async functions that return promises.
196
+ * @since v8.1.0
197
+ * @param callbacks The `Hook Callbacks` to register
198
+ * @return Instance used for disabling and enabling hooks
199
+ */
200
+ function createHook(callbacks: HookCallbacks): AsyncHook;
201
+ interface AsyncResourceOptions {
202
+ /**
203
+ * The ID of the execution context that created this async event.
204
+ * @default executionAsyncId()
205
+ */
206
+ triggerAsyncId?: number | undefined;
207
+ /**
208
+ * Disables automatic `emitDestroy` when the object is garbage collected.
209
+ * This usually does not need to be set (even if `emitDestroy` is called
210
+ * manually), unless the resource's `asyncId` is retrieved and the
211
+ * sensitive API's `emitDestroy` is called with it.
212
+ * @default false
213
+ */
214
+ requireManualDestroy?: boolean | undefined;
215
+ }
216
+ /**
217
+ * The class `AsyncResource` is designed to be extended by the embedder's async
218
+ * resources. Using this, users can easily trigger the lifetime events of their
219
+ * own resources.
220
+ *
221
+ * The `init` hook will trigger when an `AsyncResource` is instantiated.
222
+ *
223
+ * The following is an overview of the `AsyncResource` API.
224
+ *
225
+ * ```js
226
+ * import { AsyncResource, executionAsyncId } from 'async_hooks';
227
+ *
228
+ * // AsyncResource() is meant to be extended. Instantiating a
229
+ * // new AsyncResource() also triggers init. If triggerAsyncId is omitted then
230
+ * // async_hook.executionAsyncId() is used.
231
+ * const asyncResource = new AsyncResource(
232
+ * type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false }
233
+ * );
234
+ *
235
+ * // Run a function in the execution context of the resource. This will
236
+ * // * establish the context of the resource
237
+ * // * trigger the AsyncHooks before callbacks
238
+ * // * call the provided function `fn` with the supplied arguments
239
+ * // * trigger the AsyncHooks after callbacks
240
+ * // * restore the original execution context
241
+ * asyncResource.runInAsyncScope(fn, thisArg, ...args);
242
+ *
243
+ * // Call AsyncHooks destroy callbacks.
244
+ * asyncResource.emitDestroy();
245
+ *
246
+ * // Return the unique ID assigned to the AsyncResource instance.
247
+ * asyncResource.asyncId();
248
+ *
249
+ * // Return the trigger ID for the AsyncResource instance.
250
+ * asyncResource.triggerAsyncId();
251
+ * ```
252
+ */
253
+ class AsyncResource {
254
+ /**
255
+ * AsyncResource() is meant to be extended. Instantiating a
256
+ * new AsyncResource() also triggers init. If triggerAsyncId is omitted then
257
+ * async_hook.executionAsyncId() is used.
258
+ * @param type The type of async event.
259
+ * @param triggerAsyncId The ID of the execution context that created
260
+ * this async event (default: `executionAsyncId()`), or an
261
+ * AsyncResourceOptions object (since v9.3.0)
262
+ */
263
+ constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions);
264
+ /**
265
+ * Binds the given function to the current execution context.
266
+ *
267
+ * The returned function will have an `asyncResource` property referencing
268
+ * the `AsyncResource` to which the function is bound.
269
+ * @since v14.8.0, v12.19.0
270
+ * @param fn The function to bind to the current execution context.
271
+ * @param type An optional name to associate with the underlying `AsyncResource`.
272
+ */
273
+ static bind<Func extends (this: ThisArg, ...args: any[]) => any, ThisArg>(
274
+ fn: Func,
275
+ type?: string,
276
+ thisArg?: ThisArg
277
+ ): Func & {
278
+ asyncResource: AsyncResource;
279
+ };
280
+ /**
281
+ * Binds the given function to execute to this `AsyncResource`'s scope.
282
+ *
283
+ * The returned function will have an `asyncResource` property referencing
284
+ * the `AsyncResource` to which the function is bound.
285
+ * @since v14.8.0, v12.19.0
286
+ * @param fn The function to bind to the current `AsyncResource`.
287
+ */
288
+ bind<Func extends (...args: any[]) => any>(
289
+ fn: Func
290
+ ): Func & {
291
+ asyncResource: AsyncResource;
292
+ };
293
+ /**
294
+ * Call the provided function with the provided arguments in the execution context
295
+ * of the async resource. This will establish the context, trigger the AsyncHooks
296
+ * before callbacks, call the function, trigger the AsyncHooks after callbacks, and
297
+ * then restore the original execution context.
298
+ * @since v9.6.0
299
+ * @param fn The function to call in the execution context of this async resource.
300
+ * @param thisArg The receiver to be used for the function call.
301
+ * @param args Optional arguments to pass to the function.
302
+ */
303
+ runInAsyncScope<This, Result>(fn: (this: This, ...args: any[]) => Result, thisArg?: This, ...args: any[]): Result;
304
+ /**
305
+ * Call all `destroy` hooks. This should only ever be called once. An error will
306
+ * be thrown if it is called more than once. This **must** be manually called. If
307
+ * the resource is left to be collected by the GC then the `destroy` hooks will
308
+ * never be called.
309
+ * @return A reference to `asyncResource`.
310
+ */
311
+ emitDestroy(): this;
312
+ /**
313
+ * @return The unique `asyncId` assigned to the resource.
314
+ */
315
+ asyncId(): number;
316
+ /**
317
+ *
318
+ * @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor.
319
+ */
320
+ triggerAsyncId(): number;
321
+ }
322
+ /**
323
+ * This class creates stores that stay coherent through asynchronous operations.
324
+ *
325
+ * While you can create your own implementation on top of the `async_hooks` module,`AsyncLocalStorage` should be preferred as it is a performant and memory safe
326
+ * implementation that involves significant optimizations that are non-obvious to
327
+ * implement.
328
+ *
329
+ * The following example uses `AsyncLocalStorage` to build a simple logger
330
+ * that assigns IDs to incoming HTTP requests and includes them in messages
331
+ * logged within each request.
332
+ *
333
+ * ```js
334
+ * import http from 'http';
335
+ * import { AsyncLocalStorage } from 'async_hooks';
336
+ *
337
+ * const asyncLocalStorage = new AsyncLocalStorage();
338
+ *
339
+ * function logWithId(msg) {
340
+ * const id = asyncLocalStorage.getStore();
341
+ * console.log(`${id !== undefined ? id : '-'}:`, msg);
342
+ * }
343
+ *
344
+ * let idSeq = 0;
345
+ * http.createServer((req, res) => {
346
+ * asyncLocalStorage.run(idSeq++, () => {
347
+ * logWithId('start');
348
+ * // Imagine any chain of async operations here
349
+ * setImmediate(() => {
350
+ * logWithId('finish');
351
+ * res.end();
352
+ * });
353
+ * });
354
+ * }).listen(8080);
355
+ *
356
+ * http.get('http://localhost:8080');
357
+ * http.get('http://localhost:8080');
358
+ * // Prints:
359
+ * // 0: start
360
+ * // 1: start
361
+ * // 0: finish
362
+ * // 1: finish
363
+ * ```
364
+ *
365
+ * Each instance of `AsyncLocalStorage` maintains an independent storage context.
366
+ * Multiple instances can safely exist simultaneously without risk of interfering
367
+ * with each other's data.
368
+ * @since v13.10.0, v12.17.0
369
+ */
370
+ class AsyncLocalStorage<T> {
371
+ /**
372
+ * Disables the instance of `AsyncLocalStorage`. All subsequent calls
373
+ * to `asyncLocalStorage.getStore()` will return `undefined` until`asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again.
374
+ *
375
+ * When calling `asyncLocalStorage.disable()`, all current contexts linked to the
376
+ * instance will be exited.
377
+ *
378
+ * Calling `asyncLocalStorage.disable()` is required before the`asyncLocalStorage` can be garbage collected. This does not apply to stores
379
+ * provided by the `asyncLocalStorage`, as those objects are garbage collected
380
+ * along with the corresponding async resources.
381
+ *
382
+ * Use this method when the `asyncLocalStorage` is not in use anymore
383
+ * in the current process.
384
+ * @since v13.10.0, v12.17.0
385
+ * @experimental
386
+ */
387
+ disable(): void;
388
+ /**
389
+ * Returns the current store.
390
+ * If called outside of an asynchronous context initialized by
391
+ * calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it
392
+ * returns `undefined`.
393
+ * @since v13.10.0, v12.17.0
394
+ */
395
+ getStore(): T | undefined;
396
+ /**
397
+ * Runs a function synchronously within a context and returns its
398
+ * return value. The store is not accessible outside of the callback function.
399
+ * The store is accessible to any asynchronous operations created within the
400
+ * callback.
401
+ *
402
+ * The optional `args` are passed to the callback function.
403
+ *
404
+ * If the callback function throws an error, the error is thrown by `run()` too.
405
+ * The stacktrace is not impacted by this call and the context is exited.
406
+ *
407
+ * Example:
408
+ *
409
+ * ```js
410
+ * const store = { id: 2 };
411
+ * try {
412
+ * asyncLocalStorage.run(store, () => {
413
+ * asyncLocalStorage.getStore(); // Returns the store object
414
+ * setTimeout(() => {
415
+ * asyncLocalStorage.getStore(); // Returns the store object
416
+ * }, 200);
417
+ * throw new Error();
418
+ * });
419
+ * } catch (e) {
420
+ * asyncLocalStorage.getStore(); // Returns undefined
421
+ * // The error will be caught here
422
+ * }
423
+ * ```
424
+ * @since v13.10.0, v12.17.0
425
+ */
426
+ run<R, TArgs extends any[]>(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R;
427
+ /**
428
+ * Runs a function synchronously outside of a context and returns its
429
+ * return value. The store is not accessible within the callback function or
430
+ * the asynchronous operations created within the callback. Any `getStore()`call done within the callback function will always return `undefined`.
431
+ *
432
+ * The optional `args` are passed to the callback function.
433
+ *
434
+ * If the callback function throws an error, the error is thrown by `exit()` too.
435
+ * The stacktrace is not impacted by this call and the context is re-entered.
436
+ *
437
+ * Example:
438
+ *
439
+ * ```js
440
+ * // Within a call to run
441
+ * try {
442
+ * asyncLocalStorage.getStore(); // Returns the store object or value
443
+ * asyncLocalStorage.exit(() => {
444
+ * asyncLocalStorage.getStore(); // Returns undefined
445
+ * throw new Error();
446
+ * });
447
+ * } catch (e) {
448
+ * asyncLocalStorage.getStore(); // Returns the same object or value
449
+ * // The error will be caught here
450
+ * }
451
+ * ```
452
+ * @since v13.10.0, v12.17.0
453
+ * @experimental
454
+ */
455
+ exit<R, TArgs extends any[]>(callback: (...args: TArgs) => R, ...args: TArgs): R;
456
+ /**
457
+ * Transitions into the context for the remainder of the current
458
+ * synchronous execution and then persists the store through any following
459
+ * asynchronous calls.
460
+ *
461
+ * Example:
462
+ *
463
+ * ```js
464
+ * const store = { id: 1 };
465
+ * // Replaces previous store with the given store object
466
+ * asyncLocalStorage.enterWith(store);
467
+ * asyncLocalStorage.getStore(); // Returns the store object
468
+ * someAsyncOperation(() => {
469
+ * asyncLocalStorage.getStore(); // Returns the same object
470
+ * });
471
+ * ```
472
+ *
473
+ * This transition will continue for the _entire_ synchronous execution.
474
+ * This means that if, for example, the context is entered within an event
475
+ * handler subsequent event handlers will also run within that context unless
476
+ * specifically bound to another context with an `AsyncResource`. That is why`run()` should be preferred over `enterWith()` unless there are strong reasons
477
+ * to use the latter method.
478
+ *
479
+ * ```js
480
+ * const store = { id: 1 };
481
+ *
482
+ * emitter.on('my-event', () => {
483
+ * asyncLocalStorage.enterWith(store);
484
+ * });
485
+ * emitter.on('my-event', () => {
486
+ * asyncLocalStorage.getStore(); // Returns the same object
487
+ * });
488
+ *
489
+ * asyncLocalStorage.getStore(); // Returns undefined
490
+ * emitter.emit('my-event');
491
+ * asyncLocalStorage.getStore(); // Returns the same object
492
+ * ```
493
+ * @since v13.11.0, v12.17.0
494
+ * @experimental
495
+ */
496
+ enterWith(store: T): void;
497
+ }
498
+ }
499
+ declare module 'node:async_hooks' {
500
+ export * from 'async_hooks';
501
+ }