Skip to content

Commit d166614

Browse files
committed
Dedupe files for ResolutionBasedFileProblems
1 parent 88fc7d6 commit d166614

File tree

7 files changed

+958
-933
lines changed

7 files changed

+958
-933
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
2+
3+
```
4+
5+
6+
7+
⚠️ A require call resolved to an ESM JavaScript file, which is an error in Node and some bundlers. CommonJS consumers will need to use a dynamic import. https://github.com/arethetypeswrong/arethetypeswrong.github.io/blob/main/docs/problems/CJSResolvesToESM.md
8+
9+
💀 Import failed to resolve to type declarations or JavaScript files. https://github.com/arethetypeswrong/arethetypeswrong.github.io/blob/main/docs/problems/NoResolution.md
10+
11+
🥴 Import found in a type declaration file failed to resolve. Either this indicates that runtime resolution errors will occur, or (more likely) the types misrepresent the contents of the JavaScript files. https://github.com/arethetypeswrong/arethetypeswrong.github.io/blob/main/docs/problems/InternalResolutionError.md
12+
13+
14+
┌────────────────────┬───────────────────────────────────┬───────────────────────────────────┬───────────────────────────────────┐
15+
│ │ "@ice/app" │ "@ice/app/types" │ "@ice/app/analyze" │
16+
├────────────────────┼───────────────────────────────────┼───────────────────────────────────┼───────────────────────────────────┤
17+
│ node10 │ 🟢 │ 🟢 │ 💀 Resolution failed │
18+
├────────────────────┼───────────────────────────────────┼───────────────────────────────────┼───────────────────────────────────┤
19+
│ node16 (from CJS) │ ⚠️ ESM (dynamic import only) │ ⚠️ ESM (dynamic import only) │ ⚠️ ESM (dynamic import only) │
20+
│ │ 🥴 Internal resolution error │ 🥴 Internal resolution error │ │
21+
├────────────────────┼───────────────────────────────────┼───────────────────────────────────┼───────────────────────────────────┤
22+
│ node16 (from ESM) │ 🥴 Internal resolution error │ 🥴 Internal resolution error │ 🟢 (ESM) │
23+
├────────────────────┼───────────────────────────────────┼───────────────────────────────────┼───────────────────────────────────┤
24+
│ bundler │ 🟢 │ 🟢 │ 🟢 │
25+
└────────────────────┴───────────────────────────────────┴───────────────────────────────────┴───────────────────────────────────┘
26+
27+
28+
```
29+
30+
Exit code: 1

packages/core/src/checks/resolutionBasedFileProblems.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,18 @@ export function getResolutionBasedFileProblems(
1010
): ResolutionBasedFileProblem[] {
1111
const result: ResolutionBasedFileProblem[] = [];
1212
for (const resolutionOption of allResolutionOptions) {
13-
const visibleFiles = Object.values(entrypointResolutions).flatMap((entrypoint) => {
14-
const files = new Set<string>();
15-
getResolutionKinds(resolutionOption).forEach((resolutionKind) => {
16-
entrypoint.resolutions[resolutionKind].files?.forEach((file) => files.add(file));
17-
if (entrypoint.resolutions[resolutionKind].implementationResolution) {
18-
files.add(entrypoint.resolutions[resolutionKind].implementationResolution!.fileName);
19-
}
20-
});
21-
return Array.from(files);
22-
});
13+
const visibleFiles = new Set(
14+
Object.values(entrypointResolutions).flatMap((entrypoint) => {
15+
const files = new Set<string>();
16+
getResolutionKinds(resolutionOption).forEach((resolutionKind) => {
17+
entrypoint.resolutions[resolutionKind].files?.forEach((file) => files.add(file));
18+
if (entrypoint.resolutions[resolutionKind].implementationResolution) {
19+
files.add(entrypoint.resolutions[resolutionKind].implementationResolution!.fileName);
20+
}
21+
});
22+
return Array.from(files);
23+
})
24+
);
2325

2426
for (const fileName of visibleFiles) {
2527
const sourceFile = host.getSourceFile(fileName, resolutionOption)!;
@@ -46,13 +48,11 @@ export function getResolutionBasedFileProblems(
4648
kind: "InternalResolutionError",
4749
resolutionOption,
4850
fileName,
49-
error: {
50-
moduleSpecifier: reference,
51-
pos: moduleSpecifier.pos,
52-
end: moduleSpecifier.end,
53-
resolutionMode,
54-
trace: host.getTrace(resolutionOption, fileName, moduleSpecifier.text, resolutionMode)!,
55-
},
51+
moduleSpecifier: reference,
52+
pos: moduleSpecifier.pos,
53+
end: moduleSpecifier.end,
54+
resolutionMode,
55+
trace: host.getTrace(resolutionOption, fileName, moduleSpecifier.text, resolutionMode)!,
5656
});
5757
}
5858
}

packages/core/src/types.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,6 @@ export interface Resolution {
6161
trace: string[];
6262
}
6363

64-
export interface InternalResolutionErrorDetails {
65-
pos: number;
66-
end: number;
67-
moduleSpecifier: string;
68-
resolutionMode: ts.ModuleKind.ESNext | ts.ModuleKind.CommonJS | undefined;
69-
trace: string[];
70-
}
71-
7264
export type EntrypointResolutionProblemKind =
7365
| "NoResolution"
7466
| "UntypedResolution"
@@ -89,7 +81,11 @@ export interface InternalResolutionProblem {
8981
kind: "InternalResolutionError";
9082
resolutionOption: ResolutionOption;
9183
fileName: string;
92-
error: InternalResolutionErrorDetails;
84+
pos: number;
85+
end: number;
86+
moduleSpecifier: string;
87+
resolutionMode: ts.ResolutionMode;
88+
trace: string[];
9389
}
9490

9591
export interface UnexpectedModuleSyntaxProblem {
74.5 KB
Binary file not shown.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
2+
3+
## Problems
4+
5+
```json
6+
[
7+
{
8+
"kind": "CJSResolvesToESM",
9+
"entrypoint": ".",
10+
"resolutionKind": "node16-cjs"
11+
},
12+
{
13+
"kind": "CJSResolvesToESM",
14+
"entrypoint": "./types",
15+
"resolutionKind": "node16-cjs"
16+
},
17+
{
18+
"kind": "NoResolution",
19+
"entrypoint": "./analyze",
20+
"resolutionKind": "node10"
21+
},
22+
{
23+
"kind": "CJSResolvesToESM",
24+
"entrypoint": "./analyze",
25+
"resolutionKind": "node16-cjs"
26+
},
27+
{
28+
"kind": "InternalResolutionError",
29+
"resolutionOption": "node16",
30+
"fileName": "/node_modules/@ice/app/esm/types/userConfig.d.ts",
31+
"moduleSpecifier": "./plugin",
32+
"pos": 391,
33+
"end": 402,
34+
"resolutionMode": 99,
35+
"trace": [
36+
"======== Resolving module './plugin' from '/node_modules/@ice/app/esm/types/userConfig.d.ts'. ========",
37+
"Explicitly specified module resolution kind: 'Node16'.",
38+
"Resolving in ESM mode with conditions 'import', 'types', 'node'.",
39+
"Loading module as file / folder, candidate module location '/node_modules/@ice/app/esm/types/plugin', target file types: TypeScript, JavaScript, Declaration, JSON.",
40+
"Directory '/node_modules/@ice/app/esm/types/plugin' does not exist, skipping all lookups in it.",
41+
"======== Module name './plugin' was not resolved. ========"
42+
]
43+
},
44+
{
45+
"kind": "InternalResolutionError",
46+
"resolutionOption": "node16",
47+
"fileName": "/node_modules/@ice/app/esm/index.d.ts",
48+
"moduleSpecifier": "./types",
49+
"pos": 81,
50+
"end": 91,
51+
"resolutionMode": 99,
52+
"trace": [
53+
"======== Resolving module './types' from '/node_modules/@ice/app/esm/index.d.ts'. ========",
54+
"Explicitly specified module resolution kind: 'Node16'.",
55+
"Resolving in ESM mode with conditions 'import', 'types', 'node'.",
56+
"Loading module as file / folder, candidate module location '/node_modules/@ice/app/esm/types', target file types: TypeScript, JavaScript, Declaration, JSON.",
57+
"======== Module name './types' was not resolved. ========"
58+
]
59+
}
60+
]
61+
```

0 commit comments

Comments
 (0)