UNPKG

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