eslint-plugin-esm 0.8.2 → 0.8.4
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/dist/common.d.ts +2 -2
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/rules/no-circular-imports.d.ts +8 -0
- package/dist/rules/no-circular-imports.d.ts.map +1 -0
- package/dist/rules/no-circular-imports.js +56 -0
- package/dist/rules/no-external-src-imports.d.ts +5 -0
- package/dist/rules/no-external-src-imports.d.ts.map +1 -0
- package/dist/rules/no-external-src-imports.js +26 -0
- package/package.json +2 -3
package/dist/common.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Rule } from "eslint";
|
|
2
|
-
import type { JSONSchema4 } from "json-schema";
|
|
3
2
|
import type { GetNode } from "./utils.ts";
|
|
3
|
+
type ExtractArray<T> = T extends Array<infer U> ? U[] : never;
|
|
4
4
|
type ExportAllDeclaration = GetNode<"ExportAllDeclaration">;
|
|
5
5
|
type ExportNamedDeclaration = GetNode<"ExportNamedDeclaration">;
|
|
6
6
|
type ImportDeclaration = GetNode<"ImportDeclaration">;
|
|
@@ -9,7 +9,7 @@ export declare const DEFAULT_MESSAGE_ID = "default";
|
|
|
9
9
|
export declare function createRule({ name, message, schema, fixable, type, create: createFn, }: {
|
|
10
10
|
name: string;
|
|
11
11
|
message: string;
|
|
12
|
-
schema?:
|
|
12
|
+
schema?: ExtractArray<Rule.RuleMetaData["schema"]>;
|
|
13
13
|
fixable?: Rule.RuleMetaData["fixable"];
|
|
14
14
|
type?: Rule.RuleMetaData["type"];
|
|
15
15
|
create: (context: Rule.RuleContext) => Rule.RuleListener;
|
package/dist/common.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC;AAE9D,KAAK,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAC5D,KAAK,sBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAChE,KAAK,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACtD,KAAK,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEpD,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,MAAM,EACN,OAAO,EACP,IAAmB,EACnB,MAAM,EAAE,QAAQ,GACjB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,YAAY,CAAC;CAC1D,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAA;CAAE,CAiB1C;AAED,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,UAGhD;AAED,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,gBAAgB,GAChB,oBAAoB,GACpB,sBAAsB,CAAC;AAE3B;;;;;GAKG;AACH,wBAAgB,MAAM,CACpB,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,KAAK,OAAO,GAC1E,IAAI,CAAC,YAAY,CAcnB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,kCAc3C"}
|
package/dist/common.js
CHANGED
|
@@ -60,4 +60,4 @@ export function getSourceType(source) {
|
|
|
60
60
|
}
|
|
61
61
|
return "module";
|
|
62
62
|
}
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVd6QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFFNUMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUN6QixJQUFJLEVBQ0osT0FBTyxFQUNQLE1BQU0sRUFDTixPQUFPLEVBQ1AsSUFBSSxHQUFHLFlBQVksRUFDbkIsTUFBTSxFQUFFLFFBQVEsR0FRakI7SUFDQyxNQUFNLElBQUksR0FBb0I7UUFDNUIsSUFBSSxFQUFFO1lBQ0osR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMzQixRQUFRLEVBQUU7Z0JBQ1IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU87YUFDOUI7WUFDRCxJQUFJO1lBQ0osSUFBSSxFQUFFO2dCQUNKLEdBQUcsRUFBRSxzRkFBc0YsSUFBSSxLQUFLO2dCQUNwRyxXQUFXLEVBQUUsT0FBTzthQUNyQjtTQUNGO1FBQ0QsTUFBTSxFQUFFLFFBQVE7S0FDakIsQ0FBQztJQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsYUFBcUI7SUFDL0MseUJBQXlCO0lBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQsQ0FBQztBQVFEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDcEIsT0FBeUIsRUFDekIsS0FBMkU7SUFFM0UsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFxQixFQUFFLEVBQUU7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU87UUFDdEMsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQztJQUNGLE9BQU87UUFDTCxpQkFBaUIsRUFBRSxNQUFNO1FBQ3pCLGdCQUFnQixFQUFFLE1BQU07UUFDeEIsb0JBQW9CLEVBQUUsTUFBTTtRQUM1QixzQkFBc0IsRUFBRSxNQUFNO0tBQy9CLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFjO0lBQzFDLElBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDdEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdkIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUc7UUFDZCxNQUFNLEtBQUssSUFBSSxFQUNmLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgdHlwZSB7IEdldE5vZGUgfSBmcm9tIFwiLi91dGlscy50c1wiO1xuXG50eXBlIEV4dHJhY3RBcnJheTxUPiA9IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/IFVbXSA6IG5ldmVyO1xuXG50eXBlIEV4cG9ydEFsbERlY2xhcmF0aW9uID0gR2V0Tm9kZTxcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCI+O1xudHlwZSBFeHBvcnROYW1lZERlY2xhcmF0aW9uID0gR2V0Tm9kZTxcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIj47XG50eXBlIEltcG9ydERlY2xhcmF0aW9uID0gR2V0Tm9kZTxcIkltcG9ydERlY2xhcmF0aW9uXCI+O1xudHlwZSBJbXBvcnRFeHByZXNzaW9uID0gR2V0Tm9kZTxcIkltcG9ydEV4cHJlc3Npb25cIj47XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01FU1NBR0VfSUQgPSBcImRlZmF1bHRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJ1bGUoe1xuICBuYW1lLFxuICBtZXNzYWdlLFxuICBzY2hlbWEsXG4gIGZpeGFibGUsXG4gIHR5cGUgPSBcInN1Z2dlc3Rpb25cIixcbiAgY3JlYXRlOiBjcmVhdGVGbixcbn06IHtcbiAgbmFtZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNjaGVtYT86IEV4dHJhY3RBcnJheTxSdWxlLlJ1bGVNZXRhRGF0YVtcInNjaGVtYVwiXT47IC8vIEkgd291bGQgbGlrZSB0byB1c2UgYEpTT05TY2hlbWE0W11gIG9ubHkuXG4gIGZpeGFibGU/OiBSdWxlLlJ1bGVNZXRhRGF0YVtcImZpeGFibGVcIl07XG4gIHR5cGU/OiBSdWxlLlJ1bGVNZXRhRGF0YVtcInR5cGVcIl07XG4gIGNyZWF0ZTogKGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpID0+IFJ1bGUuUnVsZUxpc3RlbmVyO1xufSk6IHsgbmFtZTogc3RyaW5nOyBydWxlOiBSdWxlLlJ1bGVNb2R1bGUgfSB7XG4gIGNvbnN0IHJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgICBtZXRhOiB7XG4gICAgICAuLi4oc2NoZW1hICYmIHsgc2NoZW1hIH0pLFxuICAgICAgLi4uKGZpeGFibGUgJiYgeyBmaXhhYmxlIH0pLFxuICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgW0RFRkFVTFRfTUVTU0FHRV9JRF06IG1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgdHlwZSxcbiAgICAgIGRvY3M6IHtcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly9naXRodWIuY29tL3phbm1pbmtpYW4vZmVuZ2UvYmxvYi9tYWluL3BhY2thZ2VzL2VzbGludC1wbHVnaW4tZXNtL2RvYy9ydWxlcy8ke25hbWV9Lm1kYCxcbiAgICAgICAgZGVzY3JpcHRpb246IG1lc3NhZ2UsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBjcmVhdGVGbixcbiAgfTtcbiAgcmV0dXJuIHsgbmFtZSwgcnVsZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UnVsZU5hbWUoaW1wb3J0TWV0YVVybDogc3RyaW5nKSB7XG4gIC8vIHJlbW92ZSAnLmpzJyBleHRlbnNpb25cbiAgcmV0dXJuIHBhdGgucGFyc2UoZmlsZVVSTFRvUGF0aChpbXBvcnRNZXRhVXJsKSkubmFtZTtcbn1cblxuZXhwb3J0IHR5cGUgSW1wb3J0YXRpb25Ob2RlID1cbiAgfCBJbXBvcnREZWNsYXJhdGlvblxuICB8IEltcG9ydEV4cHJlc3Npb25cbiAgfCBFeHBvcnRBbGxEZWNsYXJhdGlvblxuICB8IEV4cG9ydE5hbWVkRGVjbGFyYXRpb247XG5cbi8qKlxuICogQ3JlYXRlIEVTTGludCBSdWxlTGlzdGVuZXIgdG8gY2hlY2sgc3RyaW5nIGltcG9ydGF0aW9uIHNvdXJjZS5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBSdWxlQ29udGV4dFxuICogQHBhcmFtIGNoZWNrIHRoZSBjaGVjayBsb2dpY1xuICogQHJldHVybnMgRVNMaW50IFJ1bGVMaXN0ZW5lclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBjaGVjazogKGZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nLCBub2RlOiBJbXBvcnRhdGlvbk5vZGUpID0+IGJvb2xlYW4sXG4pOiBSdWxlLlJ1bGVMaXN0ZW5lciB7XG4gIGNvbnN0IGhhbmRsZSA9IChub2RlOiBJbXBvcnRhdGlvbk5vZGUpID0+IHtcbiAgICBpZiAoIW5vZGUuc291cmNlKSByZXR1cm47XG4gICAgaWYgKCEoXCJ2YWx1ZVwiIGluIG5vZGUuc291cmNlKSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2Ygbm9kZS5zb3VyY2UudmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybjtcbiAgICBpZiAoY2hlY2soY29udGV4dC5maWxlbmFtZSwgbm9kZS5zb3VyY2UudmFsdWUsIG5vZGUpKVxuICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlOiBub2RlLnNvdXJjZSwgbWVzc2FnZUlkOiBERUZBVUxUX01FU1NBR0VfSUQgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgSW1wb3J0RGVjbGFyYXRpb246IGhhbmRsZSxcbiAgICBJbXBvcnRFeHByZXNzaW9uOiBoYW5kbGUsXG4gICAgRXhwb3J0QWxsRGVjbGFyYXRpb246IGhhbmRsZSxcbiAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBoYW5kbGUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VUeXBlKHNvdXJjZTogc3RyaW5nKSB7XG4gIGlmIChcbiAgICBzb3VyY2Uuc3RhcnRzV2l0aChcIi9cIikgfHxcbiAgICBzb3VyY2Uuc3RhcnRzV2l0aChcIi4vXCIpIHx8XG4gICAgc291cmNlLnN0YXJ0c1dpdGgoXCIuLi9cIikgfHxcbiAgICBzb3VyY2UgPT09IFwiLlwiIHx8XG4gICAgc291cmNlID09PSBcIi4uXCJcbiAgKSB7XG4gICAgcmV0dXJuIFwibG9jYWxcIjtcbiAgfVxuICBpZiAoc291cmNlLnN0YXJ0c1dpdGgoXCJub2RlOlwiKSkge1xuICAgIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgfVxuICByZXR1cm4gXCJtb2R1bGVcIjtcbn1cbiJdfQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { existingFileImports } from "./rules/existing-file-imports.ts";
|
|
2
|
+
import { noCircularImports } from "./rules/no-circular-imports.ts";
|
|
2
3
|
import { noDeclarationFileImports } from "./rules/no-declaration-file-imports.ts";
|
|
3
4
|
import { noDirectoryImports } from "./rules/no-directory-imports.ts";
|
|
4
5
|
import { noDynamicImports } from "./rules/no-dynamic-imports.ts";
|
|
5
6
|
import { noEmptyExports } from "./rules/no-empty-exports.ts";
|
|
7
|
+
import { noExternalSrcImports } from "./rules/no-external-src-imports.ts";
|
|
6
8
|
import { noGitIgnoredImports } from "./rules/no-git-ignored-imports.ts";
|
|
7
9
|
import { noPhantomDepImports } from "./rules/no-phantom-dep-imports.ts";
|
|
8
10
|
import { noQuerySuffixes } from "./rules/no-query-suffixes.ts";
|
|
@@ -15,10 +17,12 @@ import { requiredExports } from "./rules/required-exports.ts";
|
|
|
15
17
|
import { topSideEffectImports } from "./rules/top-side-effect-imports.ts";
|
|
16
18
|
export declare const rules: {
|
|
17
19
|
[existingFileImports.name]: import("eslint").Rule.RuleModule;
|
|
20
|
+
[noCircularImports.name]: import("eslint").Rule.RuleModule;
|
|
18
21
|
[noDeclarationFileImports.name]: import("eslint").Rule.RuleModule;
|
|
19
22
|
[noDirectoryImports.name]: import("eslint").Rule.RuleModule;
|
|
20
23
|
[noDynamicImports.name]: import("eslint").Rule.RuleModule;
|
|
21
24
|
[noEmptyExports.name]: import("eslint").Rule.RuleModule;
|
|
25
|
+
[noExternalSrcImports.name]: import("eslint").Rule.RuleModule;
|
|
22
26
|
[noGitIgnoredImports.name]: import("eslint").Rule.RuleModule;
|
|
23
27
|
[noPhantomDepImports.name]: import("eslint").Rule.RuleModule;
|
|
24
28
|
[noQuerySuffixes.name]: import("eslint").Rule.RuleModule;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,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;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,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,eAAe,CAAC,IAAI,CAAC,mCAAsB;IAC5C,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;IAC5C,CAAC,oBAAoB,CAAC,IAAI,CAAC,mCAA2B;CACvD,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,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,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,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,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;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,eAAO,MAAM,KAAK;IAChB,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,iBAAiB,CAAC,IAAI,CAAC,mCAAwB;IAChD,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,oBAAoB,CAAC,IAAI,CAAC,mCAA2B;IACtD,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,mBAAmB,CAAC,IAAI,CAAC,mCAA0B;IACpD,CAAC,eAAe,CAAC,IAAI,CAAC,mCAAsB;IAC5C,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;IAC5C,CAAC,oBAAoB,CAAC,IAAI,CAAC,mCAA2B;CACvD,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { existingFileImports } from "./rules/existing-file-imports.js";
|
|
2
|
+
import { noCircularImports } from "./rules/no-circular-imports.js";
|
|
2
3
|
import { noDeclarationFileImports } from "./rules/no-declaration-file-imports.js";
|
|
3
4
|
import { noDirectoryImports } from "./rules/no-directory-imports.js";
|
|
4
5
|
import { noDynamicImports } from "./rules/no-dynamic-imports.js";
|
|
5
6
|
import { noEmptyExports } from "./rules/no-empty-exports.js";
|
|
7
|
+
import { noExternalSrcImports } from "./rules/no-external-src-imports.js";
|
|
6
8
|
import { noGitIgnoredImports } from "./rules/no-git-ignored-imports.js";
|
|
7
9
|
import { noPhantomDepImports } from "./rules/no-phantom-dep-imports.js";
|
|
8
10
|
import { noQuerySuffixes } from "./rules/no-query-suffixes.js";
|
|
@@ -15,10 +17,12 @@ import { requiredExports } from "./rules/required-exports.js";
|
|
|
15
17
|
import { topSideEffectImports } from "./rules/top-side-effect-imports.js";
|
|
16
18
|
export const rules = {
|
|
17
19
|
[existingFileImports.name]: existingFileImports.rule,
|
|
20
|
+
[noCircularImports.name]: noCircularImports.rule,
|
|
18
21
|
[noDeclarationFileImports.name]: noDeclarationFileImports.rule,
|
|
19
22
|
[noDirectoryImports.name]: noDirectoryImports.rule,
|
|
20
23
|
[noDynamicImports.name]: noDynamicImports.rule,
|
|
21
24
|
[noEmptyExports.name]: noEmptyExports.rule,
|
|
25
|
+
[noExternalSrcImports.name]: noExternalSrcImports.rule,
|
|
22
26
|
[noGitIgnoredImports.name]: noGitIgnoredImports.rule,
|
|
23
27
|
[noPhantomDepImports.name]: noPhantomDepImports.rule,
|
|
24
28
|
[noQuerySuffixes.name]: noQuerySuffixes.rule,
|
|
@@ -30,4 +34,4 @@ export const rules = {
|
|
|
30
34
|
[requiredExports.name]: requiredExports.rule,
|
|
31
35
|
[topSideEffectImports.name]: topSideEffectImports.rule,
|
|
32
36
|
};
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUUxRSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUc7SUFDbkIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtJQUNoRCxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFLHdCQUF3QixDQUFDLElBQUk7SUFDOUQsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJO0lBQ2xELENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtJQUM5QyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxjQUFjLENBQUMsSUFBSTtJQUMxQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLG9CQUFvQixDQUFDLElBQUk7SUFDdEQsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtJQUNwRCxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlLENBQUMsSUFBSTtJQUM1QyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLHVCQUF1QixDQUFDLElBQUk7SUFDNUQsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDNUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUk7SUFDNUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsSUFBSTtJQUN4RCxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlLENBQUMsSUFBSTtJQUM1QyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLG9CQUFvQixDQUFDLElBQUk7Q0FDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0aW5nRmlsZUltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9leGlzdGluZy1maWxlLWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vQ2lyY3VsYXJJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tY2lyY3VsYXItaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9EZWNsYXJhdGlvbkZpbGVJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZGVjbGFyYXRpb24tZmlsZS1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub0RpcmVjdG9yeUltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1kaXJlY3RvcnktaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9EeW5hbWljSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLWR5bmFtaWMtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9FbXB0eUV4cG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1lbXB0eS1leHBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub0V4dGVybmFsU3JjSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLWV4dGVybmFsLXNyYy1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub0dpdElnbm9yZWRJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZ2l0LWlnbm9yZWQtaW1wb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9QaGFudG9tRGVwSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXBoYW50b20tZGVwLWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vUXVlcnlTdWZmaXhlcyB9IGZyb20gXCIuL3J1bGVzL25vLXF1ZXJ5LXN1ZmZpeGVzLnRzXCI7XG5pbXBvcnQgeyBub1JlbGF0aXZlUGFyZW50SW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXJlbGF0aXZlLXBhcmVudC1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub1JlbmFtZUV4cG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1yZW5hbWUtZXhwb3J0cy50c1wiO1xuaW1wb3J0IHsgbm9SZW5hbWVJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tcmVuYW1lLWltcG9ydHMudHNcIjtcbmltcG9ydCB7IG5vU2lkZUVmZmVjdEltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1zaWRlLWVmZmVjdC1pbXBvcnRzLnRzXCI7XG5pbXBvcnQgeyBub1VzZWxlc3NQYXRoU2VnbWVudHMgfSBmcm9tIFwiLi9ydWxlcy9uby11c2VsZXNzLXBhdGgtc2VnbWVudHMudHNcIjtcbmltcG9ydCB7IHJlcXVpcmVkRXhwb3J0cyB9IGZyb20gXCIuL3J1bGVzL3JlcXVpcmVkLWV4cG9ydHMudHNcIjtcbmltcG9ydCB7IHRvcFNpZGVFZmZlY3RJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvdG9wLXNpZGUtZWZmZWN0LWltcG9ydHMudHNcIjtcblxuZXhwb3J0IGNvbnN0IHJ1bGVzID0ge1xuICBbZXhpc3RpbmdGaWxlSW1wb3J0cy5uYW1lXTogZXhpc3RpbmdGaWxlSW1wb3J0cy5ydWxlLFxuICBbbm9DaXJjdWxhckltcG9ydHMubmFtZV06IG5vQ2lyY3VsYXJJbXBvcnRzLnJ1bGUsXG4gIFtub0RlY2xhcmF0aW9uRmlsZUltcG9ydHMubmFtZV06IG5vRGVjbGFyYXRpb25GaWxlSW1wb3J0cy5ydWxlLFxuICBbbm9EaXJlY3RvcnlJbXBvcnRzLm5hbWVdOiBub0RpcmVjdG9yeUltcG9ydHMucnVsZSxcbiAgW25vRHluYW1pY0ltcG9ydHMubmFtZV06IG5vRHluYW1pY0ltcG9ydHMucnVsZSxcbiAgW25vRW1wdHlFeHBvcnRzLm5hbWVdOiBub0VtcHR5RXhwb3J0cy5ydWxlLFxuICBbbm9FeHRlcm5hbFNyY0ltcG9ydHMubmFtZV06IG5vRXh0ZXJuYWxTcmNJbXBvcnRzLnJ1bGUsXG4gIFtub0dpdElnbm9yZWRJbXBvcnRzLm5hbWVdOiBub0dpdElnbm9yZWRJbXBvcnRzLnJ1bGUsXG4gIFtub1BoYW50b21EZXBJbXBvcnRzLm5hbWVdOiBub1BoYW50b21EZXBJbXBvcnRzLnJ1bGUsXG4gIFtub1F1ZXJ5U3VmZml4ZXMubmFtZV06IG5vUXVlcnlTdWZmaXhlcy5ydWxlLFxuICBbbm9SZWxhdGl2ZVBhcmVudEltcG9ydHMubmFtZV06IG5vUmVsYXRpdmVQYXJlbnRJbXBvcnRzLnJ1bGUsXG4gIFtub1JlbmFtZUV4cG9ydHMubmFtZV06IG5vUmVuYW1lRXhwb3J0cy5ydWxlLFxuICBbbm9SZW5hbWVJbXBvcnRzLm5hbWVdOiBub1JlbmFtZUltcG9ydHMucnVsZSxcbiAgW25vU2lkZUVmZmVjdEltcG9ydHMubmFtZV06IG5vU2lkZUVmZmVjdEltcG9ydHMucnVsZSxcbiAgW25vVXNlbGVzc1BhdGhTZWdtZW50cy5uYW1lXTogbm9Vc2VsZXNzUGF0aFNlZ21lbnRzLnJ1bGUsXG4gIFtyZXF1aXJlZEV4cG9ydHMubmFtZV06IHJlcXVpcmVkRXhwb3J0cy5ydWxlLFxuICBbdG9wU2lkZUVmZmVjdEltcG9ydHMubmFtZV06IHRvcFNpZGVFZmZlY3RJbXBvcnRzLnJ1bGUsXG59O1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-circular-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-circular-imports.ts"],"names":[],"mappings":"AA+BA;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;CAwC5B,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
import { createRule, getRuleName, getSourceType } from "../common.js";
|
|
4
|
+
/**
|
|
5
|
+
* Key is the source file, value is its imports.
|
|
6
|
+
*/
|
|
7
|
+
const store = new Map();
|
|
8
|
+
function isCircular(currentFile, visited = new Set()) {
|
|
9
|
+
if (visited.has(currentFile)) {
|
|
10
|
+
return [true, [...visited]];
|
|
11
|
+
}
|
|
12
|
+
visited.add(currentFile);
|
|
13
|
+
const dependencies = store.get(currentFile) ?? new Set();
|
|
14
|
+
for (const dependency of dependencies) {
|
|
15
|
+
const [isCircularResult, circularPaths] = isCircular(path.resolve(path.dirname(currentFile), dependency), new Set(visited));
|
|
16
|
+
if (isCircularResult) {
|
|
17
|
+
return [isCircularResult, circularPaths];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return [false, []];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Note: This rule do not support importing files without extensions and directory imports.
|
|
24
|
+
*/
|
|
25
|
+
export const noCircularImports = createRule({
|
|
26
|
+
name: getRuleName(import.meta.url),
|
|
27
|
+
message: "Circular imports are not allowed.",
|
|
28
|
+
create: (context) => {
|
|
29
|
+
const filePath = context.filename;
|
|
30
|
+
const imports = store.get(filePath) ?? new Set();
|
|
31
|
+
store.set(filePath, imports);
|
|
32
|
+
return {
|
|
33
|
+
ImportDeclaration: (node) => {
|
|
34
|
+
if (typeof node.source.value !== "string" ||
|
|
35
|
+
getSourceType(node.source.value) !== "local")
|
|
36
|
+
return;
|
|
37
|
+
imports.add(node.source.value);
|
|
38
|
+
},
|
|
39
|
+
"ImportDeclaration:exit": (node) => {
|
|
40
|
+
if (typeof node.source.value !== "string" ||
|
|
41
|
+
getSourceType(node.source.value) !== "local")
|
|
42
|
+
return;
|
|
43
|
+
const [isCircularResult, circularPaths] = isCircular(path.resolve(path.dirname(filePath), node.source.value), new Set([filePath]));
|
|
44
|
+
if (isCircularResult) {
|
|
45
|
+
context.report({
|
|
46
|
+
node,
|
|
47
|
+
message: `Circular import detected: ${circularPaths
|
|
48
|
+
.map((p) => path.relative(process.cwd(), p))
|
|
49
|
+
.join(" -> ")}`,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tY2lyY3VsYXItaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1jaXJjdWxhci1pbXBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRFOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7QUFFN0MsU0FBUyxVQUFVLENBQ2pCLFdBQW1CLEVBQ25CLFVBQVUsSUFBSSxHQUFHLEVBQVU7SUFFM0IsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV6QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFVLENBQUM7SUFDakUsS0FBSyxNQUFNLFVBQVUsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0QyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLEdBQUcsVUFBVSxDQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQ25ELElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUNqQixDQUFDO1FBQ0YsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDO0lBQzFDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEMsT0FBTyxFQUFFLG1DQUFtQztJQUM1QyxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNsQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN6RCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU3QixPQUFPO1lBQ0wsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDMUIsSUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVE7b0JBQ3JDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLE9BQU87b0JBRTVDLE9BQU87Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUM7WUFFRCx3QkFBd0IsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNqQyxJQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUTtvQkFDckMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssT0FBTztvQkFFNUMsT0FBTztnQkFFVCxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLEdBQUcsVUFBVSxDQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFDdkQsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUNwQixDQUFDO2dCQUNGLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztvQkFDckIsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDYixJQUFJO3dCQUNKLE9BQU8sRUFBRSw2QkFBNkIsYUFBYTs2QkFDaEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs2QkFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3FCQUNsQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCBwcm9jZXNzIGZyb20gXCJub2RlOnByb2Nlc3NcIjtcbmltcG9ydCB7IGNyZWF0ZVJ1bGUsIGdldFJ1bGVOYW1lLCBnZXRTb3VyY2VUeXBlIH0gZnJvbSBcIi4uL2NvbW1vbi50c1wiO1xuXG4vKipcbiAqIEtleSBpcyB0aGUgc291cmNlIGZpbGUsIHZhbHVlIGlzIGl0cyBpbXBvcnRzLlxuICovXG5jb25zdCBzdG9yZSA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuZnVuY3Rpb24gaXNDaXJjdWxhcihcbiAgY3VycmVudEZpbGU6IHN0cmluZyxcbiAgdmlzaXRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpLFxuKTogW2Jvb2xlYW4sIHN0cmluZ1tdXSB7XG4gIGlmICh2aXNpdGVkLmhhcyhjdXJyZW50RmlsZSkpIHtcbiAgICByZXR1cm4gW3RydWUsIFsuLi52aXNpdGVkXV07XG4gIH1cbiAgdmlzaXRlZC5hZGQoY3VycmVudEZpbGUpO1xuXG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IHN0b3JlLmdldChjdXJyZW50RmlsZSkgPz8gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBkZXBlbmRlbmNpZXMpIHtcbiAgICBjb25zdCBbaXNDaXJjdWxhclJlc3VsdCwgY2lyY3VsYXJQYXRoc10gPSBpc0NpcmN1bGFyKFxuICAgICAgcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShjdXJyZW50RmlsZSksIGRlcGVuZGVuY3kpLFxuICAgICAgbmV3IFNldCh2aXNpdGVkKSxcbiAgICApO1xuICAgIGlmIChpc0NpcmN1bGFyUmVzdWx0KSB7XG4gICAgICByZXR1cm4gW2lzQ2lyY3VsYXJSZXN1bHQsIGNpcmN1bGFyUGF0aHNdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW2ZhbHNlLCBbXV07XG59XG5cbi8qKlxuICogTm90ZTogVGhpcyBydWxlIGRvIG5vdCBzdXBwb3J0IGltcG9ydGluZyBmaWxlcyB3aXRob3V0IGV4dGVuc2lvbnMgYW5kIGRpcmVjdG9yeSBpbXBvcnRzLlxuICovXG5leHBvcnQgY29uc3Qgbm9DaXJjdWxhckltcG9ydHMgPSBjcmVhdGVSdWxlKHtcbiAgbmFtZTogZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKSxcbiAgbWVzc2FnZTogXCJDaXJjdWxhciBpbXBvcnRzIGFyZSBub3QgYWxsb3dlZC5cIixcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gY29udGV4dC5maWxlbmFtZTtcbiAgICBjb25zdCBpbXBvcnRzID0gc3RvcmUuZ2V0KGZpbGVQYXRoKSA/PyBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBzdG9yZS5zZXQoZmlsZVBhdGgsIGltcG9ydHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uOiAobm9kZSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIG5vZGUuc291cmNlLnZhbHVlICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgZ2V0U291cmNlVHlwZShub2RlLnNvdXJjZS52YWx1ZSkgIT09IFwibG9jYWxcIlxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpbXBvcnRzLmFkZChub2RlLnNvdXJjZS52YWx1ZSk7XG4gICAgICB9LFxuXG4gICAgICBcIkltcG9ydERlY2xhcmF0aW9uOmV4aXRcIjogKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBub2RlLnNvdXJjZS52YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgIGdldFNvdXJjZVR5cGUobm9kZS5zb3VyY2UudmFsdWUpICE9PSBcImxvY2FsXCJcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBbaXNDaXJjdWxhclJlc3VsdCwgY2lyY3VsYXJQYXRoc10gPSBpc0NpcmN1bGFyKFxuICAgICAgICAgIHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZmlsZVBhdGgpLCBub2RlLnNvdXJjZS52YWx1ZSksXG4gICAgICAgICAgbmV3IFNldChbZmlsZVBhdGhdKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlzQ2lyY3VsYXJSZXN1bHQpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogYENpcmN1bGFyIGltcG9ydCBkZXRlY3RlZDogJHtjaXJjdWxhclBhdGhzXG4gICAgICAgICAgICAgIC5tYXAoKHApID0+IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgcCkpXG4gICAgICAgICAgICAgIC5qb2luKFwiIC0+IFwiKX1gLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-external-src-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-external-src-imports.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB;;;CAI/B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { create, createRule, getRuleName, getSourceType } from "../common.js";
|
|
3
|
+
export const noExternalSrcImports = createRule({
|
|
4
|
+
name: getRuleName(import.meta.url),
|
|
5
|
+
message: "Disallow importing from outside the src directory.",
|
|
6
|
+
create: (context) => create(context, check),
|
|
7
|
+
});
|
|
8
|
+
function check(filename, source) {
|
|
9
|
+
if (getSourceType(source) !== "local") {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
const srcPath = /^.*?\/src\//.exec(filename)?.[0];
|
|
13
|
+
if (srcPath) {
|
|
14
|
+
const sourcePath = path.resolve(path.dirname(filename), source);
|
|
15
|
+
// TODO: Disallow importing the nearest package.json when [module.findPackageJSON](https://nodejs.org/api/module.html#modulefindpackagejsonspecifier-base) is stable and we drop Node.js <= 20.
|
|
16
|
+
if (sourcePath === path.join(path.dirname(srcPath), "package.json")) {
|
|
17
|
+
// Allow importing the nearest package.json
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
if (!sourcePath.startsWith(srcPath)) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tZXh0ZXJuYWwtc3JjLWltcG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvbm8tZXh0ZXJuYWwtc3JjLWltcG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDO0lBQzdDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEMsT0FBTyxFQUFFLG9EQUFvRDtJQUM3RCxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO0NBQzVDLENBQUMsQ0FBQztBQUVILFNBQVMsS0FBSyxDQUFDLFFBQWdCLEVBQUUsTUFBYztJQUM3QyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRSwrTEFBK0w7UUFDL0wsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsMkNBQTJDO1lBQzNDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZSwgY3JlYXRlUnVsZSwgZ2V0UnVsZU5hbWUsIGdldFNvdXJjZVR5cGUgfSBmcm9tIFwiLi4vY29tbW9uLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBub0V4dGVybmFsU3JjSW1wb3J0cyA9IGNyZWF0ZVJ1bGUoe1xuICBuYW1lOiBnZXRSdWxlTmFtZShpbXBvcnQubWV0YS51cmwpLFxuICBtZXNzYWdlOiBcIkRpc2FsbG93IGltcG9ydGluZyBmcm9tIG91dHNpZGUgdGhlIHNyYyBkaXJlY3RvcnkuXCIsXG4gIGNyZWF0ZTogKGNvbnRleHQpID0+IGNyZWF0ZShjb250ZXh0LCBjaGVjayksXG59KTtcblxuZnVuY3Rpb24gY2hlY2soZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgaWYgKGdldFNvdXJjZVR5cGUoc291cmNlKSAhPT0gXCJsb2NhbFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHNyY1BhdGggPSAvXi4qP1xcL3NyY1xcLy8uZXhlYyhmaWxlbmFtZSk/LlswXTtcbiAgaWYgKHNyY1BhdGgpIHtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShmaWxlbmFtZSksIHNvdXJjZSk7XG4gICAgLy8gVE9ETzogRGlzYWxsb3cgaW1wb3J0aW5nIHRoZSBuZWFyZXN0IHBhY2thZ2UuanNvbiB3aGVuIFttb2R1bGUuZmluZFBhY2thZ2VKU09OXShodHRwczovL25vZGVqcy5vcmcvYXBpL21vZHVsZS5odG1sI21vZHVsZWZpbmRwYWNrYWdlanNvbnNwZWNpZmllci1iYXNlKSBpcyBzdGFibGUgYW5kIHdlIGRyb3AgTm9kZS5qcyA8PSAyMC5cbiAgICBpZiAoc291cmNlUGF0aCA9PT0gcGF0aC5qb2luKHBhdGguZGlybmFtZShzcmNQYXRoKSwgXCJwYWNrYWdlLmpzb25cIikpIHtcbiAgICAgIC8vIEFsbG93IGltcG9ydGluZyB0aGUgbmVhcmVzdCBwYWNrYWdlLmpzb25cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFzb3VyY2VQYXRoLnN0YXJ0c1dpdGgoc3JjUGF0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-esm",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.4",
|
|
4
4
|
"description": "ESLint plugin for linting ESM (import/export syntax)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint",
|
|
@@ -28,8 +28,7 @@
|
|
|
28
28
|
"dist"
|
|
29
29
|
],
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@types/
|
|
32
|
-
"@types/node": "22.14.1",
|
|
31
|
+
"@types/node": "18.19.112",
|
|
33
32
|
"eslint": "9.22.0",
|
|
34
33
|
"@fenge/dev-utils": "0.0.0"
|
|
35
34
|
},
|