Skip to content

Commit 330cced

Browse files
authored
cache results of module resolution for non-relative module names (#13047)
* cache results of module resolution for non-relative module names * use cache to short-circuit failures
1 parent 1045f3b commit 330cced

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1067
-31
lines changed

src/compiler/moduleNameResolver.ts

Lines changed: 175 additions & 31 deletions
Large diffs are not rendered by default.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//// [tests/cases/compiler/cachedModuleResolution1.ts] ////
2+
3+
//// [foo.d.ts]
4+
5+
export declare let x: number
6+
7+
//// [app.ts]
8+
import {x} from "foo";
9+
10+
//// [lib.ts]
11+
import {x} from "foo";
12+
13+
//// [app.js]
14+
"use strict";
15+
//// [lib.js]
16+
"use strict";
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
=== /a/b/node_modules/foo.d.ts ===
2+
3+
export declare let x: number
4+
>x : Symbol(x, Decl(foo.d.ts, 1, 18))
5+
6+
=== /a/b/c/d/e/app.ts ===
7+
import {x} from "foo";
8+
>x : Symbol(x, Decl(app.ts, 0, 8))
9+
10+
=== /a/b/c/lib.ts ===
11+
import {x} from "foo";
12+
>x : Symbol(x, Decl(lib.ts, 0, 8))
13+
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
[
2+
"======== Resolving module 'foo' from '/a/b/c/d/e/app.ts'. ========",
3+
"Explicitly specified module resolution kind: 'NodeJs'.",
4+
"Loading module 'foo' from 'node_modules' folder.",
5+
"File '/a/b/c/d/e/node_modules/foo.ts' does not exist.",
6+
"File '/a/b/c/d/e/node_modules/foo.tsx' does not exist.",
7+
"File '/a/b/c/d/e/node_modules/foo.d.ts' does not exist.",
8+
"File '/a/b/c/d/e/node_modules/foo/package.json' does not exist.",
9+
"File '/a/b/c/d/e/node_modules/foo/index.ts' does not exist.",
10+
"File '/a/b/c/d/e/node_modules/foo/index.tsx' does not exist.",
11+
"File '/a/b/c/d/e/node_modules/foo/index.d.ts' does not exist.",
12+
"File '/a/b/c/d/e/node_modules/@types/foo.d.ts' does not exist.",
13+
"File '/a/b/c/d/e/node_modules/@types/foo/package.json' does not exist.",
14+
"File '/a/b/c/d/e/node_modules/@types/foo/index.d.ts' does not exist.",
15+
"File '/a/b/c/d/node_modules/foo.ts' does not exist.",
16+
"File '/a/b/c/d/node_modules/foo.tsx' does not exist.",
17+
"File '/a/b/c/d/node_modules/foo.d.ts' does not exist.",
18+
"File '/a/b/c/d/node_modules/foo/package.json' does not exist.",
19+
"File '/a/b/c/d/node_modules/foo/index.ts' does not exist.",
20+
"File '/a/b/c/d/node_modules/foo/index.tsx' does not exist.",
21+
"File '/a/b/c/d/node_modules/foo/index.d.ts' does not exist.",
22+
"File '/a/b/c/d/node_modules/@types/foo.d.ts' does not exist.",
23+
"File '/a/b/c/d/node_modules/@types/foo/package.json' does not exist.",
24+
"File '/a/b/c/d/node_modules/@types/foo/index.d.ts' does not exist.",
25+
"File '/a/b/c/node_modules/foo.ts' does not exist.",
26+
"File '/a/b/c/node_modules/foo.tsx' does not exist.",
27+
"File '/a/b/c/node_modules/foo.d.ts' does not exist.",
28+
"File '/a/b/c/node_modules/foo/package.json' does not exist.",
29+
"File '/a/b/c/node_modules/foo/index.ts' does not exist.",
30+
"File '/a/b/c/node_modules/foo/index.tsx' does not exist.",
31+
"File '/a/b/c/node_modules/foo/index.d.ts' does not exist.",
32+
"File '/a/b/c/node_modules/@types/foo.d.ts' does not exist.",
33+
"File '/a/b/c/node_modules/@types/foo/package.json' does not exist.",
34+
"File '/a/b/c/node_modules/@types/foo/index.d.ts' does not exist.",
35+
"File '/a/b/node_modules/foo.ts' does not exist.",
36+
"File '/a/b/node_modules/foo.tsx' does not exist.",
37+
"File '/a/b/node_modules/foo.d.ts' exist - use it as a name resolution result.",
38+
"Resolving real path for '/a/b/node_modules/foo.d.ts', result '/a/b/node_modules/foo.d.ts'",
39+
"======== Module name 'foo' was successfully resolved to '/a/b/node_modules/foo.d.ts'. ========",
40+
"======== Resolving module 'foo' from '/a/b/c/lib.ts'. ========",
41+
"Explicitly specified module resolution kind: 'NodeJs'.",
42+
"Loading module 'foo' from 'node_modules' folder.",
43+
"Resolution for module 'foo' was found in cache",
44+
"Resolving real path for '/a/b/node_modules/foo.d.ts', result '/a/b/node_modules/foo.d.ts'",
45+
"======== Module name 'foo' was successfully resolved to '/a/b/node_modules/foo.d.ts'. ========"
46+
]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
=== /a/b/node_modules/foo.d.ts ===
2+
3+
export declare let x: number
4+
>x : number
5+
6+
=== /a/b/c/d/e/app.ts ===
7+
import {x} from "foo";
8+
>x : number
9+
10+
=== /a/b/c/lib.ts ===
11+
import {x} from "foo";
12+
>x : number
13+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//// [tests/cases/compiler/cachedModuleResolution2.ts] ////
2+
3+
//// [foo.d.ts]
4+
5+
export declare let x: number
6+
7+
//// [lib.ts]
8+
import {x} from "foo";
9+
10+
//// [app.ts]
11+
import {x} from "foo";
12+
13+
14+
//// [lib.js]
15+
"use strict";
16+
//// [app.js]
17+
"use strict";
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
=== /a/b/node_modules/foo.d.ts ===
2+
3+
export declare let x: number
4+
>x : Symbol(x, Decl(foo.d.ts, 1, 18))
5+
6+
=== /a/b/c/lib.ts ===
7+
import {x} from "foo";
8+
>x : Symbol(x, Decl(lib.ts, 0, 8))
9+
10+
=== /a/b/c/d/e/app.ts ===
11+
import {x} from "foo";
12+
>x : Symbol(x, Decl(app.ts, 0, 8))
13+
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
[
2+
"======== Resolving module 'foo' from '/a/b/c/lib.ts'. ========",
3+
"Explicitly specified module resolution kind: 'NodeJs'.",
4+
"Loading module 'foo' from 'node_modules' folder.",
5+
"File '/a/b/c/node_modules/foo.ts' does not exist.",
6+
"File '/a/b/c/node_modules/foo.tsx' does not exist.",
7+
"File '/a/b/c/node_modules/foo.d.ts' does not exist.",
8+
"File '/a/b/c/node_modules/foo/package.json' does not exist.",
9+
"File '/a/b/c/node_modules/foo/index.ts' does not exist.",
10+
"File '/a/b/c/node_modules/foo/index.tsx' does not exist.",
11+
"File '/a/b/c/node_modules/foo/index.d.ts' does not exist.",
12+
"File '/a/b/c/node_modules/@types/foo.d.ts' does not exist.",
13+
"File '/a/b/c/node_modules/@types/foo/package.json' does not exist.",
14+
"File '/a/b/c/node_modules/@types/foo/index.d.ts' does not exist.",
15+
"File '/a/b/node_modules/foo.ts' does not exist.",
16+
"File '/a/b/node_modules/foo.tsx' does not exist.",
17+
"File '/a/b/node_modules/foo.d.ts' exist - use it as a name resolution result.",
18+
"Resolving real path for '/a/b/node_modules/foo.d.ts', result '/a/b/node_modules/foo.d.ts'",
19+
"======== Module name 'foo' was successfully resolved to '/a/b/node_modules/foo.d.ts'. ========",
20+
"======== Resolving module 'foo' from '/a/b/c/d/e/app.ts'. ========",
21+
"Explicitly specified module resolution kind: 'NodeJs'.",
22+
"Loading module 'foo' from 'node_modules' folder.",
23+
"File '/a/b/c/d/e/node_modules/foo.ts' does not exist.",
24+
"File '/a/b/c/d/e/node_modules/foo.tsx' does not exist.",
25+
"File '/a/b/c/d/e/node_modules/foo.d.ts' does not exist.",
26+
"File '/a/b/c/d/e/node_modules/foo/package.json' does not exist.",
27+
"File '/a/b/c/d/e/node_modules/foo/index.ts' does not exist.",
28+
"File '/a/b/c/d/e/node_modules/foo/index.tsx' does not exist.",
29+
"File '/a/b/c/d/e/node_modules/foo/index.d.ts' does not exist.",
30+
"File '/a/b/c/d/e/node_modules/@types/foo.d.ts' does not exist.",
31+
"File '/a/b/c/d/e/node_modules/@types/foo/package.json' does not exist.",
32+
"File '/a/b/c/d/e/node_modules/@types/foo/index.d.ts' does not exist.",
33+
"File '/a/b/c/d/node_modules/foo.ts' does not exist.",
34+
"File '/a/b/c/d/node_modules/foo.tsx' does not exist.",
35+
"File '/a/b/c/d/node_modules/foo.d.ts' does not exist.",
36+
"File '/a/b/c/d/node_modules/foo/package.json' does not exist.",
37+
"File '/a/b/c/d/node_modules/foo/index.ts' does not exist.",
38+
"File '/a/b/c/d/node_modules/foo/index.tsx' does not exist.",
39+
"File '/a/b/c/d/node_modules/foo/index.d.ts' does not exist.",
40+
"File '/a/b/c/d/node_modules/@types/foo.d.ts' does not exist.",
41+
"File '/a/b/c/d/node_modules/@types/foo/package.json' does not exist.",
42+
"File '/a/b/c/d/node_modules/@types/foo/index.d.ts' does not exist.",
43+
"Resolution for module 'foo' was found in cache",
44+
"Resolving real path for '/a/b/node_modules/foo.d.ts', result '/a/b/node_modules/foo.d.ts'",
45+
"======== Module name 'foo' was successfully resolved to '/a/b/node_modules/foo.d.ts'. ========"
46+
]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
=== /a/b/node_modules/foo.d.ts ===
2+
3+
export declare let x: number
4+
>x : number
5+
6+
=== /a/b/c/lib.ts ===
7+
import {x} from "foo";
8+
>x : number
9+
10+
=== /a/b/c/d/e/app.ts ===
11+
import {x} from "foo";
12+
>x : number
13+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//// [tests/cases/compiler/cachedModuleResolution3.ts] ////
2+
3+
//// [foo.d.ts]
4+
5+
export declare let x: number
6+
7+
//// [app.ts]
8+
import {x} from "foo";
9+
10+
//// [lib.ts]
11+
import {x} from "foo";
12+
13+
//// [app.js]
14+
"use strict";
15+
//// [lib.js]
16+
"use strict";

0 commit comments

Comments
 (0)