eslint-plugin-esm 0.5.0 → 0.6.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -13,52 +13,14 @@ function check(filename, source) {
|
|
|
13
13
|
}
|
|
14
14
|
return !isExisting(path.resolve(path.dirname(filename), source));
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
: isDirectory(filepath) ||
|
|
19
|
-
isFile(`${filepath}.js`) ||
|
|
20
|
-
isFile(`${filepath}.cjs`) ||
|
|
21
|
-
isFile(`${filepath}.mjs`) ||
|
|
22
|
-
isFile(`${filepath}.jsx`) ||
|
|
23
|
-
isFile(`${filepath}.ts`) ||
|
|
24
|
-
isFile(`${filepath}.cts`) ||
|
|
25
|
-
isFile(`${filepath}.mts`) ||
|
|
26
|
-
isFile(`${filepath}.tsx`) ||
|
|
27
|
-
isFile(`${filepath}.json`) ||
|
|
28
|
-
isFile(`${filepath}.node`));
|
|
29
|
-
function isFile(filepath) {
|
|
16
|
+
// TODO: Directory should be reported. Remove `|| stat.isDirectory()` later.
|
|
17
|
+
const isExisting = memoize((filepath) => {
|
|
30
18
|
try {
|
|
31
|
-
|
|
19
|
+
const stat = fs.statSync(filepath);
|
|
20
|
+
return stat.isFile() || stat.isDirectory();
|
|
32
21
|
}
|
|
33
22
|
catch {
|
|
34
23
|
return false;
|
|
35
24
|
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
try {
|
|
39
|
-
return fs.statSync(filepath).isDirectory();
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function endsWithExtension(filepath) {
|
|
46
|
-
const extensions = [
|
|
47
|
-
"js",
|
|
48
|
-
"cjs",
|
|
49
|
-
"mjs",
|
|
50
|
-
"jsx",
|
|
51
|
-
"ts",
|
|
52
|
-
"cts",
|
|
53
|
-
"mts",
|
|
54
|
-
"tsx",
|
|
55
|
-
"json",
|
|
56
|
-
"node",
|
|
57
|
-
"css",
|
|
58
|
-
"scss",
|
|
59
|
-
"sass",
|
|
60
|
-
"less",
|
|
61
|
-
];
|
|
62
|
-
return extensions.some((ext) => filepath.endsWith(`.${ext}`));
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8taW5leGlzdGVudC1yZWxhdGl2ZS1pbXBvcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL25vLWluZXhpc3RlbnQtcmVsYXRpdmUtaW1wb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxVQUFVLENBQUM7SUFDcEQsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxPQUFPLEVBQUUsOERBQThEO0lBQ3ZFLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7Q0FDNUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxLQUFLLENBQUMsUUFBZ0IsRUFBRSxNQUFjO0lBQzdDLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQWdCLEVBQVcsRUFBRSxDQUN2RCxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDbEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDckIsTUFBTSxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUM7UUFDeEIsTUFBTSxDQUFDLEdBQUcsUUFBUSxNQUFNLENBQUM7UUFDekIsTUFBTSxDQUFDLEdBQUcsUUFBUSxNQUFNLENBQUM7UUFDekIsTUFBTSxDQUFDLEdBQUcsUUFBUSxNQUFNLENBQUM7UUFDekIsTUFBTSxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUM7UUFDeEIsTUFBTSxDQUFDLEdBQUcsUUFBUSxNQUFNLENBQUM7UUFDekIsTUFBTSxDQUFDLEdBQUcsUUFBUSxNQUFNLENBQUM7UUFDekIsTUFBTSxDQUFDLEdBQUcsUUFBUSxNQUFNLENBQUM7UUFDekIsTUFBTSxDQUFDLEdBQUcsUUFBUSxPQUFPLENBQUM7UUFDMUIsTUFBTSxDQUFDLEdBQUcsUUFBUSxPQUFPLENBQUMsQ0FDL0IsQ0FBQztBQUVGLFNBQVMsTUFBTSxDQUFDLFFBQWdCO0lBQzlCLElBQUksQ0FBQztRQUNILE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLFFBQWdCO0lBQ25DLElBQUksQ0FBQztRQUNILE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsUUFBZ0I7SUFDekMsTUFBTSxVQUFVLEdBQUc7UUFDakIsSUFBSTtRQUNKLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUVMLElBQUk7UUFDSixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFFTCxNQUFNO1FBQ04sTUFBTTtRQUVOLEtBQUs7UUFDTCxNQUFNO1FBQ04sTUFBTTtRQUNOLE1BQU07S0FDUCxDQUFDO0lBQ0YsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZSwgY3JlYXRlUnVsZSwgZ2V0UnVsZU5hbWUsIGdldFNvdXJjZVR5cGUgfSBmcm9tIFwiLi4vY29tbW9uLnRzXCI7XG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBub0luZXhpc3RlbnRSZWxhdGl2ZUltcG9ydHMgPSBjcmVhdGVSdWxlKHtcbiAgbmFtZTogZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKSxcbiAgbWVzc2FnZTogXCJEaXNhbGxvdyBpbXBvcnRpbmcgZnJvbSBhIHJlbGF0aXZlIGZpbGUgd2hpY2ggaXMgaW5leGlzdGVudC5cIixcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4gY3JlYXRlKGNvbnRleHQsIGNoZWNrKSxcbn0pO1xuXG5mdW5jdGlvbiBjaGVjayhmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykge1xuICBpZiAoZ2V0U291cmNlVHlwZShzb3VyY2UpICE9PSBcImxvY2FsXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuICFpc0V4aXN0aW5nKHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZmlsZW5hbWUpLCBzb3VyY2UpKTtcbn1cblxuY29uc3QgaXNFeGlzdGluZyA9IG1lbW9pemUoKGZpbGVwYXRoOiBzdHJpbmcpOiBib29sZWFuID0+XG4gIGVuZHNXaXRoRXh0ZW5zaW9uKGZpbGVwYXRoKVxuICAgID8gaXNGaWxlKGZpbGVwYXRoKVxuICAgIDogaXNEaXJlY3RvcnkoZmlsZXBhdGgpIHx8XG4gICAgICBpc0ZpbGUoYCR7ZmlsZXBhdGh9LmpzYCkgfHxcbiAgICAgIGlzRmlsZShgJHtmaWxlcGF0aH0uY2pzYCkgfHxcbiAgICAgIGlzRmlsZShgJHtmaWxlcGF0aH0ubWpzYCkgfHxcbiAgICAgIGlzRmlsZShgJHtmaWxlcGF0aH0uanN4YCkgfHxcbiAgICAgIGlzRmlsZShgJHtmaWxlcGF0aH0udHNgKSB8fFxuICAgICAgaXNGaWxlKGAke2ZpbGVwYXRofS5jdHNgKSB8fFxuICAgICAgaXNGaWxlKGAke2ZpbGVwYXRofS5tdHNgKSB8fFxuICAgICAgaXNGaWxlKGAke2ZpbGVwYXRofS50c3hgKSB8fFxuICAgICAgaXNGaWxlKGAke2ZpbGVwYXRofS5qc29uYCkgfHxcbiAgICAgIGlzRmlsZShgJHtmaWxlcGF0aH0ubm9kZWApLFxuKTtcblxuZnVuY3Rpb24gaXNGaWxlKGZpbGVwYXRoOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnMuc3RhdFN5bmMoZmlsZXBhdGgpLmlzRmlsZSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNEaXJlY3RvcnkoZmlsZXBhdGg6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBmcy5zdGF0U3luYyhmaWxlcGF0aCkuaXNEaXJlY3RvcnkoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVuZHNXaXRoRXh0ZW5zaW9uKGZpbGVwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgZXh0ZW5zaW9ucyA9IFtcbiAgICBcImpzXCIsXG4gICAgXCJjanNcIixcbiAgICBcIm1qc1wiLFxuICAgIFwianN4XCIsXG5cbiAgICBcInRzXCIsXG4gICAgXCJjdHNcIixcbiAgICBcIm10c1wiLFxuICAgIFwidHN4XCIsXG5cbiAgICBcImpzb25cIixcbiAgICBcIm5vZGVcIixcblxuICAgIFwiY3NzXCIsXG4gICAgXCJzY3NzXCIsXG4gICAgXCJzYXNzXCIsXG4gICAgXCJsZXNzXCIsXG4gIF07XG4gIHJldHVybiBleHRlbnNpb25zLnNvbWUoKGV4dCkgPT4gZmlsZXBhdGguZW5kc1dpdGgoYC4ke2V4dH1gKSk7XG59XG4iXX0=
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8taW5leGlzdGVudC1yZWxhdGl2ZS1pbXBvcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL25vLWluZXhpc3RlbnQtcmVsYXRpdmUtaW1wb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxVQUFVLENBQUM7SUFDcEQsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxPQUFPLEVBQUUsOERBQThEO0lBQ3ZFLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7Q0FDNUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxLQUFLLENBQUMsUUFBZ0IsRUFBRSxNQUFjO0lBQzdDLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVELDRFQUE0RTtBQUM1RSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxRQUFnQixFQUFXLEVBQUU7SUFDdkQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBjcmVhdGUsIGNyZWF0ZVJ1bGUsIGdldFJ1bGVOYW1lLCBnZXRTb3VyY2VUeXBlIH0gZnJvbSBcIi4uL2NvbW1vbi50c1wiO1xuaW1wb3J0IHsgbWVtb2l6ZSB9IGZyb20gXCIuLi91dGlscy50c1wiO1xuXG5leHBvcnQgY29uc3Qgbm9JbmV4aXN0ZW50UmVsYXRpdmVJbXBvcnRzID0gY3JlYXRlUnVsZSh7XG4gIG5hbWU6IGdldFJ1bGVOYW1lKGltcG9ydC5tZXRhLnVybCksXG4gIG1lc3NhZ2U6IFwiRGlzYWxsb3cgaW1wb3J0aW5nIGZyb20gYSByZWxhdGl2ZSBmaWxlIHdoaWNoIGlzIGluZXhpc3RlbnQuXCIsXG4gIGNyZWF0ZTogKGNvbnRleHQpID0+IGNyZWF0ZShjb250ZXh0LCBjaGVjayksXG59KTtcblxuZnVuY3Rpb24gY2hlY2soZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgaWYgKGdldFNvdXJjZVR5cGUoc291cmNlKSAhPT0gXCJsb2NhbFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAhaXNFeGlzdGluZyhwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGZpbGVuYW1lKSwgc291cmNlKSk7XG59XG5cbi8vIFRPRE86IERpcmVjdG9yeSBzaG91bGQgYmUgcmVwb3J0ZWQuIFJlbW92ZSBgfHwgc3RhdC5pc0RpcmVjdG9yeSgpYCBsYXRlci5cbmNvbnN0IGlzRXhpc3RpbmcgPSBtZW1vaXplKChmaWxlcGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZpbGVwYXRoKTtcbiAgICByZXR1cm4gc3RhdC5pc0ZpbGUoKSB8fCBzdGF0LmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSk7XG4iXX0=
|
|
@@ -9,6 +9,7 @@ Disallow importing from a relative file which is inexistent.
|
|
|
9
9
|
|
|
10
10
|
```ts
|
|
11
11
|
import foo from './no-inexistent-relative-imports.spec.js' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
|
|
12
|
+
import foo from './no-inexistent-relative-imports.spec' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
|
|
12
13
|
import foo from './inexistent-file' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
|
|
13
14
|
import foo from '../inexistent-file' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
|
|
14
15
|
```
|
|
@@ -18,7 +19,6 @@ import foo from '../inexistent-file' // filename: /foo/src/rules/no-inexistent-r
|
|
|
18
19
|
```ts
|
|
19
20
|
import foo from 'foo' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
|
|
20
21
|
import foo from './no-inexistent-relative-imports.spec.ts' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
|
|
21
|
-
import foo from './no-inexistent-relative-imports.spec' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
|
|
22
22
|
import foo from '../rules' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
|
|
23
23
|
import foo from '.' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
|
|
24
24
|
import foo from './' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
|
package/package.json
CHANGED
|
@@ -9,8 +9,6 @@ const valid = [
|
|
|
9
9
|
|
|
10
10
|
// with ext
|
|
11
11
|
"import foo from './no-inexistent-relative-imports.spec.ts'",
|
|
12
|
-
// without ext
|
|
13
|
-
"import foo from './no-inexistent-relative-imports.spec'",
|
|
14
12
|
"import foo from '../rules'",
|
|
15
13
|
"import foo from '.'",
|
|
16
14
|
"import foo from './'",
|
|
@@ -20,6 +18,8 @@ const valid = [
|
|
|
20
18
|
|
|
21
19
|
const invalid = [
|
|
22
20
|
"import foo from './no-inexistent-relative-imports.spec.js'",
|
|
21
|
+
// without ext
|
|
22
|
+
"import foo from './no-inexistent-relative-imports.spec'",
|
|
23
23
|
"import foo from './inexistent-file'",
|
|
24
24
|
"import foo from '../inexistent-file'",
|
|
25
25
|
].map((code) => ({ code, filename }));
|
|
@@ -16,57 +16,12 @@ function check(filename: string, source: string) {
|
|
|
16
16
|
return !isExisting(path.resolve(path.dirname(filename), source));
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
? isFile(filepath)
|
|
22
|
-
: isDirectory(filepath) ||
|
|
23
|
-
isFile(`${filepath}.js`) ||
|
|
24
|
-
isFile(`${filepath}.cjs`) ||
|
|
25
|
-
isFile(`${filepath}.mjs`) ||
|
|
26
|
-
isFile(`${filepath}.jsx`) ||
|
|
27
|
-
isFile(`${filepath}.ts`) ||
|
|
28
|
-
isFile(`${filepath}.cts`) ||
|
|
29
|
-
isFile(`${filepath}.mts`) ||
|
|
30
|
-
isFile(`${filepath}.tsx`) ||
|
|
31
|
-
isFile(`${filepath}.json`) ||
|
|
32
|
-
isFile(`${filepath}.node`),
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
function isFile(filepath: string) {
|
|
36
|
-
try {
|
|
37
|
-
return fs.statSync(filepath).isFile();
|
|
38
|
-
} catch {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function isDirectory(filepath: string) {
|
|
19
|
+
// TODO: Directory should be reported. Remove `|| stat.isDirectory()` later.
|
|
20
|
+
const isExisting = memoize((filepath: string): boolean => {
|
|
44
21
|
try {
|
|
45
|
-
|
|
22
|
+
const stat = fs.statSync(filepath);
|
|
23
|
+
return stat.isFile() || stat.isDirectory();
|
|
46
24
|
} catch {
|
|
47
25
|
return false;
|
|
48
26
|
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function endsWithExtension(filepath: string) {
|
|
52
|
-
const extensions = [
|
|
53
|
-
"js",
|
|
54
|
-
"cjs",
|
|
55
|
-
"mjs",
|
|
56
|
-
"jsx",
|
|
57
|
-
|
|
58
|
-
"ts",
|
|
59
|
-
"cts",
|
|
60
|
-
"mts",
|
|
61
|
-
"tsx",
|
|
62
|
-
|
|
63
|
-
"json",
|
|
64
|
-
"node",
|
|
65
|
-
|
|
66
|
-
"css",
|
|
67
|
-
"scss",
|
|
68
|
-
"sass",
|
|
69
|
-
"less",
|
|
70
|
-
];
|
|
71
|
-
return extensions.some((ext) => filepath.endsWith(`.${ext}`));
|
|
72
|
-
}
|
|
27
|
+
});
|