eslint-plugin-esm 0.0.0 → 0.1.1
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 +13 -0
- package/README.md +60 -0
- package/dist/common.d.ts +24 -0
- package/dist/common.d.ts.map +1 -0
- package/dist/common.js +65 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -2
- package/dist/rules/nearest-relative-path.d.ts +5 -0
- package/dist/rules/nearest-relative-path.d.ts.map +1 -0
- package/dist/rules/nearest-relative-path.js +25 -0
- package/dist/rules/no-directory-imports.d.ts +5 -0
- package/dist/rules/no-directory-imports.d.ts.map +1 -0
- package/dist/rules/no-directory-imports.js +31 -0
- package/dist/rules/no-dynamic-imports.d.ts +5 -0
- package/dist/rules/no-dynamic-imports.d.ts.map +1 -0
- package/dist/rules/no-dynamic-imports.js +14 -0
- package/dist/rules/no-git-ignored-imports.d.ts +5 -0
- package/dist/rules/no-git-ignored-imports.d.ts.map +1 -0
- package/dist/rules/no-git-ignored-imports.js +46 -0
- package/dist/rules/no-phantom-dep-imports.d.ts +5 -0
- package/dist/rules/no-phantom-dep-imports.d.ts.map +1 -0
- package/dist/rules/no-phantom-dep-imports.js +73 -0
- package/dist/rules/no-relative-parent-imports.d.ts +5 -0
- package/dist/rules/no-relative-parent-imports.d.ts.map +1 -0
- package/dist/rules/no-relative-parent-imports.js +11 -0
- package/dist/rules/no-rename-exports.d.ts +5 -0
- package/dist/rules/no-rename-exports.d.ts.map +1 -0
- package/dist/rules/no-rename-exports.js +15 -0
- package/dist/rules/no-rename-imports.d.ts +5 -0
- package/dist/rules/no-rename-imports.d.ts.map +1 -0
- package/dist/rules/no-rename-imports.js +14 -0
- package/dist/rules/no-side-effect-imports.d.ts +5 -0
- package/dist/rules/no-side-effect-imports.d.ts.map +1 -0
- package/dist/rules/no-side-effect-imports.js +33 -0
- package/dist/rules/no-ts-file-imports.d.ts +5 -0
- package/dist/rules/no-ts-file-imports.d.ts.map +1 -0
- package/dist/rules/no-ts-file-imports.js +18 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +16 -0
- package/doc/rules/nearest-relative-path.md +48 -0
- package/doc/rules/no-directory-imports.md +30 -0
- package/doc/rules/no-dynamic-imports.md +30 -0
- package/doc/rules/no-git-ignored-imports.md +36 -0
- package/doc/rules/no-phantom-dep-imports.md +26 -0
- package/doc/rules/no-relative-parent-imports.md +33 -0
- package/doc/rules/no-rename-exports.md +29 -0
- package/doc/rules/no-rename-imports.md +28 -0
- package/doc/rules/no-side-effect-imports.md +31 -0
- package/doc/rules/no-ts-file-imports.md +119 -0
- package/package.json +7 -5
- package/src/common.ts +96 -0
- package/src/index.ts +23 -0
- package/src/rules/nearest-relative-path.spec.ts +44 -0
- package/src/rules/nearest-relative-path.ts +28 -0
- package/src/rules/no-directory-imports.spec.ts +31 -0
- package/src/rules/no-directory-imports.ts +34 -0
- package/src/rules/no-dynamic-imports.spec.ts +27 -0
- package/src/rules/no-dynamic-imports.ts +15 -0
- package/src/rules/no-git-ignored-imports.spec.ts +40 -0
- package/src/rules/no-git-ignored-imports.ts +53 -0
- package/src/rules/no-phantom-dep-imports.spec.ts +28 -0
- package/src/rules/no-phantom-dep-imports.ts +90 -0
- package/src/rules/no-relative-parent-imports.spec.ts +28 -0
- package/src/rules/no-relative-parent-imports.ts +13 -0
- package/src/rules/no-rename-exports.spec.ts +22 -0
- package/src/rules/no-rename-exports.ts +17 -0
- package/src/rules/no-rename-imports.spec.ts +22 -0
- package/src/rules/no-rename-imports.ts +16 -0
- package/src/rules/no-side-effect-imports.spec.ts +25 -0
- package/src/rules/no-side-effect-imports.ts +44 -0
- package/src/rules/no-ts-file-imports.spec.ts +39 -0
- package/src/rules/no-ts-file-imports.ts +23 -0
- package/src/test.spec.ts +110 -0
- package/src/utils.ts +15 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# eslint-plugin-esm
|
|
2
|
+
|
|
3
|
+
## 0.1.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 52c7428: fix(eslint-plugin-esm): fix `nearest-relative-path` rule problem when importing from `.`
|
|
8
|
+
|
|
9
|
+
## 0.1.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 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://github.com/zanminkian/git-validator/blob/main/LICENSE)
|
|
4
|
+
[](https://www.npmjs.com/package/eslint-plugin-esm)
|
|
5
|
+
[](https://www.npmjs.com/package/eslint-plugin-esm)
|
|
6
|
+
[](https://packagephobia.com/result?p=eslint-plugin-esm)
|
|
7
|
+
[](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,mjs,jsx,ts,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
|
package/dist/common.d.ts
ADDED
|
@@ -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
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":"AAWA,eAAO,MAAM,KAAK;;CAWjB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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 @@
|
|
|
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,25 @@
|
|
|
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" ||
|
|
10
|
+
source.startsWith("/") ||
|
|
11
|
+
source === ".") {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
const currentPath = path.dirname(filename);
|
|
15
|
+
const absoluteSource = path.resolve(currentPath, source);
|
|
16
|
+
// compatible with windows
|
|
17
|
+
let resultPath = path
|
|
18
|
+
.relative(currentPath, absoluteSource)
|
|
19
|
+
.replaceAll("\\", "/");
|
|
20
|
+
if (!resultPath.startsWith("./") && !resultPath.startsWith("../")) {
|
|
21
|
+
resultPath = `./${resultPath}`;
|
|
22
|
+
}
|
|
23
|
+
return resultPath !== source;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVhcmVzdC1yZWxhdGl2ZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL25lYXJlc3QtcmVsYXRpdmUtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU5RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7SUFDNUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxPQUFPLEVBQUUsNkRBQTZEO0lBQ3RFLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7Q0FDNUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxLQUFLLENBQUMsUUFBZ0IsRUFBRSxNQUFjO0lBQzdDLElBQ0UsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU87UUFDakMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDdEIsTUFBTSxLQUFLLEdBQUcsRUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCwwQkFBMEI7SUFDMUIsSUFBSSxVQUFVLEdBQUcsSUFBSTtTQUNsQixRQUFRLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQztTQUNyQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xFLFVBQVUsR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFDRCxPQUFPLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZSwgY3JlYXRlUnVsZSwgZ2V0UnVsZU5hbWUsIGdldFNvdXJjZVR5cGUgfSBmcm9tIFwiLi4vY29tbW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBuZWFyZXN0UmVsYXRpdmVQYXRoID0gY3JlYXRlUnVsZSh7XG4gIG5hbWU6IGdldFJ1bGVOYW1lKGltcG9ydC5tZXRhLnVybCksXG4gIG1lc3NhZ2U6IFwiVGhlIHJlbGF0aXZlIHNvdXJjZSBwYXRoIHNob3VsZCBiZSBhIG5lYXJlc3QgcmVsYXRpdmUgcGF0aC5cIixcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4gY3JlYXRlKGNvbnRleHQsIGNoZWNrKSxcbn0pO1xuXG5mdW5jdGlvbiBjaGVjayhmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykge1xuICBpZiAoXG4gICAgZ2V0U291cmNlVHlwZShzb3VyY2UpICE9PSBcImxvY2FsXCIgfHxcbiAgICBzb3VyY2Uuc3RhcnRzV2l0aChcIi9cIikgfHxcbiAgICBzb3VyY2UgPT09IFwiLlwiXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBjdXJyZW50UGF0aCA9IHBhdGguZGlybmFtZShmaWxlbmFtZSk7XG4gIGNvbnN0IGFic29sdXRlU291cmNlID0gcGF0aC5yZXNvbHZlKGN1cnJlbnRQYXRoLCBzb3VyY2UpO1xuICAvLyBjb21wYXRpYmxlIHdpdGggd2luZG93c1xuICBsZXQgcmVzdWx0UGF0aCA9IHBhdGhcbiAgICAucmVsYXRpdmUoY3VycmVudFBhdGgsIGFic29sdXRlU291cmNlKVxuICAgIC5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIik7XG4gIGlmICghcmVzdWx0UGF0aC5zdGFydHNXaXRoKFwiLi9cIikgJiYgIXJlc3VsdFBhdGguc3RhcnRzV2l0aChcIi4uL1wiKSkge1xuICAgIHJlc3VsdFBhdGggPSBgLi8ke3Jlc3VsdFBhdGh9YDtcbiAgfVxuICByZXR1cm4gcmVzdWx0UGF0aCAhPT0gc291cmNlO1xufVxuIl19
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"no-rename-exports.d.ts","sourceRoot":"","sources":["../../src/rules/no-rename-exports.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe;;;CAc1B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
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.type !== "Identifier" ||
|
|
8
|
+
node.local.type !== "Identifier" ||
|
|
9
|
+
node.exported.name !== node.local.name) {
|
|
10
|
+
context.report({ node, messageId: DEFAULT_MESSAGE_ID });
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
}),
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcmVuYW1lLWV4cG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvbm8tcmVuYW1lLWV4cG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0UsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQztJQUN4QyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xDLE9BQU8sRUFBRSxzQ0FBc0M7SUFDL0MsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLGVBQWUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hCLElBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWTtnQkFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWTtnQkFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQ3RDLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztDQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJ1bGUsIERFRkFVTFRfTUVTU0FHRV9JRCwgZ2V0UnVsZU5hbWUgfSBmcm9tIFwiLi4vY29tbW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBub1JlbmFtZUV4cG9ydHMgPSBjcmVhdGVSdWxlKHtcbiAgbmFtZTogZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKSxcbiAgbWVzc2FnZTogXCJEaXNhbGxvdyByZW5hbWluZyB0aGUgbmFtZWQtZXhwb3J0cy5cIixcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4gKHtcbiAgICBFeHBvcnRTcGVjaWZpZXI6IChub2RlKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUuZXhwb3J0ZWQudHlwZSAhPT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICAgICAgbm9kZS5sb2NhbC50eXBlICE9PSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgICBub2RlLmV4cG9ydGVkLm5hbWUgIT09IG5vZGUubG9jYWwubmFtZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZSwgbWVzc2FnZUlkOiBERUZBVUxUX01FU1NBR0VfSUQgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSksXG59KTtcbiJdfQ==
|
|
@@ -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;;;CAa1B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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.type !== "Identifier" ||
|
|
8
|
+
node.imported.name !== node.local.name) {
|
|
9
|
+
context.report({ node, messageId: DEFAULT_MESSAGE_ID });
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
}),
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcmVuYW1lLWltcG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvbm8tcmVuYW1lLWltcG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0UsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQztJQUN4QyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xDLE9BQU8sRUFBRSxzQ0FBc0M7SUFDL0MsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLGVBQWUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hCLElBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWTtnQkFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQ3RDLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztDQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJ1bGUsIERFRkFVTFRfTUVTU0FHRV9JRCwgZ2V0UnVsZU5hbWUgfSBmcm9tIFwiLi4vY29tbW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBub1JlbmFtZUltcG9ydHMgPSBjcmVhdGVSdWxlKHtcbiAgbmFtZTogZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKSxcbiAgbWVzc2FnZTogXCJEaXNhbGxvdyByZW5hbWluZyB0aGUgbmFtZWQtaW1wb3J0cy5cIixcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4gKHtcbiAgICBJbXBvcnRTcGVjaWZpZXI6IChub2RlKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUuaW1wb3J0ZWQudHlwZSAhPT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICAgICAgbm9kZS5pbXBvcnRlZC5uYW1lICE9PSBub2RlLmxvY2FsLm5hbWVcbiAgICAgICkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7IG5vZGUsIG1lc3NhZ2VJZDogREVGQVVMVF9NRVNTQUdFX0lEIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pLFxufSk7XG4iXX0=
|
|
@@ -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"}
|