eslint-plugin-esm 0.6.0 → 0.7.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.
Files changed (39) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/index.d.ts +26 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -3
  5. package/dist/rules/existing-file-imports.d.ts +5 -0
  6. package/dist/rules/existing-file-imports.d.ts.map +1 -0
  7. package/dist/rules/existing-file-imports.js +24 -0
  8. package/dist/rules/no-git-ignored-imports.js +7 -2
  9. package/dist/rules/no-phantom-dep-imports.d.ts.map +1 -1
  10. package/dist/rules/no-phantom-dep-imports.js +9 -2
  11. package/dist/rules/no-side-effect-imports.js +9 -9
  12. package/doc/rules/existing-file-imports.md +28 -0
  13. package/doc/rules/no-directory-imports.md +13 -13
  14. package/doc/rules/no-git-ignored-imports.md +19 -19
  15. package/doc/rules/no-side-effect-imports.md +3 -3
  16. package/package.json +7 -5
  17. package/src/index.ts +2 -2
  18. package/src/rules/{no-inexistent-relative-imports.spec.ts → existing-file-imports.test.ts} +11 -10
  19. package/src/rules/{no-inexistent-relative-imports.ts → existing-file-imports.ts} +6 -8
  20. package/src/rules/no-git-ignored-imports.ts +6 -1
  21. package/src/rules/no-phantom-dep-imports.ts +9 -3
  22. package/src/rules/{no-side-effect-imports.spec.ts → no-side-effect-imports.test.ts} +4 -3
  23. package/src/rules/no-side-effect-imports.ts +8 -8
  24. package/tsconfig.json +1 -1
  25. package/dist/rules/no-inexistent-relative-imports.d.ts +0 -5
  26. package/dist/rules/no-inexistent-relative-imports.d.ts.map +0 -1
  27. package/dist/rules/no-inexistent-relative-imports.js +0 -26
  28. package/doc/rules/no-inexistent-relative-imports.md +0 -28
  29. /package/src/rules/{no-declaration-file-imports.spec.ts → no-declaration-file-imports.test.ts} +0 -0
  30. /package/src/rules/{no-directory-imports.spec.ts → no-directory-imports.test.ts} +0 -0
  31. /package/src/rules/{no-dynamic-imports.spec.ts → no-dynamic-imports.test.ts} +0 -0
  32. /package/src/rules/{no-empty-exports.spec.ts → no-empty-exports.test.ts} +0 -0
  33. /package/src/rules/{no-git-ignored-imports.spec.ts → no-git-ignored-imports.test.ts} +0 -0
  34. /package/src/rules/{no-phantom-dep-imports.spec.ts → no-phantom-dep-imports.test.ts} +0 -0
  35. /package/src/rules/{no-relative-parent-imports.spec.ts → no-relative-parent-imports.test.ts} +0 -0
  36. /package/src/rules/{no-rename-exports.spec.ts → no-rename-exports.test.ts} +0 -0
  37. /package/src/rules/{no-rename-imports.spec.ts → no-rename-imports.test.ts} +0 -0
  38. /package/src/rules/{no-useless-path-segments.spec.ts → no-useless-path-segments.test.ts} +0 -0
  39. /package/src/rules/{required-exports.spec.ts → required-exports.test.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # eslint-plugin-esm
2
2
 
3
+ ## 0.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 01657a8: feat(eslint-plugin-esm): rename `no-inexistent-relative-imports` to `existing-file-imports`
8
+
9
+ ## 0.6.1
10
+
11
+ ### Patch Changes
12
+
13
+ - 501e3b4: feat(eslint-plugin-esm): disallow side effect imports for `no-side-effect-imports` rule
14
+ - da63d2e: fix(eslint-plugin-esm): depress unexpected error messages in console
15
+
3
16
  ## 0.6.0
4
17
 
5
18
  ### Minor Changes
package/dist/index.d.ts CHANGED
@@ -1,4 +1,29 @@
1
+ import { existingFileImports } from "./rules/existing-file-imports.ts";
2
+ import { noDeclarationFileImports } from "./rules/no-declaration-file-imports.ts";
3
+ import { noDirectoryImports } from "./rules/no-directory-imports.ts";
4
+ import { noDynamicImports } from "./rules/no-dynamic-imports.ts";
5
+ import { noEmptyExports } from "./rules/no-empty-exports.ts";
6
+ import { noGitIgnoredImports } from "./rules/no-git-ignored-imports.ts";
7
+ import { noPhantomDepImports } from "./rules/no-phantom-dep-imports.ts";
8
+ import { noRelativeParentImports } from "./rules/no-relative-parent-imports.ts";
9
+ import { noRenameExports } from "./rules/no-rename-exports.ts";
10
+ import { noRenameImports } from "./rules/no-rename-imports.ts";
11
+ import { noSideEffectImports } from "./rules/no-side-effect-imports.ts";
12
+ import { noUselessPathSegments } from "./rules/no-useless-path-segments.ts";
13
+ import { requiredExports } from "./rules/required-exports.ts";
1
14
  export declare const rules: {
2
- [x: string]: import("eslint").Rule.RuleModule;
15
+ [existingFileImports.name]: import("eslint").Rule.RuleModule;
16
+ [noDeclarationFileImports.name]: import("eslint").Rule.RuleModule;
17
+ [noDirectoryImports.name]: import("eslint").Rule.RuleModule;
18
+ [noDynamicImports.name]: import("eslint").Rule.RuleModule;
19
+ [noEmptyExports.name]: import("eslint").Rule.RuleModule;
20
+ [noGitIgnoredImports.name]: import("eslint").Rule.RuleModule;
21
+ [noPhantomDepImports.name]: import("eslint").Rule.RuleModule;
22
+ [noRelativeParentImports.name]: import("eslint").Rule.RuleModule;
23
+ [noRenameExports.name]: import("eslint").Rule.RuleModule;
24
+ [noRenameImports.name]: import("eslint").Rule.RuleModule;
25
+ [noSideEffectImports.name]: import("eslint").Rule.RuleModule;
26
+ [noUselessPathSegments.name]: import("eslint").Rule.RuleModule;
27
+ [requiredExports.name]: import("eslint").Rule.RuleModule;
3
28
  };
4
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,KAAK;;CAcjB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,eAAO,MAAM,KAAK;IAChB,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,wBAAwB,CAAC,IAAI,CAAC,mCAA+B;IAC9D,CAAC,kBAAkB,CAAC,IAAI,CAAC,mCAAyB;IAClD,CAAC,gBAAgB,CAAC,IAAI,CAAC,mCAAuB;IAC9C,CAAC,cAAc,CAAC,IAAI,CAAC,mCAAqB;IAC1C,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,uBAAuB,CAAC,IAAI,CAAC,mCAA8B;IAC5D,CAAC,eAAe,CAAC,IAAI,CAAC,mCAAsB;IAC5C,CAAC,eAAe,CAAC,IAAI,CAAC,mCAAsB;IAC5C,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,qBAAqB,CAAC,IAAI,CAAC,mCAA4B;IACxD,CAAC,eAAe,CAAC,IAAI,CAAC,mCAAsB;CAC7C,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
+ import { existingFileImports } from "./rules/existing-file-imports.js";
1
2
  import { noDeclarationFileImports } from "./rules/no-declaration-file-imports.js";
2
3
  import { noDirectoryImports } from "./rules/no-directory-imports.js";
3
4
  import { noDynamicImports } from "./rules/no-dynamic-imports.js";
4
5
  import { noEmptyExports } from "./rules/no-empty-exports.js";
5
6
  import { noGitIgnoredImports } from "./rules/no-git-ignored-imports.js";
6
- import { noInexistentRelativeImports } from "./rules/no-inexistent-relative-imports.js";
7
7
  import { noPhantomDepImports } from "./rules/no-phantom-dep-imports.js";
8
8
  import { noRelativeParentImports } from "./rules/no-relative-parent-imports.js";
9
9
  import { noRenameExports } from "./rules/no-rename-exports.js";
@@ -12,12 +12,12 @@ import { noSideEffectImports } from "./rules/no-side-effect-imports.js";
12
12
  import { noUselessPathSegments } from "./rules/no-useless-path-segments.js";
13
13
  import { requiredExports } from "./rules/required-exports.js";
14
14
  export const rules = {
15
+ [existingFileImports.name]: existingFileImports.rule,
15
16
  [noDeclarationFileImports.name]: noDeclarationFileImports.rule,
16
17
  [noDirectoryImports.name]: noDirectoryImports.rule,
17
18
  [noDynamicImports.name]: noDynamicImports.rule,
18
19
  [noEmptyExports.name]: noEmptyExports.rule,
19
20
  [noGitIgnoredImports.name]: noGitIgnoredImports.rule,
20
- [noInexistentRelativeImports.name]: noInexistentRelativeImports.rule,
21
21
  [noPhantomDepImports.name]: noPhantomDepImports.rule,
22
22
  [noRelativeParentImports.name]: noRelativeParentImports.rule,
23
23
  [noRenameExports.name]: noRenameExports.rule,
@@ -26,4 +26,4 @@ export const rules = {
26
26
  [noUselessPathSegments.name]: noUselessPathSegments.rule,
27
27
  [requiredExports.name]: requiredExports.rule,
28
28
  };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRztJQUNuQixDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFLHdCQUF3QixDQUFDLElBQUk7SUFDOUQsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJO0lBQ2xELENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtJQUM5QyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxjQUFjLENBQUMsSUFBSTtJQUMxQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQixDQUFDLElBQUk7SUFDcEQsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsRUFBRSwyQkFBMkIsQ0FBQyxJQUFJO0lBQ3BFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtJQUNwRCxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLHVCQUF1QixDQUFDLElBQUk7SUFDNUQsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDNUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDNUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsSUFBSTtJQUN4RCxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlLENBQUMsSUFBSTtDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbm9EZWNsYXJhdGlvbkZpbGVJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZGVjbGFyYXRpb24tZmlsZS1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub0RpcmVjdG9yeUltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1kaXJlY3RvcnktaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9EeW5hbWljSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLWR5bmFtaWMtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9FbXB0eUV4cG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1lbXB0eS1leHBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub0dpdElnbm9yZWRJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZ2l0LWlnbm9yZWQtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9JbmV4aXN0ZW50UmVsYXRpdmVJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8taW5leGlzdGVudC1yZWxhdGl2ZS1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub1BoYW50b21EZXBJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tcGhhbnRvbS1kZXAtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9SZWxhdGl2ZVBhcmVudEltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1yZWxhdGl2ZS1wYXJlbnQtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9SZW5hbWVFeHBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tcmVuYW1lLWV4cG9ydHMudHNcIjtcbmltcG9ydCB7IG5vUmVuYW1lSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXJlbmFtZS1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub1NpZGVFZmZlY3RJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tc2lkZS1lZmZlY3QtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9Vc2VsZXNzUGF0aFNlZ21lbnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tdXNlbGVzcy1wYXRoLXNlZ21lbnRzLnRzXCI7XG5pbXBvcnQgeyByZXF1aXJlZEV4cG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9yZXF1aXJlZC1leHBvcnRzLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBydWxlcyA9IHtcbiAgW25vRGVjbGFyYXRpb25GaWxlSW1wb3J0cy5uYW1lXTogbm9EZWNsYXJhdGlvbkZpbGVJbXBvcnRzLnJ1bGUsXG4gIFtub0RpcmVjdG9yeUltcG9ydHMubmFtZV06IG5vRGlyZWN0b3J5SW1wb3J0cy5ydWxlLFxuICBbbm9EeW5hbWljSW1wb3J0cy5uYW1lXTogbm9EeW5hbWljSW1wb3J0cy5ydWxlLFxuICBbbm9FbXB0eUV4cG9ydHMubmFtZV06IG5vRW1wdHlFeHBvcnRzLnJ1bGUsXG4gIFtub0dpdElnbm9yZWRJbXBvcnRzLm5hbWVdOiBub0dpdElnbm9yZWRJbXBvcnRzLnJ1bGUsXG4gIFtub0luZXhpc3RlbnRSZWxhdGl2ZUltcG9ydHMubmFtZV06IG5vSW5leGlzdGVudFJlbGF0aXZlSW1wb3J0cy5ydWxlLFxuICBbbm9QaGFudG9tRGVwSW1wb3J0cy5uYW1lXTogbm9QaGFudG9tRGVwSW1wb3J0cy5ydWxlLFxuICBbbm9SZWxhdGl2ZVBhcmVudEltcG9ydHMubmFtZV06IG5vUmVsYXRpdmVQYXJlbnRJbXBvcnRzLnJ1bGUsXG4gIFtub1JlbmFtZUV4cG9ydHMubmFtZV06IG5vUmVuYW1lRXhwb3J0cy5ydWxlLFxuICBbbm9SZW5hbWVJbXBvcnRzLm5hbWVdOiBub1JlbmFtZUltcG9ydHMucnVsZSxcbiAgW25vU2lkZUVmZmVjdEltcG9ydHMubmFtZV06IG5vU2lkZUVmZmVjdEltcG9ydHMucnVsZSxcbiAgW25vVXNlbGVzc1BhdGhTZWdtZW50cy5uYW1lXTogbm9Vc2VsZXNzUGF0aFNlZ21lbnRzLnJ1bGUsXG4gIFtyZXF1aXJlZEV4cG9ydHMubmFtZV06IHJlcXVpcmVkRXhwb3J0cy5ydWxlLFxufTtcbiJdfQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRztJQUNuQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQixDQUFDLElBQUk7SUFDcEQsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSx3QkFBd0IsQ0FBQyxJQUFJO0lBQzlELENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsSUFBSTtJQUNsRCxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQixDQUFDLElBQUk7SUFDOUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsY0FBYyxDQUFDLElBQUk7SUFDMUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtJQUNwRCxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLHVCQUF1QixDQUFDLElBQUk7SUFDNUQsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDNUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDNUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsSUFBSTtJQUN4RCxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlLENBQUMsSUFBSTtDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RpbmdGaWxlSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL2V4aXN0aW5nLWZpbGUtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9EZWNsYXJhdGlvbkZpbGVJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZGVjbGFyYXRpb24tZmlsZS1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub0RpcmVjdG9yeUltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1kaXJlY3RvcnktaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9EeW5hbWljSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLWR5bmFtaWMtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9FbXB0eUV4cG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1lbXB0eS1leHBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub0dpdElnbm9yZWRJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZ2l0LWlnbm9yZWQtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9QaGFudG9tRGVwSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXBoYW50b20tZGVwLWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vUmVsYXRpdmVQYXJlbnRJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tcmVsYXRpdmUtcGFyZW50LWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vUmVuYW1lRXhwb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXJlbmFtZS1leHBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub1JlbmFtZUltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1yZW5hbWUtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9TaWRlRWZmZWN0SW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXNpZGUtZWZmZWN0LWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vVXNlbGVzc1BhdGhTZWdtZW50cyB9IGZyb20gXCIuL3J1bGVzL25vLXVzZWxlc3MtcGF0aC1zZWdtZW50cy50c1wiO1xuaW1wb3J0IHsgcmVxdWlyZWRFeHBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvcmVxdWlyZWQtZXhwb3J0cy50c1wiO1xuXG5leHBvcnQgY29uc3QgcnVsZXMgPSB7XG4gIFtleGlzdGluZ0ZpbGVJbXBvcnRzLm5hbWVdOiBleGlzdGluZ0ZpbGVJbXBvcnRzLnJ1bGUsXG4gIFtub0RlY2xhcmF0aW9uRmlsZUltcG9ydHMubmFtZV06IG5vRGVjbGFyYXRpb25GaWxlSW1wb3J0cy5ydWxlLFxuICBbbm9EaXJlY3RvcnlJbXBvcnRzLm5hbWVdOiBub0RpcmVjdG9yeUltcG9ydHMucnVsZSxcbiAgW25vRHluYW1pY0ltcG9ydHMubmFtZV06IG5vRHluYW1pY0ltcG9ydHMucnVsZSxcbiAgW25vRW1wdHlFeHBvcnRzLm5hbWVdOiBub0VtcHR5RXhwb3J0cy5ydWxlLFxuICBbbm9HaXRJZ25vcmVkSW1wb3J0cy5uYW1lXTogbm9HaXRJZ25vcmVkSW1wb3J0cy5ydWxlLFxuICBbbm9QaGFudG9tRGVwSW1wb3J0cy5uYW1lXTogbm9QaGFudG9tRGVwSW1wb3J0cy5ydWxlLFxuICBbbm9SZWxhdGl2ZVBhcmVudEltcG9ydHMubmFtZV06IG5vUmVsYXRpdmVQYXJlbnRJbXBvcnRzLnJ1bGUsXG4gIFtub1JlbmFtZUV4cG9ydHMubmFtZV06IG5vUmVuYW1lRXhwb3J0cy5ydWxlLFxuICBbbm9SZW5hbWVJbXBvcnRzLm5hbWVdOiBub1JlbmFtZUltcG9ydHMucnVsZSxcbiAgW25vU2lkZUVmZmVjdEltcG9ydHMubmFtZV06IG5vU2lkZUVmZmVjdEltcG9ydHMucnVsZSxcbiAgW25vVXNlbGVzc1BhdGhTZWdtZW50cy5uYW1lXTogbm9Vc2VsZXNzUGF0aFNlZ21lbnRzLnJ1bGUsXG4gIFtyZXF1aXJlZEV4cG9ydHMubmFtZV06IHJlcXVpcmVkRXhwb3J0cy5ydWxlLFxufTtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export declare const existingFileImports: {
2
+ name: string;
3
+ rule: import("eslint").Rule.RuleModule;
4
+ };
5
+ //# sourceMappingURL=existing-file-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"existing-file-imports.d.ts","sourceRoot":"","sources":["../../src/rules/existing-file-imports.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mBAAmB;;;CAI9B,CAAC"}
@@ -0,0 +1,24 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { create, createRule, getRuleName, getSourceType } from "../common.js";
4
+ import { memoize } from "../utils.js";
5
+ export const existingFileImports = createRule({
6
+ name: getRuleName(import.meta.url),
7
+ message: "Only allow importing from an existing local file.",
8
+ create: (context) => create(context, check),
9
+ });
10
+ function check(filename, source) {
11
+ return getSourceType(source) === "local"
12
+ ? !isExisting(path.resolve(path.dirname(filename), source))
13
+ : false;
14
+ }
15
+ const isExisting = memoize((filepath) => {
16
+ try {
17
+ const stat = fs.statSync(filepath);
18
+ return stat.isFile();
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhpc3RpbmctZmlsZS1pbXBvcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL2V4aXN0aW5nLWZpbGUtaW1wb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7SUFDNUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxPQUFPLEVBQUUsbURBQW1EO0lBQzVELE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7Q0FDNUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxLQUFLLENBQUMsUUFBZ0IsRUFBRSxNQUFjO0lBQzdDLE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU87UUFDdEMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ1osQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQWdCLEVBQVcsRUFBRTtJQUN2RCxJQUFJLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgY3JlYXRlLCBjcmVhdGVSdWxlLCBnZXRSdWxlTmFtZSwgZ2V0U291cmNlVHlwZSB9IGZyb20gXCIuLi9jb21tb24udHNcIjtcbmltcG9ydCB7IG1lbW9pemUgfSBmcm9tIFwiLi4vdXRpbHMudHNcIjtcblxuZXhwb3J0IGNvbnN0IGV4aXN0aW5nRmlsZUltcG9ydHMgPSBjcmVhdGVSdWxlKHtcbiAgbmFtZTogZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKSxcbiAgbWVzc2FnZTogXCJPbmx5IGFsbG93IGltcG9ydGluZyBmcm9tIGFuIGV4aXN0aW5nIGxvY2FsIGZpbGUuXCIsXG4gIGNyZWF0ZTogKGNvbnRleHQpID0+IGNyZWF0ZShjb250ZXh0LCBjaGVjayksXG59KTtcblxuZnVuY3Rpb24gY2hlY2soZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc291cmNlKSA9PT0gXCJsb2NhbFwiXG4gICAgPyAhaXNFeGlzdGluZyhwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGZpbGVuYW1lKSwgc291cmNlKSlcbiAgICA6IGZhbHNlO1xufVxuXG5jb25zdCBpc0V4aXN0aW5nID0gbWVtb2l6ZSgoZmlsZXBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhmaWxlcGF0aCk7XG4gICAgcmV0dXJuIHN0YXQuaXNGaWxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSk7XG4iXX0=
@@ -28,7 +28,12 @@ function checkIgnored(filename, source) {
28
28
  const isIgnored = memoize((filePath) => {
29
29
  try {
30
30
  return (childProcess
31
- .execSync(`git check-ignore ${filePath}`, { encoding: "utf8" })
31
+ // Adding `stdio: 'pipe'` to depress unexpected error messages in console.
32
+ // For example, `git check-ignore /absolute/path/to/file` (even wrapped with try-catch) will print something unnecessary.
33
+ .execSync(`git check-ignore ${filePath}`, {
34
+ encoding: "utf8",
35
+ stdio: "pipe",
36
+ })
32
37
  .trim() === filePath);
33
38
  }
34
39
  catch (e) {
@@ -43,4 +48,4 @@ const isIgnored = memoize((filePath) => {
43
48
  return true;
44
49
  }
45
50
  });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tZ2l0LWlnbm9yZWQtaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1naXQtaWdub3JlZC1pbXBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7SUFDNUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxPQUFPLEVBQUUsb0RBQW9EO0lBQzdELE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7Q0FDbkQsQ0FBQyxDQUFDO0FBRUgsU0FBUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFjO0lBQ3BELG9CQUFvQjtJQUNwQixJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCwyQkFBMkI7SUFDM0IsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELG1EQUFtRDtJQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUNiLDBEQUEwRCxZQUFZLEdBQUcsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxFQUFFO0lBQzdDLElBQUksQ0FBQztRQUNILE9BQU8sQ0FDTCxZQUFZO2FBQ1QsUUFBUSxDQUFDLG9CQUFvQixRQUFRLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUM5RCxJQUFJLEVBQUUsS0FBSyxRQUFRLENBQ3ZCLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLElBQ0UsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNoQixRQUFRLElBQUksQ0FBQztZQUNiLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRTtZQUNmLFFBQVEsSUFBSSxDQUFDO1lBQ2IsQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQ2YsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELDBGQUEwRjtRQUMxRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGlsZFByb2Nlc3MgZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuaW1wb3J0IHsgaXNOYXRpdmVFcnJvciB9IGZyb20gXCJub2RlOnV0aWwvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZSwgY3JlYXRlUnVsZSwgZ2V0UnVsZU5hbWUsIGdldFNvdXJjZVR5cGUgfSBmcm9tIFwiLi4vY29tbW9uLnRzXCI7XG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBub0dpdElnbm9yZWRJbXBvcnRzID0gY3JlYXRlUnVsZSh7XG4gIG5hbWU6IGdldFJ1bGVOYW1lKGltcG9ydC5tZXRhLnVybCksXG4gIG1lc3NhZ2U6IFwiRGlzYWxsb3cgdG8gaW1wb3J0IG1vZHVsZSBmcm9tIGEgZ2l0LWlnbm9yZWQgcGF0aC5cIixcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4gY3JlYXRlKGNvbnRleHQsIGNoZWNrSWdub3JlZCksXG59KTtcblxuZnVuY3Rpb24gY2hlY2tJZ25vcmVkKGZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSB7XG4gIC8vIGZyb20gbm9kZV9tb2R1bGVzXG4gIGlmIChnZXRTb3VyY2VUeXBlKHNvdXJjZSkgIT09IFwibG9jYWxcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBvdXQgc2lkZSBvZiBwcm9qZWN0IHJvb3RcbiAgaWYgKHNvdXJjZS5zdGFydHNXaXRoKFwiL1wiKSAmJiAhc291cmNlLnN0YXJ0c1dpdGgocHJvY2Vzcy5jd2QoKSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBUaGlzIGZpbGUgb2YgYWJzb2x1dGVQYXRoIG1heSBiZSBhIHN5bWJvbGljIGxpbmtcbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShmaWxlbmFtZSksIHNvdXJjZSk7XG4gIGlmICghYWJzb2x1dGVQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVTTGludCBwbHVnaW4gaW50ZXJuYWwgZXJyb3IuIEFic29sdXRlIHBhdGggaW5jb3JyZWN0OiAke2Fic29sdXRlUGF0aH0uYCxcbiAgICApO1xuICB9XG4gIHJldHVybiBpc0lnbm9yZWQoYWJzb2x1dGVQYXRoKTtcbn1cblxuY29uc3QgaXNJZ25vcmVkID0gbWVtb2l6ZSgoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoXG4gICAgICBjaGlsZFByb2Nlc3NcbiAgICAgICAgLmV4ZWNTeW5jKGBnaXQgY2hlY2staWdub3JlICR7ZmlsZVBhdGh9YCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgLnRyaW0oKSA9PT0gZmlsZVBhdGhcbiAgICApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKFxuICAgICAgaXNOYXRpdmVFcnJvcihlKSAmJlxuICAgICAgXCJzdGRvdXRcIiBpbiBlICYmXG4gICAgICBlLnN0ZG91dCA9PT0gXCJcIiAmJlxuICAgICAgXCJzdGRlcnJcIiBpbiBlICYmXG4gICAgICBlLnN0ZGVyciA9PT0gXCJcIlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBXZSBjYW5ub3QgdGhyb3cgYW4gZXJyb3IgaGVyZS4gU28gd2UgaGF2ZSB0byByZXR1cm4gdHJ1ZSB0byByZXBvcnQgdGhlIGZpbGVQYXRoIGlzIGJhZC5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufSk7XG4iXX0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tZ2l0LWlnbm9yZWQtaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1naXQtaWdub3JlZC1pbXBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7SUFDNUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxPQUFPLEVBQUUsb0RBQW9EO0lBQzdELE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7Q0FDbkQsQ0FBQyxDQUFDO0FBRUgsU0FBUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFjO0lBQ3BELG9CQUFvQjtJQUNwQixJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCwyQkFBMkI7SUFDM0IsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELG1EQUFtRDtJQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUNiLDBEQUEwRCxZQUFZLEdBQUcsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxFQUFFO0lBQzdDLElBQUksQ0FBQztRQUNILE9BQU8sQ0FDTCxZQUFZO1lBQ1YsMEVBQTBFO1lBQzFFLHlIQUF5SDthQUN4SCxRQUFRLENBQUMsb0JBQW9CLFFBQVEsRUFBRSxFQUFFO1lBQ3hDLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLEtBQUssRUFBRSxNQUFNO1NBQ2QsQ0FBQzthQUNELElBQUksRUFBRSxLQUFLLFFBQVEsQ0FDdkIsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsSUFDRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLFFBQVEsSUFBSSxDQUFDO1lBQ2IsQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFFO1lBQ2YsUUFBUSxJQUFJLENBQUM7WUFDYixDQUFDLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFDZixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsMEZBQTBGO1FBQzFGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoaWxkUHJvY2VzcyBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgcHJvY2VzcyBmcm9tIFwibm9kZTpwcm9jZXNzXCI7XG5pbXBvcnQgeyBpc05hdGl2ZUVycm9yIH0gZnJvbSBcIm5vZGU6dXRpbC90eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlLCBjcmVhdGVSdWxlLCBnZXRSdWxlTmFtZSwgZ2V0U291cmNlVHlwZSB9IGZyb20gXCIuLi9jb21tb24udHNcIjtcbmltcG9ydCB7IG1lbW9pemUgfSBmcm9tIFwiLi4vdXRpbHMudHNcIjtcblxuZXhwb3J0IGNvbnN0IG5vR2l0SWdub3JlZEltcG9ydHMgPSBjcmVhdGVSdWxlKHtcbiAgbmFtZTogZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKSxcbiAgbWVzc2FnZTogXCJEaXNhbGxvdyB0byBpbXBvcnQgbW9kdWxlIGZyb20gYSBnaXQtaWdub3JlZCBwYXRoLlwiLFxuICBjcmVhdGU6IChjb250ZXh0KSA9PiBjcmVhdGUoY29udGV4dCwgY2hlY2tJZ25vcmVkKSxcbn0pO1xuXG5mdW5jdGlvbiBjaGVja0lnbm9yZWQoZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgLy8gZnJvbSBub2RlX21vZHVsZXNcbiAgaWYgKGdldFNvdXJjZVR5cGUoc291cmNlKSAhPT0gXCJsb2NhbFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIG91dCBzaWRlIG9mIHByb2plY3Qgcm9vdFxuICBpZiAoc291cmNlLnN0YXJ0c1dpdGgoXCIvXCIpICYmICFzb3VyY2Uuc3RhcnRzV2l0aChwcm9jZXNzLmN3ZCgpKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIFRoaXMgZmlsZSBvZiBhYnNvbHV0ZVBhdGggbWF5IGJlIGEgc3ltYm9saWMgbGlua1xuICBjb25zdCBhYnNvbHV0ZVBhdGggPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGZpbGVuYW1lKSwgc291cmNlKTtcbiAgaWYgKCFhYnNvbHV0ZVBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRVNMaW50IHBsdWdpbiBpbnRlcm5hbCBlcnJvci4gQWJzb2x1dGUgcGF0aCBpbmNvcnJlY3Q6ICR7YWJzb2x1dGVQYXRofS5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGlzSWdub3JlZChhYnNvbHV0ZVBhdGgpO1xufVxuXG5jb25zdCBpc0lnbm9yZWQgPSBtZW1vaXplKChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNoaWxkUHJvY2Vzc1xuICAgICAgICAvLyBBZGRpbmcgYHN0ZGlvOiAncGlwZSdgIHRvIGRlcHJlc3MgdW5leHBlY3RlZCBlcnJvciBtZXNzYWdlcyBpbiBjb25zb2xlLlxuICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYGdpdCBjaGVjay1pZ25vcmUgL2Fic29sdXRlL3BhdGgvdG8vZmlsZWAgKGV2ZW4gd3JhcHBlZCB3aXRoIHRyeS1jYXRjaCkgd2lsbCBwcmludCBzb21ldGhpbmcgdW5uZWNlc3NhcnkuXG4gICAgICAgIC5leGVjU3luYyhgZ2l0IGNoZWNrLWlnbm9yZSAke2ZpbGVQYXRofWAsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgc3RkaW86IFwicGlwZVwiLFxuICAgICAgICB9KVxuICAgICAgICAudHJpbSgpID09PSBmaWxlUGF0aFxuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoXG4gICAgICBpc05hdGl2ZUVycm9yKGUpICYmXG4gICAgICBcInN0ZG91dFwiIGluIGUgJiZcbiAgICAgIGUuc3Rkb3V0ID09PSBcIlwiICYmXG4gICAgICBcInN0ZGVyclwiIGluIGUgJiZcbiAgICAgIGUuc3RkZXJyID09PSBcIlwiXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIFdlIGNhbm5vdCB0aHJvdyBhbiBlcnJvciBoZXJlLiBTbyB3ZSBoYXZlIHRvIHJldHVybiB0cnVlIHRvIHJlcG9ydCB0aGUgZmlsZVBhdGggaXMgYmFkLlxuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTtcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"no-phantom-dep-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-phantom-dep-imports.ts"],"names":[],"mappings":"AA4CA,eAAO,MAAM,mBAAmB;;;CAyE9B,CAAC"}
1
+ {"version":3,"file":"no-phantom-dep-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-phantom-dep-imports.ts"],"names":[],"mappings":"AA4CA,eAAO,MAAM,mBAAmB;;;CA+E9B,CAAC"}
@@ -48,7 +48,14 @@ export const noPhantomDepImports = createRule({
48
48
  },
49
49
  ],
50
50
  create: (context) => create(context, (filename, source, node) => {
51
- const { allowDevDependencies = false, } = context.options[0] ?? {};
51
+ const option = context.options[0];
52
+ // default false
53
+ const allowDevDependencies = (typeof option === "object" &&
54
+ option &&
55
+ "allowDevDependencies" in option &&
56
+ typeof option.allowDevDependencies === "boolean" &&
57
+ option.allowDevDependencies) ??
58
+ false;
52
59
  // ignore `import {foo} from './'`
53
60
  // check `import {foo} from 'node:foo'` and `import {foo} from 'foo'`
54
61
  if (getSourceType(source) === "local") {
@@ -97,4 +104,4 @@ export const noPhantomDepImports = createRule({
97
104
  }
98
105
  }),
99
106
  });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcGhhbnRvbS1kZXAtaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1waGFudG9tLWRlcC1pbXBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUUsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM5QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixJQUFJLENBQUM7UUFDSCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBeUQsQ0FBQyxDQUFDLG9DQUFvQztBQUNwSCxTQUFTLFVBQVUsQ0FDakIsR0FBVztJQUVYLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDbkQsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUN4QixNQUFNLE9BQU8sR0FBWSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUM5QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRTtZQUNoQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixJQUFJLEdBQUcsS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3pDLFlBQVk7UUFDWixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDO0lBQzVDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEMsT0FBTyxFQUNMLHVGQUF1RjtJQUN6RixNQUFNLEVBQUU7UUFDTjtZQUNFLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFO2dCQUNWLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTthQUMxQztZQUNELG9CQUFvQixFQUFFLEtBQUs7U0FDNUI7S0FDRjtJQUNELE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2xCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3pDLE1BQU0sRUFDSixvQkFBb0IsR0FBRyxLQUFLLEdBQzdCLEdBQXNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWhFLGtDQUFrQztRQUNsQyxxRUFBcUU7UUFDckUsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuRCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQ1AsY0FBYyxJQUFJLE9BQU8sQ0FBQyxPQUFPO1lBQ2pDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUNwQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZO1lBQzlCLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDVCxNQUFNLE9BQU8sR0FDWCxrQkFBa0IsSUFBSSxPQUFPLENBQUMsT0FBTztZQUNyQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztZQUN4QyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0I7WUFDbEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNULE1BQU0sTUFBTSxHQUNWLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxPQUFPO1lBQ3BDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUN2QyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlO1lBQ2pDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFVCxxRkFBcUY7UUFDckYsd0NBQXdDO1FBQ3hDLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxDQUFDLGFBQWEsSUFBSSxNQUFNLElBQUksYUFBYSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFFRCxtQ0FBbUM7UUFDbkMsTUFBTSxVQUFVLEdBQUcsTUFBTTthQUN0QixLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFYixNQUFNLE9BQU8sR0FBRyxVQUFVLElBQUksR0FBRyxJQUFJLFVBQVUsSUFBSSxPQUFPLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUcsVUFBVSxJQUFJLE1BQU0sQ0FBQztRQUNyQyxJQUFJLFlBQVksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN2RCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztnQkFDNUMsQ0FBQyxDQUFDLFVBQVUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNwRCxDQUFDLENBQUMsVUFBVSxVQUFVLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsQ0FDTixPQUFPO2dCQUNQLE9BQU87Z0JBQ1AsV0FBVyxJQUFJLEdBQUc7Z0JBQ2xCLFdBQVcsSUFBSSxNQUFNLENBQ3RCLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDLENBQUM7Q0FDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCBwcm9jZXNzIGZyb20gXCJub2RlOnByb2Nlc3NcIjtcbmltcG9ydCB7IGNyZWF0ZSwgY3JlYXRlUnVsZSwgZ2V0UnVsZU5hbWUsIGdldFNvdXJjZVR5cGUgfSBmcm9tIFwiLi4vY29tbW9uLnRzXCI7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiB1bmtub3duKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCI7XG59XG5cbmZ1bmN0aW9uIGlzRmlsZShmaWxlUGF0aDogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZzLnN0YXRTeW5jKGZpbGVQYXRoKS5pc0ZpbGUoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmNvbnN0IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBvYmplY3QgfSB8IHVuZGVmaW5lZD4oKTsgLy8ga2V5IGlzIGRpciwgdmFsdWUgaXMgcGFja2FnZS5qc29uXG5mdW5jdGlvbiBnZXRQa2dKc29uKFxuICBkaXI6IHN0cmluZyxcbik6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBvYmplY3QgfSB8IHVuZGVmaW5lZCB7XG4gIGlmIChjYWNoZS5oYXMoZGlyKSkge1xuICAgIHJldHVybiBjYWNoZS5nZXQoZGlyKTtcbiAgfVxuICBjb25zdCBwa2dKc29uUGF0aCA9IHBhdGguam9pbihkaXIsIFwicGFja2FnZS5qc29uXCIpO1xuICBpZiAoaXNGaWxlKHBrZ0pzb25QYXRoKSkge1xuICAgIGNvbnN0IGNvbnRlbnQ6IHVua25vd24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwa2dKc29uUGF0aCwgXCJ1dGY4XCIpKTtcbiAgICBjb25zdCByZXN1bHQgPSBpc09iamVjdChjb250ZW50KVxuICAgICAgPyB7IHBhdGg6IHBrZ0pzb25QYXRoLCBjb250ZW50IH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNhY2hlLnNldChkaXIsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGl0IGlzIGEgZGlyZWN0b3J5XG4gIGlmIChkaXIgPT09IHByb2Nlc3MuY3dkKCkgfHwgZGlyID09PSBcIi9cIikge1xuICAgIC8vIHN0b3AgaGVyZVxuICAgIGNhY2hlLnNldChkaXIsIHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBnZXRQa2dKc29uKHBhdGguam9pbihkaXIsIFwiLi5cIikpO1xufVxuXG5leHBvcnQgY29uc3Qgbm9QaGFudG9tRGVwSW1wb3J0cyA9IGNyZWF0ZVJ1bGUoe1xuICBuYW1lOiBnZXRSdWxlTmFtZShpbXBvcnQubWV0YS51cmwpLFxuICBtZXNzYWdlOlxuICAgIFwiRGlzYWxsb3cgaW1wb3J0aW5nIGZyb20gYSBtb2R1bGUgd2hpY2ggdGhlIG5lYXJlc3QgYHBhY2thZ2UuanNvbmAgZG9lc24ndCBpbmNsdWRlIGl0LlwiLFxuICBzY2hlbWE6IFtcbiAgICB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBhbGxvd0RldkRlcGVuZGVuY2llczogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICB9LFxuICBdLFxuICBjcmVhdGU6IChjb250ZXh0KSA9PlxuICAgIGNyZWF0ZShjb250ZXh0LCAoZmlsZW5hbWUsIHNvdXJjZSwgbm9kZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBhbGxvd0RldkRlcGVuZGVuY2llcyA9IGZhbHNlLFxuICAgICAgfTogeyBhbGxvd0RldkRlcGVuZGVuY2llczogYm9vbGVhbiB9ID0gY29udGV4dC5vcHRpb25zWzBdID8/IHt9O1xuXG4gICAgICAvLyBpZ25vcmUgYGltcG9ydCB7Zm9vfSBmcm9tICcuLydgXG4gICAgICAvLyBjaGVjayBgaW1wb3J0IHtmb299IGZyb20gJ25vZGU6Zm9vJ2AgYW5kIGBpbXBvcnQge2Zvb30gZnJvbSAnZm9vJ2BcbiAgICAgIGlmIChnZXRTb3VyY2VUeXBlKHNvdXJjZSkgPT09IFwibG9jYWxcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBwa2dKc29uID0gZ2V0UGtnSnNvbihwYXRoLmRpcm5hbWUoZmlsZW5hbWUpKTtcbiAgICAgIC8vIGNhbm5vdCBmaW5kIHBhY2thZ2UuanNvbiBmaWxlXG4gICAgICBpZiAoIXBrZ0pzb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkZXAgPVxuICAgICAgICBcImRlcGVuZGVuY2llc1wiIGluIHBrZ0pzb24uY29udGVudCAmJlxuICAgICAgICBpc09iamVjdChwa2dKc29uLmNvbnRlbnQuZGVwZW5kZW5jaWVzKVxuICAgICAgICAgID8gcGtnSnNvbi5jb250ZW50LmRlcGVuZGVuY2llc1xuICAgICAgICAgIDoge307XG4gICAgICBjb25zdCBwZWVyRGVwID1cbiAgICAgICAgXCJwZWVyRGVwZW5kZW5jaWVzXCIgaW4gcGtnSnNvbi5jb250ZW50ICYmXG4gICAgICAgIGlzT2JqZWN0KHBrZ0pzb24uY29udGVudC5wZWVyRGVwZW5kZW5jaWVzKVxuICAgICAgICAgID8gcGtnSnNvbi5jb250ZW50LnBlZXJEZXBlbmRlbmNpZXNcbiAgICAgICAgICA6IHt9O1xuICAgICAgY29uc3QgZGV2RGVwID1cbiAgICAgICAgXCJkZXZEZXBlbmRlbmNpZXNcIiBpbiBwa2dKc29uLmNvbnRlbnQgJiZcbiAgICAgICAgaXNPYmplY3QocGtnSnNvbi5jb250ZW50LmRldkRlcGVuZGVuY2llcylcbiAgICAgICAgICA/IHBrZ0pzb24uY29udGVudC5kZXZEZXBlbmRlbmNpZXNcbiAgICAgICAgICA6IHt9O1xuXG4gICAgICAvLyBUT0RPOiBPcHRpbWl6ZSB0aGUgZXJyb3IgbWVzc2FnZSB3aGljaCBpcyByZXBvcnRlZCBvbiBgaW1wb3J0IGZvbyBmcm9tICdub2RlOmZvbydgXG4gICAgICAvLyAxLiBjaGVjayBgaW1wb3J0IGZvbyBmcm9tICdub2RlOmZvbydgXG4gICAgICBpZiAoc291cmNlLnN0YXJ0c1dpdGgoXCJub2RlOlwiKSkge1xuICAgICAgICByZXR1cm4gIShcIkB0eXBlcy9ub2RlXCIgaW4gZGV2RGVwIHx8IFwiQHR5cGVzL25vZGVcIiBpbiBkZXApO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBjaGVjayBgaW1wb3J0IGZvbyBmcm9tICdmb28nYFxuICAgICAgY29uc3QgbW9kdWxlTmFtZSA9IHNvdXJjZVxuICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgIC5zbGljZSgwLCBzb3VyY2Uuc3RhcnRzV2l0aChcIkBcIikgPyAyIDogMSlcbiAgICAgICAgLmpvaW4oXCIvXCIpO1xuXG4gICAgICBjb25zdCBpc0luRGVwID0gbW9kdWxlTmFtZSBpbiBkZXAgfHwgbW9kdWxlTmFtZSBpbiBwZWVyRGVwO1xuICAgICAgY29uc3QgaXNJbkRldiA9IG1vZHVsZU5hbWUgaW4gZGV2RGVwO1xuICAgICAgaWYgKFwiaW1wb3J0S2luZFwiIGluIG5vZGUgJiYgbm9kZS5pbXBvcnRLaW5kID09PSBcInR5cGVcIikge1xuICAgICAgICBjb25zdCB0eXBlRGVwTmFtZSA9IG1vZHVsZU5hbWUuc3RhcnRzV2l0aChcIkBcIilcbiAgICAgICAgICA/IGBAdHlwZXMvJHttb2R1bGVOYW1lLnNsaWNlKDEpLnJlcGxhY2UoXCIvXCIsIFwiX19cIil9YFxuICAgICAgICAgIDogYEB0eXBlcy8ke21vZHVsZU5hbWV9YDtcbiAgICAgICAgcmV0dXJuICEoXG4gICAgICAgICAgaXNJbkRlcCB8fFxuICAgICAgICAgIGlzSW5EZXYgfHxcbiAgICAgICAgICB0eXBlRGVwTmFtZSBpbiBkZXAgfHxcbiAgICAgICAgICB0eXBlRGVwTmFtZSBpbiBkZXZEZXBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhbGxvd0RldkRlcGVuZGVuY2llcyA/ICEoaXNJbkRlcCB8fCBpc0luRGV2KSA6ICFpc0luRGVwO1xuICAgICAgfVxuICAgIH0pLFxufSk7XG4iXX0=
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcGhhbnRvbS1kZXAtaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1waGFudG9tLWRlcC1pbXBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUUsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM5QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixJQUFJLENBQUM7UUFDSCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBeUQsQ0FBQyxDQUFDLG9DQUFvQztBQUNwSCxTQUFTLFVBQVUsQ0FDakIsR0FBVztJQUVYLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDbkQsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUN4QixNQUFNLE9BQU8sR0FBWSxJQUFJLENBQUMsS0FBSyxDQUFD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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0NBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgcHJvY2VzcyBmcm9tIFwibm9kZTpwcm9jZXNzXCI7XG5pbXBvcnQgeyBjcmVhdGUsIGNyZWF0ZVJ1bGUsIGdldFJ1bGVOYW1lLCBnZXRTb3VyY2VUeXBlIH0gZnJvbSBcIi4uL2NvbW1vbi50c1wiO1xuXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xufVxuXG5mdW5jdGlvbiBpc0ZpbGUoZmlsZVBhdGg6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBmcy5zdGF0U3luYyhmaWxlUGF0aCkuaXNGaWxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jb25zdCBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCB7IHBhdGg6IHN0cmluZzsgY29udGVudDogb2JqZWN0IH0gfCB1bmRlZmluZWQ+KCk7IC8vIGtleSBpcyBkaXIsIHZhbHVlIGlzIHBhY2thZ2UuanNvblxuZnVuY3Rpb24gZ2V0UGtnSnNvbihcbiAgZGlyOiBzdHJpbmcsXG4pOiB7IHBhdGg6IHN0cmluZzsgY29udGVudDogb2JqZWN0IH0gfCB1bmRlZmluZWQge1xuICBpZiAoY2FjaGUuaGFzKGRpcikpIHtcbiAgICByZXR1cm4gY2FjaGUuZ2V0KGRpcik7XG4gIH1cbiAgY29uc3QgcGtnSnNvblBhdGggPSBwYXRoLmpvaW4oZGlyLCBcInBhY2thZ2UuanNvblwiKTtcbiAgaWYgKGlzRmlsZShwa2dKc29uUGF0aCkpIHtcbiAgICBjb25zdCBjb250ZW50OiB1bmtub3duID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGtnSnNvblBhdGgsIFwidXRmOFwiKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gaXNPYmplY3QoY29udGVudClcbiAgICAgID8geyBwYXRoOiBwa2dKc29uUGF0aCwgY29udGVudCB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjYWNoZS5zZXQoZGlyLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBpdCBpcyBhIGRpcmVjdG9yeVxuICBpZiAoZGlyID09PSBwcm9jZXNzLmN3ZCgpIHx8IGRpciA9PT0gXCIvXCIpIHtcbiAgICAvLyBzdG9wIGhlcmVcbiAgICBjYWNoZS5zZXQoZGlyLCB1bmRlZmluZWQpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gZ2V0UGtnSnNvbihwYXRoLmpvaW4oZGlyLCBcIi4uXCIpKTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vUGhhbnRvbURlcEltcG9ydHMgPSBjcmVhdGVSdWxlKHtcbiAgbmFtZTogZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKSxcbiAgbWVzc2FnZTpcbiAgICBcIkRpc2FsbG93IGltcG9ydGluZyBmcm9tIGEgbW9kdWxlIHdoaWNoIHRoZSBuZWFyZXN0IGBwYWNrYWdlLmpzb25gIGRvZXNuJ3QgaW5jbHVkZSBpdC5cIixcbiAgc2NoZW1hOiBbXG4gICAge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWxsb3dEZXZEZXBlbmRlbmNpZXM6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgIH0sXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgfSxcbiAgXSxcbiAgY3JlYXRlOiAoY29udGV4dCkgPT5cbiAgICBjcmVhdGUoY29udGV4dCwgKGZpbGVuYW1lLCBzb3VyY2UsIG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXTtcbiAgICAgIC8vIGRlZmF1bHQgZmFsc2VcbiAgICAgIGNvbnN0IGFsbG93RGV2RGVwZW5kZW5jaWVzOiBib29sZWFuID1cbiAgICAgICAgKHR5cGVvZiBvcHRpb24gPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICBvcHRpb24gJiZcbiAgICAgICAgICBcImFsbG93RGV2RGVwZW5kZW5jaWVzXCIgaW4gb3B0aW9uICYmXG4gICAgICAgICAgdHlwZW9mIG9wdGlvbi5hbGxvd0RldkRlcGVuZGVuY2llcyA9PT0gXCJib29sZWFuXCIgJiZcbiAgICAgICAgICBvcHRpb24uYWxsb3dEZXZEZXBlbmRlbmNpZXMpID8/XG4gICAgICAgIGZhbHNlO1xuXG4gICAgICAvLyBpZ25vcmUgYGltcG9ydCB7Zm9vfSBmcm9tICcuLydgXG4gICAgICAvLyBjaGVjayBgaW1wb3J0IHtmb299IGZyb20gJ25vZGU6Zm9vJ2AgYW5kIGBpbXBvcnQge2Zvb30gZnJvbSAnZm9vJ2BcbiAgICAgIGlmIChnZXRTb3VyY2VUeXBlKHNvdXJjZSkgPT09IFwibG9jYWxcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBwa2dKc29uID0gZ2V0UGtnSnNvbihwYXRoLmRpcm5hbWUoZmlsZW5hbWUpKTtcbiAgICAgIC8vIGNhbm5vdCBmaW5kIHBhY2thZ2UuanNvbiBmaWxlXG4gICAgICBpZiAoIXBrZ0pzb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkZXAgPVxuICAgICAgICBcImRlcGVuZGVuY2llc1wiIGluIHBrZ0pzb24uY29udGVudCAmJlxuICAgICAgICBpc09iamVjdChwa2dKc29uLmNvbnRlbnQuZGVwZW5kZW5jaWVzKVxuICAgICAgICAgID8gcGtnSnNvbi5jb250ZW50LmRlcGVuZGVuY2llc1xuICAgICAgICAgIDoge307XG4gICAgICBjb25zdCBwZWVyRGVwID1cbiAgICAgICAgXCJwZWVyRGVwZW5kZW5jaWVzXCIgaW4gcGtnSnNvbi5jb250ZW50ICYmXG4gICAgICAgIGlzT2JqZWN0KHBrZ0pzb24uY29udGVudC5wZWVyRGVwZW5kZW5jaWVzKVxuICAgICAgICAgID8gcGtnSnNvbi5jb250ZW50LnBlZXJEZXBlbmRlbmNpZXNcbiAgICAgICAgICA6IHt9O1xuICAgICAgY29uc3QgZGV2RGVwID1cbiAgICAgICAgXCJkZXZEZXBlbmRlbmNpZXNcIiBpbiBwa2dKc29uLmNvbnRlbnQgJiZcbiAgICAgICAgaXNPYmplY3QocGtnSnNvbi5jb250ZW50LmRldkRlcGVuZGVuY2llcylcbiAgICAgICAgICA/IHBrZ0pzb24uY29udGVudC5kZXZEZXBlbmRlbmNpZXNcbiAgICAgICAgICA6IHt9O1xuXG4gICAgICAvLyBUT0RPOiBPcHRpbWl6ZSB0aGUgZXJyb3IgbWVzc2FnZSB3aGljaCBpcyByZXBvcnRlZCBvbiBgaW1wb3J0IGZvbyBmcm9tICdub2RlOmZvbydgXG4gICAgICAvLyAxLiBjaGVjayBgaW1wb3J0IGZvbyBmcm9tICdub2RlOmZvbydgXG4gICAgICBpZiAoc291cmNlLnN0YXJ0c1dpdGgoXCJub2RlOlwiKSkge1xuICAgICAgICByZXR1cm4gIShcIkB0eXBlcy9ub2RlXCIgaW4gZGV2RGVwIHx8IFwiQHR5cGVzL25vZGVcIiBpbiBkZXApO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBjaGVjayBgaW1wb3J0IGZvbyBmcm9tICdmb28nYFxuICAgICAgY29uc3QgbW9kdWxlTmFtZSA9IHNvdXJjZVxuICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgIC5zbGljZSgwLCBzb3VyY2Uuc3RhcnRzV2l0aChcIkBcIikgPyAyIDogMSlcbiAgICAgICAgLmpvaW4oXCIvXCIpO1xuXG4gICAgICBjb25zdCBpc0luRGVwID0gbW9kdWxlTmFtZSBpbiBkZXAgfHwgbW9kdWxlTmFtZSBpbiBwZWVyRGVwO1xuICAgICAgY29uc3QgaXNJbkRldiA9IG1vZHVsZU5hbWUgaW4gZGV2RGVwO1xuICAgICAgaWYgKFwiaW1wb3J0S2luZFwiIGluIG5vZGUgJiYgbm9kZS5pbXBvcnRLaW5kID09PSBcInR5cGVcIikge1xuICAgICAgICBjb25zdCB0eXBlRGVwTmFtZSA9IG1vZHVsZU5hbWUuc3RhcnRzV2l0aChcIkBcIilcbiAgICAgICAgICA/IGBAdHlwZXMvJHttb2R1bGVOYW1lLnNsaWNlKDEpLnJlcGxhY2UoXCIvXCIsIFwiX19cIil9YFxuICAgICAgICAgIDogYEB0eXBlcy8ke21vZHVsZU5hbWV9YDtcbiAgICAgICAgcmV0dXJuICEoXG4gICAgICAgICAgaXNJbkRlcCB8fFxuICAgICAgICAgIGlzSW5EZXYgfHxcbiAgICAgICAgICB0eXBlRGVwTmFtZSBpbiBkZXAgfHxcbiAgICAgICAgICB0eXBlRGVwTmFtZSBpbiBkZXZEZXBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhbGxvd0RldkRlcGVuZGVuY2llcyA/ICEoaXNJbkRlcCB8fCBpc0luRGV2KSA6ICFpc0luRGVwO1xuICAgICAgfVxuICAgIH0pLFxufSk7XG4iXX0=
@@ -2,14 +2,14 @@ import { createRule, DEFAULT_MESSAGE_ID, getRuleName } from "../common.js";
2
2
  const ignores = [
3
3
  "^reflect-metadata$",
4
4
  // https://github.com/vitejs/vite/blob/main/packages/vite/client.d.ts
5
- "(?<!\\.module)\\.css$",
6
- "(?<!\\.module)\\.scss$",
7
- "(?<!\\.module)\\.sass$",
8
- "(?<!\\.module)\\.less$",
9
- "(?<!\\.module)\\.styl$",
10
- "(?<!\\.module)\\.stylus$",
11
- "(?<!\\.module)\\.pcss$",
12
- "(?<!\\.module)\\.sss$",
5
+ // "(?<!\\.module)\\.css$",
6
+ // "(?<!\\.module)\\.scss$",
7
+ // "(?<!\\.module)\\.sass$",
8
+ // "(?<!\\.module)\\.less$",
9
+ // "(?<!\\.module)\\.styl$",
10
+ // "(?<!\\.module)\\.stylus$",
11
+ // "(?<!\\.module)\\.pcss$",
12
+ // "(?<!\\.module)\\.sss$",
13
13
  ];
14
14
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import
15
15
  export const noSideEffectImports = createRule({
@@ -28,4 +28,4 @@ export const noSideEffectImports = createRule({
28
28
  };
29
29
  },
30
30
  });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tc2lkZS1lZmZlY3QtaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1zaWRlLWVmZmVjdC1pbXBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTNFLE1BQU0sT0FBTyxHQUFHO0lBQ2Qsb0JBQW9CO0lBQ3BCLHFFQUFxRTtJQUNyRSx1QkFBdUI7SUFDdkIsd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLDBCQUEwQjtJQUMxQix3QkFBd0I7SUFDeEIsdUJBQXVCO0NBQ3hCLENBQUM7QUFFRixzRkFBc0Y7QUFDdEYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDO0lBQzVDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEMsT0FBTyxFQUNMLGdGQUFnRjtJQUNsRixNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNsQixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE9BQU87WUFDTCx3Q0FBd0MsRUFBRSxDQUFDLElBQXVCLEVBQUUsRUFBRTtnQkFDcEUsSUFDRSxVQUFVLENBQUMsSUFBSSxDQUNiLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVE7b0JBQ3JDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FDOUIsRUFDRCxDQUFDO29CQUNELE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJbXBvcnREZWNsYXJhdGlvbiB9IGZyb20gXCJlc3RyZWVcIjtcbmltcG9ydCB7IGNyZWF0ZVJ1bGUsIERFRkFVTFRfTUVTU0FHRV9JRCwgZ2V0UnVsZU5hbWUgfSBmcm9tIFwiLi4vY29tbW9uLnRzXCI7XG5cbmNvbnN0IGlnbm9yZXMgPSBbXG4gIFwiXnJlZmxlY3QtbWV0YWRhdGEkXCIsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS9ibG9iL21haW4vcGFja2FnZXMvdml0ZS9jbGllbnQuZC50c1xuICBcIig/PCFcXFxcLm1vZHVsZSlcXFxcLmNzcyRcIixcbiAgXCIoPzwhXFxcXC5tb2R1bGUpXFxcXC5zY3NzJFwiLFxuICBcIig/PCFcXFxcLm1vZHVsZSlcXFxcLnNhc3MkXCIsXG4gIFwiKD88IVxcXFwubW9kdWxlKVxcXFwubGVzcyRcIixcbiAgXCIoPzwhXFxcXC5tb2R1bGUpXFxcXC5zdHlsJFwiLFxuICBcIig/PCFcXFxcLm1vZHVsZSlcXFxcLnN0eWx1cyRcIixcbiAgXCIoPzwhXFxcXC5tb2R1bGUpXFxcXC5wY3NzJFwiLFxuICBcIig/PCFcXFxcLm1vZHVsZSlcXFxcLnNzcyRcIixcbl07XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1N0YXRlbWVudHMvaW1wb3J0XG5leHBvcnQgY29uc3Qgbm9TaWRlRWZmZWN0SW1wb3J0cyA9IGNyZWF0ZVJ1bGUoe1xuICBuYW1lOiBnZXRSdWxlTmFtZShpbXBvcnQubWV0YS51cmwpLFxuICBtZXNzYWdlOlxuICAgIFwiU2lkZSBlZmZlY3QgaW1wb3J0IGlzIG9mdGVuIHVzZWQgZm9yIHBvbHlmaWxscyBhbmQgY3NzLiBJdCdzIHVuc2FmZSB0byB1c2UgaXQuXCIsXG4gIGNyZWF0ZTogKGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBpZ25vcmVFeHBzID0gaWdub3Jlcy5tYXAoKGlnbm9yZSkgPT4gbmV3IFJlZ0V4cChpZ25vcmUpKTtcbiAgICByZXR1cm4ge1xuICAgICAgXCJJbXBvcnREZWNsYXJhdGlvbltzcGVjaWZpZXJzLmxlbmd0aD0wXVwiOiAobm9kZTogSW1wb3J0RGVjbGFyYXRpb24pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGlnbm9yZUV4cHMuc29tZShcbiAgICAgICAgICAgIChleHApID0+XG4gICAgICAgICAgICAgIHR5cGVvZiBub2RlLnNvdXJjZS52YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICBleHAudGVzdChub2RlLnNvdXJjZS52YWx1ZSksXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlSWQ6IERFRkFVTFRfTUVTU0FHRV9JRCB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn0pO1xuIl19
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tc2lkZS1lZmZlY3QtaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1zaWRlLWVmZmVjdC1pbXBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTNFLE1BQU0sT0FBTyxHQUFHO0lBQ2Qsb0JBQW9CO0lBQ3BCLHFFQUFxRTtJQUNyRSwyQkFBMkI7SUFDM0IsNEJBQTRCO0lBQzVCLDRCQUE0QjtJQUM1Qiw0QkFBNEI7SUFDNUIsNEJBQTRCO0lBQzVCLDhCQUE4QjtJQUM5Qiw0QkFBNEI7SUFDNUIsMkJBQTJCO0NBQzVCLENBQUM7QUFFRixzRkFBc0Y7QUFDdEYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDO0lBQzVDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEMsT0FBTyxFQUNMLGdGQUFnRjtJQUNsRixNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNsQixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE9BQU87WUFDTCx3Q0FBd0MsRUFBRSxDQUFDLElBQXVCLEVBQUUsRUFBRTtnQkFDcEUsSUFDRSxVQUFVLENBQUMsSUFBSSxDQUNiLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVE7b0JBQ3JDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FDOUIsRUFDRCxDQUFDO29CQUNELE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJbXBvcnREZWNsYXJhdGlvbiB9IGZyb20gXCJlc3RyZWVcIjtcbmltcG9ydCB7IGNyZWF0ZVJ1bGUsIERFRkFVTFRfTUVTU0FHRV9JRCwgZ2V0UnVsZU5hbWUgfSBmcm9tIFwiLi4vY29tbW9uLnRzXCI7XG5cbmNvbnN0IGlnbm9yZXMgPSBbXG4gIFwiXnJlZmxlY3QtbWV0YWRhdGEkXCIsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS9ibG9iL21haW4vcGFja2FnZXMvdml0ZS9jbGllbnQuZC50c1xuICAvLyBcIig/PCFcXFxcLm1vZHVsZSlcXFxcLmNzcyRcIixcbiAgLy8gXCIoPzwhXFxcXC5tb2R1bGUpXFxcXC5zY3NzJFwiLFxuICAvLyBcIig/PCFcXFxcLm1vZHVsZSlcXFxcLnNhc3MkXCIsXG4gIC8vIFwiKD88IVxcXFwubW9kdWxlKVxcXFwubGVzcyRcIixcbiAgLy8gXCIoPzwhXFxcXC5tb2R1bGUpXFxcXC5zdHlsJFwiLFxuICAvLyBcIig/PCFcXFxcLm1vZHVsZSlcXFxcLnN0eWx1cyRcIixcbiAgLy8gXCIoPzwhXFxcXC5tb2R1bGUpXFxcXC5wY3NzJFwiLFxuICAvLyBcIig/PCFcXFxcLm1vZHVsZSlcXFxcLnNzcyRcIixcbl07XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1N0YXRlbWVudHMvaW1wb3J0XG5leHBvcnQgY29uc3Qgbm9TaWRlRWZmZWN0SW1wb3J0cyA9IGNyZWF0ZVJ1bGUoe1xuICBuYW1lOiBnZXRSdWxlTmFtZShpbXBvcnQubWV0YS51cmwpLFxuICBtZXNzYWdlOlxuICAgIFwiU2lkZSBlZmZlY3QgaW1wb3J0IGlzIG9mdGVuIHVzZWQgZm9yIHBvbHlmaWxscyBhbmQgY3NzLiBJdCdzIHVuc2FmZSB0byB1c2UgaXQuXCIsXG4gIGNyZWF0ZTogKGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBpZ25vcmVFeHBzID0gaWdub3Jlcy5tYXAoKGlnbm9yZSkgPT4gbmV3IFJlZ0V4cChpZ25vcmUpKTtcbiAgICByZXR1cm4ge1xuICAgICAgXCJJbXBvcnREZWNsYXJhdGlvbltzcGVjaWZpZXJzLmxlbmd0aD0wXVwiOiAobm9kZTogSW1wb3J0RGVjbGFyYXRpb24pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGlnbm9yZUV4cHMuc29tZShcbiAgICAgICAgICAgIChleHApID0+XG4gICAgICAgICAgICAgIHR5cGVvZiBub2RlLnNvdXJjZS52YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICBleHAudGVzdChub2RlLnNvdXJjZS52YWx1ZSksXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlSWQ6IERFRkFVTFRfTUVTU0FHRV9JRCB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn0pO1xuIl19
@@ -0,0 +1,28 @@
1
+ <!-- prettier-ignore-start -->
2
+ # existing-file-imports
3
+
4
+ Only allow importing from an existing local file.
5
+
6
+ ## Rule Details
7
+
8
+ ### Fail
9
+
10
+ ```ts
11
+ import foo from './existing-file-imports.test.js' // filename: /foo/src/rules/existing-file-imports.test.ts
12
+ import foo from './existing-file-imports.test' // filename: /foo/src/rules/existing-file-imports.test.ts
13
+ import foo from './inexistent-file' // filename: /foo/src/rules/existing-file-imports.test.ts
14
+ import foo from '../inexistent-file' // filename: /foo/src/rules/existing-file-imports.test.ts
15
+ import foo from '../rules' // filename: /foo/src/rules/existing-file-imports.test.ts
16
+ import foo from '.' // filename: /foo/src/rules/existing-file-imports.test.ts
17
+ import foo from './' // filename: /foo/src/rules/existing-file-imports.test.ts
18
+ import foo from '..' // filename: /foo/src/rules/existing-file-imports.test.ts
19
+ import foo from '../' // filename: /foo/src/rules/existing-file-imports.test.ts
20
+ ```
21
+
22
+ ### Pass
23
+
24
+ ```ts
25
+ import foo from 'foo' // filename: /foo/src/rules/existing-file-imports.test.ts
26
+ import foo from './existing-file-imports.test.ts' // filename: /foo/src/rules/existing-file-imports.test.ts
27
+ ```
28
+ <!-- prettier-ignore-end -->
@@ -8,23 +8,23 @@ Disallow importing from a directory.
8
8
  ### Fail
9
9
 
10
10
  ```ts
11
- import foo from '.' // filename: /foo/src/rules/no-directory-imports.spec.ts
12
- import foo from './' // filename: /foo/src/rules/no-directory-imports.spec.ts
13
- import foo from '..' // filename: /foo/src/rules/no-directory-imports.spec.ts
14
- import foo from '../' // filename: /foo/src/rules/no-directory-imports.spec.ts
15
- import foo from '../rules' // filename: /foo/src/rules/no-directory-imports.spec.ts
16
- import foo from '../rules/' // filename: /foo/src/rules/no-directory-imports.spec.ts
17
- import foo from '../../src' // filename: /foo/src/rules/no-directory-imports.spec.ts
18
- import foo from '/foo' // filename: /foo/src/rules/no-directory-imports.spec.ts
11
+ import foo from '.' // filename: /foo/src/rules/no-directory-imports.test.ts
12
+ import foo from './' // filename: /foo/src/rules/no-directory-imports.test.ts
13
+ import foo from '..' // filename: /foo/src/rules/no-directory-imports.test.ts
14
+ import foo from '../' // filename: /foo/src/rules/no-directory-imports.test.ts
15
+ import foo from '../rules' // filename: /foo/src/rules/no-directory-imports.test.ts
16
+ import foo from '../rules/' // filename: /foo/src/rules/no-directory-imports.test.ts
17
+ import foo from '../../src' // filename: /foo/src/rules/no-directory-imports.test.ts
18
+ import foo from '/foo' // filename: /foo/src/rules/no-directory-imports.test.ts
19
19
  ```
20
20
 
21
21
  ### Pass
22
22
 
23
23
  ```ts
24
- import foo from 'foo' // filename: /foo/src/rules/no-directory-imports.spec.ts
25
- import foo from './foo' // filename: /foo/src/rules/no-directory-imports.spec.ts
26
- import foo from '/foo/index.js' // filename: /foo/src/rules/no-directory-imports.spec.ts
27
- import foo from '/foo/index.ts' // filename: /foo/src/rules/no-directory-imports.spec.ts
28
- import foo from '/foo/package.json' // filename: /foo/src/rules/no-directory-imports.spec.ts
24
+ import foo from 'foo' // filename: /foo/src/rules/no-directory-imports.test.ts
25
+ import foo from './foo' // filename: /foo/src/rules/no-directory-imports.test.ts
26
+ import foo from '/foo/index.js' // filename: /foo/src/rules/no-directory-imports.test.ts
27
+ import foo from '/foo/index.ts' // filename: /foo/src/rules/no-directory-imports.test.ts
28
+ import foo from '/foo/package.json' // filename: /foo/src/rules/no-directory-imports.test.ts
29
29
  ```
30
30
  <!-- prettier-ignore-end -->
@@ -8,29 +8,29 @@ Disallow to import module from a git-ignored path.
8
8
  ### Fail
9
9
 
10
10
  ```ts
11
- import foo from './dist/foo' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
12
- import './dist/foo' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
13
- import('./dist/foo') // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
14
- export * from './dist/foo' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
15
- export {name} from './dist/foo' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
16
- import foo from '../dist/index.js' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
17
- import foo from '../../node_modules/foo/bar.js' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
18
- import foo from '/foo/tmp' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
19
- import foo from '/foo/tmp' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
20
- import foo from '../../test/for-test' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
21
- import foo from '../../../../../for-test' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
11
+ import foo from './dist/foo' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
12
+ import './dist/foo' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
13
+ import('./dist/foo') // filename: /foo/src/rules/no-git-ignored-imports.test.ts
14
+ export * from './dist/foo' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
15
+ export {name} from './dist/foo' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
16
+ import foo from '../dist/index.js' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
17
+ import foo from '../../node_modules/foo/bar.js' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
18
+ import foo from '/foo/tmp' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
19
+ import foo from '/foo/tmp' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
20
+ import foo from '../../test/for-test' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
21
+ import foo from '../../../../../for-test' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
22
22
  ```
23
23
 
24
24
  ### Pass
25
25
 
26
26
  ```ts
27
- import foo from 'foo' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
28
- import 'foo' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
29
- require('foo') // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
30
- import('foo') // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
31
- export * from 'foo' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
32
- export {name} from 'foo' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
33
- import foo from '.foo' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
34
- import foo from '../../../../for-test' // filename: /foo/src/rules/no-git-ignored-imports.spec.ts
27
+ import foo from 'foo' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
28
+ import 'foo' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
29
+ require('foo') // filename: /foo/src/rules/no-git-ignored-imports.test.ts
30
+ import('foo') // filename: /foo/src/rules/no-git-ignored-imports.test.ts
31
+ export * from 'foo' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
32
+ export {name} from 'foo' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
33
+ import foo from '.foo' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
34
+ import foo from '../../../../for-test' // filename: /foo/src/rules/no-git-ignored-imports.test.ts
35
35
  ```
36
36
  <!-- prettier-ignore-end -->
@@ -15,6 +15,9 @@ import {} from './foo'
15
15
  import './reflect-metadata'
16
16
  import './foo.module.css'
17
17
  import 'foo.module.css'
18
+ import 'foo.css'
19
+ import './foo.css'
20
+ import 'module.css'
18
21
  ```
19
22
 
20
23
  ### Pass
@@ -22,9 +25,6 @@ import 'foo.module.css'
22
25
  ```ts
23
26
  import 'reflect-metadata'
24
27
  import {} from 'reflect-metadata'
25
- import 'foo.css'
26
- import './foo.css'
27
- import 'module.css'
28
28
  import {foo} from 'foo'
29
29
  ```
30
30
  <!-- prettier-ignore-end -->
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-esm",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "ESLint plugin for linting ESM (import/export syntax)",
5
5
  "keywords": [
6
6
  "eslint",
@@ -25,15 +25,17 @@
25
25
  "type": "module",
26
26
  "exports": "./dist/index.js",
27
27
  "devDependencies": {
28
- "@types/eslint": "8.56.11",
29
28
  "@types/estree": "1.0.6",
30
29
  "@types/json-schema": "7.0.15",
31
- "@types/node": "22.10.5",
32
- "tsx": "4.19.2",
30
+ "@types/node": "22.13.10",
31
+ "eslint": "9.22.0",
33
32
  "@fenge/dev-utils": "0.0.0"
34
33
  },
34
+ "engines": {
35
+ "node": ">=18.0.0"
36
+ },
35
37
  "scripts": {
36
38
  "build": "tsc",
37
- "test": "node --test --import tsx/esm \"**/*.spec.ts\""
39
+ "test": "node --test --experimental-strip-types"
38
40
  }
39
41
  }
package/src/index.ts CHANGED
@@ -1,9 +1,9 @@
1
+ import { existingFileImports } from "./rules/existing-file-imports.ts";
1
2
  import { noDeclarationFileImports } from "./rules/no-declaration-file-imports.ts";
2
3
  import { noDirectoryImports } from "./rules/no-directory-imports.ts";
3
4
  import { noDynamicImports } from "./rules/no-dynamic-imports.ts";
4
5
  import { noEmptyExports } from "./rules/no-empty-exports.ts";
5
6
  import { noGitIgnoredImports } from "./rules/no-git-ignored-imports.ts";
6
- import { noInexistentRelativeImports } from "./rules/no-inexistent-relative-imports.ts";
7
7
  import { noPhantomDepImports } from "./rules/no-phantom-dep-imports.ts";
8
8
  import { noRelativeParentImports } from "./rules/no-relative-parent-imports.ts";
9
9
  import { noRenameExports } from "./rules/no-rename-exports.ts";
@@ -13,12 +13,12 @@ import { noUselessPathSegments } from "./rules/no-useless-path-segments.ts";
13
13
  import { requiredExports } from "./rules/required-exports.ts";
14
14
 
15
15
  export const rules = {
16
+ [existingFileImports.name]: existingFileImports.rule,
16
17
  [noDeclarationFileImports.name]: noDeclarationFileImports.rule,
17
18
  [noDirectoryImports.name]: noDirectoryImports.rule,
18
19
  [noDynamicImports.name]: noDynamicImports.rule,
19
20
  [noEmptyExports.name]: noEmptyExports.rule,
20
21
  [noGitIgnoredImports.name]: noGitIgnoredImports.rule,
21
- [noInexistentRelativeImports.name]: noInexistentRelativeImports.rule,
22
22
  [noPhantomDepImports.name]: noPhantomDepImports.rule,
23
23
  [noRelativeParentImports.name]: noRelativeParentImports.rule,
24
24
  [noRenameExports.name]: noRenameExports.rule,
@@ -1,6 +1,6 @@
1
1
  import { fileURLToPath } from "node:url";
2
2
  import { test } from "@fenge/dev-utils";
3
- import { noInexistentRelativeImports } from "./no-inexistent-relative-imports.ts";
3
+ import { existingFileImports } from "./existing-file-imports.ts";
4
4
 
5
5
  const filename = fileURLToPath(import.meta.url);
6
6
 
@@ -8,20 +8,21 @@ const valid = [
8
8
  "import foo from 'foo'",
9
9
 
10
10
  // with ext
11
- "import foo from './no-inexistent-relative-imports.spec.ts'",
12
- "import foo from '../rules'",
13
- "import foo from '.'",
14
- "import foo from './'",
15
- "import foo from '..'",
16
- "import foo from '../'",
11
+ "import foo from './existing-file-imports.test.ts'",
17
12
  ].map((code) => ({ code, filename }));
18
13
 
19
14
  const invalid = [
20
- "import foo from './no-inexistent-relative-imports.spec.js'",
15
+ "import foo from './existing-file-imports.test.js'",
21
16
  // without ext
22
- "import foo from './no-inexistent-relative-imports.spec'",
17
+ "import foo from './existing-file-imports.test'",
23
18
  "import foo from './inexistent-file'",
24
19
  "import foo from '../inexistent-file'",
20
+ // directory
21
+ "import foo from '../rules'",
22
+ "import foo from '.'",
23
+ "import foo from './'",
24
+ "import foo from '..'",
25
+ "import foo from '../'",
25
26
  ].map((code) => ({ code, filename }));
26
27
 
27
- test({ valid, invalid, ...noInexistentRelativeImports });
28
+ test({ valid, invalid, ...existingFileImports });
@@ -3,24 +3,22 @@ import path from "node:path";
3
3
  import { create, createRule, getRuleName, getSourceType } from "../common.ts";
4
4
  import { memoize } from "../utils.ts";
5
5
 
6
- export const noInexistentRelativeImports = createRule({
6
+ export const existingFileImports = createRule({
7
7
  name: getRuleName(import.meta.url),
8
- message: "Disallow importing from a relative file which is inexistent.",
8
+ message: "Only allow importing from an existing local file.",
9
9
  create: (context) => create(context, check),
10
10
  });
11
11
 
12
12
  function check(filename: string, source: string) {
13
- if (getSourceType(source) !== "local") {
14
- return false;
15
- }
16
- return !isExisting(path.resolve(path.dirname(filename), source));
13
+ return getSourceType(source) === "local"
14
+ ? !isExisting(path.resolve(path.dirname(filename), source))
15
+ : false;
17
16
  }
18
17
 
19
- // TODO: Directory should be reported. Remove `|| stat.isDirectory()` later.
20
18
  const isExisting = memoize((filepath: string): boolean => {
21
19
  try {
22
20
  const stat = fs.statSync(filepath);
23
- return stat.isFile() || stat.isDirectory();
21
+ return stat.isFile();
24
22
  } catch {
25
23
  return false;
26
24
  }
@@ -34,7 +34,12 @@ const isIgnored = memoize((filePath: string) => {
34
34
  try {
35
35
  return (
36
36
  childProcess
37
- .execSync(`git check-ignore ${filePath}`, { encoding: "utf8" })
37
+ // Adding `stdio: 'pipe'` to depress unexpected error messages in console.
38
+ // For example, `git check-ignore /absolute/path/to/file` (even wrapped with try-catch) will print something unnecessary.
39
+ .execSync(`git check-ignore ${filePath}`, {
40
+ encoding: "utf8",
41
+ stdio: "pipe",
42
+ })
38
43
  .trim() === filePath
39
44
  );
40
45
  } catch (e) {
@@ -57,9 +57,15 @@ export const noPhantomDepImports = createRule({
57
57
  ],
58
58
  create: (context) =>
59
59
  create(context, (filename, source, node) => {
60
- const {
61
- allowDevDependencies = false,
62
- }: { allowDevDependencies: boolean } = context.options[0] ?? {};
60
+ const option = context.options[0];
61
+ // default false
62
+ const allowDevDependencies: boolean =
63
+ (typeof option === "object" &&
64
+ option &&
65
+ "allowDevDependencies" in option &&
66
+ typeof option.allowDevDependencies === "boolean" &&
67
+ option.allowDevDependencies) ??
68
+ false;
63
69
 
64
70
  // ignore `import {foo} from './'`
65
71
  // check `import {foo} from 'node:foo'` and `import {foo} from 'foo'`
@@ -4,9 +4,6 @@ import { noSideEffectImports } from "./no-side-effect-imports.ts";
4
4
  const valid = [
5
5
  "import 'reflect-metadata'",
6
6
  "import {} from 'reflect-metadata'",
7
- "import 'foo.css'",
8
- "import './foo.css'",
9
- "import 'module.css'",
10
7
  "import {foo} from 'foo'",
11
8
  ];
12
9
 
@@ -18,6 +15,10 @@ const invalid = [
18
15
  "import './reflect-metadata'",
19
16
  "import './foo.module.css'",
20
17
  "import 'foo.module.css'",
18
+
19
+ "import 'foo.css'",
20
+ "import './foo.css'",
21
+ "import 'module.css'",
21
22
  ];
22
23
 
23
24
  test({ valid, invalid, ...noSideEffectImports });
@@ -4,14 +4,14 @@ import { createRule, DEFAULT_MESSAGE_ID, getRuleName } from "../common.ts";
4
4
  const ignores = [
5
5
  "^reflect-metadata$",
6
6
  // https://github.com/vitejs/vite/blob/main/packages/vite/client.d.ts
7
- "(?<!\\.module)\\.css$",
8
- "(?<!\\.module)\\.scss$",
9
- "(?<!\\.module)\\.sass$",
10
- "(?<!\\.module)\\.less$",
11
- "(?<!\\.module)\\.styl$",
12
- "(?<!\\.module)\\.stylus$",
13
- "(?<!\\.module)\\.pcss$",
14
- "(?<!\\.module)\\.sss$",
7
+ // "(?<!\\.module)\\.css$",
8
+ // "(?<!\\.module)\\.scss$",
9
+ // "(?<!\\.module)\\.sass$",
10
+ // "(?<!\\.module)\\.less$",
11
+ // "(?<!\\.module)\\.styl$",
12
+ // "(?<!\\.module)\\.stylus$",
13
+ // "(?<!\\.module)\\.pcss$",
14
+ // "(?<!\\.module)\\.sss$",
15
15
  ];
16
16
 
17
17
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import
package/tsconfig.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "extends": "../../tsconfig",
3
3
  "include": ["src"],
4
- "exclude": ["**/*.spec.ts", "**/*.test.ts"]
4
+ "exclude": ["**/*.test.ts"]
5
5
  }
@@ -1,5 +0,0 @@
1
- export declare const noInexistentRelativeImports: {
2
- name: string;
3
- rule: import("eslint").Rule.RuleModule;
4
- };
5
- //# sourceMappingURL=no-inexistent-relative-imports.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-inexistent-relative-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-inexistent-relative-imports.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,2BAA2B;;;CAItC,CAAC"}
@@ -1,26 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { create, createRule, getRuleName, getSourceType } from "../common.js";
4
- import { memoize } from "../utils.js";
5
- export const noInexistentRelativeImports = createRule({
6
- name: getRuleName(import.meta.url),
7
- message: "Disallow importing from a relative file which is inexistent.",
8
- create: (context) => create(context, check),
9
- });
10
- function check(filename, source) {
11
- if (getSourceType(source) !== "local") {
12
- return false;
13
- }
14
- return !isExisting(path.resolve(path.dirname(filename), source));
15
- }
16
- // TODO: Directory should be reported. Remove `|| stat.isDirectory()` later.
17
- const isExisting = memoize((filepath) => {
18
- try {
19
- const stat = fs.statSync(filepath);
20
- return stat.isFile() || stat.isDirectory();
21
- }
22
- catch {
23
- return false;
24
- }
25
- });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8taW5leGlzdGVudC1yZWxhdGl2ZS1pbXBvcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL25vLWluZXhpc3RlbnQtcmVsYXRpdmUtaW1wb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxVQUFVLENBQUM7SUFDcEQsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxPQUFPLEVBQUUsOERBQThEO0lBQ3ZFLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7Q0FDNUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxLQUFLLENBQUMsUUFBZ0IsRUFBRSxNQUFjO0lBQzdDLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVELDRFQUE0RTtBQUM1RSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxRQUFnQixFQUFXLEVBQUU7SUFDdkQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBjcmVhdGUsIGNyZWF0ZVJ1bGUsIGdldFJ1bGVOYW1lLCBnZXRTb3VyY2VUeXBlIH0gZnJvbSBcIi4uL2NvbW1vbi50c1wiO1xuaW1wb3J0IHsgbWVtb2l6ZSB9IGZyb20gXCIuLi91dGlscy50c1wiO1xuXG5leHBvcnQgY29uc3Qgbm9JbmV4aXN0ZW50UmVsYXRpdmVJbXBvcnRzID0gY3JlYXRlUnVsZSh7XG4gIG5hbWU6IGdldFJ1bGVOYW1lKGltcG9ydC5tZXRhLnVybCksXG4gIG1lc3NhZ2U6IFwiRGlzYWxsb3cgaW1wb3J0aW5nIGZyb20gYSByZWxhdGl2ZSBmaWxlIHdoaWNoIGlzIGluZXhpc3RlbnQuXCIsXG4gIGNyZWF0ZTogKGNvbnRleHQpID0+IGNyZWF0ZShjb250ZXh0LCBjaGVjayksXG59KTtcblxuZnVuY3Rpb24gY2hlY2soZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgaWYgKGdldFNvdXJjZVR5cGUoc291cmNlKSAhPT0gXCJsb2NhbFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAhaXNFeGlzdGluZyhwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGZpbGVuYW1lKSwgc291cmNlKSk7XG59XG5cbi8vIFRPRE86IERpcmVjdG9yeSBzaG91bGQgYmUgcmVwb3J0ZWQuIFJlbW92ZSBgfHwgc3RhdC5pc0RpcmVjdG9yeSgpYCBsYXRlci5cbmNvbnN0IGlzRXhpc3RpbmcgPSBtZW1vaXplKChmaWxlcGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZpbGVwYXRoKTtcbiAgICByZXR1cm4gc3RhdC5pc0ZpbGUoKSB8fCBzdGF0LmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSk7XG4iXX0=
@@ -1,28 +0,0 @@
1
- <!-- prettier-ignore-start -->
2
- # no-inexistent-relative-imports
3
-
4
- Disallow importing from a relative file which is inexistent.
5
-
6
- ## Rule Details
7
-
8
- ### Fail
9
-
10
- ```ts
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
13
- import foo from './inexistent-file' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
14
- import foo from '../inexistent-file' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
15
- ```
16
-
17
- ### Pass
18
-
19
- ```ts
20
- import foo from 'foo' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
21
- import foo from './no-inexistent-relative-imports.spec.ts' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
22
- import foo from '../rules' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
23
- import foo from '.' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
24
- import foo from './' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
25
- import foo from '..' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
26
- import foo from '../' // filename: /foo/src/rules/no-inexistent-relative-imports.spec.ts
27
- ```
28
- <!-- prettier-ignore-end -->