@@ -10,6 +10,11 @@ const visitImport = require("../util/visit-import")
10
10
const packageNamePattern = / ^ (?: @ [ ^ / \\ ] + [ / \\ ] ) ? [ ^ / \\ ] + $ / u
11
11
const corePackageOverridePattern =
12
12
/ ^ (?: a s s e r t | a s y n c _ h o o k s | b u f f e r | c h i l d _ p r o c e s s | c l u s t e r | c o n s o l e | c o n s t a n t s | c r y p t o | d g r a m | d n s | d o m a i n | e v e n t s | f s | h t t p | h t t p 2 | h t t p s | i n s p e c t o r | m o d u l e | n e t | o s | p a t h | p e r f _ h o o k s | p r o c e s s | p u n y c o d e | q u e r y s t r i n g | r e a d l i n e | r e p l | s t r e a m | s t r i n g _ d e c o d e r | s y s | t i m e r s | t l s | t r a c e _ e v e n t s | t t y | u r l | u t i l | v 8 | v m | w o r k e r _ t h r e a d s | z l i b ) [ / \\ ] $ / u
13
+ const typescriptFileExtensionsMapping = {
14
+ ".ts" : ".js" ,
15
+ ".cts" : ".cjs" ,
16
+ ".mts" : ".mjs" ,
17
+ }
13
18
14
19
/**
15
20
* Get all file extensions of the files which have the same basename.
@@ -31,6 +36,27 @@ function getExistingExtensions(filePath) {
31
36
}
32
37
}
33
38
39
+ /**
40
+ * Get the file extension that should be added in an import statement,
41
+ * based on the given file extension of the referenced file.
42
+ *
43
+ * For example, in typescript, when referencing another typescript from a typescript file,
44
+ * a .js extension should be used instead of the original .ts extension of the referenced file.
45
+ * @param {string } referencedFileExt The original file extension of the referenced file.
46
+ * @param {string } referencingFileExt The original file extension of the file the contains the import statement.
47
+ * @returns {string } The file extension to append to the import statement.
48
+ */
49
+ function getFileExtensionToAdd ( referencedFileExt , referencingFileExt ) {
50
+ if (
51
+ referencingFileExt in typescriptFileExtensionsMapping &&
52
+ referencedFileExt in typescriptFileExtensionsMapping
53
+ ) {
54
+ return typescriptFileExtensionsMapping [ referencedFileExt ]
55
+ }
56
+
57
+ return referencedFileExt
58
+ }
59
+
34
60
module . exports = {
35
61
meta : {
36
62
docs : {
@@ -85,16 +111,26 @@ module.exports = {
85
111
86
112
// Verify.
87
113
if ( style === "always" && ext !== originalExt ) {
114
+ const referencingFileExt = path . extname (
115
+ context . getPhysicalFilename ( )
116
+ )
117
+ const fileExtensionToAdd = getFileExtensionToAdd (
118
+ ext ,
119
+ referencingFileExt
120
+ )
88
121
context . report ( {
89
122
node,
90
123
messageId : "requireExt" ,
91
- data : { ext } ,
124
+ data : { ext : fileExtensionToAdd } ,
92
125
fix ( fixer ) {
93
126
if ( existingExts . length !== 1 ) {
94
127
return null
95
128
}
96
129
const index = node . range [ 1 ] - 1
97
- return fixer . insertTextBeforeRange ( [ index , index ] , ext )
130
+ return fixer . insertTextBeforeRange (
131
+ [ index , index ] ,
132
+ fileExtensionToAdd
133
+ )
98
134
} ,
99
135
} )
100
136
} else if ( style === "never" && ext === originalExt ) {
0 commit comments