@wbce/projen-d9 0.0.28 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/.jsii +184 -45
  2. package/API.md +153 -37
  3. package/CHANGELOG.md +13 -0
  4. package/README.md +10 -3
  5. package/docs/D9-plumbing.md +189 -0
  6. package/lib/cli/atlas.d.ts +10 -0
  7. package/lib/cli/atlas.js +65 -0
  8. package/lib/cli/commands/cedar/cedar-format.d.ts +7 -0
  9. package/lib/cli/commands/cedar/cedar-format.js +75 -0
  10. package/lib/cli/commands/cedar/cedar-to-d9-translations.d.ts +12 -0
  11. package/lib/cli/commands/cedar/cedar-to-d9-translations.js +130 -0
  12. package/lib/cli/commands/cedar/cedar-to-d9.d.ts +57 -0
  13. package/lib/cli/commands/cedar/cedar-to-d9.js +221 -0
  14. package/lib/cli/commands/cedar/cedar-translations.d.ts +9 -0
  15. package/lib/cli/commands/cedar/cedar-translations.js +213 -0
  16. package/lib/cli/commands/cedar/d9-permission.d.ts +27 -0
  17. package/lib/cli/commands/cedar/d9-permission.js +45 -0
  18. package/lib/cli/commands/cedar/d9-to-cedar.d.ts +33 -0
  19. package/lib/cli/commands/cedar/d9-to-cedar.js +157 -0
  20. package/lib/cli/commands/cedar/roles-table.d.ts +14 -0
  21. package/lib/cli/commands/cedar/roles-table.js +29 -0
  22. package/lib/cli/commands/save/apply-snapshot.js +39 -30
  23. package/lib/cli/commands/save/check-unsaved.d.ts +9 -0
  24. package/lib/cli/commands/save/check-unsaved.js +81 -0
  25. package/lib/cli/commands/save/env.d.ts +33 -0
  26. package/lib/cli/commands/save/env.js +109 -0
  27. package/lib/cli/commands/save/save-snapshot.d.ts +9 -0
  28. package/lib/cli/commands/save/save-snapshot.js +232 -0
  29. package/lib/cli/commands/save/sync-files.d.ts +5 -0
  30. package/lib/cli/commands/save/sync-files.js +46 -0
  31. package/lib/cli/commands/save/transfer.d.ts +18 -0
  32. package/lib/cli/commands/save/transfer.js +96 -0
  33. package/lib/cli/commands/save/utils.d.ts +5 -0
  34. package/lib/cli/commands/save/utils.js +33 -3
  35. package/lib/cli/commands/sync.js +4 -3
  36. package/lib/cli/index.js +65 -25
  37. package/lib/cli/logger.d.ts +2 -0
  38. package/lib/cli/logger.js +10 -0
  39. package/lib/cli/plumbing-config.d.ts +11 -0
  40. package/lib/cli/plumbing-config.js +13 -0
  41. package/lib/index.d.ts +44 -5
  42. package/lib/index.js +54 -41
  43. package/node_modules/@cedar-policy/cedar-wasm/README.md +181 -0
  44. package/node_modules/@cedar-policy/cedar-wasm/esm/README.md +181 -0
  45. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm.d.ts +427 -0
  46. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm.js +9 -0
  47. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.js +434 -0
  48. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.wasm +0 -0
  49. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.wasm.d.ts +34 -0
  50. package/node_modules/@cedar-policy/cedar-wasm/esm/package.json +23 -0
  51. package/node_modules/@cedar-policy/cedar-wasm/nodejs/README.md +181 -0
  52. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm.d.ts +427 -0
  53. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm.js +463 -0
  54. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm_bg.wasm +0 -0
  55. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm_bg.wasm.d.ts +34 -0
  56. package/node_modules/@cedar-policy/cedar-wasm/nodejs/package.json +18 -0
  57. package/node_modules/@cedar-policy/cedar-wasm/package.json +53 -0
  58. package/node_modules/@cedar-policy/cedar-wasm/web/README.md +181 -0
  59. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm.d.ts +486 -0
  60. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm.js +534 -0
  61. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm_bg.wasm +0 -0
  62. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm_bg.wasm.d.ts +34 -0
  63. package/node_modules/@cedar-policy/cedar-wasm/web/package.json +21 -0
  64. package/node_modules/@types/node/README.md +5 -6
  65. package/node_modules/@types/node/assert/strict.d.ts +111 -0
  66. package/node_modules/@types/node/assert.d.ts +1040 -79
  67. package/node_modules/@types/node/async_hooks.d.ts +476 -119
  68. package/node_modules/@types/node/buffer.buffer.d.ts +472 -0
  69. package/node_modules/@types/node/buffer.d.ts +1925 -13
  70. package/node_modules/@types/node/child_process.d.ts +1204 -235
  71. package/node_modules/@types/node/cluster.d.ts +455 -137
  72. package/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
  73. package/node_modules/@types/node/compatibility/index.d.ts +9 -0
  74. package/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
  75. package/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
  76. package/node_modules/@types/node/console.d.ts +450 -1
  77. package/node_modules/@types/node/constants.d.ts +20 -447
  78. package/node_modules/@types/node/crypto.d.ts +3962 -600
  79. package/node_modules/@types/node/dgram.d.ts +515 -33
  80. package/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
  81. package/node_modules/@types/node/dns/promises.d.ts +503 -0
  82. package/node_modules/@types/node/dns.d.ts +798 -247
  83. package/node_modules/@types/node/domain.d.ts +164 -10
  84. package/node_modules/@types/node/events.d.ts +954 -25
  85. package/node_modules/@types/node/fs/promises.d.ts +1295 -0
  86. package/node_modules/@types/node/fs.d.ts +3463 -1569
  87. package/node_modules/@types/node/globals.d.ts +98 -1277
  88. package/node_modules/@types/node/globals.typedarray.d.ts +38 -0
  89. package/node_modules/@types/node/http.d.ts +1933 -300
  90. package/node_modules/@types/node/http2.d.ts +1946 -254
  91. package/node_modules/@types/node/https.d.ts +557 -134
  92. package/node_modules/@types/node/index.d.ts +54 -48
  93. package/node_modules/@types/node/inspector.d.ts +227 -3014
  94. package/node_modules/@types/node/inspector.generated.d.ts +4052 -0
  95. package/node_modules/@types/node/module.d.ts +890 -2
  96. package/node_modules/@types/node/net.d.ts +872 -105
  97. package/node_modules/@types/node/os.d.ts +452 -209
  98. package/node_modules/@types/node/package.json +78 -128
  99. package/node_modules/@types/node/path.d.ts +196 -155
  100. package/node_modules/@types/node/perf_hooks.d.ts +829 -120
  101. package/node_modules/@types/node/process.d.ts +2072 -3
  102. package/node_modules/@types/node/punycode.d.ts +69 -27
  103. package/node_modules/@types/node/querystring.d.ts +132 -9
  104. package/node_modules/@types/node/readline/promises.d.ts +161 -0
  105. package/node_modules/@types/node/readline.d.ts +485 -49
  106. package/node_modules/@types/node/repl.d.ts +121 -83
  107. package/node_modules/@types/node/sea.d.ts +153 -0
  108. package/node_modules/@types/node/sqlite.d.ts +721 -0
  109. package/node_modules/@types/node/stream/consumers.d.ts +38 -0
  110. package/node_modules/@types/node/stream/promises.d.ts +90 -0
  111. package/node_modules/@types/node/stream/web.d.ts +622 -0
  112. package/node_modules/@types/node/stream.d.ts +1470 -140
  113. package/node_modules/@types/node/string_decoder.d.ts +64 -4
  114. package/node_modules/@types/node/test.d.ts +2163 -0
  115. package/node_modules/@types/node/timers/promises.d.ts +108 -0
  116. package/node_modules/@types/node/timers.d.ts +284 -13
  117. package/node_modules/@types/node/tls.d.ts +850 -244
  118. package/node_modules/@types/node/trace_events.d.ts +147 -11
  119. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
  120. package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
  121. package/node_modules/@types/node/ts5.6/index.d.ts +97 -0
  122. package/node_modules/@types/node/tty.d.ts +160 -18
  123. package/node_modules/@types/node/url.d.ts +890 -53
  124. package/node_modules/@types/node/util.d.ts +2566 -160
  125. package/node_modules/@types/node/v8.d.ts +806 -83
  126. package/node_modules/@types/node/vm.d.ts +932 -44
  127. package/node_modules/@types/node/wasi.d.ts +148 -22
  128. package/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  129. package/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  130. package/node_modules/@types/node/web-globals/events.d.ts +97 -0
  131. package/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
  132. package/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
  133. package/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  134. package/node_modules/@types/node/worker_threads.d.ts +657 -80
  135. package/node_modules/@types/node/zlib.d.ts +510 -119
  136. package/node_modules/pino/.nojekyll +0 -0
  137. package/node_modules/pino/.prettierignore +1 -0
  138. package/node_modules/pino/CNAME +1 -0
  139. package/node_modules/pino/CONTRIBUTING.md +34 -0
  140. package/node_modules/pino/LICENSE +21 -0
  141. package/node_modules/pino/README.md +177 -0
  142. package/node_modules/pino/SECURITY.md +103 -0
  143. package/node_modules/pino/benchmarks/basic.bench.js +95 -0
  144. package/node_modules/pino/benchmarks/child-child.bench.js +52 -0
  145. package/node_modules/pino/benchmarks/child-creation.bench.js +73 -0
  146. package/node_modules/pino/benchmarks/child.bench.js +62 -0
  147. package/node_modules/pino/benchmarks/deep-object.bench.js +88 -0
  148. package/node_modules/pino/benchmarks/formatters.bench.js +50 -0
  149. package/node_modules/pino/benchmarks/internal/custom-levels.js +67 -0
  150. package/node_modules/pino/benchmarks/internal/just-pino-heavy.bench.js +76 -0
  151. package/node_modules/pino/benchmarks/internal/just-pino.bench.js +182 -0
  152. package/node_modules/pino/benchmarks/internal/parent-vs-child.bench.js +75 -0
  153. package/node_modules/pino/benchmarks/internal/redact.bench.js +86 -0
  154. package/node_modules/pino/benchmarks/long-string.bench.js +81 -0
  155. package/node_modules/pino/benchmarks/multi-arg.bench.js +193 -0
  156. package/node_modules/pino/benchmarks/multistream.js +98 -0
  157. package/node_modules/pino/benchmarks/object.bench.js +82 -0
  158. package/node_modules/pino/benchmarks/utils/generate-benchmark-doc.js +36 -0
  159. package/node_modules/pino/benchmarks/utils/runbench.js +138 -0
  160. package/node_modules/pino/benchmarks/utils/wrap-log-level.js +55 -0
  161. package/node_modules/pino/bin.js +6 -0
  162. package/node_modules/pino/browser.js +607 -0
  163. package/node_modules/pino/build/sync-version.js +25 -0
  164. package/node_modules/pino/docs/api.md +1664 -0
  165. package/node_modules/pino/docs/asynchronous.md +55 -0
  166. package/node_modules/pino/docs/benchmarks.md +55 -0
  167. package/node_modules/pino/docs/browser.md +341 -0
  168. package/node_modules/pino/docs/bundling.md +40 -0
  169. package/node_modules/pino/docs/child-loggers.md +116 -0
  170. package/node_modules/pino/docs/diagnostics.md +16 -0
  171. package/node_modules/pino/docs/ecosystem.md +87 -0
  172. package/node_modules/pino/docs/help.md +353 -0
  173. package/node_modules/pino/docs/lts.md +93 -0
  174. package/node_modules/pino/docs/pretty.md +38 -0
  175. package/node_modules/pino/docs/redaction.md +130 -0
  176. package/node_modules/pino/docs/transports.md +1447 -0
  177. package/node_modules/pino/docs/web.md +306 -0
  178. package/node_modules/pino/eslint.config.js +36 -0
  179. package/node_modules/pino/examples/basic.js +43 -0
  180. package/node_modules/pino/examples/transport.js +68 -0
  181. package/node_modules/pino/favicon.ico +0 -0
  182. package/node_modules/pino/file.js +12 -0
  183. package/node_modules/pino/inc-version.sh +42 -0
  184. package/node_modules/pino/index.html +55 -0
  185. package/node_modules/pino/lib/caller.js +40 -0
  186. package/node_modules/pino/lib/constants.js +28 -0
  187. package/node_modules/pino/lib/deprecations.js +8 -0
  188. package/node_modules/pino/lib/levels.js +241 -0
  189. package/node_modules/pino/lib/meta.js +3 -0
  190. package/node_modules/pino/lib/multistream.js +211 -0
  191. package/node_modules/pino/lib/proto.js +256 -0
  192. package/node_modules/pino/lib/redaction.js +119 -0
  193. package/node_modules/pino/lib/symbols.js +76 -0
  194. package/node_modules/pino/lib/time.js +39 -0
  195. package/node_modules/pino/lib/tools.js +427 -0
  196. package/node_modules/pino/lib/transport-stream.js +56 -0
  197. package/node_modules/pino/lib/transport.js +302 -0
  198. package/node_modules/pino/lib/worker.js +197 -0
  199. package/node_modules/pino/package.json +112 -0
  200. package/node_modules/pino/pino.d.ts +881 -0
  201. package/node_modules/pino/pino.js +259 -0
  202. package/node_modules/pino/test/basic.test.js +952 -0
  203. package/node_modules/pino/test/broken-pipe.test.js +59 -0
  204. package/node_modules/pino/test/browser-bindings.test.js +114 -0
  205. package/node_modules/pino/test/browser-child.test.js +132 -0
  206. package/node_modules/pino/test/browser-disabled.test.js +87 -0
  207. package/node_modules/pino/test/browser-early-console-freeze.test.js +12 -0
  208. package/node_modules/pino/test/browser-is-level-enabled.test.js +101 -0
  209. package/node_modules/pino/test/browser-levels.test.js +241 -0
  210. package/node_modules/pino/test/browser-redaction.test.js +264 -0
  211. package/node_modules/pino/test/browser-serializers.test.js +352 -0
  212. package/node_modules/pino/test/browser-set-bindings.test.js +99 -0
  213. package/node_modules/pino/test/browser-timestamp.test.js +88 -0
  214. package/node_modules/pino/test/browser-transmit.test.js +417 -0
  215. package/node_modules/pino/test/browser.test.js +698 -0
  216. package/node_modules/pino/test/caller.test.js +20 -0
  217. package/node_modules/pino/test/complex-objects.test.js +36 -0
  218. package/node_modules/pino/test/crlf.test.js +34 -0
  219. package/node_modules/pino/test/custom-levels.test.js +267 -0
  220. package/node_modules/pino/test/diagnostics.test.js +107 -0
  221. package/node_modules/pino/test/error-key.test.js +37 -0
  222. package/node_modules/pino/test/error.test.js +403 -0
  223. package/node_modules/pino/test/escaping.test.js +110 -0
  224. package/node_modules/pino/test/esm/esm.mjs +14 -0
  225. package/node_modules/pino/test/esm/index.test.js +21 -0
  226. package/node_modules/pino/test/esm/named-exports.mjs +29 -0
  227. package/node_modules/pino/test/exit.test.js +79 -0
  228. package/node_modules/pino/test/fixtures/broken-pipe/basic.js +9 -0
  229. package/node_modules/pino/test/fixtures/broken-pipe/destination.js +10 -0
  230. package/node_modules/pino/test/fixtures/broken-pipe/syncfalse.js +12 -0
  231. package/node_modules/pino/test/fixtures/caller-loop.js +6 -0
  232. package/node_modules/pino/test/fixtures/console-transport.js +13 -0
  233. package/node_modules/pino/test/fixtures/crashing-transport.js +13 -0
  234. package/node_modules/pino/test/fixtures/default-exit.js +8 -0
  235. package/node_modules/pino/test/fixtures/destination-exit.js +8 -0
  236. package/node_modules/pino/test/fixtures/eval/index.js +13 -0
  237. package/node_modules/pino/test/fixtures/eval/node_modules/14-files.js +3 -0
  238. package/node_modules/pino/test/fixtures/eval/node_modules/2-files.js +3 -0
  239. package/node_modules/pino/test/fixtures/eval/node_modules/file1.js +5 -0
  240. package/node_modules/pino/test/fixtures/eval/node_modules/file10.js +5 -0
  241. package/node_modules/pino/test/fixtures/eval/node_modules/file11.js +5 -0
  242. package/node_modules/pino/test/fixtures/eval/node_modules/file12.js +5 -0
  243. package/node_modules/pino/test/fixtures/eval/node_modules/file13.js +5 -0
  244. package/node_modules/pino/test/fixtures/eval/node_modules/file14.js +11 -0
  245. package/node_modules/pino/test/fixtures/eval/node_modules/file2.js +5 -0
  246. package/node_modules/pino/test/fixtures/eval/node_modules/file3.js +5 -0
  247. package/node_modules/pino/test/fixtures/eval/node_modules/file4.js +5 -0
  248. package/node_modules/pino/test/fixtures/eval/node_modules/file5.js +5 -0
  249. package/node_modules/pino/test/fixtures/eval/node_modules/file6.js +5 -0
  250. package/node_modules/pino/test/fixtures/eval/node_modules/file7.js +5 -0
  251. package/node_modules/pino/test/fixtures/eval/node_modules/file8.js +5 -0
  252. package/node_modules/pino/test/fixtures/eval/node_modules/file9.js +5 -0
  253. package/node_modules/pino/test/fixtures/noop-transport.js +10 -0
  254. package/node_modules/pino/test/fixtures/pretty/null-prototype.js +8 -0
  255. package/node_modules/pino/test/fixtures/stdout-hack-protection.js +11 -0
  256. package/node_modules/pino/test/fixtures/syncfalse-child.js +6 -0
  257. package/node_modules/pino/test/fixtures/syncfalse-exit.js +9 -0
  258. package/node_modules/pino/test/fixtures/syncfalse-flush-exit.js +10 -0
  259. package/node_modules/pino/test/fixtures/syncfalse.js +6 -0
  260. package/node_modules/pino/test/fixtures/syntax-error-esm.mjs +2 -0
  261. package/node_modules/pino/test/fixtures/to-file-transport-with-transform.js +20 -0
  262. package/node_modules/pino/test/fixtures/to-file-transport.js +13 -0
  263. package/node_modules/pino/test/fixtures/to-file-transport.mjs +8 -0
  264. package/node_modules/pino/test/fixtures/transport/index.js +12 -0
  265. package/node_modules/pino/test/fixtures/transport/package.json +5 -0
  266. package/node_modules/pino/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
  267. package/node_modules/pino/test/fixtures/transport-exit-immediately.js +11 -0
  268. package/node_modules/pino/test/fixtures/transport-exit-on-ready.js +12 -0
  269. package/node_modules/pino/test/fixtures/transport-invalid-node-options.js +26 -0
  270. package/node_modules/pino/test/fixtures/transport-main.js +9 -0
  271. package/node_modules/pino/test/fixtures/transport-many-lines.js +29 -0
  272. package/node_modules/pino/test/fixtures/transport-preload-main.mjs +13 -0
  273. package/node_modules/pino/test/fixtures/transport-preload.mjs +13 -0
  274. package/node_modules/pino/test/fixtures/transport-string-stdout.js +9 -0
  275. package/node_modules/pino/test/fixtures/transport-transform.js +21 -0
  276. package/node_modules/pino/test/fixtures/transport-uses-pino-config.js +33 -0
  277. package/node_modules/pino/test/fixtures/transport-with-on-exit.js +12 -0
  278. package/node_modules/pino/test/fixtures/transport-worker-data.js +19 -0
  279. package/node_modules/pino/test/fixtures/transport-worker-name.js +24 -0
  280. package/node_modules/pino/test/fixtures/transport-worker.js +15 -0
  281. package/node_modules/pino/test/fixtures/transport-wrong-export-type.js +3 -0
  282. package/node_modules/pino/test/fixtures/ts/to-file-transport-native.mts +15 -0
  283. package/node_modules/pino/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
  284. package/node_modules/pino/test/fixtures/ts/to-file-transport.ts +11 -0
  285. package/node_modules/pino/test/fixtures/ts/transpile.cjs +36 -0
  286. package/node_modules/pino/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
  287. package/node_modules/pino/test/fixtures/ts/transport-exit-immediately.ts +10 -0
  288. package/node_modules/pino/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
  289. package/node_modules/pino/test/fixtures/ts/transport-main.ts +8 -0
  290. package/node_modules/pino/test/fixtures/ts/transport-string-stdout.ts +8 -0
  291. package/node_modules/pino/test/fixtures/ts/transport-worker.ts +14 -0
  292. package/node_modules/pino/test/formatters.test.js +364 -0
  293. package/node_modules/pino/test/helper.d.ts +4 -0
  294. package/node_modules/pino/test/helper.js +159 -0
  295. package/node_modules/pino/test/hooks.test.js +114 -0
  296. package/node_modules/pino/test/http.test.js +214 -0
  297. package/node_modules/pino/test/internals/version.test.js +17 -0
  298. package/node_modules/pino/test/is-level-enabled.test.js +179 -0
  299. package/node_modules/pino/test/jest/basic.spec.js +10 -0
  300. package/node_modules/pino/test/levels.test.js +810 -0
  301. package/node_modules/pino/test/metadata.test.js +120 -0
  302. package/node_modules/pino/test/mixin-merge-strategy.test.js +57 -0
  303. package/node_modules/pino/test/mixin.test.js +241 -0
  304. package/node_modules/pino/test/multistream.test.js +793 -0
  305. package/node_modules/pino/test/redact.test.js +923 -0
  306. package/node_modules/pino/test/serializers.test.js +257 -0
  307. package/node_modules/pino/test/smoke.js +59 -0
  308. package/node_modules/pino/test/stdout-protection.test.js +41 -0
  309. package/node_modules/pino/test/syncfalse.test.js +186 -0
  310. package/node_modules/pino/test/timestamp-nano.test.js +37 -0
  311. package/node_modules/pino/test/timestamp.test.js +124 -0
  312. package/node_modules/pino/test/transport/big.test.js +42 -0
  313. package/node_modules/pino/test/transport/bundlers-support.test.js +99 -0
  314. package/node_modules/pino/test/transport/caller.test.js +24 -0
  315. package/node_modules/pino/test/transport/core.test.js +818 -0
  316. package/node_modules/pino/test/transport/core.transpiled.test.ts +114 -0
  317. package/node_modules/pino/test/transport/crash.test.js +36 -0
  318. package/node_modules/pino/test/transport/module-link.test.js +241 -0
  319. package/node_modules/pino/test/transport/native-type-stripping.test.mjs +151 -0
  320. package/node_modules/pino/test/transport/node-options.test.js +116 -0
  321. package/node_modules/pino/test/transport/pipeline.test.js +137 -0
  322. package/node_modules/pino/test/transport/preload.test.js +54 -0
  323. package/node_modules/pino/test/transport/repl.test.js +15 -0
  324. package/node_modules/pino/test/transport/sync-false.test.js +79 -0
  325. package/node_modules/pino/test/transport/sync-true.test.js +57 -0
  326. package/node_modules/pino/test/transport/targets.test.js +48 -0
  327. package/node_modules/pino/test/transport/uses-pino-config.test.js +166 -0
  328. package/node_modules/pino/test/transport-stream.test.js +40 -0
  329. package/node_modules/pino/test/types/pino-import.tst.cts +30 -0
  330. package/node_modules/pino/test/types/pino-import.tst.js +73 -0
  331. package/node_modules/pino/test/types/pino-multistream.tst.ts +49 -0
  332. package/node_modules/pino/test/types/pino-top-export.tst.ts +32 -0
  333. package/node_modules/pino/test/types/pino-transport.tst.ts +171 -0
  334. package/node_modules/pino/test/types/pino-type-only.tst.ts +77 -0
  335. package/node_modules/pino/test/types/pino.ts +98 -0
  336. package/node_modules/pino/test/types/pino.tst.ts +681 -0
  337. package/node_modules/pino/test/types/tsconfig.json +10 -0
  338. package/node_modules/pino/tsconfig.json +14 -0
  339. package/node_modules/pino-pretty/.borp.yaml +6 -0
  340. package/node_modules/pino-pretty/.editorconfig +13 -0
  341. package/node_modules/pino-pretty/.github/dependabot.yml +13 -0
  342. package/node_modules/pino-pretty/.github/workflows/ci.yml +83 -0
  343. package/node_modules/pino-pretty/LICENSE +21 -0
  344. package/node_modules/pino-pretty/Readme.md +425 -0
  345. package/node_modules/pino-pretty/SECURITY.md +146 -0
  346. package/node_modules/pino-pretty/benchmark.js +105 -0
  347. package/node_modules/pino-pretty/bin.js +113 -0
  348. package/node_modules/pino-pretty/demo.png +0 -0
  349. package/node_modules/pino-pretty/docs/help.md +24 -0
  350. package/node_modules/pino-pretty/eslint.config.js +5 -0
  351. package/node_modules/pino-pretty/help/help.txt +68 -0
  352. package/node_modules/pino-pretty/index.d.ts +227 -0
  353. package/node_modules/pino-pretty/index.js +234 -0
  354. package/node_modules/pino-pretty/lib/colors.js +134 -0
  355. package/node_modules/pino-pretty/lib/colors.test.js +132 -0
  356. package/node_modules/pino-pretty/lib/constants.js +55 -0
  357. package/node_modules/pino-pretty/lib/pretty.js +171 -0
  358. package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.js +69 -0
  359. package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.test.js +84 -0
  360. package/node_modules/pino-pretty/lib/utils/create-date.js +26 -0
  361. package/node_modules/pino-pretty/lib/utils/create-date.test.js +20 -0
  362. package/node_modules/pino-pretty/lib/utils/delete-log-property.js +28 -0
  363. package/node_modules/pino-pretty/lib/utils/delete-log-property.test.js +31 -0
  364. package/node_modules/pino-pretty/lib/utils/filter-log.js +99 -0
  365. package/node_modules/pino-pretty/lib/utils/filter-log.test.js +265 -0
  366. package/node_modules/pino-pretty/lib/utils/format-time.js +66 -0
  367. package/node_modules/pino-pretty/lib/utils/format-time.test.js +71 -0
  368. package/node_modules/pino-pretty/lib/utils/get-level-label-data.js +29 -0
  369. package/node_modules/pino-pretty/lib/utils/get-property-value.js +30 -0
  370. package/node_modules/pino-pretty/lib/utils/get-property-value.test.js +31 -0
  371. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.js +38 -0
  372. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.test.js +45 -0
  373. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.js +39 -0
  374. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.test.js +47 -0
  375. package/node_modules/pino-pretty/lib/utils/index.js +108 -0
  376. package/node_modules/pino-pretty/lib/utils/index.test.js +37 -0
  377. package/node_modules/pino-pretty/lib/utils/interpret-conditionals.js +41 -0
  378. package/node_modules/pino-pretty/lib/utils/interpret-conditionals.test.js +84 -0
  379. package/node_modules/pino-pretty/lib/utils/is-object.js +7 -0
  380. package/node_modules/pino-pretty/lib/utils/is-object.test.js +10 -0
  381. package/node_modules/pino-pretty/lib/utils/is-valid-date.js +14 -0
  382. package/node_modules/pino-pretty/lib/utils/is-valid-date.test.js +16 -0
  383. package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.js +29 -0
  384. package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.test.js +16 -0
  385. package/node_modules/pino-pretty/lib/utils/noop.js +3 -0
  386. package/node_modules/pino-pretty/lib/utils/noop.test.js +12 -0
  387. package/node_modules/pino-pretty/lib/utils/parse-factory-options.js +171 -0
  388. package/node_modules/pino-pretty/lib/utils/prettify-error-log.js +76 -0
  389. package/node_modules/pino-pretty/lib/utils/prettify-error-log.test.js +143 -0
  390. package/node_modules/pino-pretty/lib/utils/prettify-error.js +54 -0
  391. package/node_modules/pino-pretty/lib/utils/prettify-error.test.js +25 -0
  392. package/node_modules/pino-pretty/lib/utils/prettify-level.js +41 -0
  393. package/node_modules/pino-pretty/lib/utils/prettify-level.test.js +70 -0
  394. package/node_modules/pino-pretty/lib/utils/prettify-message.js +65 -0
  395. package/node_modules/pino-pretty/lib/utils/prettify-message.test.js +287 -0
  396. package/node_modules/pino-pretty/lib/utils/prettify-metadata.js +75 -0
  397. package/node_modules/pino-pretty/lib/utils/prettify-metadata.test.js +170 -0
  398. package/node_modules/pino-pretty/lib/utils/prettify-object.js +115 -0
  399. package/node_modules/pino-pretty/lib/utils/prettify-object.test.js +217 -0
  400. package/node_modules/pino-pretty/lib/utils/prettify-time.js +43 -0
  401. package/node_modules/pino-pretty/lib/utils/prettify-time.test.js +264 -0
  402. package/node_modules/pino-pretty/lib/utils/split-property-key.js +49 -0
  403. package/node_modules/pino-pretty/lib/utils/split-property-key.test.js +29 -0
  404. package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.js +18 -0
  405. package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.test.js +9 -0
  406. package/node_modules/pino-pretty/package.json +64 -0
  407. package/node_modules/pino-pretty/test/basic.test.js +1305 -0
  408. package/node_modules/pino-pretty/test/boolean-options.test.js +228 -0
  409. package/node_modules/pino-pretty/test/cli-rc.test.js +275 -0
  410. package/node_modules/pino-pretty/test/cli.test.js +360 -0
  411. package/node_modules/pino-pretty/test/crlf.test.js +33 -0
  412. package/node_modules/pino-pretty/test/error-objects.test.js +494 -0
  413. package/node_modules/pino-pretty/test/example/example.js +33 -0
  414. package/node_modules/pino-pretty/test/helper.js +19 -0
  415. package/node_modules/pino-pretty/test/types/exports.tst.ts +15 -0
  416. package/node_modules/pino-pretty/test/types/pino-pretty.tst.ts +140 -0
  417. package/node_modules/pino-pretty/test/types/tsconfig.json +9 -0
  418. package/package.json +12 -5
  419. package/lib/cli/commands/init.d.ts +0 -1
  420. package/lib/cli/commands/init.js +0 -8
  421. package/node_modules/@types/node/globals.global.d.ts +0 -1
@@ -1,16 +1,55 @@
1
1
  /**
2
- * Async Hooks module: https://nodejs.org/api/async_hooks.html
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-v22.x/api/async_context.html#class-asynclocalstorage) tracks async context
6
+ * * [`process.getActiveResourcesInfo()`](https://nodejs.org/docs/latest-v22.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/v22.x/lib/async_hooks.js)
3
16
  */
4
- declare module 'async_hooks' {
17
+ declare module "async_hooks" {
5
18
  /**
6
- * Returns the asyncId of the current execution context.
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-v22.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.
7
50
  */
8
51
  function executionAsyncId(): number;
9
-
10
52
  /**
11
- * The resource representing the current execution.
12
- * Useful to store data within the resource.
13
- *
14
53
  * Resource objects returned by `executionAsyncResource()` are most often internal
15
54
  * Node.js handle objects with undocumented APIs. Using any functions or properties
16
55
  * on the object is likely to crash your application and should be avoided.
@@ -18,90 +57,208 @@ declare module 'async_hooks' {
18
57
  * Using `executionAsyncResource()` in the top-level execution context will
19
58
  * return an empty object as there is no handle or request object to use,
20
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.
21
101
  */
22
102
  function executionAsyncResource(): object;
23
-
24
103
  /**
25
- * Returns the ID of the resource responsible for calling the callback that is currently being executed.
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-v22.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.
26
122
  */
27
123
  function triggerAsyncId(): number;
28
-
29
124
  interface HookCallbacks {
30
125
  /**
31
126
  * Called when a class is constructed that has the possibility to emit an asynchronous event.
32
- * @param asyncId a unique ID for the async resource
33
- * @param type the type of the async resource
34
- * @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created
35
- * @param resource reference to the resource representing the async operation, needs to be released during destroy
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
36
131
  */
37
132
  init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void;
38
-
39
133
  /**
40
134
  * When an asynchronous operation is initiated or completes a callback is called to notify the user.
41
135
  * The before callback is called just before said callback is executed.
42
136
  * @param asyncId the unique identifier assigned to the resource about to execute the callback.
43
137
  */
44
138
  before?(asyncId: number): void;
45
-
46
139
  /**
47
- * Called immediately after the callback specified in before is completed.
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.
48
143
  * @param asyncId the unique identifier assigned to the resource which has executed the callback.
49
144
  */
50
145
  after?(asyncId: number): void;
51
-
52
146
  /**
53
147
  * Called when a promise has resolve() called. This may not be in the same execution id
54
148
  * as the promise itself.
55
149
  * @param asyncId the unique id for the promise that was resolve()d.
56
150
  */
57
151
  promiseResolve?(asyncId: number): void;
58
-
59
152
  /**
60
153
  * Called after the resource corresponding to asyncId is destroyed
61
154
  * @param asyncId a unique ID for the async resource
62
155
  */
63
156
  destroy?(asyncId: number): void;
64
157
  }
65
-
66
158
  interface AsyncHook {
67
159
  /**
68
160
  * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
69
161
  */
70
162
  enable(): this;
71
-
72
163
  /**
73
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.
74
165
  */
75
166
  disable(): this;
76
167
  }
77
-
78
168
  /**
79
- * Registers functions to be called for different lifetime events of each async operation.
80
- * @param options the callbacks to register
81
- * @return an AsyncHooks instance used for disabling and enabling hooks
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
82
209
  */
83
- function createHook(options: HookCallbacks): AsyncHook;
84
-
210
+ function createHook(callbacks: HookCallbacks): AsyncHook;
85
211
  interface AsyncResourceOptions {
86
- /**
87
- * The ID of the execution context that created this async event.
88
- * @default executionAsyncId()
89
- */
90
- triggerAsyncId?: number | undefined;
91
-
92
- /**
93
- * Disables automatic `emitDestroy` when the object is garbage collected.
94
- * This usually does not need to be set (even if `emitDestroy` is called
95
- * manually), unless the resource's `asyncId` is retrieved and the
96
- * sensitive API's `emitDestroy` is called with it.
97
- * @default false
98
- */
99
- requireManualDestroy?: boolean | undefined;
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;
100
225
  }
101
-
102
226
  /**
103
- * The class AsyncResource was designed to be extended by the embedder's async resources.
104
- * Using this users can easily trigger the lifetime events of their own resources.
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
+ * ```
105
262
  */
106
263
  class AsyncResource {
107
264
  /**
@@ -113,134 +270,334 @@ declare module 'async_hooks' {
113
270
  * this async event (default: `executionAsyncId()`), or an
114
271
  * AsyncResourceOptions object (since v9.3.0)
115
272
  */
116
- constructor(type: string, triggerAsyncId?: number|AsyncResourceOptions);
117
-
273
+ constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions);
118
274
  /**
119
275
  * Binds the given function to the current execution context.
276
+ * @since v14.8.0, v12.19.0
120
277
  * @param fn The function to bind to the current execution context.
121
278
  * @param type An optional name to associate with the underlying `AsyncResource`.
122
279
  */
123
- static bind<Func extends (...args: any[]) => any>(fn: Func, type?: string): Func & { asyncResource: AsyncResource };
124
-
280
+ static bind<Func extends (this: ThisArg, ...args: any[]) => any, ThisArg>(
281
+ fn: Func,
282
+ type?: string,
283
+ thisArg?: ThisArg,
284
+ ): Func;
125
285
  /**
126
286
  * Binds the given function to execute to this `AsyncResource`'s scope.
287
+ * @since v14.8.0, v12.19.0
127
288
  * @param fn The function to bind to the current `AsyncResource`.
128
289
  */
129
- bind<Func extends (...args: any[]) => any>(fn: Func): Func & { asyncResource: AsyncResource };
130
-
290
+ bind<Func extends (...args: any[]) => any>(fn: Func): Func;
131
291
  /**
132
- * Call the provided function with the provided arguments in the
133
- * execution context of the async resource. This will establish the
134
- * context, trigger the AsyncHooks before callbacks, call the function,
135
- * trigger the AsyncHooks after callbacks, and then restore the original
136
- * execution context.
137
- * @param fn The function to call in the execution context of this
138
- * async resource.
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.
139
298
  * @param thisArg The receiver to be used for the function call.
140
299
  * @param args Optional arguments to pass to the function.
141
300
  */
142
- runInAsyncScope<This, Result>(fn: (this: This, ...args: any[]) => Result, thisArg?: This, ...args: any[]): Result;
143
-
301
+ runInAsyncScope<This, Result>(
302
+ fn: (this: This, ...args: any[]) => Result,
303
+ thisArg?: This,
304
+ ...args: any[]
305
+ ): Result;
144
306
  /**
145
- * Call AsyncHooks destroy callbacks.
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`.
146
312
  */
147
313
  emitDestroy(): this;
148
-
149
314
  /**
150
- * @return the unique ID assigned to this AsyncResource instance.
315
+ * @return The unique `asyncId` assigned to the resource.
151
316
  */
152
317
  asyncId(): number;
153
-
154
318
  /**
155
- * @return the trigger ID for this AsyncResource instance.
319
+ * @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor.
156
320
  */
157
321
  triggerAsyncId(): number;
158
322
  }
159
-
160
323
  /**
161
- * When having multiple instances of `AsyncLocalStorage`, they are independent
162
- * from each other. It is safe to instantiate this class multiple times.
324
+ * This class creates stores that stay coherent through asynchronous operations.
325
+ *
326
+ * 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
327
+ * safe implementation that involves significant optimizations that are non-obvious
328
+ * to implement.
329
+ *
330
+ * The following example uses `AsyncLocalStorage` to build a simple logger
331
+ * that assigns IDs to incoming HTTP requests and includes them in messages
332
+ * logged within each request.
333
+ *
334
+ * ```js
335
+ * import http from 'node:http';
336
+ * import { AsyncLocalStorage } from 'node:async_hooks';
337
+ *
338
+ * const asyncLocalStorage = new AsyncLocalStorage();
339
+ *
340
+ * function logWithId(msg) {
341
+ * const id = asyncLocalStorage.getStore();
342
+ * console.log(`${id !== undefined ? id : '-'}:`, msg);
343
+ * }
344
+ *
345
+ * let idSeq = 0;
346
+ * http.createServer((req, res) => {
347
+ * asyncLocalStorage.run(idSeq++, () => {
348
+ * logWithId('start');
349
+ * // Imagine any chain of async operations here
350
+ * setImmediate(() => {
351
+ * logWithId('finish');
352
+ * res.end();
353
+ * });
354
+ * });
355
+ * }).listen(8080);
356
+ *
357
+ * http.get('http://localhost:8080');
358
+ * http.get('http://localhost:8080');
359
+ * // Prints:
360
+ * // 0: start
361
+ * // 0: finish
362
+ * // 1: start
363
+ * // 1: finish
364
+ * ```
365
+ *
366
+ * Each instance of `AsyncLocalStorage` maintains an independent storage context.
367
+ * Multiple instances can safely exist simultaneously without risk of interfering
368
+ * with each other's data.
369
+ * @since v13.10.0, v12.17.0
163
370
  */
164
371
  class AsyncLocalStorage<T> {
165
372
  /**
166
- * This method disables the instance of `AsyncLocalStorage`. All subsequent calls
167
- * to `asyncLocalStorage.getStore()` will return `undefined` until
168
- * `asyncLocalStorage.run()` or `asyncLocalStorage.runSyncAndReturn()`
169
- * is called again.
373
+ * Binds the given function to the current execution context.
374
+ * @since v19.8.0
375
+ * @param fn The function to bind to the current execution context.
376
+ * @return A new function that calls `fn` within the captured execution context.
377
+ */
378
+ static bind<Func extends (...args: any[]) => any>(fn: Func): Func;
379
+ /**
380
+ * Captures the current execution context and returns a function that accepts a
381
+ * function as an argument. Whenever the returned function is called, it
382
+ * calls the function passed to it within the captured context.
383
+ *
384
+ * ```js
385
+ * const asyncLocalStorage = new AsyncLocalStorage();
386
+ * const runInAsyncScope = asyncLocalStorage.run(123, () => AsyncLocalStorage.snapshot());
387
+ * const result = asyncLocalStorage.run(321, () => runInAsyncScope(() => asyncLocalStorage.getStore()));
388
+ * console.log(result); // returns 123
389
+ * ```
390
+ *
391
+ * AsyncLocalStorage.snapshot() can replace the use of AsyncResource for simple
392
+ * async context tracking purposes, for example:
393
+ *
394
+ * ```js
395
+ * class Foo {
396
+ * #runInAsyncScope = AsyncLocalStorage.snapshot();
397
+ *
398
+ * get() { return this.#runInAsyncScope(() => asyncLocalStorage.getStore()); }
399
+ * }
400
+ *
401
+ * const foo = asyncLocalStorage.run(123, () => new Foo());
402
+ * console.log(asyncLocalStorage.run(321, () => foo.get())); // returns 123
403
+ * ```
404
+ * @since v19.8.0
405
+ * @return A new function with the signature `(fn: (...args) : R, ...args) : R`.
406
+ */
407
+ static snapshot(): <R, TArgs extends any[]>(fn: (...args: TArgs) => R, ...args: TArgs) => R;
408
+ /**
409
+ * Disables the instance of `AsyncLocalStorage`. All subsequent calls
410
+ * to `asyncLocalStorage.getStore()` will return `undefined` until `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again.
170
411
  *
171
412
  * When calling `asyncLocalStorage.disable()`, all current contexts linked to the
172
413
  * instance will be exited.
173
414
  *
174
- * Calling `asyncLocalStorage.disable()` is required before the
175
- * `asyncLocalStorage` can be garbage collected. This does not apply to stores
415
+ * Calling `asyncLocalStorage.disable()` is required before the `asyncLocalStorage` can be garbage collected. This does not apply to stores
176
416
  * provided by the `asyncLocalStorage`, as those objects are garbage collected
177
417
  * along with the corresponding async resources.
178
418
  *
179
- * This method is to be used when the `asyncLocalStorage` is not in use anymore
419
+ * Use this method when the `asyncLocalStorage` is not in use anymore
180
420
  * in the current process.
421
+ * @since v13.10.0, v12.17.0
422
+ * @experimental
181
423
  */
182
424
  disable(): void;
183
-
184
425
  /**
185
- * This method returns the current store.
186
- * If this method is called outside of an asynchronous context initialized by
187
- * calling `asyncLocalStorage.run` or `asyncLocalStorage.runAndReturn`, it will
188
- * return `undefined`.
426
+ * Returns the current store.
427
+ * If called outside of an asynchronous context initialized by
428
+ * calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it
429
+ * returns `undefined`.
430
+ * @since v13.10.0, v12.17.0
189
431
  */
190
432
  getStore(): T | undefined;
191
-
192
433
  /**
193
- * Calling `asyncLocalStorage.run(callback)` will create a new asynchronous
194
- * context.
195
- * Within the callback function and the asynchronous operations from the callback,
196
- * `asyncLocalStorage.getStore()` will return an instance of `Map` known as
197
- * "the store". This store will be persistent through the following
198
- * asynchronous calls.
434
+ * Runs a function synchronously within a context and returns its
435
+ * return value. The store is not accessible outside of the callback function.
436
+ * The store is accessible to any asynchronous operations created within the
437
+ * callback.
199
438
  *
200
- * The callback will be ran asynchronously. Optionally, arguments can be passed
201
- * to the function. They will be passed to the callback function.
439
+ * The optional `args` are passed to the callback function.
202
440
  *
203
- * If an error is thrown by the callback function, it will not be caught by
204
- * a `try/catch` block as the callback is ran in a new asynchronous resource.
205
- * Also, the stacktrace will be impacted by the asynchronous call.
206
- */
207
- // TODO: Apply generic vararg once available
208
- run(store: T, callback: (...args: any[]) => void, ...args: any[]): void;
209
-
210
- /**
211
- * Calling `asyncLocalStorage.exit(callback)` will create a new asynchronous
212
- * context.
213
- * Within the callback function and the asynchronous operations from the callback,
214
- * `asyncLocalStorage.getStore()` will return `undefined`.
441
+ * If the callback function throws an error, the error is thrown by `run()` too.
442
+ * The stacktrace is not impacted by this call and the context is exited.
215
443
  *
216
- * The callback will be ran asynchronously. Optionally, arguments can be passed
217
- * to the function. They will be passed to the callback function.
444
+ * Example:
218
445
  *
219
- * If an error is thrown by the callback function, it will not be caught by
220
- * a `try/catch` block as the callback is ran in a new asynchronous resource.
221
- * Also, the stacktrace will be impacted by the asynchronous call.
446
+ * ```js
447
+ * const store = { id: 2 };
448
+ * try {
449
+ * asyncLocalStorage.run(store, () => {
450
+ * asyncLocalStorage.getStore(); // Returns the store object
451
+ * setTimeout(() => {
452
+ * asyncLocalStorage.getStore(); // Returns the store object
453
+ * }, 200);
454
+ * throw new Error();
455
+ * });
456
+ * } catch (e) {
457
+ * asyncLocalStorage.getStore(); // Returns undefined
458
+ * // The error will be caught here
459
+ * }
460
+ * ```
461
+ * @since v13.10.0, v12.17.0
222
462
  */
223
- exit(callback: (...args: any[]) => void, ...args: any[]): void;
224
-
463
+ run<R>(store: T, callback: () => R): R;
464
+ run<R, TArgs extends any[]>(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R;
225
465
  /**
226
- * This methods runs a function synchronously outside of a context and return its
466
+ * Runs a function synchronously outside of a context and returns its
227
467
  * return value. The store is not accessible within the callback function or
228
- * the asynchronous operations created within the callback.
468
+ * the asynchronous operations created within the callback. Any `getStore()` call done within the callback function will always return `undefined`.
229
469
  *
230
- * Optionally, arguments can be passed to the function. They will be passed to
231
- * the callback function.
470
+ * The optional `args` are passed to the callback function.
232
471
  *
233
- * If the callback function throws an error, it will be thrown by
234
- * `exitSyncAndReturn` too. The stacktrace will not be impacted by this call and
235
- * the context will be re-entered.
472
+ * If the callback function throws an error, the error is thrown by `exit()` too.
473
+ * The stacktrace is not impacted by this call and the context is re-entered.
474
+ *
475
+ * Example:
476
+ *
477
+ * ```js
478
+ * // Within a call to run
479
+ * try {
480
+ * asyncLocalStorage.getStore(); // Returns the store object or value
481
+ * asyncLocalStorage.exit(() => {
482
+ * asyncLocalStorage.getStore(); // Returns undefined
483
+ * throw new Error();
484
+ * });
485
+ * } catch (e) {
486
+ * asyncLocalStorage.getStore(); // Returns the same object or value
487
+ * // The error will be caught here
488
+ * }
489
+ * ```
490
+ * @since v13.10.0, v12.17.0
491
+ * @experimental
236
492
  */
237
- exitSyncAndReturn<R>(callback: (...args: any[]) => R, ...args: any[]): R;
238
-
493
+ exit<R, TArgs extends any[]>(callback: (...args: TArgs) => R, ...args: TArgs): R;
239
494
  /**
240
- * Calling `asyncLocalStorage.enterWith(store)` will transition into the context
241
- * for the remainder of the current synchronous execution and will persist
242
- * through any following asynchronous calls.
495
+ * Transitions into the context for the remainder of the current
496
+ * synchronous execution and then persists the store through any following
497
+ * asynchronous calls.
498
+ *
499
+ * Example:
500
+ *
501
+ * ```js
502
+ * const store = { id: 1 };
503
+ * // Replaces previous store with the given store object
504
+ * asyncLocalStorage.enterWith(store);
505
+ * asyncLocalStorage.getStore(); // Returns the store object
506
+ * someAsyncOperation(() => {
507
+ * asyncLocalStorage.getStore(); // Returns the same object
508
+ * });
509
+ * ```
510
+ *
511
+ * This transition will continue for the _entire_ synchronous execution.
512
+ * This means that if, for example, the context is entered within an event
513
+ * handler subsequent event handlers will also run within that context unless
514
+ * specifically bound to another context with an `AsyncResource`. That is why `run()` should be preferred over `enterWith()` unless there are strong reasons
515
+ * to use the latter method.
516
+ *
517
+ * ```js
518
+ * const store = { id: 1 };
519
+ *
520
+ * emitter.on('my-event', () => {
521
+ * asyncLocalStorage.enterWith(store);
522
+ * });
523
+ * emitter.on('my-event', () => {
524
+ * asyncLocalStorage.getStore(); // Returns the same object
525
+ * });
526
+ *
527
+ * asyncLocalStorage.getStore(); // Returns undefined
528
+ * emitter.emit('my-event');
529
+ * asyncLocalStorage.getStore(); // Returns the same object
530
+ * ```
531
+ * @since v13.11.0, v12.17.0
532
+ * @experimental
243
533
  */
244
534
  enterWith(store: T): void;
245
535
  }
536
+ /**
537
+ * @since v17.2.0, v16.14.0
538
+ * @return A map of provider types to the corresponding numeric id.
539
+ * This map contains all the event types that might be emitted by the `async_hooks.init()` event.
540
+ */
541
+ namespace asyncWrapProviders {
542
+ const NONE: number;
543
+ const DIRHANDLE: number;
544
+ const DNSCHANNEL: number;
545
+ const ELDHISTOGRAM: number;
546
+ const FILEHANDLE: number;
547
+ const FILEHANDLECLOSEREQ: number;
548
+ const FIXEDSIZEBLOBCOPY: number;
549
+ const FSEVENTWRAP: number;
550
+ const FSREQCALLBACK: number;
551
+ const FSREQPROMISE: number;
552
+ const GETADDRINFOREQWRAP: number;
553
+ const GETNAMEINFOREQWRAP: number;
554
+ const HEAPSNAPSHOT: number;
555
+ const HTTP2SESSION: number;
556
+ const HTTP2STREAM: number;
557
+ const HTTP2PING: number;
558
+ const HTTP2SETTINGS: number;
559
+ const HTTPINCOMINGMESSAGE: number;
560
+ const HTTPCLIENTREQUEST: number;
561
+ const JSSTREAM: number;
562
+ const JSUDPWRAP: number;
563
+ const MESSAGEPORT: number;
564
+ const PIPECONNECTWRAP: number;
565
+ const PIPESERVERWRAP: number;
566
+ const PIPEWRAP: number;
567
+ const PROCESSWRAP: number;
568
+ const PROMISE: number;
569
+ const QUERYWRAP: number;
570
+ const SHUTDOWNWRAP: number;
571
+ const SIGNALWRAP: number;
572
+ const STATWATCHER: number;
573
+ const STREAMPIPE: number;
574
+ const TCPCONNECTWRAP: number;
575
+ const TCPSERVERWRAP: number;
576
+ const TCPWRAP: number;
577
+ const TTYWRAP: number;
578
+ const UDPSENDWRAP: number;
579
+ const UDPWRAP: number;
580
+ const SIGINTWATCHDOG: number;
581
+ const WORKER: number;
582
+ const WORKERHEAPSNAPSHOT: number;
583
+ const WRITEWRAP: number;
584
+ const ZLIB: number;
585
+ const CHECKPRIMEREQUEST: number;
586
+ const PBKDF2REQUEST: number;
587
+ const KEYPAIRGENREQUEST: number;
588
+ const KEYGENREQUEST: number;
589
+ const KEYEXPORTREQUEST: number;
590
+ const CIPHERREQUEST: number;
591
+ const DERIVEBITSREQUEST: number;
592
+ const HASHREQUEST: number;
593
+ const RANDOMBYTESREQUEST: number;
594
+ const RANDOMPRIMEREQUEST: number;
595
+ const SCRYPTREQUEST: number;
596
+ const SIGNREQUEST: number;
597
+ const TLSWRAP: number;
598
+ const VERIFYREQUEST: number;
599
+ }
600
+ }
601
+ declare module "node:async_hooks" {
602
+ export * from "async_hooks";
246
603
  }