8000 fix(no-unpublished): `allowModules` option was disabled when using TS… · eslint-community/eslint-plugin-n@9ae39fb · GitHub
[go: up one dir, main page]

Skip to content

Commit 9ae39fb

Browse files
authored
fix(no-unpublished): allowModules option was disabled when using TS alias (#423)
1 parent 067b9bf commit 9ae39fb

File tree

9 files changed

+52
-15
lines changed

9 files changed

+52
-15
lines changed

lib/util/check-extraneous.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ exports.checkExtraneous = function checkExtraneous(context, filePath, targets) {
3838
target.moduleName != null &&
3939
target.filePath != null &&
4040
!dependencies.has(target.moduleName) &&
41-
!allowed.has(target.moduleName)
41+
!allowed.has(target.moduleName) &&
42+
// https://github.com/eslint-community/eslint-plugin-n/issues/379
43+
!target.hasTSAlias()
4244
) {
4345
context.report({
4446
node: target.node,

lib/util/import-target.js

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -176,20 +176,6 @@ module.exports = class ImportTarget {
176176
return "node"
177177
}
178178

179-
// This check should be done before the RegExp that checks npm packages,
180-
// because `tsconfig.json` aliases may start with `~`, `@` and this will
181-
// cause imports using aliases to be treated as npm-module imports
182-
// https://github.com/eslint-community/eslint-plugin-n/issues/379
183-
if (isTypescript(this.context)) {
184-
const aliases = getTSConfigAliases(this.context)
185-
if (
186-
Array.isArray(aliases) &&
187-
aliases.some(alias => this.name.startsWith(alias.name))
188-
) {
189-
return "relative"
190-
}
191-
}
192-
193179
if (/^(@[\w~-][\w.~-]*\/)?[\w~-][\w.~-]*/.test(this.name)) {
194180
return "npm"
195181
}
@@ -201,6 +187,19 @@ module.exports = class ImportTarget {
201187
return "unknown"
202188
}
203189

190+
hasTSAlias() {
191+
if (isTypescript(this.context)) {
192+
const aliases = getTSConfigAliases(this.context)
193+
if (
194+
Array.isArray(aliases) &&
195+
aliases.some(alias => this.name.startsWith(alias.name))
196+
) {
197+
return true
198+
}
199+
}
200+
return false
201+
}
202+
204203
/**
205204
* What module import style is used
206205
* @param {'import' | 'require'} fallback
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules/*
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// File needs to exists

tests/fixtures/no-unpublished/tsconfig-paths-wildcard/node_modules/@test/dev/index.js

Whitespace-only changes.

tests/fixtures/no-unpublished/tsconfig-paths-wildcard/node_modules/@test/dev/package.json

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"name": "test",
3+
"version": "0.0.0",
4+
"devDependencies": {
5+
"@test/dev": "0.0.0"
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"compilerOptions": {
3+
"paths": {
4+
"*": ["./node_modules/*"]
5+
}
6+
}
7+
}

tests/lib/rules/no-unpublished-import.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,18 @@ ruleTester.run("no-unpublished-import", rule, {
155155
code: "import type foo from 'foo';",
156156
options: [{ ignoreTypeImport: true }],
157157
},
158+
159+
// imports using `tsconfig.json > compilerOptions > paths` setting
160+
// https://github.com/eslint-community/eslint-plugin-n/issues/421
161+
{
162+
filename: fixture("tsconfig-paths-wildcard/index.ts"),
163+
code: "import foo from '@test/dev'",
164+
options: [
165+
{
166+
allowModules: ["@test/dev"],
167+
},
168+
],
169+
},
158170
],
159171
invalid: [
160172
{

0 commit comments

Comments
 (0)
0