1/**
2 * Type definitions for require(), which is necessary in Jest tests when resetting
3 * the module cache or explicitly requiring mocks or actual modules.
4 *
5 * These type definitions are from the @types/node definitions.
6 */
7type NodeRequireFunction = (id: string) => any;
8
9interface NodeRequire extends NodeRequireFunction {
10  resolve: RequireResolve;
11  cache: any;
12  extensions: NodeExtensions;
13  main: NodeModule | undefined;
14}
15
16interface RequireResolve {
17  (id: string, options?: { paths?: string[] }): string;
18  paths(request: string): string[] | null;
19}
20
21interface NodeExtensions {
22  '.js': (m: NodeModule, filename: string) => any;
23  '.json': (m: NodeModule, filename: string) => any;
24  '.node': (m: NodeModule, filename: string) => any;
25  [ext: string]: (m: NodeModule, filename: string) => any;
26}
27
28interface NodeModule {
29  exports: any;
30  require: NodeRequireFunction;
31  id: string;
32  filename: string;
33  loaded: boolean;
34  parent: NodeModule | null;
35  children: NodeModule[];
36  paths: string[];
37}
38
39declare var require: NodeRequire;
40