declare module "*.json"; // Deprecated NodeJS API usages in webpack declare namespace NodeJS { interface Process { binding(internalModule: string): any; } interface ProcessVersions { pnp: "1" | "3"; } } declare module "neo-async" { interface QueueObject { push(item: T): void; drain: () => void; error: (err: E) => void; } export interface Dictionary { [key: string]: T; } export type IterableCollection = T[] | Iterable | Dictionary; export interface ErrorCallback { (err?: T): void; } export interface AsyncBooleanResultCallback { (err?: E, truthValue?: boolean): void; } export interface AsyncResultCallback { (err?: E, result?: T): void; } export interface AsyncResultArrayCallback { (err?: E, results?: Array): void; } export interface AsyncResultObjectCallback { (err: E | undefined, results: Dictionary): void; } export interface AsyncFunction { (callback: (err?: E, result?: T) => void): void; } export interface AsyncFunctionEx { (callback: (err?: E, ...results: T[]) => void): void; } export interface AsyncIterator { (item: T, callback: ErrorCallback): void; } export interface AsyncForEachOfIterator { (item: T, key: number | string, callback: ErrorCallback): void; } export interface AsyncResultIterator { (item: T, callback: AsyncResultCallback): void; } export interface AsyncMemoIterator { (memo: R | undefined, item: T, callback: AsyncResultCallback): void; } export interface AsyncBooleanIterator { (item: T, callback: AsyncBooleanResultCallback): void; } export interface AsyncWorker { (task: T, callback: ErrorCallback): void; } export interface AsyncVoidFunction { (callback: ErrorCallback): void; } export type AsyncAutoTasks, E> = { [K in keyof R]: AsyncAutoTask; }; export type AsyncAutoTask, E> = | AsyncAutoTaskFunctionWithoutDependencies | (keyof R | AsyncAutoTaskFunction)[]; export interface AsyncAutoTaskFunctionWithoutDependencies { (cb: AsyncResultCallback | ErrorCallback): void; } export interface AsyncAutoTaskFunction, E> { (results: R, cb: AsyncResultCallback | ErrorCallback): void; } export function each( arr: IterableCollection, iterator: AsyncIterator, callback?: ErrorCallback ): void; export function eachLimit( arr: IterableCollection, limit: number, iterator: AsyncIterator, callback?: ErrorCallback ): void; export function map( arr: T[] | IterableIterator, iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback ): void; export function map( arr: Dictionary, iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback ): void; export function parallel( tasks: Array>, callback?: AsyncResultArrayCallback ): void; export function parallel( tasks: Dictionary>, callback?: AsyncResultObjectCallback ): void; export function queue( worker: AsyncIterator, concurrency?: number ): QueueObject; export const forEach: typeof each; export const forEachLimit: typeof eachLimit; } // There are no typings for @webassemblyjs/ast declare module "@webassemblyjs/ast" { export function traverse( ast: any, visitor: { ModuleImport?: (p: NodePath) => void; ModuleExport?: (p: NodePath) => void; Start?: (p: NodePath) => void; Global?: (p: NodePath) => void; } ): void; export class NodePath { node: T; } export class Node {} export class Identifier extends Node { value: string; } export class Start extends Node { index: Identifier; } export class ModuleImportDescription { type: string; valtype?: string; id?: Identifier; signature?: Signature; } export class ModuleImport extends Node { module: string; descr: ModuleImportDescription; name: string; } export class ModuleExport extends Node { name: string; descr: ModuleExportDescr; } type Index = Identifier | NumberLiteral; export class ModuleExportDescr extends Node { type: string; exportType: string; id: Index; } export class NumberLiteral extends Node { value: number; raw: string; } export class FloatLiteral extends Node {} export class GlobalType extends Node { valtype: string; } export class Global extends Node { init: Instruction[]; globalType: GlobalType; } export class FuncParam extends Node { valtype: string; } export class Instruction extends Node { id: string; args: NumberLiteral[]; } export class CallInstruction extends Instruction {} export class ObjectInstruction extends Instruction {} export class Func extends Node { signature: Signature; } export class Signature { type: "Signature"; params: FuncParam[]; results: string[]; } export class TypeInstruction extends Node {} export class IndexInFuncSection extends Node {} export function indexLiteral(index: number): Index; export function numberLiteralFromRaw(num: number): NumberLiteral; export function floatLiteral( value: number, nan?: boolean, inf?: boolean, raw?: string ): FloatLiteral; export function global(globalType: string, nodes: Node[]): Global; export function identifier(identifier: string): Identifier; export function funcParam(valType: string, id: Identifier): FuncParam; export function instruction(inst: string, args?: Node[]): Instruction; export function callInstruction(funcIndex: Index): CallInstruction; export function objectInstruction( kind: string, type: string, init: Node[] ): ObjectInstruction; export function signature(params: FuncParam[], results: string[]): Signature; export function func(initFuncId, signature: Signature, funcBody): Func; export function typeInstruction( id: Identifier, functype: Signature ): TypeInstruction; export function indexInFuncSection(index: Index): IndexInFuncSection; export function moduleExport( identifier: string, descr: ModuleExportDescr ): ModuleExport; export function moduleExportDescr( type: string, index: Index ): ModuleExportDescr; export function getSectionMetadata(ast: any, section: string); export class FuncSignature { args: string[]; result: string[]; } export function moduleContextFromModuleAST(ast: any): any; // Node matcher export function isGlobalType(n: Node): boolean; export function isTable(n: Node): boolean; export function isMemory(n: Node): boolean; export function isFuncImportDescr(n: Node): boolean; } declare module "webpack-sources" { export type MapOptions = { columns?: boolean; module?: boolean }; export abstract class Source { size(): number; map(options?: MapOptions): Object; sourceAndMap(options?: MapOptions): { source: string | Buffer; map: Object; }; updateHash(hash: import("./lib/util/Hash")): void; source(): string | Buffer; buffer(): Buffer; } export class RawSource extends Source { constructor(source: string | Buffer, convertToString?: boolean); isBuffer(): boolean; } export class OriginalSource extends Source { constructor(source: string | Buffer, name: string); getName(): string; } export class ReplaceSource extends Source { constructor(source: Source, name?: string); replace(start: number, end: number, newValue: string, name?: string): void; insert(pos: number, newValue: string, name?: string): void; getName(): string; original(): string; getReplacements(): { start: number; end: number; content: string; insertIndex: number; name: string; }[]; } export class SourceMapSource extends Source { constructor( source: string | Buffer, name: string, sourceMap: Object | string | Buffer, originalSource?: string | Buffer, innerSourceMap?: Object | string | Buffer, removeOriginalSource?: boolean ); getArgsAsBuffers(): [ Buffer, string, Buffer, Buffer | undefined, Buffer | undefined, boolean ]; } export class ConcatSource extends Source { constructor(...args: (string | Source)[]); getChildren(): Source[]; add(item: string | Source): void; addAllSkipOptimizing(items: Source[]): void; } export class PrefixSource extends Source { constructor(prefix: string, source: string | Source); original(): Source; getPrefix(): string; } export class CachedSource extends Source { constructor(source: Source); constructor(source: Source | (() => Source), cachedData?: any); original(): Source; originalLazy(): Source | (() => Source); getCachedData(): any; } export class SizeOnlySource extends Source { constructor(size: number); } interface SourceLike { source(): string | Buffer; } export class CompatSource extends Source { constructor(sourceLike: SourceLike); static from(sourceLike: SourceLike): Source; } } declare module "browserslist" { function browserslist(query: string): string[] | undefined; namespace browserslist { export function loadConfig( options: | { config: string; env?: string; } | { path: string; env?: string; } ): string | undefined; export function findConfig(path: string): Record; } export = browserslist; } // TODO remove that when @types/estree is updated interface ImportAttributeNode { type: "ImportAttribute"; key: import("estree").Identifier | import("estree").Literal; value: import("estree").Literal; } type TODO = any; type RecursiveArrayOrRecord = | { [index: string]: RecursiveArrayOrRecord } | Array> | T;