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
@@ -1,5 +1,11 @@
1
1
  # eslint-plugin-esm
2
2
 
3
+ ## 0.6.0-beta.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 02d0164: chore(eslint-plugin-esm): make `no-inexistent-relative-imports` stricter
8
+
3
9
  ## 0.5.0
4
10
 
5
11
  ### Minor Changes
@@ -13,52 +13,14 @@ function check(filename, source) {
13
13
  }
14
14
  return !isExisting(path.resolve(path.dirname(filename), source));
15
15
  }
16
- const isExisting = memoize((filepath) => endsWithExtension(filepath)
17
- ? isFile(filepath)
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
- return fs.statSync(filepath).isFile();
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
- function isDirectory(filepath) {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-esm",
3
- "version": "0.5.0",
3
+ "version": "0.6.0-beta.0",
4
4
  "description": "ESLint plugin for linting ESM (import/export syntax)",
5
5
  "keywords": [
6
6
  "eslint",
@@ -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
- const isExisting = memoize((filepath: string): boolean =>
20
- endsWithExtension(filepath)
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
- return fs.statSync(filepath).isDirectory();
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
+ });