// Declare "static" methods in Error interface ErrorConstructor { /** Create .stack property on a target object */ captureStackTrace(targetObject: object, constructorOpt?: Function): void; /** * Optional override for formatting stack traces * * @see https://github.com/v8/v8/wiki/Stack%20Trace%20API#customizing-stack-traces */ prepareStackTrace?: (err: Error, stackTraces: NodeJS.CallSite[]) => any; stackTraceLimit: number; } // Node.js ESNEXT support interface String { /** Removes whitespace from the left end of a string. */ trimLeft(): string; /** Removes whitespace from the right end of a string. */ trimRight(): string; } interface ImportMeta { url: string; } /*-----------------------------------------------* * * * GLOBAL * * * ------------------------------------------------*/ // For backwards compability interface NodeRequire extends NodeJS.Require {} interface RequireResolve extends NodeJS.RequireResolve {} interface NodeModule extends NodeJS.Module {} declare var __filename: string; declare var __dirname: string; declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout; declare namespace setTimeout { function __promisify__(ms: number): Promise; function __promisify__(ms: number, value: T): Promise; } declare function clearTimeout(timeoutId: NodeJS.Timeout): void; declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout; declare function clearInterval(intervalId: NodeJS.Timeout): void; declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): NodeJS.Immediate; declare namespace setImmediate { function __promisify__(): Promise; function __promisify__(value: T): Promise; } declare function clearImmediate(immediateId: NodeJS.Immediate): void; declare function queueMicrotask(callback: () => void): void; declare var require: NodeRequire; declare var module: NodeModule; // Same as module.exports declare var exports: any; /*----------------------------------------------* * * * GLOBAL INTERFACES * * * *-----------------------------------------------*/ declare namespace NodeJS { interface InspectOptions { /** * If set to `true`, getters are going to be * inspected as well. If set to `'get'` only getters without setter are going * to be inspected. If set to `'set'` only getters having a corresponding * setter are going to be inspected. This might cause side effects depending on * the getter function. * @default `false` */ getters?: 'get' | 'set' | boolean; showHidden?: boolean; /** * @default 2 */ depth?: number | null; colors?: boolean; customInspect?: boolean; showProxy?: boolean; maxArrayLength?: number | null; /** * Specifies the maximum number of characters to * include when formatting. Set to `null` or `Infinity` to show all elements. * Set to `0` or negative to show no characters. * @default Infinity */ maxStringLength?: number | null; breakLength?: number; /** * Setting this to `false` causes each object key * to be displayed on a new line. It will also add new lines to text that is * longer than `breakLength`. If set to a number, the most `n` inner elements * are united on a single line as long as all properties fit into * `breakLength`. Short array elements are also grouped together. Note that no * text will be reduced below 16 characters, no matter the `breakLength` size. * For more information, see the example below. * @default `true` */ compact?: boolean | number; sorted?: boolean | ((a: string, b: string) => number); } interface CallSite { /** * Value of "this" */ getThis(): any; /** * Type of "this" as a string. * This is the name of the function stored in the constructor field of * "this", if available. Otherwise the object's [[Class]] internal * property. */ getTypeName(): string | null; /** * Current function */ getFunction(): Function | undefined; /** * Name of the current function, typically its name property. * If a name property is not available an attempt will be made to try * to infer a name from the function's context. */ getFunctionName(): string | null; /** * Name of the property [of "this" or one of its prototypes] that holds * the current function */ getMethodName(): string | null; /** * Name of the script [if this function was defined in a script] */ getFileName(): string | null; /** * Current line number [if this function was defined in a script] */ getLineNumber(): number | null; /** * Current column number [if this function was defined in a script] */ getColumnNumber(): number | null; /** * A call site object representing the location where eval was called * [if this function was created using a call to eval] */ getEvalOrigin(): string | undefined; /** * Is this a toplevel invocation, that is, is "this" the global object? */ isToplevel(): boolean; /** * Does this call take place in code defined by a call to eval? */ isEval(): boolean; /** * Is this call in native V8 code? */ isNative(): boolean; /** * Is this a constructor call? */ isConstructor(): boolean; } interface ErrnoException extends Error { errno?: number; code?: string; path?: string; syscall?: string; stack?: string; } interface ReadableStream extends EventEmitter { readable: boolean; read(size?: number): string | Buffer; setEncoding(encoding: BufferEncoding): this; pause(): this; resume(): this; isPaused(): boolean; pipe(destination: T, options?: { end?: boolean; }): T; unpipe(destination?: WritableStream): this; unshift(chunk: string | Uint8Array, encoding?: BufferEncoding): void; wrap(oldStream: ReadableStream): this; [Symbol.asyncIterator](): AsyncIterableIterator; } interface WritableStream extends EventEmitter { writable: boolean; write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean; write(str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean; end(cb?: () => void): void; end(data: string | Uint8Array, cb?: () => void): void; end(str: string, encoding?: BufferEncoding, cb?: () => void): void; } interface ReadWriteStream extends ReadableStream, WritableStream { } interface Global { Array: typeof Array; ArrayBuffer: typeof ArrayBuffer; Boolean: typeof Boolean; Buffer: typeof Buffer; DataView: typeof DataView; Date: typeof Date; Error: typeof Error; EvalError: typeof EvalError; Float32Array: typeof Float32Array; Float64Array: typeof Float64Array; Function: typeof Function; Infinity: typeof Infinity; Int16Array: typeof Int16Array; Int32Array: typeof Int32Array; Int8Array: typeof Int8Array; Intl: typeof Intl; JSON: typeof JSON; Map: MapConstructor; Math: typeof Math; NaN: typeof NaN; Number: typeof Number; Object: typeof Object; Promise: typeof Promise; RangeError: typeof RangeError; ReferenceError: typeof ReferenceError; RegExp: typeof RegExp; Set: SetConstructor; String: typeof String; Symbol: Function; SyntaxError: typeof SyntaxError; TypeError: typeof TypeError; URIError: typeof URIError; Uint16Array: typeof Uint16Array; Uint32Array: typeof Uint32Array; Uint8Array: typeof Uint8Array; Uint8ClampedArray: typeof Uint8ClampedArray; WeakMap: WeakMapConstructor; WeakSet: WeakSetConstructor; clearImmediate: (immediateId: Immediate) => void; clearInterval: (intervalId: Timeout) => void; clearTimeout: (timeoutId: Timeout) => void; decodeURI: typeof decodeURI; decodeURIComponent: typeof decodeURIComponent; encodeURI: typeof encodeURI; encodeURIComponent: typeof encodeURIComponent; escape: (str: string) => string; eval: typeof eval; global: Global; isFinite: typeof isFinite; isNaN: typeof isNaN; parseFloat: typeof parseFloat; parseInt: typeof parseInt; setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => Immediate; setInterval: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => Timeout; setTimeout: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => Timeout; queueMicrotask: typeof queueMicrotask; undefined: typeof undefined; unescape: (str: string) => string; gc: () => void; v8debug?: any; } interface RefCounted { ref(): this; unref(): this; } // compatibility with older typings interface Timer extends RefCounted { hasRef(): boolean; refresh(): this; } interface Immediate extends RefCounted { hasRef(): boolean; _onImmediate: Function; // to distinguish it from the Timeout class } interface Timeout extends Timer { hasRef(): boolean; refresh(): this; } type TypedArray = Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array; type ArrayBufferView = TypedArray | DataView; interface Require { /* tslint:disable-next-line:callable-types */ (id: string): any; resolve: RequireResolve; cache: Dict; /** * @deprecated */ extensions: RequireExtensions; main: Module | undefined; } interface RequireResolve { (id: string, options?: { paths?: string[]; }): string; paths(request: string): string[] | null; } interface RequireExtensions extends Dict<(m: Module, filename: string) => any> { '.js': (m: Module, filename: string) => any; '.json': (m: Module, filename: string) => any; '.node': (m: Module, filename: string) => any; } interface Module { exports: any; require: Require; id: string; filename: string; loaded: boolean; parent: Module | null; children: Module[]; /** * @since 11.14.0 * * The directory name of the module. This is usually the same as the path.dirname() of the module.id. */ path: string; paths: string[]; } interface Dict { [key: string]: T | undefined; } interface ReadOnlyDict { readonly [key: string]: T | undefined; } }