eslint-plugin-esm 0.2.0 → 0.2.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
CHANGED
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# eslint-plugin-esm
|
|
2
2
|
|
|
3
|
-
[](https://github.com/zanminkian/
|
|
3
|
+
[](https://github.com/zanminkian/fenge/blob/main/LICENSE)
|
|
4
4
|
[](https://www.npmjs.com/package/eslint-plugin-esm)
|
|
5
5
|
[](https://www.npmjs.com/package/eslint-plugin-esm)
|
|
6
6
|
[](https://packagephobia.com/result?p=eslint-plugin-esm)
|
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
|
|
9
9
|
ESLint plugin for linting ESM (import/export syntax)
|
|
10
10
|
|
|
11
|
+
## Feature
|
|
12
|
+
|
|
13
|
+
- Faster than `eslint-plugin-import`.
|
|
14
|
+
- Easier than `eslint-plugin-import`
|
|
15
|
+
- Zero dependencies.
|
|
16
|
+
|
|
11
17
|
## Requirement
|
|
12
18
|
|
|
13
19
|
- ESLint >= 8.57.0
|
|
@@ -33,7 +39,7 @@ export default [
|
|
|
33
39
|
rules: {
|
|
34
40
|
"esm/no-git-ignored-imports": "error"
|
|
35
41
|
...
|
|
36
|
-
// Visit https://github.com/zanminkian/
|
|
42
|
+
// Visit https://github.com/zanminkian/fenge/tree/main/packages/eslint-plugin-esm/doc/rules for more other rules
|
|
37
43
|
},
|
|
38
44
|
},
|
|
39
45
|
...
|
|
@@ -53,7 +59,7 @@ Config `package.json`
|
|
|
53
59
|
|
|
54
60
|
## Rules
|
|
55
61
|
|
|
56
|
-
Click [here](https://github.com/zanminkian/
|
|
62
|
+
Click [here](https://github.com/zanminkian/fenge/tree/main/packages/eslint-plugin-esm/doc/rules).
|
|
57
63
|
|
|
58
64
|
## License
|
|
59
65
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-phantom-dep-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-phantom-dep-imports.ts"],"names":[],"mappings":"AA4CA,eAAO,MAAM,mBAAmB;;;
|
|
1
|
+
{"version":3,"file":"no-phantom-dep-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-phantom-dep-imports.ts"],"names":[],"mappings":"AA4CA,eAAO,MAAM,mBAAmB;;;CA+D9B,CAAC"}
|
|
@@ -49,7 +49,7 @@ export const noPhantomDepImports = createRule({
|
|
|
49
49
|
],
|
|
50
50
|
create: (context) => create(context, (filename, source, node) => {
|
|
51
51
|
const { allowDevDependencies = false, } = context.options[0] ?? {};
|
|
52
|
-
// ignore `import {foo} from './'`
|
|
52
|
+
// ignore `import {foo} from './'` and `import {foo} from 'node:foo'`
|
|
53
53
|
if (getSourceType(source) !== "module") {
|
|
54
54
|
return false;
|
|
55
55
|
}
|
|
@@ -62,6 +62,10 @@ export const noPhantomDepImports = createRule({
|
|
|
62
62
|
isObject(pkgJson.content.dependencies)
|
|
63
63
|
? pkgJson.content.dependencies
|
|
64
64
|
: {};
|
|
65
|
+
const peerDep = "peerDependencies" in pkgJson.content &&
|
|
66
|
+
isObject(pkgJson.content.peerDependencies)
|
|
67
|
+
? pkgJson.content.peerDependencies
|
|
68
|
+
: {};
|
|
65
69
|
const devDep = "devDependencies" in pkgJson.content &&
|
|
66
70
|
isObject(pkgJson.content.devDependencies)
|
|
67
71
|
? pkgJson.content.devDependencies
|
|
@@ -70,20 +74,18 @@ export const noPhantomDepImports = createRule({
|
|
|
70
74
|
.split("/")
|
|
71
75
|
.slice(0, source.startsWith("@") ? 2 : 1)
|
|
72
76
|
.join("/");
|
|
77
|
+
const isInDep = moduleName in dep || moduleName in peerDep;
|
|
78
|
+
const isInDev = moduleName in devDep;
|
|
73
79
|
if ("importKind" in node && node.importKind === "type") {
|
|
74
80
|
return moduleName.startsWith("@") && moduleName.includes("/")
|
|
75
|
-
? !(
|
|
76
|
-
|
|
81
|
+
? !(isInDep ||
|
|
82
|
+
isInDev ||
|
|
77
83
|
`@types/${moduleName.slice(1).replace("/", "_")}` in devDep)
|
|
78
|
-
: !(moduleName in
|
|
79
|
-
moduleName in devDep ||
|
|
80
|
-
`@types/${moduleName}` in devDep);
|
|
84
|
+
: !(isInDep || isInDev || `@types/${moduleName}` in devDep);
|
|
81
85
|
}
|
|
82
86
|
else {
|
|
83
|
-
return allowDevDependencies
|
|
84
|
-
? !(moduleName in dep || moduleName in devDep)
|
|
85
|
-
: !(moduleName in dep);
|
|
87
|
+
return allowDevDependencies ? !(isInDep || isInDev) : !isInDep;
|
|
86
88
|
}
|
|
87
89
|
}),
|
|
88
90
|
});
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcGhhbnRvbS1kZXAtaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1waGFudG9tLWRlcC1pbXBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUUsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM5QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixJQUFJLENBQUM7UUFDSCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXlELENBQUMsQ0FBQyxvQ0FBb0M7QUFDcEgsU0FBUyxVQUFVLENBQ2pCLEdBQVc7SUFFWCxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ25ELElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxPQUFPLEdBQVksSUFBSSxDQUFD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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUViLE1BQU0sT0FBTyxHQUFHLFVBQVUsSUFBSSxHQUFHLElBQUksVUFBVSxJQUFJLE9BQU8sQ0FBQztRQUMzRCxNQUFNLE9BQU8sR0FBRyxVQUFVLElBQUksTUFBTSxDQUFDO1FBQ3JDLElBQUksWUFBWSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3ZELE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDM0QsQ0FBQyxDQUFDLENBQUMsQ0FDQyxPQUFPO29CQUNQLE9BQU87b0JBQ1AsVUFBVSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQzVEO2dCQUNILENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sSUFBSSxVQUFVLFVBQVUsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDakUsQ0FBQztJQUNILENBQUMsQ0FBQztDQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuaW1wb3J0IHsgY3JlYXRlLCBjcmVhdGVSdWxlLCBnZXRSdWxlTmFtZSwgZ2V0U291cmNlVHlwZSB9IGZyb20gXCIuLi9jb21tb24uanNcIjtcblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWU6IHVua25vd24pIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn1cblxuZnVuY3Rpb24gaXNGaWxlKGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnMuc3RhdFN5bmMoZmlsZVBhdGgpLmlzRmlsZSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmNvbnN0IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBvYmplY3QgfSB8IHVuZGVmaW5lZD4oKTsgLy8ga2V5IGlzIGRpciwgdmFsdWUgaXMgcGFja2FnZS5qc29uXG5mdW5jdGlvbiBnZXRQa2dKc29uKFxuICBkaXI6IHN0cmluZyxcbik6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBvYmplY3QgfSB8IHVuZGVmaW5lZCB7XG4gIGlmIChjYWNoZS5oYXMoZGlyKSkge1xuICAgIHJldHVybiBjYWNoZS5nZXQoZGlyKTtcbiAgfVxuICBjb25zdCBwa2dKc29uUGF0aCA9IHBhdGguam9pbihkaXIsIFwicGFja2FnZS5qc29uXCIpO1xuICBpZiAoaXNGaWxlKHBrZ0pzb25QYXRoKSkge1xuICAgIGNvbnN0IGNvbnRlbnQ6IHVua25vd24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwa2dKc29uUGF0aCwgXCJ1dGY4XCIpKTtcbiAgICBjb25zdCByZXN1bHQgPSBpc09iamVjdChjb250ZW50KVxuICAgICAgPyB7IHBhdGg6IHBrZ0pzb25QYXRoLCBjb250ZW50IH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNhY2hlLnNldChkaXIsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGl0IGlzIGEgZGlyZWN0b3J5XG4gIGlmIChkaXIgPT09IHByb2Nlc3MuY3dkKCkgfHwgZGlyID09PSBcIi9cIikge1xuICAgIC8vIHN0b3AgaGVyZVxuICAgIGNhY2hlLnNldChkaXIsIHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBnZXRQa2dKc29uKHBhdGguam9pbihkaXIsIFwiLi5cIikpO1xufVxuXG5leHBvcnQgY29uc3Qgbm9QaGFudG9tRGVwSW1wb3J0cyA9IGNyZWF0ZVJ1bGUoe1xuICBuYW1lOiBnZXRSdWxlTmFtZShpbXBvcnQubWV0YS51cmwpLFxuICBtZXNzYWdlOlxuICAgIFwiRGlzYWxsb3cgaW1wb3J0aW5nIGZyb20gYSBtb2R1bGUgd2hpY2ggdGhlIG5lYXJlc3QgYHBhY2thZ2UuanNvbmAgZG9lc24ndCBpbmNsdWRlIGl0LlwiLFxuICBzY2hlbWE6IFtcbiAgICB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBhbGxvd0RldkRlcGVuZGVuY2llczogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICB9LFxuICBdLFxuICBjcmVhdGU6IChjb250ZXh0KSA9PlxuICAgIGNyZWF0ZShjb250ZXh0LCAoZmlsZW5hbWUsIHNvdXJjZSwgbm9kZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBhbGxvd0RldkRlcGVuZGVuY2llcyA9IGZhbHNlLFxuICAgICAgfTogeyBhbGxvd0RldkRlcGVuZGVuY2llczogYm9vbGVhbiB9ID0gY29udGV4dC5vcHRpb25zWzBdID8/IHt9O1xuXG4gICAgICAvLyBpZ25vcmUgYGltcG9ydCB7Zm9vfSBmcm9tICcuLydgIGFuZCBgaW1wb3J0IHtmb299IGZyb20gJ25vZGU6Zm9vJ2BcbiAgICAgIGlmIChnZXRTb3VyY2VUeXBlKHNvdXJjZSkgIT09IFwibW9kdWxlXCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgcGtnSnNvbiA9IGdldFBrZ0pzb24ocGF0aC5kaXJuYW1lKGZpbGVuYW1lKSk7XG4gICAgICAvLyBjYW5ub3QgZmluZCBwYWNrYWdlLmpzb24gZmlsZVxuICAgICAgaWYgKCFwa2dKc29uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVwID1cbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIiBpbiBwa2dKc29uLmNvbnRlbnQgJiZcbiAgICAgICAgaXNPYmplY3QocGtnSnNvbi5jb250ZW50LmRlcGVuZGVuY2llcylcbiAgICAgICAgICA/IHBrZ0pzb24uY29udGVudC5kZXBlbmRlbmNpZXNcbiAgICAgICAgICA6IHt9O1xuICAgICAgY29uc3QgcGVlckRlcCA9XG4gICAgICAgIFwicGVlckRlcGVuZGVuY2llc1wiIGluIHBrZ0pzb24uY29udGVudCAmJlxuICAgICAgICBpc09iamVjdChwa2dKc29uLmNvbnRlbnQucGVlckRlcGVuZGVuY2llcylcbiAgICAgICAgICA/IHBrZ0pzb24uY29udGVudC5wZWVyRGVwZW5kZW5jaWVzXG4gICAgICAgICAgOiB7fTtcbiAgICAgIGNvbnN0IGRldkRlcCA9XG4gICAgICAgIFwiZGV2RGVwZW5kZW5jaWVzXCIgaW4gcGtnSnNvbi5jb250ZW50ICYmXG4gICAgICAgIGlzT2JqZWN0KHBrZ0pzb24uY29udGVudC5kZXZEZXBlbmRlbmNpZXMpXG4gICAgICAgICAgPyBwa2dKc29uLmNvbnRlbnQuZGV2RGVwZW5kZW5jaWVzXG4gICAgICAgICAgOiB7fTtcblxuICAgICAgY29uc3QgbW9kdWxlTmFtZSA9IHNvdXJjZVxuICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgIC5zbGljZSgwLCBzb3VyY2Uuc3RhcnRzV2l0aChcIkBcIikgPyAyIDogMSlcbiAgICAgICAgLmpvaW4oXCIvXCIpO1xuXG4gICAgICBjb25zdCBpc0luRGVwID0gbW9kdWxlTmFtZSBpbiBkZXAgfHwgbW9kdWxlTmFtZSBpbiBwZWVyRGVwO1xuICAgICAgY29uc3QgaXNJbkRldiA9IG1vZHVsZU5hbWUgaW4gZGV2RGVwO1xuICAgICAgaWYgKFwiaW1wb3J0S2luZFwiIGluIG5vZGUgJiYgbm9kZS5pbXBvcnRLaW5kID09PSBcInR5cGVcIikge1xuICAgICAgICByZXR1cm4gbW9kdWxlTmFtZS5zdGFydHNXaXRoKFwiQFwiKSAmJiBtb2R1bGVOYW1lLmluY2x1ZGVzKFwiL1wiKVxuICAgICAgICAgID8gIShcbiAgICAgICAgICAgICAgaXNJbkRlcCB8fFxuICAgICAgICAgICAgICBpc0luRGV2IHx8XG4gICAgICAgICAgICAgIGBAdHlwZXMvJHttb2R1bGVOYW1lLnNsaWNlKDEpLnJlcGxhY2UoXCIvXCIsIFwiX1wiKX1gIGluIGRldkRlcFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogIShpc0luRGVwIHx8IGlzSW5EZXYgfHwgYEB0eXBlcy8ke21vZHVsZU5hbWV9YCBpbiBkZXZEZXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFsbG93RGV2RGVwZW5kZW5jaWVzID8gIShpc0luRGVwIHx8IGlzSW5EZXYpIDogIWlzSW5EZXA7XG4gICAgICB9XG4gICAgfSksXG59KTtcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-esm",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "ESLint plugin for linting ESM (import/export syntax)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint",
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
"es6",
|
|
15
15
|
"module"
|
|
16
16
|
],
|
|
17
|
-
"homepage": "https://github.com/zanminkian/
|
|
17
|
+
"homepage": "https://github.com/zanminkian/fenge/tree/main/packages/eslint-plugin-esm",
|
|
18
18
|
"repository": {
|
|
19
19
|
"type": "git",
|
|
20
|
-
"url": "git+https://github.com/zanminkian/
|
|
20
|
+
"url": "git+https://github.com/zanminkian/fenge.git",
|
|
21
21
|
"directory": "packages/eslint-plugin-esm"
|
|
22
22
|
},
|
|
23
23
|
"license": "MIT",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"@types/eslint": "8.56.11",
|
|
30
30
|
"@types/estree": "1.0.6",
|
|
31
31
|
"@types/json-schema": "7.0.15",
|
|
32
|
-
"@types/node": "22.
|
|
32
|
+
"@types/node": "22.7.5",
|
|
33
33
|
"@typescript-eslint/parser": "7.16.1",
|
|
34
34
|
"eslint": "8.57.0",
|
|
35
35
|
"outdent": "0.8.0"
|
|
@@ -61,7 +61,7 @@ export const noPhantomDepImports = createRule({
|
|
|
61
61
|
allowDevDependencies = false,
|
|
62
62
|
}: { allowDevDependencies: boolean } = context.options[0] ?? {};
|
|
63
63
|
|
|
64
|
-
// ignore `import {foo} from './'`
|
|
64
|
+
// ignore `import {foo} from './'` and `import {foo} from 'node:foo'`
|
|
65
65
|
if (getSourceType(source) !== "module") {
|
|
66
66
|
return false;
|
|
67
67
|
}
|
|
@@ -75,6 +75,11 @@ export const noPhantomDepImports = createRule({
|
|
|
75
75
|
isObject(pkgJson.content.dependencies)
|
|
76
76
|
? pkgJson.content.dependencies
|
|
77
77
|
: {};
|
|
78
|
+
const peerDep =
|
|
79
|
+
"peerDependencies" in pkgJson.content &&
|
|
80
|
+
isObject(pkgJson.content.peerDependencies)
|
|
81
|
+
? pkgJson.content.peerDependencies
|
|
82
|
+
: {};
|
|
78
83
|
const devDep =
|
|
79
84
|
"devDependencies" in pkgJson.content &&
|
|
80
85
|
isObject(pkgJson.content.devDependencies)
|
|
@@ -86,22 +91,18 @@ export const noPhantomDepImports = createRule({
|
|
|
86
91
|
.slice(0, source.startsWith("@") ? 2 : 1)
|
|
87
92
|
.join("/");
|
|
88
93
|
|
|
94
|
+
const isInDep = moduleName in dep || moduleName in peerDep;
|
|
95
|
+
const isInDev = moduleName in devDep;
|
|
89
96
|
if ("importKind" in node && node.importKind === "type") {
|
|
90
97
|
return moduleName.startsWith("@") && moduleName.includes("/")
|
|
91
98
|
? !(
|
|
92
|
-
|
|
93
|
-
|
|
99
|
+
isInDep ||
|
|
100
|
+
isInDev ||
|
|
94
101
|
`@types/${moduleName.slice(1).replace("/", "_")}` in devDep
|
|
95
102
|
)
|
|
96
|
-
: !(
|
|
97
|
-
moduleName in dep ||
|
|
98
|
-
moduleName in devDep ||
|
|
99
|
-
`@types/${moduleName}` in devDep
|
|
100
|
-
);
|
|
103
|
+
: !(isInDep || isInDev || `@types/${moduleName}` in devDep);
|
|
101
104
|
} else {
|
|
102
|
-
return allowDevDependencies
|
|
103
|
-
? !(moduleName in dep || moduleName in devDep)
|
|
104
|
-
: !(moduleName in dep);
|
|
105
|
+
return allowDevDependencies ? !(isInDep || isInDev) : !isInDep;
|
|
105
106
|
}
|
|
106
107
|
}),
|
|
107
108
|
});
|