eslint-plugin-esm 0.0.0 → 0.1.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 (76) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +60 -0
  3. package/dist/common.d.ts +24 -0
  4. package/dist/common.d.ts.map +1 -0
  5. package/dist/common.js +65 -0
  6. package/dist/index.d.ts +3 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +23 -2
  9. package/dist/rules/nearest-relative-path.d.ts +5 -0
  10. package/dist/rules/nearest-relative-path.d.ts.map +1 -0
  11. package/dist/rules/nearest-relative-path.js +23 -0
  12. package/dist/rules/no-directory-imports.d.ts +5 -0
  13. package/dist/rules/no-directory-imports.d.ts.map +1 -0
  14. package/dist/rules/no-directory-imports.js +31 -0
  15. package/dist/rules/no-dynamic-imports.d.ts +5 -0
  16. package/dist/rules/no-dynamic-imports.d.ts.map +1 -0
  17. package/dist/rules/no-dynamic-imports.js +14 -0
  18. package/dist/rules/no-git-ignored-imports.d.ts +5 -0
  19. package/dist/rules/no-git-ignored-imports.d.ts.map +1 -0
  20. package/dist/rules/no-git-ignored-imports.js +46 -0
  21. package/dist/rules/no-phantom-dep-imports.d.ts +5 -0
  22. package/dist/rules/no-phantom-dep-imports.d.ts.map +1 -0
  23. package/dist/rules/no-phantom-dep-imports.js +73 -0
  24. package/dist/rules/no-relative-parent-imports.d.ts +5 -0
  25. package/dist/rules/no-relative-parent-imports.d.ts.map +1 -0
  26. package/dist/rules/no-relative-parent-imports.js +11 -0
  27. package/dist/rules/no-rename-exports.d.ts +5 -0
  28. package/dist/rules/no-rename-exports.d.ts.map +1 -0
  29. package/dist/rules/no-rename-exports.js +13 -0
  30. package/dist/rules/no-rename-imports.d.ts +5 -0
  31. package/dist/rules/no-rename-imports.d.ts.map +1 -0
  32. package/dist/rules/no-rename-imports.js +13 -0
  33. package/dist/rules/no-side-effect-imports.d.ts +5 -0
  34. package/dist/rules/no-side-effect-imports.d.ts.map +1 -0
  35. package/dist/rules/no-side-effect-imports.js +33 -0
  36. package/dist/rules/no-ts-file-imports.d.ts +5 -0
  37. package/dist/rules/no-ts-file-imports.d.ts.map +1 -0
  38. package/dist/rules/no-ts-file-imports.js +18 -0
  39. package/dist/utils.d.ts +5 -0
  40. package/dist/utils.d.ts.map +1 -0
  41. package/dist/utils.js +16 -0
  42. package/doc/rules/nearest-relative-path.md +47 -0
  43. package/doc/rules/no-directory-imports.md +30 -0
  44. package/doc/rules/no-dynamic-imports.md +30 -0
  45. package/doc/rules/no-git-ignored-imports.md +36 -0
  46. package/doc/rules/no-phantom-dep-imports.md +26 -0
  47. package/doc/rules/no-relative-parent-imports.md +33 -0
  48. package/doc/rules/no-rename-exports.md +29 -0
  49. package/doc/rules/no-rename-imports.md +28 -0
  50. package/doc/rules/no-side-effect-imports.md +31 -0
  51. package/doc/rules/no-ts-file-imports.md +119 -0
  52. package/package.json +6 -4
  53. package/src/common.ts +96 -0
  54. package/src/index.ts +23 -0
  55. package/src/rules/nearest-relative-path.spec.ts +43 -0
  56. package/src/rules/nearest-relative-path.ts +24 -0
  57. package/src/rules/no-directory-imports.spec.ts +31 -0
  58. package/src/rules/no-directory-imports.ts +34 -0
  59. package/src/rules/no-dynamic-imports.spec.ts +27 -0
  60. package/src/rules/no-dynamic-imports.ts +15 -0
  61. package/src/rules/no-git-ignored-imports.spec.ts +40 -0
  62. package/src/rules/no-git-ignored-imports.ts +53 -0
  63. package/src/rules/no-phantom-dep-imports.spec.ts +28 -0
  64. package/src/rules/no-phantom-dep-imports.ts +90 -0
  65. package/src/rules/no-relative-parent-imports.spec.ts +28 -0
  66. package/src/rules/no-relative-parent-imports.ts +13 -0
  67. package/src/rules/no-rename-exports.spec.ts +22 -0
  68. package/src/rules/no-rename-exports.ts +13 -0
  69. package/src/rules/no-rename-imports.spec.ts +22 -0
  70. package/src/rules/no-rename-imports.ts +13 -0
  71. package/src/rules/no-side-effect-imports.spec.ts +25 -0
  72. package/src/rules/no-side-effect-imports.ts +44 -0
  73. package/src/rules/no-ts-file-imports.spec.ts +39 -0
  74. package/src/rules/no-ts-file-imports.ts +23 -0
  75. package/src/test.spec.ts +110 -0
  76. package/src/utils.ts +15 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # eslint-plugin-esm
2
+
3
+ ## 0.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - d0491d8: refactor: migrate rules from `@git-validator/eslint-plugin` to `eslint-plugin-esm`
package/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # eslint-plugin-esm
2
+
3
+ [![](https://img.shields.io/npm/l/eslint-plugin-esm.svg)](https://github.com/zanminkian/git-validator/blob/main/LICENSE)
4
+ [![](https://img.shields.io/npm/v/eslint-plugin-esm.svg)](https://www.npmjs.com/package/eslint-plugin-esm)
5
+ [![](https://img.shields.io/npm/dm/eslint-plugin-esm.svg)](https://www.npmjs.com/package/eslint-plugin-esm)
6
+ [![](https://packagephobia.com/badge?p=eslint-plugin-esm)](https://packagephobia.com/result?p=eslint-plugin-esm)
7
+ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com)
8
+
9
+ ESLint plugin for linting ESM (import/export syntax)
10
+
11
+ ## Requirement
12
+
13
+ - ESLint >= 8.57.0
14
+
15
+ ## Usage
16
+
17
+ Install
18
+
19
+ ```sh
20
+ npm i -D eslint eslint-plugin-esm
21
+ ```
22
+
23
+ Config `eslint.config.js`
24
+
25
+ ```js
26
+ import * as esm from "eslint-plugin-esm";
27
+
28
+ export default [
29
+ ...
30
+ {
31
+ files: ["**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}"],
32
+ plugins: { esm },
33
+ rules: {
34
+ "esm/no-git-ignored-imports": "error"
35
+ ...
36
+ // Visit https://github.com/zanminkian/git-validator/tree/main/packages/eslint-plugin-esm/doc/rules for more other rules
37
+ },
38
+ },
39
+ ...
40
+ ];
41
+ ```
42
+
43
+ Config `package.json`
44
+
45
+ ```json
46
+ {
47
+ "scripts": {
48
+ "lint": "eslint .",
49
+ "lint:fix": "eslint . --fix"
50
+ }
51
+ }
52
+ ```
53
+
54
+ ## Rules
55
+
56
+ Click [here](https://github.com/zanminkian/git-validator/tree/main/packages/eslint-plugin-esm/doc/rules).
57
+
58
+ ## License
59
+
60
+ MIT
@@ -0,0 +1,24 @@
1
+ import type { Rule } from "eslint";
2
+ import type { ExportAllDeclaration, ExportNamedDeclaration, ImportDeclaration, ImportExpression } from "estree";
3
+ export declare const DEFAULT_MESSAGE_ID = "default";
4
+ export declare function createRule({ name, message, fixable, type, create, }: {
5
+ name: string;
6
+ message: string;
7
+ fixable?: Rule.RuleMetaData["fixable"];
8
+ type?: Rule.RuleMetaData["type"];
9
+ create: (context: Rule.RuleContext) => Rule.RuleListener;
10
+ }): {
11
+ name: string;
12
+ rule: Rule.RuleModule;
13
+ };
14
+ export declare function getRuleName(importMetaUrl: string): string;
15
+ export type ImportationNode = ImportDeclaration | ImportExpression | ExportAllDeclaration | ExportNamedDeclaration;
16
+ /**
17
+ * Create ESLint RuleListener to check string importation source.
18
+ * @param context ESLint RuleContext
19
+ * @param check the check logic
20
+ * @returns ESLint RuleListener
21
+ */
22
+ export declare const create: (context: Rule.RuleContext, check: (filename: string, source: string, node: ImportationNode) => boolean) => Rule.RuleListener;
23
+ export declare function getSourceType(source: string): "local" | "builtin" | "module";
24
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +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,EACV,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,QAAQ,CAAC;AAEhB,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EAEP,OAAO,EACP,IAAmB,EACnB,MAAM,GACP,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAEhB,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,eAAO,MAAM,MAAM,YACR,IAAI,CAAC,WAAW,SAClB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,KAAK,OAAO,KAC1E,IAAI,CAAC,YAcP,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,kCAc3C"}
package/dist/common.js ADDED
@@ -0,0 +1,65 @@
1
+ import path from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ export const DEFAULT_MESSAGE_ID = "default";
4
+ export function createRule({ name, message,
5
+ // schema,
6
+ fixable, type = "suggestion", create, }) {
7
+ const rule = {
8
+ meta: {
9
+ // ...(schema && { schema }),
10
+ ...(fixable && { fixable }),
11
+ messages: {
12
+ [DEFAULT_MESSAGE_ID]: message,
13
+ },
14
+ type,
15
+ docs: {
16
+ // TODO: add url
17
+ description: message,
18
+ },
19
+ },
20
+ create,
21
+ };
22
+ return { name, rule };
23
+ }
24
+ export function getRuleName(importMetaUrl) {
25
+ // remove '.js' extension
26
+ return path.basename(fileURLToPath(importMetaUrl)).slice(0, -3);
27
+ }
28
+ /**
29
+ * Create ESLint RuleListener to check string importation source.
30
+ * @param context ESLint RuleContext
31
+ * @param check the check logic
32
+ * @returns ESLint RuleListener
33
+ */
34
+ export const create = (context, check) => {
35
+ const handle = (node) => {
36
+ if (!node.source)
37
+ return;
38
+ if (!("value" in node.source))
39
+ return;
40
+ if (typeof node.source.value !== "string")
41
+ return;
42
+ if (check(context.filename, node.source.value, node))
43
+ context.report({ node: node.source, messageId: DEFAULT_MESSAGE_ID });
44
+ };
45
+ return {
46
+ ImportDeclaration: handle,
47
+ ImportExpression: handle,
48
+ ExportAllDeclaration: handle,
49
+ ExportNamedDeclaration: handle,
50
+ };
51
+ };
52
+ export function getSourceType(source) {
53
+ if (source.startsWith("/") ||
54
+ source.startsWith("./") ||
55
+ source.startsWith("../") ||
56
+ source === "." ||
57
+ source === "..") {
58
+ return "local";
59
+ }
60
+ if (source.startsWith("node:")) {
61
+ return "builtin";
62
+ }
63
+ return "module";
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVN6QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFFNUMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUN6QixJQUFJLEVBQ0osT0FBTztBQUNQLFVBQVU7QUFDVixPQUFPLEVBQ1AsSUFBSSxHQUFHLFlBQVksRUFDbkIsTUFBTSxHQVFQO0lBQ0MsTUFBTSxJQUFJLEdBQW9CO1FBQzVCLElBQUksRUFBRTtZQUNKLDZCQUE2QjtZQUM3QixHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDM0IsUUFBUSxFQUFFO2dCQUNSLENBQUMsa0JBQWtCLENBQUMsRUFBRSxPQUFPO2FBQzlCO1lBQ0QsSUFBSTtZQUNKLElBQUksRUFBRTtnQkFDSixnQkFBZ0I7Z0JBQ2hCLFdBQVcsRUFBRSxPQUFPO2FBQ3JCO1NBQ0Y7UUFDRCxNQUFNO0tBQ1AsQ0FBQztJQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsYUFBcUI7SUFDL0MseUJBQXlCO0lBQ3pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQVFEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQ3BCLE9BQXlCLEVBQ3pCLEtBQTJFLEVBQ3hELEVBQUU7SUFDckIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFxQixFQUFFLEVBQUU7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU87UUFDdEMsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQztJQUNGLE9BQU87UUFDTCxpQkFBaUIsRUFBRSxNQUFNO1FBQ3pCLGdCQUFnQixFQUFFLE1BQU07UUFDeEIsb0JBQW9CLEVBQUUsTUFBTTtRQUM1QixzQkFBc0IsRUFBRSxNQUFNO0tBQy9CLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsYUFBYSxDQUFDLE1BQWM7SUFDMUMsSUFDRSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUN0QixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUN2QixNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUN4QixNQUFNLEtBQUssR0FBRztRQUNkLE1BQU0sS0FBSyxJQUFJLEVBQ2YsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMvQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCB0eXBlIHtcbiAgRXhwb3J0QWxsRGVjbGFyYXRpb24sXG4gIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24sXG4gIEltcG9ydERlY2xhcmF0aW9uLFxuICBJbXBvcnRFeHByZXNzaW9uLFxufSBmcm9tIFwiZXN0cmVlXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01FU1NBR0VfSUQgPSBcImRlZmF1bHRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJ1bGUoe1xuICBuYW1lLFxuICBtZXNzYWdlLFxuICAvLyBzY2hlbWEsXG4gIGZpeGFibGUsXG4gIHR5cGUgPSBcInN1Z2dlc3Rpb25cIixcbiAgY3JlYXRlLFxufToge1xuICBuYW1lOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgLy8gc2NoZW1hPzogSlNPTlNjaGVtYTRbXTtcbiAgZml4YWJsZT86IFJ1bGUuUnVsZU1ldGFEYXRhW1wiZml4YWJsZVwiXTtcbiAgdHlwZT86IFJ1bGUuUnVsZU1ldGFEYXRhW1widHlwZVwiXTtcbiAgY3JlYXRlOiAoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCkgPT4gUnVsZS5SdWxlTGlzdGVuZXI7XG59KTogeyBuYW1lOiBzdHJpbmc7IHJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSB9IHtcbiAgY29uc3QgcnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICAgIG1ldGE6IHtcbiAgICAgIC8vIC4uLihzY2hlbWEgJiYgeyBzY2hlbWEgfSksXG4gICAgICAuLi4oZml4YWJsZSAmJiB7IGZpeGFibGUgfSksXG4gICAgICBtZXNzYWdlczoge1xuICAgICAgICBbREVGQVVMVF9NRVNTQUdFX0lEXTogbWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICB0eXBlLFxuICAgICAgZG9jczoge1xuICAgICAgICAvLyBUT0RPOiBhZGQgdXJsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBtZXNzYWdlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZSxcbiAgfTtcbiAgcmV0dXJuIHsgbmFtZSwgcnVsZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UnVsZU5hbWUoaW1wb3J0TWV0YVVybDogc3RyaW5nKSB7XG4gIC8vIHJlbW92ZSAnLmpzJyBleHRlbnNpb25cbiAgcmV0dXJuIHBhdGguYmFzZW5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnRNZXRhVXJsKSkuc2xpY2UoMCwgLTMpO1xufVxuXG5leHBvcnQgdHlwZSBJbXBvcnRhdGlvbk5vZGUgPVxuICB8IEltcG9ydERlY2xhcmF0aW9uXG4gIHwgSW1wb3J0RXhwcmVzc2lvblxuICB8IEV4cG9ydEFsbERlY2xhcmF0aW9uXG4gIHwgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjtcblxuLyoqXG4gKiBDcmVhdGUgRVNMaW50IFJ1bGVMaXN0ZW5lciB0byBjaGVjayBzdHJpbmcgaW1wb3J0YXRpb24gc291cmNlLlxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IFJ1bGVDb250ZXh0XG4gKiBAcGFyYW0gY2hlY2sgdGhlIGNoZWNrIGxvZ2ljXG4gKiBAcmV0dXJucyBFU0xpbnQgUnVsZUxpc3RlbmVyXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGUgPSAoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIGNoZWNrOiAoZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcsIG5vZGU6IEltcG9ydGF0aW9uTm9kZSkgPT4gYm9vbGVhbixcbik6IFJ1bGUuUnVsZUxpc3RlbmVyID0+IHtcbiAgY29uc3QgaGFuZGxlID0gKG5vZGU6IEltcG9ydGF0aW9uTm9kZSkgPT4ge1xuICAgIGlmICghbm9kZS5zb3VyY2UpIHJldHVybjtcbiAgICBpZiAoIShcInZhbHVlXCIgaW4gbm9kZS5zb3VyY2UpKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBub2RlLnNvdXJjZS52YWx1ZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuO1xuICAgIGlmIChjaGVjayhjb250ZXh0LmZpbGVuYW1lLCBub2RlLnNvdXJjZS52YWx1ZSwgbm9kZSkpXG4gICAgICBjb250ZXh0LnJlcG9ydCh7IG5vZGU6IG5vZGUuc291cmNlLCBtZXNzYWdlSWQ6IERFRkFVTFRfTUVTU0FHRV9JRCB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBJbXBvcnREZWNsYXJhdGlvbjogaGFuZGxlLFxuICAgIEltcG9ydEV4cHJlc3Npb246IGhhbmRsZSxcbiAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbjogaGFuZGxlLFxuICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IGhhbmRsZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VUeXBlKHNvdXJjZTogc3RyaW5nKSB7XG4gIGlmIChcbiAgICBzb3VyY2Uuc3RhcnRzV2l0aChcIi9cIikgfHxcbiAgICBzb3VyY2Uuc3RhcnRzV2l0aChcIi4vXCIpIHx8XG4gICAgc291cmNlLnN0YXJ0c1dpdGgoXCIuLi9cIikgfHxcbiAgICBzb3VyY2UgPT09IFwiLlwiIHx8XG4gICAgc291cmNlID09PSBcIi4uXCJcbiAgKSB7XG4gICAgcmV0dXJuIFwibG9jYWxcIjtcbiAgfVxuICBpZiAoc291cmNlLnN0YXJ0c1dpdGgoXCJub2RlOlwiKSkge1xuICAgIHJldHVybiBcImJ1aWx0aW5cIjtcbiAgfVxuICByZXR1cm4gXCJtb2R1bGVcIjtcbn1cbiJdfQ==
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
- export {};
1
+ export declare const rules: {
2
+ [x: string]: import("eslint").Rule.RuleModule;
3
+ };
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -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":"AAWA,eAAO,MAAM,KAAK;;CAWjB,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,23 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIiJdfQ==
1
+ import { nearestRelativePath } from "./rules/nearest-relative-path.js";
2
+ import { noDirectoryImports } from "./rules/no-directory-imports.js";
3
+ import { noDynamicImports } from "./rules/no-dynamic-imports.js";
4
+ import { noGitIgnoredImports } from "./rules/no-git-ignored-imports.js";
5
+ import { noPhantomDepImports } from "./rules/no-phantom-dep-imports.js";
6
+ import { noRelativeParentImports } from "./rules/no-relative-parent-imports.js";
7
+ import { noRenameExports } from "./rules/no-rename-exports.js";
8
+ import { noRenameImports } from "./rules/no-rename-imports.js";
9
+ import { noSideEffectImports } from "./rules/no-side-effect-imports.js";
10
+ import { noTsFileImports } from "./rules/no-ts-file-imports.js";
11
+ export const rules = {
12
+ [nearestRelativePath.name]: nearestRelativePath.rule,
13
+ [noDirectoryImports.name]: noDirectoryImports.rule,
14
+ [noDynamicImports.name]: noDynamicImports.rule,
15
+ [noGitIgnoredImports.name]: noGitIgnoredImports.rule,
16
+ [noPhantomDepImports.name]: noPhantomDepImports.rule,
17
+ [noRelativeParentImports.name]: noRelativeParentImports.rule,
18
+ [noRenameExports.name]: noRenameExports.rule,
19
+ [noRenameImports.name]: noRenameImports.rule,
20
+ [noSideEffectImports.name]: noSideEffectImports.rule,
21
+ [noTsFileImports.name]: noTsFileImports.rule,
22
+ };
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHO0lBQ25CLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtJQUNwRCxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLGtCQUFrQixDQUFDLElBQUk7SUFDbEQsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJO0lBQzlDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtJQUNwRCxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQixDQUFDLElBQUk7SUFDcEQsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxJQUFJO0lBQzVELENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLGVBQWUsQ0FBQyxJQUFJO0lBQzVDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLGVBQWUsQ0FBQyxJQUFJO0lBQzVDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtJQUNwRCxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlLENBQUMsSUFBSTtDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbmVhcmVzdFJlbGF0aXZlUGF0aCB9IGZyb20gXCIuL3J1bGVzL25lYXJlc3QtcmVsYXRpdmUtcGF0aC5qc1wiO1xuaW1wb3J0IHsgbm9EaXJlY3RvcnlJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tZGlyZWN0b3J5LWltcG9ydHMuanNcIjtcbmltcG9ydCB7IG5vRHluYW1pY0ltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1keW5hbWljLWltcG9ydHMuanNcIjtcbmltcG9ydCB7IG5vR2l0SWdub3JlZEltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1naXQtaWdub3JlZC1pbXBvcnRzLmpzXCI7XG5pbXBvcnQgeyBub1BoYW50b21EZXBJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tcGhhbnRvbS1kZXAtaW1wb3J0cy5qc1wiO1xuaW1wb3J0IHsgbm9SZWxhdGl2ZVBhcmVudEltcG9ydHMgfSBmcm9tIFwiLi9ydWxlcy9uby1yZWxhdGl2ZS1wYXJlbnQtaW1wb3J0cy5qc1wiO1xuaW1wb3J0IHsgbm9SZW5hbWVFeHBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tcmVuYW1lLWV4cG9ydHMuanNcIjtcbmltcG9ydCB7IG5vUmVuYW1lSW1wb3J0cyB9IGZyb20gXCIuL3J1bGVzL25vLXJlbmFtZS1pbXBvcnRzLmpzXCI7XG5pbXBvcnQgeyBub1NpZGVFZmZlY3RJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tc2lkZS1lZmZlY3QtaW1wb3J0cy5qc1wiO1xuaW1wb3J0IHsgbm9Uc0ZpbGVJbXBvcnRzIH0gZnJvbSBcIi4vcnVsZXMvbm8tdHMtZmlsZS1pbXBvcnRzLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBydWxlcyA9IHtcbiAgW25lYXJlc3RSZWxhdGl2ZVBhdGgubmFtZV06IG5lYXJlc3RSZWxhdGl2ZVBhdGgucnVsZSxcbiAgW25vRGlyZWN0b3J5SW1wb3J0cy5uYW1lXTogbm9EaXJlY3RvcnlJbXBvcnRzLnJ1bGUsXG4gIFtub0R5bmFtaWNJbXBvcnRzLm5hbWVdOiBub0R5bmFtaWNJbXBvcnRzLnJ1bGUsXG4gIFtub0dpdElnbm9yZWRJbXBvcnRzLm5hbWVdOiBub0dpdElnbm9yZWRJbXBvcnRzLnJ1bGUsXG4gIFtub1BoYW50b21EZXBJbXBvcnRzLm5hbWVdOiBub1BoYW50b21EZXBJbXBvcnRzLnJ1bGUsXG4gIFtub1JlbGF0aXZlUGFyZW50SW1wb3J0cy5uYW1lXTogbm9SZWxhdGl2ZVBhcmVudEltcG9ydHMucnVsZSxcbiAgW25vUmVuYW1lRXhwb3J0cy5uYW1lXTogbm9SZW5hbWVFeHBvcnRzLnJ1bGUsXG4gIFtub1JlbmFtZUltcG9ydHMubmFtZV06IG5vUmVuYW1lSW1wb3J0cy5ydWxlLFxuICBbbm9TaWRlRWZmZWN0SW1wb3J0cy5uYW1lXTogbm9TaWRlRWZmZWN0SW1wb3J0cy5ydWxlLFxuICBbbm9Uc0ZpbGVJbXBvcnRzLm5hbWVdOiBub1RzRmlsZUltcG9ydHMucnVsZSxcbn07XG4iXX0=
@@ -0,0 +1,5 @@
1
+ export declare const nearestRelativePath: {
2
+ name: string;
3
+ rule: import("eslint").Rule.RuleModule;
4
+ };
5
+ //# sourceMappingURL=nearest-relative-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nearest-relative-path.d.ts","sourceRoot":"","sources":["../../src/rules/nearest-relative-path.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB;;;CAI9B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import path from "node:path";
2
+ import { create, createRule, getRuleName, getSourceType } from "../common.js";
3
+ export const nearestRelativePath = createRule({
4
+ name: getRuleName(import.meta.url),
5
+ message: "The relative source path should be a nearest relative path.",
6
+ create: (context) => create(context, check),
7
+ });
8
+ function check(filename, source) {
9
+ if (getSourceType(source) !== "local" || source.startsWith("/")) {
10
+ return false;
11
+ }
12
+ const currentPath = path.dirname(filename);
13
+ const absoluteSource = path.resolve(currentPath, source);
14
+ // compatible with windows
15
+ let resultPath = path
16
+ .relative(currentPath, absoluteSource)
17
+ .replaceAll("\\", "/");
18
+ if (!resultPath.startsWith("./") && !resultPath.startsWith("../")) {
19
+ resultPath = `./${resultPath}`;
20
+ }
21
+ return resultPath !== source;
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVhcmVzdC1yZWxhdGl2ZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL25lYXJlc3QtcmVsYXRpdmUtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU5RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7SUFDNUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxPQUFPLEVBQUUsNkRBQTZEO0lBQ3RFLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7Q0FDNUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxLQUFLLENBQUMsUUFBZ0IsRUFBRSxNQUFjO0lBQzdDLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCwwQkFBMEI7SUFDMUIsSUFBSSxVQUFVLEdBQUcsSUFBSTtTQUNsQixRQUFRLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQztTQUNyQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xFLFVBQVUsR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFDRCxPQUFPLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZSwgY3JlYXRlUnVsZSwgZ2V0UnVsZU5hbWUsIGdldFNvdXJjZVR5cGUgfSBmcm9tIFwiLi4vY29tbW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBuZWFyZXN0UmVsYXRpdmVQYXRoID0gY3JlYXRlUnVsZSh7XG4gIG5hbWU6IGdldFJ1bGVOYW1lKGltcG9ydC5tZXRhLnVybCksXG4gIG1lc3NhZ2U6IFwiVGhlIHJlbGF0aXZlIHNvdXJjZSBwYXRoIHNob3VsZCBiZSBhIG5lYXJlc3QgcmVsYXRpdmUgcGF0aC5cIixcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4gY3JlYXRlKGNvbnRleHQsIGNoZWNrKSxcbn0pO1xuXG5mdW5jdGlvbiBjaGVjayhmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykge1xuICBpZiAoZ2V0U291cmNlVHlwZShzb3VyY2UpICE9PSBcImxvY2FsXCIgfHwgc291cmNlLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGN1cnJlbnRQYXRoID0gcGF0aC5kaXJuYW1lKGZpbGVuYW1lKTtcbiAgY29uc3QgYWJzb2x1dGVTb3VyY2UgPSBwYXRoLnJlc29sdmUoY3VycmVudFBhdGgsIHNvdXJjZSk7XG4gIC8vIGNvbXBhdGlibGUgd2l0aCB3aW5kb3dzXG4gIGxldCByZXN1bHRQYXRoID0gcGF0aFxuICAgIC5yZWxhdGl2ZShjdXJyZW50UGF0aCwgYWJzb2x1dGVTb3VyY2UpXG4gICAgLnJlcGxhY2VBbGwoXCJcXFxcXCIsIFwiL1wiKTtcbiAgaWYgKCFyZXN1bHRQYXRoLnN0YXJ0c1dpdGgoXCIuL1wiKSAmJiAhcmVzdWx0UGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSB7XG4gICAgcmVzdWx0UGF0aCA9IGAuLyR7cmVzdWx0UGF0aH1gO1xuICB9XG4gIHJldHVybiByZXN1bHRQYXRoICE9PSBzb3VyY2U7XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ export declare const noDirectoryImports: {
2
+ name: string;
3
+ rule: import("eslint").Rule.RuleModule;
4
+ };
5
+ //# sourceMappingURL=no-directory-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-directory-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-directory-imports.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB;;;CAI7B,CAAC"}
@@ -0,0 +1,31 @@
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 noDirectoryImports = createRule({
6
+ name: getRuleName(import.meta.url),
7
+ message: "Disallow importing from a directory.",
8
+ create: (context) => create(context, check),
9
+ });
10
+ function check(filename, source) {
11
+ if (getSourceType(source) !== "local") {
12
+ return false;
13
+ }
14
+ if (source.endsWith(".") || source.endsWith("./")) {
15
+ return true;
16
+ }
17
+ const absolutePath = path.resolve(path.dirname(filename), source);
18
+ if (!absolutePath.startsWith("/")) {
19
+ throw new Error(`ESLint plugin internal error. Absolute path incorrect: ${absolutePath}.`);
20
+ }
21
+ return isDir(absolutePath);
22
+ }
23
+ const isDir = memoize((filePath) => {
24
+ try {
25
+ return fs.statSync(filePath).isDirectory();
26
+ }
27
+ catch (e) {
28
+ return false;
29
+ }
30
+ });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tZGlyZWN0b3J5LWltcG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvbm8tZGlyZWN0b3J5LWltcG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0lBQzNDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO0NBQzVDLENBQUMsQ0FBQztBQUVILFNBQVMsS0FBSyxDQUFDLFFBQWdCLEVBQUUsTUFBYztJQUM3QyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMERBQTBELFlBQVksR0FBRyxDQUMxRSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDekMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZSwgY3JlYXRlUnVsZSwgZ2V0UnVsZU5hbWUsIGdldFNvdXJjZVR5cGUgfSBmcm9tIFwiLi4vY29tbW9uLmpzXCI7XG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBub0RpcmVjdG9yeUltcG9ydHMgPSBjcmVhdGVSdWxlKHtcbiAgbmFtZTogZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKSxcbiAgbWVzc2FnZTogXCJEaXNhbGxvdyBpbXBvcnRpbmcgZnJvbSBhIGRpcmVjdG9yeS5cIixcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4gY3JlYXRlKGNvbnRleHQsIGNoZWNrKSxcbn0pO1xuXG5mdW5jdGlvbiBjaGVjayhmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykge1xuICBpZiAoZ2V0U291cmNlVHlwZShzb3VyY2UpICE9PSBcImxvY2FsXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHNvdXJjZS5lbmRzV2l0aChcIi5cIikgfHwgc291cmNlLmVuZHNXaXRoKFwiLi9cIikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBhYnNvbHV0ZVBhdGggPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGZpbGVuYW1lKSwgc291cmNlKTtcbiAgaWYgKCFhYnNvbHV0ZVBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRVNMaW50IHBsdWdpbiBpbnRlcm5hbCBlcnJvci4gQWJzb2x1dGUgcGF0aCBpbmNvcnJlY3Q6ICR7YWJzb2x1dGVQYXRofS5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGlzRGlyKGFic29sdXRlUGF0aCk7XG59XG5cbmNvbnN0IGlzRGlyID0gbWVtb2l6ZSgoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBmcy5zdGF0U3luYyhmaWxlUGF0aCkuaXNEaXJlY3RvcnkoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSk7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ export declare const noDynamicImports: {
2
+ name: string;
3
+ rule: import("eslint").Rule.RuleModule;
4
+ };
5
+ //# sourceMappingURL=no-dynamic-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-dynamic-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-dynamic-imports.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB;;;CAW3B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { createRule, DEFAULT_MESSAGE_ID, getRuleName } from "../common.js";
2
+ export const noDynamicImports = createRule({
3
+ name: getRuleName(import.meta.url),
4
+ message: "`import()` should be called with string literal.",
5
+ create: (context) => ({
6
+ "ImportExpression > :not(Literal)": (node) => {
7
+ context.report({ node, messageId: DEFAULT_MESSAGE_ID });
8
+ },
9
+ "ImportExpression > Literal[raw=/^[^'\"].*[^'\"]$/]": (node) => {
10
+ context.report({ node, messageId: DEFAULT_MESSAGE_ID });
11
+ },
12
+ }),
13
+ });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tZHluYW1pYy1pbXBvcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL25vLWR5bmFtaWMtaW1wb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUzRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7SUFDekMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxPQUFPLEVBQUUsa0RBQWtEO0lBQzNELE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwQixrQ0FBa0MsRUFBRSxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ2pELE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0Qsb0RBQW9ELEVBQUUsQ0FBQyxJQUFVLEVBQUUsRUFBRTtZQUNuRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQztLQUNGLENBQUM7Q0FDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5vZGUgfSBmcm9tIFwiZXN0cmVlXCI7XG5pbXBvcnQgeyBjcmVhdGVSdWxlLCBERUZBVUxUX01FU1NBR0VfSUQsIGdldFJ1bGVOYW1lIH0gZnJvbSBcIi4uL2NvbW1vbi5qc1wiO1xuXG5leHBvcnQgY29uc3Qgbm9EeW5hbWljSW1wb3J0cyA9IGNyZWF0ZVJ1bGUoe1xuICBuYW1lOiBnZXRSdWxlTmFtZShpbXBvcnQubWV0YS51cmwpLFxuICBtZXNzYWdlOiBcImBpbXBvcnQoKWAgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHN0cmluZyBsaXRlcmFsLlwiLFxuICBjcmVhdGU6IChjb250ZXh0KSA9PiAoe1xuICAgIFwiSW1wb3J0RXhwcmVzc2lvbiA+IDpub3QoTGl0ZXJhbClcIjogKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZSwgbWVzc2FnZUlkOiBERUZBVUxUX01FU1NBR0VfSUQgfSk7XG4gICAgfSxcbiAgICBcIkltcG9ydEV4cHJlc3Npb24gPiBMaXRlcmFsW3Jhdz0vXlteJ1xcXCJdLipbXidcXFwiXSQvXVwiOiAobm9kZTogTm9kZSkgPT4ge1xuICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlSWQ6IERFRkFVTFRfTUVTU0FHRV9JRCB9KTtcbiAgICB9LFxuICB9KSxcbn0pO1xuIl19
@@ -0,0 +1,5 @@
1
+ export declare const noGitIgnoredImports: {
2
+ name: string;
3
+ rule: import("eslint").Rule.RuleModule;
4
+ };
5
+ //# sourceMappingURL=no-git-ignored-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-git-ignored-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-git-ignored-imports.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mBAAmB;;;CAI9B,CAAC"}
@@ -0,0 +1,46 @@
1
+ import childProcess from "node:child_process";
2
+ import path from "node:path";
3
+ import process from "node:process";
4
+ import { isNativeError } from "node:util/types";
5
+ import { create, createRule, getRuleName, getSourceType } from "../common.js";
6
+ import { memoize } from "../utils.js";
7
+ export const noGitIgnoredImports = createRule({
8
+ name: getRuleName(import.meta.url),
9
+ message: "Disallow to import module from a git-ignored path.",
10
+ create: (context) => create(context, checkIgnored),
11
+ });
12
+ function checkIgnored(filename, source) {
13
+ // from node_modules
14
+ if (getSourceType(source) !== "local") {
15
+ return false;
16
+ }
17
+ // out side of project root
18
+ if (source.startsWith("/") && !source.startsWith(process.cwd())) {
19
+ return true;
20
+ }
21
+ // This file of absolutePath may be a symbolic link
22
+ const absolutePath = path.resolve(path.dirname(filename), source);
23
+ if (!absolutePath.startsWith("/")) {
24
+ throw new Error(`ESLint plugin internal error. Absolute path incorrect: ${absolutePath}.`);
25
+ }
26
+ return isIgnored(absolutePath);
27
+ }
28
+ const isIgnored = memoize((filePath) => {
29
+ try {
30
+ return (childProcess
31
+ .execSync(`git check-ignore ${filePath}`, { encoding: "utf8" })
32
+ .trim() === filePath);
33
+ }
34
+ catch (e) {
35
+ if (isNativeError(e) &&
36
+ "stdout" in e &&
37
+ e.stdout === "" &&
38
+ "stderr" in e &&
39
+ e.stderr === "") {
40
+ return false;
41
+ }
42
+ // We cannot throw an error here. So we have to return true to report the filePath is bad.
43
+ return true;
44
+ }
45
+ });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tZ2l0LWlnbm9yZWQtaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1naXQtaWdub3JlZC1pbXBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7SUFDNUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxPQUFPLEVBQUUsb0RBQW9EO0lBQzdELE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7Q0FDbkQsQ0FBQyxDQUFDO0FBRUgsU0FBUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFjO0lBQ3BELG9CQUFvQjtJQUNwQixJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCwyQkFBMkI7SUFDM0IsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELG1EQUFtRDtJQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUNiLDBEQUEwRCxZQUFZLEdBQUcsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxFQUFFO0lBQzdDLElBQUksQ0FBQztRQUNILE9BQU8sQ0FDTCxZQUFZO2FBQ1QsUUFBUSxDQUFDLG9CQUFvQixRQUFRLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUM5RCxJQUFJLEVBQUUsS0FBSyxRQUFRLENBQ3ZCLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLElBQ0UsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNoQixRQUFRLElBQUksQ0FBQztZQUNiLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRTtZQUNmLFFBQVEsSUFBSSxDQUFDO1lBQ2IsQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQ2YsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELDBGQUEwRjtRQUMxRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGlsZFByb2Nlc3MgZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuaW1wb3J0IHsgaXNOYXRpdmVFcnJvciB9IGZyb20gXCJub2RlOnV0aWwvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZSwgY3JlYXRlUnVsZSwgZ2V0UnVsZU5hbWUsIGdldFNvdXJjZVR5cGUgfSBmcm9tIFwiLi4vY29tbW9uLmpzXCI7XG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBub0dpdElnbm9yZWRJbXBvcnRzID0gY3JlYXRlUnVsZSh7XG4gIG5hbWU6IGdldFJ1bGVOYW1lKGltcG9ydC5tZXRhLnVybCksXG4gIG1lc3NhZ2U6IFwiRGlzYWxsb3cgdG8gaW1wb3J0IG1vZHVsZSBmcm9tIGEgZ2l0LWlnbm9yZWQgcGF0aC5cIixcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4gY3JlYXRlKGNvbnRleHQsIGNoZWNrSWdub3JlZCksXG59KTtcblxuZnVuY3Rpb24gY2hlY2tJZ25vcmVkKGZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSB7XG4gIC8vIGZyb20gbm9kZV9tb2R1bGVzXG4gIGlmIChnZXRTb3VyY2VUeXBlKHNvdXJjZSkgIT09IFwibG9jYWxcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBvdXQgc2lkZSBvZiBwcm9qZWN0IHJvb3RcbiAgaWYgKHNvdXJjZS5zdGFydHNXaXRoKFwiL1wiKSAmJiAhc291cmNlLnN0YXJ0c1dpdGgocHJvY2Vzcy5jd2QoKSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBUaGlzIGZpbGUgb2YgYWJzb2x1dGVQYXRoIG1heSBiZSBhIHN5bWJvbGljIGxpbmtcbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShmaWxlbmFtZSksIHNvdXJjZSk7XG4gIGlmICghYWJzb2x1dGVQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVTTGludCBwbHVnaW4gaW50ZXJuYWwgZXJyb3IuIEFic29sdXRlIHBhdGggaW5jb3JyZWN0OiAke2Fic29sdXRlUGF0aH0uYCxcbiAgICApO1xuICB9XG4gIHJldHVybiBpc0lnbm9yZWQoYWJzb2x1dGVQYXRoKTtcbn1cblxuY29uc3QgaXNJZ25vcmVkID0gbWVtb2l6ZSgoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoXG4gICAgICBjaGlsZFByb2Nlc3NcbiAgICAgICAgLmV4ZWNTeW5jKGBnaXQgY2hlY2staWdub3JlICR7ZmlsZVBhdGh9YCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgLnRyaW0oKSA9PT0gZmlsZVBhdGhcbiAgICApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKFxuICAgICAgaXNOYXRpdmVFcnJvcihlKSAmJlxuICAgICAgXCJzdGRvdXRcIiBpbiBlICYmXG4gICAgICBlLnN0ZG91dCA9PT0gXCJcIiAmJlxuICAgICAgXCJzdGRlcnJcIiBpbiBlICYmXG4gICAgICBlLnN0ZGVyciA9PT0gXCJcIlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBXZSBjYW5ub3QgdGhyb3cgYW4gZXJyb3IgaGVyZS4gU28gd2UgaGF2ZSB0byByZXR1cm4gdHJ1ZSB0byByZXBvcnQgdGhlIGZpbGVQYXRoIGlzIGJhZC5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufSk7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ export declare const noPhantomDepImports: {
2
+ name: string;
3
+ rule: import("eslint").Rule.RuleModule;
4
+ };
5
+ //# sourceMappingURL=no-phantom-dep-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-phantom-dep-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-phantom-dep-imports.ts"],"names":[],"mappings":"AAkDA,eAAO,MAAM,mBAAmB;;;CAK9B,CAAC"}
@@ -0,0 +1,73 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import process from "node:process";
4
+ import { create, createRule, getRuleName, getSourceType, } from "../common.js";
5
+ function isObject(value) {
6
+ return value !== null && typeof value === "object";
7
+ }
8
+ function isFile(filePath) {
9
+ try {
10
+ return fs.statSync(filePath).isFile();
11
+ }
12
+ catch (e) {
13
+ return false;
14
+ }
15
+ }
16
+ const cache = new Map(); // key is dir, value is package.json
17
+ function getPkgJson(dir) {
18
+ if (cache.has(dir)) {
19
+ return cache.get(dir);
20
+ }
21
+ const pkgJsonPath = path.join(dir, "package.json");
22
+ if (isFile(pkgJsonPath)) {
23
+ const content = JSON.parse(fs.readFileSync(pkgJsonPath, "utf8"));
24
+ const result = isObject(content)
25
+ ? { path: pkgJsonPath, content }
26
+ : undefined;
27
+ cache.set(dir, result);
28
+ return result;
29
+ }
30
+ // if it is a directory
31
+ if (dir === process.cwd() || dir === "/") {
32
+ // stop here
33
+ cache.set(dir, undefined);
34
+ return undefined;
35
+ }
36
+ return getPkgJson(path.join(dir, ".."));
37
+ }
38
+ export const noPhantomDepImports = createRule({
39
+ name: getRuleName(import.meta.url),
40
+ message: "Disallow importing from a module which the nearest `package.json` doesn't include it.",
41
+ create: (context) => create(context, check),
42
+ });
43
+ function check(filename, source, node) {
44
+ // ignore `import type {foo} from 'foo'`
45
+ if ("importKind" in node && node.importKind === "type") {
46
+ return false;
47
+ }
48
+ // ignore `import {foo} from './'`
49
+ if (getSourceType(source) !== "module") {
50
+ return false;
51
+ }
52
+ const pkgJson = getPkgJson(path.dirname(filename));
53
+ // cannot find package.json file
54
+ if (!pkgJson) {
55
+ return true;
56
+ }
57
+ const dep = "dependencies" in pkgJson.content && isObject(pkgJson.content.dependencies)
58
+ ? pkgJson.content.dependencies
59
+ : {};
60
+ const devDep = "devDependencies" in pkgJson.content &&
61
+ isObject(pkgJson.content.devDependencies)
62
+ ? pkgJson.content.devDependencies
63
+ : {};
64
+ const moduleName = source
65
+ .split("/")
66
+ .slice(0, source.startsWith("@") ? 2 : 1)
67
+ .join("/");
68
+ if (["test", "spec"].includes(filename.split(".").at(-2) ?? "")) {
69
+ return !(moduleName in dep || moduleName in devDep);
70
+ }
71
+ return !(moduleName in dep);
72
+ }
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcGhhbnRvbS1kZXAtaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1waGFudG9tLWRlcC1pbXBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFdBQVcsRUFDWCxhQUFhLEdBRWQsTUFBTSxjQUFjLENBQUM7QUFFdEIsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM5QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixJQUFJLENBQUM7UUFDSCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXlELENBQUMsQ0FBQyxvQ0FBb0M7QUFDcEgsU0FBUyxVQUFVLENBQ2pCLEdBQVc7SUFFWCxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ25ELElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxPQUFPLEdBQVksSUFBSSxDQUFD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LElBQUksTUFBTSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELE9BQU8sQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgcHJvY2VzcyBmcm9tIFwibm9kZTpwcm9jZXNzXCI7XG5pbXBvcnQge1xuICBjcmVhdGUsXG4gIGNyZWF0ZVJ1bGUsXG4gIGdldFJ1bGVOYW1lLFxuICBnZXRTb3VyY2VUeXBlLFxuICB0eXBlIEltcG9ydGF0aW9uTm9kZSxcbn0gZnJvbSBcIi4uL2NvbW1vbi5qc1wiO1xuXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xufVxuXG5mdW5jdGlvbiBpc0ZpbGUoZmlsZVBhdGg6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBmcy5zdGF0U3luYyhmaWxlUGF0aCkuaXNGaWxlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuY29uc3QgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IG9iamVjdCB9IHwgdW5kZWZpbmVkPigpOyAvLyBrZXkgaXMgZGlyLCB2YWx1ZSBpcyBwYWNrYWdlLmpzb25cbmZ1bmN0aW9uIGdldFBrZ0pzb24oXG4gIGRpcjogc3RyaW5nLFxuKTogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IG9iamVjdCB9IHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNhY2hlLmhhcyhkaXIpKSB7XG4gICAgcmV0dXJuIGNhY2hlLmdldChkaXIpO1xuICB9XG4gIGNvbnN0IHBrZ0pzb25QYXRoID0gcGF0aC5qb2luKGRpciwgXCJwYWNrYWdlLmpzb25cIik7XG4gIGlmIChpc0ZpbGUocGtnSnNvblBhdGgpKSB7XG4gICAgY29uc3QgY29udGVudDogdW5rbm93biA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBrZ0pzb25QYXRoLCBcInV0ZjhcIikpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGlzT2JqZWN0KGNvbnRlbnQpXG4gICAgICA/IHsgcGF0aDogcGtnSnNvblBhdGgsIGNvbnRlbnQgfVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY2FjaGUuc2V0KGRpciwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaWYgaXQgaXMgYSBkaXJlY3RvcnlcbiAgaWYgKGRpciA9PT0gcHJvY2Vzcy5jd2QoKSB8fCBkaXIgPT09IFwiL1wiKSB7XG4gICAgLy8gc3RvcCBoZXJlXG4gICAgY2FjaGUuc2V0KGRpciwgdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGdldFBrZ0pzb24ocGF0aC5qb2luKGRpciwgXCIuLlwiKSk7XG59XG5cbmV4cG9ydCBjb25zdCBub1BoYW50b21EZXBJbXBvcnRzID0gY3JlYXRlUnVsZSh7XG4gIG5hbWU6IGdldFJ1bGVOYW1lKGltcG9ydC5tZXRhLnVybCksXG4gIG1lc3NhZ2U6XG4gICAgXCJEaXNhbGxvdyBpbXBvcnRpbmcgZnJvbSBhIG1vZHVsZSB3aGljaCB0aGUgbmVhcmVzdCBgcGFja2FnZS5qc29uYCBkb2Vzbid0IGluY2x1ZGUgaXQuXCIsXG4gIGNyZWF0ZTogKGNvbnRleHQpID0+IGNyZWF0ZShjb250ZXh0LCBjaGVjayksXG59KTtcblxuZnVuY3Rpb24gY2hlY2soZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcsIG5vZGU6IEltcG9ydGF0aW9uTm9kZSkge1xuICAvLyBpZ25vcmUgYGltcG9ydCB0eXBlIHtmb299IGZyb20gJ2ZvbydgXG4gIGlmIChcImltcG9ydEtpbmRcIiBpbiBub2RlICYmIG5vZGUuaW1wb3J0S2luZCA9PT0gXCJ0eXBlXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaWdub3JlIGBpbXBvcnQge2Zvb30gZnJvbSAnLi8nYFxuICBpZiAoZ2V0U291cmNlVHlwZShzb3VyY2UpICE9PSBcIm1vZHVsZVwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHBrZ0pzb24gPSBnZXRQa2dKc29uKHBhdGguZGlybmFtZShmaWxlbmFtZSkpO1xuICAvLyBjYW5ub3QgZmluZCBwYWNrYWdlLmpzb24gZmlsZVxuICBpZiAoIXBrZ0pzb24pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBkZXAgPVxuICAgIFwiZGVwZW5kZW5jaWVzXCIgaW4gcGtnSnNvbi5jb250ZW50ICYmIGlzT2JqZWN0KHBrZ0pzb24uY29udGVudC5kZXBlbmRlbmNpZXMpXG4gICAgICA/IHBrZ0pzb24uY29udGVudC5kZXBlbmRlbmNpZXNcbiAgICAgIDoge307XG4gIGNvbnN0IGRldkRlcCA9XG4gICAgXCJkZXZEZXBlbmRlbmNpZXNcIiBpbiBwa2dKc29uLmNvbnRlbnQgJiZcbiAgICBpc09iamVjdChwa2dKc29uLmNvbnRlbnQuZGV2RGVwZW5kZW5jaWVzKVxuICAgICAgPyBwa2dKc29uLmNvbnRlbnQuZGV2RGVwZW5kZW5jaWVzXG4gICAgICA6IHt9O1xuXG4gIGNvbnN0IG1vZHVsZU5hbWUgPSBzb3VyY2VcbiAgICAuc3BsaXQoXCIvXCIpXG4gICAgLnNsaWNlKDAsIHNvdXJjZS5zdGFydHNXaXRoKFwiQFwiKSA/IDIgOiAxKVxuICAgIC5qb2luKFwiL1wiKTtcbiAgaWYgKFtcInRlc3RcIiwgXCJzcGVjXCJdLmluY2x1ZGVzKGZpbGVuYW1lLnNwbGl0KFwiLlwiKS5hdCgtMikgPz8gXCJcIikpIHtcbiAgICByZXR1cm4gIShtb2R1bGVOYW1lIGluIGRlcCB8fCBtb2R1bGVOYW1lIGluIGRldkRlcCk7XG4gIH1cbiAgcmV0dXJuICEobW9kdWxlTmFtZSBpbiBkZXApO1xufVxuIl19
@@ -0,0 +1,5 @@
1
+ export declare const noRelativeParentImports: {
2
+ name: string;
3
+ rule: import("eslint").Rule.RuleModule;
4
+ };
5
+ //# sourceMappingURL=no-relative-parent-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-relative-parent-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-relative-parent-imports.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB;;;CAIlC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { create, createRule, getRuleName } from "../common.js";
2
+ const depth = 3;
3
+ export const noRelativeParentImports = createRule({
4
+ name: getRuleName(import.meta.url),
5
+ message: "Disallow importing module from a relative parent path too deeply.",
6
+ create: (context) => create(context, checkDepth),
7
+ });
8
+ function checkDepth(_filename, source) {
9
+ return new RegExp(`^(\\.\\./){${depth},}`).test(source);
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcmVsYXRpdmUtcGFyZW50LWltcG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvbm8tcmVsYXRpdmUtcGFyZW50LWltcG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRS9ELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztBQUVoQixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxVQUFVLENBQUM7SUFDaEQsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxPQUFPLEVBQUUsbUVBQW1FO0lBQzVFLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7Q0FDakQsQ0FBQyxDQUFDO0FBRUgsU0FBUyxVQUFVLENBQUMsU0FBaUIsRUFBRSxNQUFjO0lBQ25ELE9BQU8sSUFBSSxNQUFNLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlLCBjcmVhdGVSdWxlLCBnZXRSdWxlTmFtZSB9IGZyb20gXCIuLi9jb21tb24uanNcIjtcblxuY29uc3QgZGVwdGggPSAzO1xuXG5leHBvcnQgY29uc3Qgbm9SZWxhdGl2ZVBhcmVudEltcG9ydHMgPSBjcmVhdGVSdWxlKHtcbiAgbmFtZTogZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKSxcbiAgbWVzc2FnZTogXCJEaXNhbGxvdyBpbXBvcnRpbmcgbW9kdWxlIGZyb20gYSByZWxhdGl2ZSBwYXJlbnQgcGF0aCB0b28gZGVlcGx5LlwiLFxuICBjcmVhdGU6IChjb250ZXh0KSA9PiBjcmVhdGUoY29udGV4dCwgY2hlY2tEZXB0aCksXG59KTtcblxuZnVuY3Rpb24gY2hlY2tEZXB0aChfZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oXFxcXC5cXFxcLi8peyR7ZGVwdGh9LH1gKS50ZXN0KHNvdXJjZSk7XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ export declare const noRenameExports: {
2
+ name: string;
3
+ rule: import("eslint").Rule.RuleModule;
4
+ };
5
+ //# sourceMappingURL=no-rename-exports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-rename-exports.d.ts","sourceRoot":"","sources":["../../src/rules/no-rename-exports.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe;;;CAU1B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { createRule, DEFAULT_MESSAGE_ID, getRuleName } from "../common.js";
2
+ export const noRenameExports = createRule({
3
+ name: getRuleName(import.meta.url),
4
+ message: "Disallow renaming the named-exports.",
5
+ create: (context) => ({
6
+ ExportSpecifier: (node) => {
7
+ if (node.exported.name !== node.local.name) {
8
+ context.report({ node, messageId: DEFAULT_MESSAGE_ID });
9
+ }
10
+ },
11
+ }),
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcmVuYW1lLWV4cG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvbm8tcmVuYW1lLWV4cG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0UsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQztJQUN4QyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xDLE9BQU8sRUFBRSxzQ0FBc0M7SUFDL0MsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLGVBQWUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztDQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJ1bGUsIERFRkFVTFRfTUVTU0FHRV9JRCwgZ2V0UnVsZU5hbWUgfSBmcm9tIFwiLi4vY29tbW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBub1JlbmFtZUV4cG9ydHMgPSBjcmVhdGVSdWxlKHtcbiAgbmFtZTogZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKSxcbiAgbWVzc2FnZTogXCJEaXNhbGxvdyByZW5hbWluZyB0aGUgbmFtZWQtZXhwb3J0cy5cIixcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4gKHtcbiAgICBFeHBvcnRTcGVjaWZpZXI6IChub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5leHBvcnRlZC5uYW1lICE9PSBub2RlLmxvY2FsLm5hbWUpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlSWQ6IERFRkFVTFRfTUVTU0FHRV9JRCB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KSxcbn0pO1xuIl19
@@ -0,0 +1,5 @@
1
+ export declare const noRenameImports: {
2
+ name: string;
3
+ rule: import("eslint").Rule.RuleModule;
4
+ };
5
+ //# sourceMappingURL=no-rename-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-rename-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-rename-imports.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe;;;CAU1B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { createRule, DEFAULT_MESSAGE_ID, getRuleName } from "../common.js";
2
+ export const noRenameImports = createRule({
3
+ name: getRuleName(import.meta.url),
4
+ message: "Disallow renaming the named-imports.",
5
+ create: (context) => ({
6
+ ImportSpecifier: (node) => {
7
+ if (node.imported.name !== node.local.name) {
8
+ context.report({ node, messageId: DEFAULT_MESSAGE_ID });
9
+ }
10
+ },
11
+ }),
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcmVuYW1lLWltcG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvbm8tcmVuYW1lLWltcG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0UsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQztJQUN4QyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xDLE9BQU8sRUFBRSxzQ0FBc0M7SUFDL0MsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLGVBQWUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztDQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJ1bGUsIERFRkFVTFRfTUVTU0FHRV9JRCwgZ2V0UnVsZU5hbWUgfSBmcm9tIFwiLi4vY29tbW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBub1JlbmFtZUltcG9ydHMgPSBjcmVhdGVSdWxlKHtcbiAgbmFtZTogZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKSxcbiAgbWVzc2FnZTogXCJEaXNhbGxvdyByZW5hbWluZyB0aGUgbmFtZWQtaW1wb3J0cy5cIixcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4gKHtcbiAgICBJbXBvcnRTcGVjaWZpZXI6IChub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5pbXBvcnRlZC5uYW1lICE9PSBub2RlLmxvY2FsLm5hbWUpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlSWQ6IERFRkFVTFRfTUVTU0FHRV9JRCB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KSxcbn0pO1xuIl19
@@ -0,0 +1,5 @@
1
+ export declare const noSideEffectImports: {
2
+ name: string;
3
+ rule: import("eslint").Rule.RuleModule;
4
+ };
5
+ //# sourceMappingURL=no-side-effect-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-side-effect-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-side-effect-imports.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,mBAAmB;;;CA0B9B,CAAC"}