eslint-plugin-esm 0.6.1 → 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.
- package/CHANGELOG.md +6 -0
- package/dist/index.d.ts +26 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/rules/existing-file-imports.d.ts +5 -0
- package/dist/rules/existing-file-imports.d.ts.map +1 -0
- package/dist/rules/existing-file-imports.js +24 -0
- package/doc/rules/existing-file-imports.md +28 -0
- package/doc/rules/no-directory-imports.md +13 -13
- package/doc/rules/no-git-ignored-imports.md +19 -19
- package/package.json +7 -4
- package/src/index.ts +2 -2
- package/src/rules/{no-inexistent-relative-imports.spec.ts → existing-file-imports.test.ts} +11 -10
- package/src/rules/{no-inexistent-relative-imports.ts → existing-file-imports.ts} +6 -8
- package/tsconfig.json +1 -1
- package/dist/rules/no-inexistent-relative-imports.d.ts +0 -5
- package/dist/rules/no-inexistent-relative-imports.d.ts.map +0 -1
- package/dist/rules/no-inexistent-relative-imports.js +0 -26
- package/doc/rules/no-inexistent-relative-imports.md +0 -28
- /package/src/rules/{no-declaration-file-imports.spec.ts → no-declaration-file-imports.test.ts} +0 -0
- /package/src/rules/{no-directory-imports.spec.ts → no-directory-imports.test.ts} +0 -0
- /package/src/rules/{no-dynamic-imports.spec.ts → no-dynamic-imports.test.ts} +0 -0
- /package/src/rules/{no-empty-exports.spec.ts → no-empty-exports.test.ts} +0 -0
- /package/src/rules/{no-git-ignored-imports.spec.ts → no-git-ignored-imports.test.ts} +0 -0
- /package/src/rules/{no-phantom-dep-imports.spec.ts → no-phantom-dep-imports.test.ts} +0 -0
- /package/src/rules/{no-relative-parent-imports.spec.ts → no-relative-parent-imports.test.ts} +0 -0
- /package/src/rules/{no-rename-exports.spec.ts → no-rename-exports.test.ts} +0 -0
- /package/src/rules/{no-rename-imports.spec.ts → no-rename-imports.test.ts} +0 -0
- /package/src/rules/{no-side-effect-imports.spec.ts → no-side-effect-imports.test.ts} +0 -0
- /package/src/rules/{no-useless-path-segments.spec.ts → no-useless-path-segments.test.ts} +0 -0
- /package/src/rules/{required-exports.spec.ts → required-exports.test.ts} +0 -0
package/CHANGELOG.md
CHANGED
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
|
-
[
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
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,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRztJQUNuQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQixDQUFDLElBQUk7SUFDcEQsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSx3QkFBd0IsQ0FBQyxJQUFJO0lBQzlELENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsSUFBSTtJQUNsRCxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQixDQUFDLElBQUk7SUFDOUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsY0FBYyxDQUFDLElBQUk7SUFDMUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtJQUNwRCxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLHVCQUF1QixDQUFDLElBQUk7SUFDNUQsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDNUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDNUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsSUFBSTtJQUN4RCxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlLENBQUMsSUFBSTtDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RpbmdGaWxlSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL2V4aXN0aW5nLWZpbGUtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9EZWNsYXJhdGlvbkZpbGVJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZGVjbGFyYXRpb24tZmlsZS1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub0RpcmVjdG9yeUltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1kaXJlY3RvcnktaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9EeW5hbWljSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLWR5bmFtaWMtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9FbXB0eUV4cG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1lbXB0eS1leHBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub0dpdElnbm9yZWRJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZ2l0LWlnbm9yZWQtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9QaGFudG9tRGVwSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXBoYW50b20tZGVwLWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vUmVsYXRpdmVQYXJlbnRJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tcmVsYXRpdmUtcGFyZW50LWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vUmVuYW1lRXhwb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXJlbmFtZS1leHBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub1JlbmFtZUltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1yZW5hbWUtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9TaWRlRWZmZWN0SW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXNpZGUtZWZmZWN0LWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vVXNlbGVzc1BhdGhTZWdtZW50cyB9IGZyb20gXCIuL3J1bGVzL25vLXVzZWxlc3MtcGF0aC1zZWdtZW50cy50c1wiO1xuaW1wb3J0IHsgcmVxdWlyZWRFeHBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvcmVxdWlyZWQtZXhwb3J0cy50c1wiO1xuXG5leHBvcnQgY29uc3QgcnVsZXMgPSB7XG4gIFtleGlzdGluZ0ZpbGVJbXBvcnRzLm5hbWVdOiBleGlzdGluZ0ZpbGVJbXBvcnRzLnJ1bGUsXG4gIFtub0RlY2xhcmF0aW9uRmlsZUltcG9ydHMubmFtZV06IG5vRGVjbGFyYXRpb25GaWxlSW1wb3J0cy5ydWxlLFxuICBbbm9EaXJlY3RvcnlJbXBvcnRzLm5hbWVdOiBub0RpcmVjdG9yeUltcG9ydHMucnVsZSxcbiAgW25vRHluYW1pY0ltcG9ydHMubmFtZV06IG5vRHluYW1pY0ltcG9ydHMucnVsZSxcbiAgW25vRW1wdHlFeHBvcnRzLm5hbWVdOiBub0VtcHR5RXhwb3J0cy5ydWxlLFxuICBbbm9HaXRJZ25vcmVkSW1wb3J0cy5uYW1lXTogbm9HaXRJZ25vcmVkSW1wb3J0cy5ydWxlLFxuICBbbm9QaGFudG9tRGVwSW1wb3J0cy5uYW1lXTogbm9QaGFudG9tRGVwSW1wb3J0cy5ydWxlLFxuICBbbm9SZWxhdGl2ZVBhcmVudEltcG9ydHMubmFtZV06IG5vUmVsYXRpdmVQYXJlbnRJbXBvcnRzLnJ1bGUsXG4gIFtub1JlbmFtZUV4cG9ydHMubmFtZV06IG5vUmVuYW1lRXhwb3J0cy5ydWxlLFxuICBbbm9SZW5hbWVJbXBvcnRzLm5hbWVdOiBub1JlbmFtZUltcG9ydHMucnVsZSxcbiAgW25vU2lkZUVmZmVjdEltcG9ydHMubmFtZV06IG5vU2lkZUVmZmVjdEltcG9ydHMucnVsZSxcbiAgW25vVXNlbGVzc1BhdGhTZWdtZW50cy5uYW1lXTogbm9Vc2VsZXNzUGF0aFNlZ21lbnRzLnJ1bGUsXG4gIFtyZXF1aXJlZEV4cG9ydHMubmFtZV06IHJlcXVpcmVkRXhwb3J0cy5ydWxlLFxufTtcbiJdfQ==
|
|
@@ -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=
|
|
@@ -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.
|
|
12
|
-
import foo from './' // filename: /foo/src/rules/no-directory-imports.
|
|
13
|
-
import foo from '..' // filename: /foo/src/rules/no-directory-imports.
|
|
14
|
-
import foo from '../' // filename: /foo/src/rules/no-directory-imports.
|
|
15
|
-
import foo from '../rules' // filename: /foo/src/rules/no-directory-imports.
|
|
16
|
-
import foo from '../rules/' // filename: /foo/src/rules/no-directory-imports.
|
|
17
|
-
import foo from '../../src' // filename: /foo/src/rules/no-directory-imports.
|
|
18
|
-
import foo from '/foo' // filename: /foo/src/rules/no-directory-imports.
|
|
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.
|
|
25
|
-
import foo from './foo' // filename: /foo/src/rules/no-directory-imports.
|
|
26
|
-
import foo from '/foo/index.js' // filename: /foo/src/rules/no-directory-imports.
|
|
27
|
-
import foo from '/foo/index.ts' // filename: /foo/src/rules/no-directory-imports.
|
|
28
|
-
import foo from '/foo/package.json' // filename: /foo/src/rules/no-directory-imports.
|
|
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.
|
|
12
|
-
import './dist/foo' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
13
|
-
import('./dist/foo') // filename: /foo/src/rules/no-git-ignored-imports.
|
|
14
|
-
export * from './dist/foo' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
15
|
-
export {name} from './dist/foo' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
16
|
-
import foo from '../dist/index.js' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
17
|
-
import foo from '../../node_modules/foo/bar.js' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
18
|
-
import foo from '/foo/tmp' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
19
|
-
import foo from '/foo/tmp' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
20
|
-
import foo from '../../test/for-test' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
21
|
-
import foo from '../../../../../for-test' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
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.
|
|
28
|
-
import 'foo' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
29
|
-
require('foo') // filename: /foo/src/rules/no-git-ignored-imports.
|
|
30
|
-
import('foo') // filename: /foo/src/rules/no-git-ignored-imports.
|
|
31
|
-
export * from 'foo' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
32
|
-
export {name} from 'foo' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
33
|
-
import foo from '.foo' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
34
|
-
import foo from '../../../../for-test' // filename: /foo/src/rules/no-git-ignored-imports.
|
|
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 -->
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-esm",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "ESLint plugin for linting ESM (import/export syntax)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint",
|
|
@@ -27,12 +27,15 @@
|
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/estree": "1.0.6",
|
|
29
29
|
"@types/json-schema": "7.0.15",
|
|
30
|
-
"@types/node": "22.13.
|
|
31
|
-
"eslint": "9.
|
|
30
|
+
"@types/node": "22.13.10",
|
|
31
|
+
"eslint": "9.22.0",
|
|
32
32
|
"@fenge/dev-utils": "0.0.0"
|
|
33
33
|
},
|
|
34
|
+
"engines": {
|
|
35
|
+
"node": ">=18.0.0"
|
|
36
|
+
},
|
|
34
37
|
"scripts": {
|
|
35
38
|
"build": "tsc",
|
|
36
|
-
"test": "node --test --experimental-strip-types
|
|
39
|
+
"test": "node --test --experimental-strip-types"
|
|
37
40
|
}
|
|
38
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 {
|
|
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 './
|
|
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 './
|
|
15
|
+
"import foo from './existing-file-imports.test.js'",
|
|
21
16
|
// without ext
|
|
22
|
-
"import foo from './
|
|
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, ...
|
|
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
|
|
6
|
+
export const existingFileImports = createRule({
|
|
7
7
|
name: getRuleName(import.meta.url),
|
|
8
|
-
message: "
|
|
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
|
-
|
|
14
|
-
|
|
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()
|
|
21
|
+
return stat.isFile();
|
|
24
22
|
} catch {
|
|
25
23
|
return false;
|
|
26
24
|
}
|
package/tsconfig.json
CHANGED
|
@@ -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 -->
|
/package/src/rules/{no-declaration-file-imports.spec.ts → no-declaration-file-imports.test.ts}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/src/rules/{no-relative-parent-imports.spec.ts → no-relative-parent-imports.test.ts}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|