@@ -4,6 +4,65 @@ const { replaceRange } = require('./transforms');
44
55let patchTs , replaceExtensions , syncMtsGtsSourceFiles , typescriptParser , isPatched , allowGjs ;
66
7+ /**
8+ * Helper function to find the first existing file among possible variants
9+ * @param {string } fileName - The original file name to resolve
10+ * @param {boolean } allowGjs - Whether .gjs files are allowed
11+ * @returns {string|null } - The first existing file path, or null if none exist
12+ */
13+ function findExistingFile ( fileName , allowGjs ) {
14+ // Check .gts first
15+ const gtsFile = fileName . replace ( / \. m ? t s $ / , '.gts' ) ;
16+ if ( fs . existsSync ( gtsFile ) ) return gtsFile ;
17+
18+ // Check .gjs (if allowed)
19+ if ( allowGjs ) {
20+ const gjsFile = fileName . replace ( / \. m ? j s $ / , '.gjs' ) ;
21+ if ( fs . existsSync ( gjsFile ) ) return gjsFile ;
22+
23+ // Check .gjs.d.ts (multiple patterns)
24+ const gjsDtsFile1 = fileName . replace ( / \. m j s \. d \. t s $ / , '.gjs.d.ts' ) ;
25+ const gjsDtsFile2 = fileName . replace ( / \. d \. m t s $ / , '.gjs.d.ts' ) ;
26+ if ( fs . existsSync ( gjsDtsFile1 ) ) return gjsDtsFile1 ;
27+ if ( fs . existsSync ( gjsDtsFile2 ) ) return gjsDtsFile2 ;
28+
29+ // Check .d.gjs.ts pattern
30+ const dGjsFile = fileName . replace ( / \. d \. m t s $ / , '.d.gjs.ts' ) ;
31+ if ( fs . existsSync ( dGjsFile ) ) return dGjsFile ;
32+ }
33+
34+ // Check original file
35+ if ( fs . existsSync ( fileName ) ) return fileName ;
36+
37+ return null ;
38+ }
39+
40+ /**
41+ * Helper function to resolve the actual file path for reading
42+ * @param {string } fileName - The original file name to resolve
43+ * @param {boolean } allowGjs - Whether .gjs files are allowed
44+ * @returns {string } - The resolved file path to read from
45+ */
46+ function resolveFileForReading ( fileName , allowGjs ) {
47+ // Handle declaration files first (more specific patterns)
48+ if ( fileName . endsWith ( '.d.mts' ) ) {
49+ // .d.mts files could map to .gjs declaration patterns
50+ if ( allowGjs && fs . existsSync ( fileName . replace ( / \. d \. m t s $ / , '.d.gjs.ts' ) ) ) {
51+ return fileName . replace ( / \. d \. m t s $ / , '.d.gjs.ts' ) ;
52+ } else if ( allowGjs && fs . existsSync ( fileName . replace ( / \. d \. m t s $ / , '.gjs.d.ts' ) ) ) {
53+ return fileName . replace ( / \. d \. m t s $ / , '.gjs.d.ts' ) ;
54+ }
55+ } else if ( allowGjs && fileName . endsWith ( '.mjs.d.ts' ) ) {
56+ return fileName . replace ( / \. m j s \. d \. t s $ / , '.gjs.d.ts' ) ;
57+ } else if ( fileName . match ( / \. m ? t s $ / ) && ! fileName . endsWith ( '.d.ts' ) ) {
58+ return fileName . replace ( / \. m ? t s $ / , '.gts' ) ;
59+ } else if ( allowGjs && fileName . match ( / \. m ? j s $ / ) && ! fileName . endsWith ( '.d.ts' ) ) {
60+ return fileName . replace ( / \. m ? j s $ / , '.gjs' ) ;
61+ }
62+
63+ return fileName ;
64+ }
65+
766try {
867 const parserPath = require . resolve ( '@typescript-eslint/parser' ) ;
968 // eslint-disable-next-line n/no-unpublished-require
@@ -44,18 +103,7 @@ try {
44103 return results . concat ( gtsVirtuals , gjsVirtuals , gjsDtsVirtuals , dGjsVirtuals ) ;
45104 } ,
46105 fileExists ( fileName ) {
47- const gtsExists = fs . existsSync ( fileName . replace ( / \. m ? t s $ / , '.gts' ) ) ;
48- const gjsExists = allowGjs ? fs . existsSync ( fileName . replace ( / \. m ? j s $ / , '.gjs' ) ) : false ;
49- // Check for .gjs.d.ts files with multiple patterns
50- const gjsDtsExists = allowGjs
51- ? fs . existsSync ( fileName . replace ( / \. m j s \. d \. t s $ / , '.gjs.d.ts' ) ) ||
52- fs . existsSync ( fileName . replace ( / \. d \. m t s $ / , '.gjs.d.ts' ) )
53- : false ;
54- // Check for .d.gjs.ts pattern (allowArbitraryExtensions for .gjs files only)
55- const dGjsExists = allowGjs
56- ? fs . existsSync ( fileName . replace ( / \. d \. m t s $ / , '.d.gjs.ts' ) )
57- : false ;
58- return gtsExists || gjsExists || gjsDtsExists || dGjsExists || fs . existsSync ( fileName ) ;
106+ return findExistingFile ( fileName , allowGjs ) !== null ;
59107 } ,
60108 readFile ( fname ) {
61109 let fileName = fname ;
@@ -67,21 +115,7 @@ try {
67115 try {
68116 content = fs . readFileSync ( fileName ) . toString ( ) ;
69117 } catch {
70- // Handle declaration files first (more specific patterns)
71- if ( fileName . endsWith ( '.d.mts' ) ) {
72- // .d.mts files could map to .gjs declaration patterns
73- if ( allowGjs && fs . existsSync ( fileName . replace ( / \. d \. m t s $ / , '.d.gjs.ts' ) ) ) {
74- fileName = fileName . replace ( / \. d \. m t s $ / , '.d.gjs.ts' ) ;
75- } else if ( allowGjs && fs . existsSync ( fileName . replace ( / \. d \. m t s $ / , '.gjs.d.ts' ) ) ) {
76- fileName = fileName . replace ( / \. d \. m t s $ / , '.gjs.d.ts' ) ;
77- }
78- } else if ( allowGjs && fileName . endsWith ( '.mjs.d.ts' ) ) {
79- fileName = fileName . replace ( / \. m j s \. d \. t s $ / , '.gjs.d.ts' ) ;
80- } else if ( fileName . match ( / \. m ? t s $ / ) && ! fileName . endsWith ( '.d.ts' ) ) {
81- fileName = fileName . replace ( / \. m ? t s $ / , '.gts' ) ;
82- } else if ( allowGjs && fileName . match ( / \. m ? j s $ / ) && ! fileName . endsWith ( '.d.ts' ) ) {
83- fileName = fileName . replace ( / \. m ? j s $ / , '.gjs' ) ;
84- }
118+ fileName = resolveFileForReading ( fileName , allowGjs ) ;
85119 content = fs . readFileSync ( fileName ) . toString ( ) ;
86120 }
87121 // Only transform template files, not declaration files
0 commit comments