e0a426b6cc2b59334d11295823701f0942444ad99f48d1d59277c9442e5a4dd803cdd4ab393eff541d577d3c68a222c8992d28689f39be2733d800f402ad2c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. /**
  2. * The `node:console` module provides a simple debugging console that is similar to
  3. * the JavaScript console mechanism provided by web browsers.
  4. *
  5. * The module exports two specific components:
  6. *
  7. * * A `Console` class with methods such as `console.log()`, `console.error()`, and `console.warn()` that can be used to write to any Node.js stream.
  8. * * A global `console` instance configured to write to [`process.stdout`](https://nodejs.org/docs/latest-v22.x/api/process.html#processstdout) and
  9. * [`process.stderr`](https://nodejs.org/docs/latest-v22.x/api/process.html#processstderr). The global `console` can be used without importing the `node:console` module.
  10. *
  11. * _**Warning**_: The global console object's methods are neither consistently
  12. * synchronous like the browser APIs they resemble, nor are they consistently
  13. * asynchronous like all other Node.js streams. See the [`note on process I/O`](https://nodejs.org/docs/latest-v22.x/api/process.html#a-note-on-process-io) for
  14. * more information.
  15. *
  16. * Example using the global `console`:
  17. *
  18. * ```js
  19. * console.log('hello world');
  20. * // Prints: hello world, to stdout
  21. * console.log('hello %s', 'world');
  22. * // Prints: hello world, to stdout
  23. * console.error(new Error('Whoops, something bad happened'));
  24. * // Prints error message and stack trace to stderr:
  25. * // Error: Whoops, something bad happened
  26. * // at [eval]:5:15
  27. * // at Script.runInThisContext (node:vm:132:18)
  28. * // at Object.runInThisContext (node:vm:309:38)
  29. * // at node:internal/process/execution:77:19
  30. * // at [eval]-wrapper:6:22
  31. * // at evalScript (node:internal/process/execution:76:60)
  32. * // at node:internal/main/eval_string:23:3
  33. *
  34. * const name = 'Will Robinson';
  35. * console.warn(`Danger ${name}! Danger!`);
  36. * // Prints: Danger Will Robinson! Danger!, to stderr
  37. * ```
  38. *
  39. * Example using the `Console` class:
  40. *
  41. * ```js
  42. * const out = getStreamSomehow();
  43. * const err = getStreamSomehow();
  44. * const myConsole = new console.Console(out, err);
  45. *
  46. * myConsole.log('hello world');
  47. * // Prints: hello world, to out
  48. * myConsole.log('hello %s', 'world');
  49. * // Prints: hello world, to out
  50. * myConsole.error(new Error('Whoops, something bad happened'));
  51. * // Prints: [Error: Whoops, something bad happened], to err
  52. *
  53. * const name = 'Will Robinson';
  54. * myConsole.warn(`Danger ${name}! Danger!`);
  55. * // Prints: Danger Will Robinson! Danger!, to err
  56. * ```
  57. * @see [source](https://github.com/nodejs/node/blob/v22.x/lib/console.js)
  58. */
  59. declare module "console" {
  60. import console = require("node:console");
  61. export = console;
  62. }
  63. declare module "node:console" {
  64. import { InspectOptions } from "node:util";
  65. global {
  66. // This needs to be global to avoid TS2403 in case lib.dom.d.ts is present in the same build
  67. interface Console {
  68. Console: console.ConsoleConstructor;
  69. /**
  70. * `console.assert()` writes a message if `value` is [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) or omitted. It only
  71. * writes a message and does not otherwise affect execution. The output always
  72. * starts with `"Assertion failed"`. If provided, `message` is formatted using
  73. * [`util.format()`](https://nodejs.org/docs/latest-v22.x/api/util.html#utilformatformat-args).
  74. *
  75. * If `value` is [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy), nothing happens.
  76. *
  77. * ```js
  78. * console.assert(true, 'does nothing');
  79. *
  80. * console.assert(false, 'Whoops %s work', 'didn\'t');
  81. * // Assertion failed: Whoops didn't work
  82. *
  83. * console.assert();
  84. * // Assertion failed
  85. * ```
  86. * @since v0.1.101
  87. * @param value The value tested for being truthy.
  88. * @param message All arguments besides `value` are used as error message.
  89. */
  90. assert(value: any, message?: string, ...optionalParams: any[]): void;
  91. /**
  92. * When `stdout` is a TTY, calling `console.clear()` will attempt to clear the
  93. * TTY. When `stdout` is not a TTY, this method does nothing.
  94. *
  95. * The specific operation of `console.clear()` can vary across operating systems
  96. * and terminal types. For most Linux operating systems, `console.clear()` operates similarly to the `clear` shell command. On Windows, `console.clear()` will clear only the output in the
  97. * current terminal viewport for the Node.js
  98. * binary.
  99. * @since v8.3.0
  100. */
  101. clear(): void;
  102. /**
  103. * Maintains an internal counter specific to `label` and outputs to `stdout` the
  104. * number of times `console.count()` has been called with the given `label`.
  105. *
  106. * ```js
  107. * > console.count()
  108. * default: 1
  109. * undefined
  110. * > console.count('default')
  111. * default: 2
  112. * undefined
  113. * > console.count('abc')
  114. * abc: 1
  115. * undefined
  116. * > console.count('xyz')
  117. * xyz: 1
  118. * undefined
  119. * > console.count('abc')
  120. * abc: 2
  121. * undefined
  122. * > console.count()
  123. * default: 3
  124. * undefined
  125. * >
  126. * ```
  127. * @since v8.3.0
  128. * @param [label='default'] The display label for the counter.
  129. */
  130. count(label?: string): void;
  131. /**
  132. * Resets the internal counter specific to `label`.
  133. *
  134. * ```js
  135. * > console.count('abc');
  136. * abc: 1
  137. * undefined
  138. * > console.countReset('abc');
  139. * undefined
  140. * > console.count('abc');
  141. * abc: 1
  142. * undefined
  143. * >
  144. * ```
  145. * @since v8.3.0
  146. * @param [label='default'] The display label for the counter.
  147. */
  148. countReset(label?: string): void;
  149. /**
  150. * The `console.debug()` function is an alias for {@link log}.
  151. * @since v8.0.0
  152. */
  153. debug(message?: any, ...optionalParams: any[]): void;
  154. /**
  155. * Uses [`util.inspect()`](https://nodejs.org/docs/latest-v22.x/api/util.html#utilinspectobject-options) on `obj` and prints the resulting string to `stdout`.
  156. * This function bypasses any custom `inspect()` function defined on `obj`.
  157. * @since v0.1.101
  158. */
  159. dir(obj: any, options?: InspectOptions): void;
  160. /**
  161. * This method calls `console.log()` passing it the arguments received.
  162. * This method does not produce any XML formatting.
  163. * @since v8.0.0
  164. */
  165. dirxml(...data: any[]): void;
  166. /**
  167. * Prints to `stderr` with newline. Multiple arguments can be passed, with the
  168. * first used as the primary message and all additional used as substitution
  169. * values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html)
  170. * (the arguments are all passed to [`util.format()`](https://nodejs.org/docs/latest-v22.x/api/util.html#utilformatformat-args)).
  171. *
  172. * ```js
  173. * const code = 5;
  174. * console.error('error #%d', code);
  175. * // Prints: error #5, to stderr
  176. * console.error('error', code);
  177. * // Prints: error 5, to stderr
  178. * ```
  179. *
  180. * If formatting elements (e.g. `%d`) are not found in the first string then
  181. * [`util.inspect()`](https://nodejs.org/docs/latest-v22.x/api/util.html#utilinspectobject-options) is called on each argument and the
  182. * resulting string values are concatenated. See [`util.format()`](https://nodejs.org/docs/latest-v22.x/api/util.html#utilformatformat-args)
  183. * for more information.
  184. * @since v0.1.100
  185. */
  186. error(message?: any, ...optionalParams: any[]): void;
  187. /**
  188. * Increases indentation of subsequent lines by spaces for `groupIndentation` length.
  189. *
  190. * If one or more `label`s are provided, those are printed first without the
  191. * additional indentation.
  192. * @since v8.5.0
  193. */
  194. group(...label: any[]): void;
  195. /**
  196. * An alias for {@link group}.
  197. * @since v8.5.0
  198. */
  199. groupCollapsed(...label: any[]): void;
  200. /**
  201. * Decreases indentation of subsequent lines by spaces for `groupIndentation` length.
  202. * @since v8.5.0
  203. */
  204. groupEnd(): void;
  205. /**
  206. * The `console.info()` function is an alias for {@link log}.
  207. * @since v0.1.100
  208. */
  209. info(message?: any, ...optionalParams: any[]): void;
  210. /**
  211. * Prints to `stdout` with newline. Multiple arguments can be passed, with the
  212. * first used as the primary message and all additional used as substitution
  213. * values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html)
  214. * (the arguments are all passed to [`util.format()`](https://nodejs.org/docs/latest-v22.x/api/util.html#utilformatformat-args)).
  215. *
  216. * ```js
  217. * const count = 5;
  218. * console.log('count: %d', count);
  219. * // Prints: count: 5, to stdout
  220. * console.log('count:', count);
  221. * // Prints: count: 5, to stdout
  222. * ```
  223. *
  224. * See [`util.format()`](https://nodejs.org/docs/latest-v22.x/api/util.html#utilformatformat-args) for more information.
  225. * @since v0.1.100
  226. */
  227. log(message?: any, ...optionalParams: any[]): void;
  228. /**
  229. * Try to construct a table with the columns of the properties of `tabularData` (or use `properties`) and rows of `tabularData` and log it. Falls back to just
  230. * logging the argument if it can't be parsed as tabular.
  231. *
  232. * ```js
  233. * // These can't be parsed as tabular data
  234. * console.table(Symbol());
  235. * // Symbol()
  236. *
  237. * console.table(undefined);
  238. * // undefined
  239. *
  240. * console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }]);
  241. * // ┌─────────┬─────┬─────┐
  242. * // │ (index) │ a │ b │
  243. * // ├─────────┼─────┼─────┤
  244. * // │ 0 │ 1 │ 'Y' │
  245. * // │ 1 │ 'Z' │ 2 │
  246. * // └─────────┴─────┴─────┘
  247. *
  248. * console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }], ['a']);
  249. * // ┌─────────┬─────┐
  250. * // │ (index) │ a │
  251. * // ├─────────┼─────┤
  252. * // │ 0 │ 1 │
  253. * // │ 1 │ 'Z' │
  254. * // └─────────┴─────┘
  255. * ```
  256. * @since v10.0.0
  257. * @param properties Alternate properties for constructing the table.
  258. */
  259. table(tabularData: any, properties?: readonly string[]): void;
  260. /**
  261. * Starts a timer that can be used to compute the duration of an operation. Timers
  262. * are identified by a unique `label`. Use the same `label` when calling {@link timeEnd} to stop the timer and output the elapsed time in
  263. * suitable time units to `stdout`. For example, if the elapsed
  264. * time is 3869ms, `console.timeEnd()` displays "3.869s".
  265. * @since v0.1.104
  266. * @param [label='default']
  267. */
  268. time(label?: string): void;
  269. /**
  270. * Stops a timer that was previously started by calling {@link time} and
  271. * prints the result to `stdout`:
  272. *
  273. * ```js
  274. * console.time('bunch-of-stuff');
  275. * // Do a bunch of stuff.
  276. * console.timeEnd('bunch-of-stuff');
  277. * // Prints: bunch-of-stuff: 225.438ms
  278. * ```
  279. * @since v0.1.104
  280. * @param [label='default']
  281. */
  282. timeEnd(label?: string): void;
  283. /**
  284. * For a timer that was previously started by calling {@link time}, prints
  285. * the elapsed time and other `data` arguments to `stdout`:
  286. *
  287. * ```js
  288. * console.time('process');
  289. * const value = expensiveProcess1(); // Returns 42
  290. * console.timeLog('process', value);
  291. * // Prints "process: 365.227ms 42".
  292. * doExpensiveProcess2(value);
  293. * console.timeEnd('process');
  294. * ```
  295. * @since v10.7.0
  296. * @param [label='default']
  297. */
  298. timeLog(label?: string, ...data: any[]): void;
  299. /**
  300. * Prints to `stderr` the string `'Trace: '`, followed by the [`util.format()`](https://nodejs.org/docs/latest-v22.x/api/util.html#utilformatformat-args)
  301. * formatted message and stack trace to the current position in the code.
  302. *
  303. * ```js
  304. * console.trace('Show me');
  305. * // Prints: (stack trace will vary based on where trace is called)
  306. * // Trace: Show me
  307. * // at repl:2:9
  308. * // at REPLServer.defaultEval (repl.js:248:27)
  309. * // at bound (domain.js:287:14)
  310. * // at REPLServer.runBound [as eval] (domain.js:300:12)
  311. * // at REPLServer.<anonymous> (repl.js:412:12)
  312. * // at emitOne (events.js:82:20)
  313. * // at REPLServer.emit (events.js:169:7)
  314. * // at REPLServer.Interface._onLine (readline.js:210:10)
  315. * // at REPLServer.Interface._line (readline.js:549:8)
  316. * // at REPLServer.Interface._ttyWrite (readline.js:826:14)
  317. * ```
  318. * @since v0.1.104
  319. */
  320. trace(message?: any, ...optionalParams: any[]): void;
  321. /**
  322. * The `console.warn()` function is an alias for {@link error}.
  323. * @since v0.1.100
  324. */
  325. warn(message?: any, ...optionalParams: any[]): void;
  326. // --- Inspector mode only ---
  327. /**
  328. * This method does not display anything unless used in the inspector. The `console.profile()`
  329. * method starts a JavaScript CPU profile with an optional label until {@link profileEnd}
  330. * is called. The profile is then added to the Profile panel of the inspector.
  331. *
  332. * ```js
  333. * console.profile('MyLabel');
  334. * // Some code
  335. * console.profileEnd('MyLabel');
  336. * // Adds the profile 'MyLabel' to the Profiles panel of the inspector.
  337. * ```
  338. * @since v8.0.0
  339. */
  340. profile(label?: string): void;
  341. /**
  342. * This method does not display anything unless used in the inspector. Stops the current
  343. * JavaScript CPU profiling session if one has been started and prints the report to the
  344. * Profiles panel of the inspector. See {@link profile} for an example.
  345. *
  346. * If this method is called without a label, the most recently started profile is stopped.
  347. * @since v8.0.0
  348. */
  349. profileEnd(label?: string): void;
  350. /**
  351. * This method does not display anything unless used in the inspector. The `console.timeStamp()`
  352. * method adds an event with the label `'label'` to the Timeline panel of the inspector.
  353. * @since v8.0.0
  354. */
  355. timeStamp(label?: string): void;
  356. }
  357. /**
  358. * The `console` module provides a simple debugging console that is similar to the
  359. * JavaScript console mechanism provided by web browsers.
  360. *
  361. * The module exports two specific components:
  362. *
  363. * * A `Console` class with methods such as `console.log()`, `console.error()` and `console.warn()` that can be used to write to any Node.js stream.
  364. * * A global `console` instance configured to write to [`process.stdout`](https://nodejs.org/docs/latest-v22.x/api/process.html#processstdout) and
  365. * [`process.stderr`](https://nodejs.org/docs/latest-v22.x/api/process.html#processstderr). The global `console` can be used without importing the `node:console` module.
  366. *
  367. * _**Warning**_: The global console object's methods are neither consistently
  368. * synchronous like the browser APIs they resemble, nor are they consistently
  369. * asynchronous like all other Node.js streams. See the [`note on process I/O`](https://nodejs.org/docs/latest-v22.x/api/process.html#a-note-on-process-io) for
  370. * more information.
  371. *
  372. * Example using the global `console`:
  373. *
  374. * ```js
  375. * console.log('hello world');
  376. * // Prints: hello world, to stdout
  377. * console.log('hello %s', 'world');
  378. * // Prints: hello world, to stdout
  379. * console.error(new Error('Whoops, something bad happened'));
  380. * // Prints error message and stack trace to stderr:
  381. * // Error: Whoops, something bad happened
  382. * // at [eval]:5:15
  383. * // at Script.runInThisContext (node:vm:132:18)
  384. * // at Object.runInThisContext (node:vm:309:38)
  385. * // at node:internal/process/execution:77:19
  386. * // at [eval]-wrapper:6:22
  387. * // at evalScript (node:internal/process/execution:76:60)
  388. * // at node:internal/main/eval_string:23:3
  389. *
  390. * const name = 'Will Robinson';
  391. * console.warn(`Danger ${name}! Danger!`);
  392. * // Prints: Danger Will Robinson! Danger!, to stderr
  393. * ```
  394. *
  395. * Example using the `Console` class:
  396. *
  397. * ```js
  398. * const out = getStreamSomehow();
  399. * const err = getStreamSomehow();
  400. * const myConsole = new console.Console(out, err);
  401. *
  402. * myConsole.log('hello world');
  403. * // Prints: hello world, to out
  404. * myConsole.log('hello %s', 'world');
  405. * // Prints: hello world, to out
  406. * myConsole.error(new Error('Whoops, something bad happened'));
  407. * // Prints: [Error: Whoops, something bad happened], to err
  408. *
  409. * const name = 'Will Robinson';
  410. * myConsole.warn(`Danger ${name}! Danger!`);
  411. * // Prints: Danger Will Robinson! Danger!, to err
  412. * ```
  413. * @see [source](https://github.com/nodejs/node/blob/v22.x/lib/console.js)
  414. */
  415. namespace console {
  416. interface ConsoleConstructorOptions {
  417. stdout: NodeJS.WritableStream;
  418. stderr?: NodeJS.WritableStream | undefined;
  419. /**
  420. * Ignore errors when writing to the underlying streams.
  421. * @default true
  422. */
  423. ignoreErrors?: boolean | undefined;
  424. /**
  425. * Set color support for this `Console` instance. Setting to true enables coloring while inspecting
  426. * values. Setting to `false` disables coloring while inspecting values. Setting to `'auto'` makes color
  427. * support depend on the value of the `isTTY` property and the value returned by `getColorDepth()` on the
  428. * respective stream. This option can not be used, if `inspectOptions.colors` is set as well.
  429. * @default auto
  430. */
  431. colorMode?: boolean | "auto" | undefined;
  432. /**
  433. * Specifies options that are passed along to
  434. * [`util.inspect()`](https://nodejs.org/docs/latest-v22.x/api/util.html#utilinspectobject-options).
  435. */
  436. inspectOptions?: InspectOptions | undefined;
  437. /**
  438. * Set group indentation.
  439. * @default 2
  440. */
  441. groupIndentation?: number | undefined;
  442. }
  443. interface ConsoleConstructor {
  444. prototype: Console;
  445. new(stdout: NodeJS.WritableStream, stderr?: NodeJS.WritableStream, ignoreErrors?: boolean): Console;
  446. new(options: ConsoleConstructorOptions): Console;
  447. }
  448. }
  449. var console: Console;
  450. }
  451. export = globalThis.console;
  452. }