Skip to content

Commit 1705767

Browse files
committed
Clean up
1 parent 4730d4f commit 1705767

File tree

1 file changed

+61
-27
lines changed

1 file changed

+61
-27
lines changed

src/parser/ts-patch.js

Lines changed: 61 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,65 @@ const { replaceRange } = require('./transforms');
44

55
let 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?ts$/, '.gts');
16+
if (fs.existsSync(gtsFile)) return gtsFile;
17+
18+
// Check .gjs (if allowed)
19+
if (allowGjs) {
20+
const gjsFile = fileName.replace(/\.m?js$/, '.gjs');
21+
if (fs.existsSync(gjsFile)) return gjsFile;
22+
23+
// Check .gjs.d.ts (multiple patterns)
24+
const gjsDtsFile1 = fileName.replace(/\.mjs\.d\.ts$/, '.gjs.d.ts');
25+
const gjsDtsFile2 = fileName.replace(/\.d\.mts$/, '.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\.mts$/, '.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\.mts$/, '.d.gjs.ts'))) {
51+
return fileName.replace(/\.d\.mts$/, '.d.gjs.ts');
52+
} else if (allowGjs && fs.existsSync(fileName.replace(/\.d\.mts$/, '.gjs.d.ts'))) {
53+
return fileName.replace(/\.d\.mts$/, '.gjs.d.ts');
54+
}
55+
} else if (allowGjs && fileName.endsWith('.mjs.d.ts')) {
56+
return fileName.replace(/\.mjs\.d\.ts$/, '.gjs.d.ts');
57+
} else if (fileName.match(/\.m?ts$/) && !fileName.endsWith('.d.ts')) {
58+
return fileName.replace(/\.m?ts$/, '.gts');
59+
} else if (allowGjs && fileName.match(/\.m?js$/) && !fileName.endsWith('.d.ts')) {
60+
return fileName.replace(/\.m?js$/, '.gjs');
61+
}
62+
63+
return fileName;
64+
}
65+
766
try {
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?ts$/, '.gts'));
48-
const gjsExists = allowGjs ? fs.existsSync(fileName.replace(/\.m?js$/, '.gjs')) : false;
49-
// Check for .gjs.d.ts files with multiple patterns
50-
const gjsDtsExists = allowGjs
51-
? fs.existsSync(fileName.replace(/\.mjs\.d\.ts$/, '.gjs.d.ts')) ||
52-
fs.existsSync(fileName.replace(/\.d\.mts$/, '.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\.mts$/, '.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\.mts$/, '.d.gjs.ts'))) {
74-
fileName = fileName.replace(/\.d\.mts$/, '.d.gjs.ts');
75-
} else if (allowGjs && fs.existsSync(fileName.replace(/\.d\.mts$/, '.gjs.d.ts'))) {
76-
fileName = fileName.replace(/\.d\.mts$/, '.gjs.d.ts');
77-
}
78-
} else if (allowGjs && fileName.endsWith('.mjs.d.ts')) {
79-
fileName = fileName.replace(/\.mjs\.d\.ts$/, '.gjs.d.ts');
80-
} else if (fileName.match(/\.m?ts$/) && !fileName.endsWith('.d.ts')) {
81-
fileName = fileName.replace(/\.m?ts$/, '.gts');
82-
} else if (allowGjs && fileName.match(/\.m?js$/) && !fileName.endsWith('.d.ts')) {
83-
fileName = fileName.replace(/\.m?js$/, '.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

Comments
 (0)