@@ -10,6 +10,11 @@ const visitImport = require("../util/visit-import")
1010const packageNamePattern = / ^ (?: @ [ ^ / \\ ] + [ / \\ ] ) ? [ ^ / \\ ] + $ / u
1111const corePackageOverridePattern =
1212 / ^ (?: 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+ }
1318
1419/**
1520 * Get all file extensions of the files which have the same basename.
@@ -31,6 +36,27 @@ function getExistingExtensions(filePath) {
3136 }
3237}
3338
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+
3460module . exports = {
3561 meta : {
3662 docs : {
@@ -85,16 +111,26 @@ module.exports = {
85111
86112 // Verify.
87113 if ( style === "always" && ext !== originalExt ) {
114+ const referencingFileExt = path . extname (
115+ context . getPhysicalFilename ( )
116+ )
117+ const fileExtensionToAdd = getFileExtensionToAdd (
118+ ext ,
119+ referencingFileExt
120+ )
88121 context . report ( {
89122 node,
90123 messageId : "requireExt" ,
91- data : { ext } ,
124+ data : { ext : fileExtensionToAdd } ,
92125 fix ( fixer ) {
93126 if ( existingExts . length !== 1 ) {
94127 return null
95128 }
96129 const index = node . range [ 1 ] - 1
97- return fixer . insertTextBeforeRange ( [ index , index ] , ext )
130+ return fixer . insertTextBeforeRange (
131+ [ index , index ] ,
132+ fileExtensionToAdd
133+ )
98134 } ,
99135 } )
100136 } else if ( style === "never" && ext === originalExt ) {
0 commit comments