eslint-plugin-n 17.13.2 → 17.15.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.
- package/lib/rules/no-extraneous-import.js +2 -0
- package/lib/rules/no-extraneous-require.js +2 -0
- package/lib/rules/no-missing-import.js +2 -0
- package/lib/rules/no-missing-require.js +2 -0
- package/lib/rules/no-sync.js +19 -19
- package/lib/rules/no-unpublished-import.js +2 -0
- package/lib/rules/no-unpublished-require.js +2 -0
- package/lib/unsupported-features/node-builtins-modules/module.js +2 -0
- package/lib/unsupported-features/node-builtins-modules/process.js +1 -0
- package/lib/unsupported-features/node-builtins-modules/sqlite.js +3 -0
- package/lib/unsupported-features/node-builtins-modules/util.js +5 -2
- package/lib/util/enumerate-property-names.js +10 -12
- package/lib/util/get-resolver-config.js +47 -0
- package/lib/util/import-target.js +6 -0
- package/lib/util/visit-import.js +3 -1
- package/lib/util/visit-require.js +3 -1
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@ const { checkExtraneous, messages } = require("../util/check-extraneous")
|
|
|
8
8
|
const getAllowModules = require("../util/get-allow-modules")
|
|
9
9
|
const getConvertPath = require("../util/get-convert-path")
|
|
10
10
|
const getResolvePaths = require("../util/get-resolve-paths")
|
|
11
|
+
const getResolverConfig = require("../util/get-resolver-config")
|
|
11
12
|
const visitImport = require("../util/visit-import")
|
|
12
13
|
|
|
13
14
|
/** @type {import('eslint').Rule.RuleModule} */
|
|
@@ -28,6 +29,7 @@ module.exports = {
|
|
|
28
29
|
allowModules: getAllowModules.schema,
|
|
29
30
|
convertPath: getConvertPath.schema,
|
|
30
31
|
resolvePaths: getResolvePaths.schema,
|
|
32
|
+
resolverConfig: getResolverConfig.schema,
|
|
31
33
|
},
|
|
32
34
|
additionalProperties: false,
|
|
33
35
|
},
|
|
@@ -8,6 +8,7 @@ const { checkExtraneous, messages } = require("../util/check-extraneous")
|
|
|
8
8
|
const getAllowModules = require("../util/get-allow-modules")
|
|
9
9
|
const getConvertPath = require("../util/get-convert-path")
|
|
10
10
|
const getResolvePaths = require("../util/get-resolve-paths")
|
|
11
|
+
const getResolverConfig = require("../util/get-resolver-config")
|
|
11
12
|
const getTryExtensions = require("../util/get-try-extensions")
|
|
12
13
|
const visitRequire = require("../util/visit-require")
|
|
13
14
|
|
|
@@ -29,6 +30,7 @@ module.exports = {
|
|
|
29
30
|
allowModules: getAllowModules.schema,
|
|
30
31
|
convertPath: getConvertPath.schema,
|
|
31
32
|
resolvePaths: getResolvePaths.schema,
|
|
33
|
+
resolverConfig: getResolverConfig.schema,
|
|
32
34
|
tryExtensions: getTryExtensions.schema,
|
|
33
35
|
},
|
|
34
36
|
additionalProperties: false,
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
const { checkExistence, messages } = require("../util/check-existence")
|
|
8
8
|
const getAllowModules = require("../util/get-allow-modules")
|
|
9
9
|
const getResolvePaths = require("../util/get-resolve-paths")
|
|
10
|
+
const getResolverConfig = require("../util/get-resolver-config")
|
|
10
11
|
const getTryExtensions = require("../util/get-try-extensions")
|
|
11
12
|
const getTSConfig = require("../util/get-tsconfig")
|
|
12
13
|
const getTypescriptExtensionMap = require("../util/get-typescript-extension-map")
|
|
@@ -29,6 +30,7 @@ module.exports = {
|
|
|
29
30
|
properties: {
|
|
30
31
|
allowModules: getAllowModules.schema,
|
|
31
32
|
resolvePaths: getResolvePaths.schema,
|
|
33
|
+
resolverConfig: getResolverConfig.schema,
|
|
32
34
|
tryExtensions: getTryExtensions.schema,
|
|
33
35
|
ignoreTypeImport: { type: "boolean", default: false },
|
|
34
36
|
tsconfigPath: getTSConfig.schema,
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
const { checkExistence, messages } = require("../util/check-existence")
|
|
8
8
|
const getAllowModules = require("../util/get-allow-modules")
|
|
9
9
|
const getResolvePaths = require("../util/get-resolve-paths")
|
|
10
|
+
const getResolverConfig = require("../util/get-resolver-config")
|
|
10
11
|
const getTSConfig = require("../util/get-tsconfig")
|
|
11
12
|
const getTryExtensions = require("../util/get-try-extensions")
|
|
12
13
|
const getTypescriptExtensionMap = require("../util/get-typescript-extension-map")
|
|
@@ -30,6 +31,7 @@ module.exports = {
|
|
|
30
31
|
allowModules: getAllowModules.schema,
|
|
31
32
|
tryExtensions: getTryExtensions.schema,
|
|
32
33
|
resolvePaths: getResolvePaths.schema,
|
|
34
|
+
resolverConfig: getResolverConfig.schema,
|
|
33
35
|
typescriptExtensionMap: getTypescriptExtensionMap.schema,
|
|
34
36
|
tsconfigPath: getTSConfig.schema,
|
|
35
37
|
},
|
package/lib/rules/no-sync.js
CHANGED
|
@@ -4,23 +4,13 @@
|
|
|
4
4
|
*/
|
|
5
5
|
"use strict"
|
|
6
6
|
|
|
7
|
-
const
|
|
7
|
+
const selectors = [
|
|
8
8
|
// fs.readFileSync()
|
|
9
|
-
":function MemberExpression > Identifier[name=/Sync$/]",
|
|
10
9
|
// readFileSync.call(null, 'path')
|
|
11
|
-
"
|
|
10
|
+
"CallExpression > MemberExpression.callee Identifier[name=/Sync$/]",
|
|
12
11
|
// readFileSync()
|
|
13
|
-
"
|
|
14
|
-
]
|
|
15
|
-
|
|
16
|
-
const disallowedAtRootLevelSelector = [
|
|
17
|
-
// fs.readFileSync()
|
|
18
|
-
"MemberExpression > Identifier[name=/Sync$/]",
|
|
19
|
-
// readFileSync.call(null, 'path')
|
|
20
|
-
"MemberExpression > Identifier[name=/Sync$/]",
|
|
21
|
-
// readFileSync()
|
|
22
|
-
":not(MemberExpression) > Identifier[name=/Sync$/]",
|
|
23
|
-
].join(",")
|
|
12
|
+
"CallExpression > Identifier[name=/Sync$/]",
|
|
13
|
+
]
|
|
24
14
|
|
|
25
15
|
/** @type {import('eslint').Rule.RuleModule} */
|
|
26
16
|
module.exports = {
|
|
@@ -40,6 +30,11 @@ module.exports = {
|
|
|
40
30
|
type: "boolean",
|
|
41
31
|
default: false,
|
|
42
32
|
},
|
|
33
|
+
ignores: {
|
|
34
|
+
type: "array",
|
|
35
|
+
items: { type: "string" },
|
|
36
|
+
default: [],
|
|
37
|
+
},
|
|
43
38
|
},
|
|
44
39
|
additionalProperties: false,
|
|
45
40
|
},
|
|
@@ -50,17 +45,22 @@ module.exports = {
|
|
|
50
45
|
},
|
|
51
46
|
|
|
52
47
|
create(context) {
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
: disallowedAtRootLevelSelector
|
|
48
|
+
const options = context.options[0] ?? {}
|
|
49
|
+
const ignores = options.ignores ?? []
|
|
56
50
|
|
|
51
|
+
const selector = options.allowAtRootLevel
|
|
52
|
+
? selectors.map(selector => `:function ${selector}`)
|
|
53
|
+
: selectors
|
|
57
54
|
return {
|
|
58
55
|
/**
|
|
59
|
-
* [node description]
|
|
60
56
|
* @param {import('estree').Identifier & {parent: import('estree').Node}} node
|
|
61
57
|
* @returns {void}
|
|
62
58
|
*/
|
|
63
|
-
[selector](node) {
|
|
59
|
+
[selector.join(",")](node) {
|
|
60
|
+
if (ignores.includes(node.name)) {
|
|
61
|
+
return
|
|
62
|
+
}
|
|
63
|
+
|
|
64
64
|
context.report({
|
|
65
65
|
node: node.parent,
|
|
66
66
|
messageId: "noSync",
|
|
@@ -8,6 +8,7 @@ const { checkPublish, messages } = require("../util/check-publish")
|
|
|
8
8
|
const getAllowModules = require("../util/get-allow-modules")
|
|
9
9
|
const getConvertPath = require("../util/get-convert-path")
|
|
10
10
|
const getResolvePaths = require("../util/get-resolve-paths")
|
|
11
|
+
const getResolverConfig = require("../util/get-resolver-config")
|
|
11
12
|
const visitImport = require("../util/visit-import")
|
|
12
13
|
|
|
13
14
|
/** @type {import('eslint').Rule.RuleModule} */
|
|
@@ -28,6 +29,7 @@ module.exports = {
|
|
|
28
29
|
allowModules: getAllowModules.schema,
|
|
29
30
|
convertPath: getConvertPath.schema,
|
|
30
31
|
resolvePaths: getResolvePaths.schema,
|
|
32
|
+
resolverConfig: getResolverConfig.schema,
|
|
31
33
|
ignoreTypeImport: { type: "boolean", default: false },
|
|
32
34
|
ignorePrivate: { type: "boolean", default: true },
|
|
33
35
|
},
|
|
@@ -8,6 +8,7 @@ const { checkPublish, messages } = require("../util/check-publish")
|
|
|
8
8
|
const getAllowModules = require("../util/get-allow-modules")
|
|
9
9
|
const getConvertPath = require("../util/get-convert-path")
|
|
10
10
|
const getResolvePaths = require("../util/get-resolve-paths")
|
|
11
|
+
const getResolverConfig = require("../util/get-resolver-config")
|
|
11
12
|
const getTryExtensions = require("../util/get-try-extensions")
|
|
12
13
|
const visitRequire = require("../util/visit-require")
|
|
13
14
|
|
|
@@ -29,6 +30,7 @@ module.exports = {
|
|
|
29
30
|
allowModules: getAllowModules.schema,
|
|
30
31
|
convertPath: getConvertPath.schema,
|
|
31
32
|
resolvePaths: getResolvePaths.schema,
|
|
33
|
+
resolverConfig: getResolverConfig.schema,
|
|
32
34
|
tryExtensions: getTryExtensions.schema,
|
|
33
35
|
ignorePrivate: { type: "boolean", default: true },
|
|
34
36
|
},
|
|
@@ -20,10 +20,12 @@ const Module = {
|
|
|
20
20
|
},
|
|
21
21
|
},
|
|
22
22
|
enableCompileCache: { [READ]: { experimental: ["22.8.0"] } },
|
|
23
|
+
findPackageJSON: { [READ]: { experimental: ["23.2.0"] } },
|
|
23
24
|
flushCompileCache: { [READ]: { experimental: ["23.0.0", "22.10.0"] } },
|
|
24
25
|
getCompileCacheDir: { [READ]: { experimental: ["22.8.0"] } },
|
|
25
26
|
isBuiltin: { [READ]: { supported: ["18.6.0", "16.17.0"] } },
|
|
26
27
|
register: { [READ]: { experimental: ["20.6.0"] } },
|
|
28
|
+
stripTypeScriptTypes: { [READ]: { experimental: ["23.2.0"] } },
|
|
27
29
|
syncBuiltinESMExports: { [READ]: { supported: ["12.12.0"] } },
|
|
28
30
|
findSourceMap: { [READ]: { supported: ["13.7.0", "12.17.0"] } },
|
|
29
31
|
SourceMap: { [READ]: { supported: ["13.7.0", "12.17.0"] } },
|
|
@@ -8,6 +8,9 @@ const { READ } = require("@eslint-community/eslint-utils")
|
|
|
8
8
|
const sqlite = {
|
|
9
9
|
DatabaseSync: { [READ]: { supported: ["22.5.0"] } },
|
|
10
10
|
StatementSync: { [READ]: { supported: ["22.5.0"] } },
|
|
11
|
+
SQLITE_CHANGESET_OMIT: { [READ]: { supported: ["22.12.0"] } },
|
|
12
|
+
SQLITE_CHANGESET_REPLACE: { [READ]: { supported: ["22.12.0"] } },
|
|
13
|
+
SQLITE_CHANGESET_ABORT: { [READ]: { supported: ["22.12.0"] } },
|
|
11
14
|
}
|
|
12
15
|
|
|
13
16
|
/**
|
|
@@ -94,10 +94,13 @@ const util = {
|
|
|
94
94
|
deprecate: { [READ]: { supported: ["0.8.0"] } },
|
|
95
95
|
format: { [READ]: { supported: ["0.5.3"] } },
|
|
96
96
|
formatWithOptions: { [READ]: { supported: ["10.0.0"] } },
|
|
97
|
-
getCallSite: {
|
|
97
|
+
getCallSite: {
|
|
98
|
+
[READ]: { deprecated: ["23.3.0", "22.12.0"], experimental: ["22.9.0"] },
|
|
99
|
+
},
|
|
100
|
+
getCallSites: { [READ]: { experimental: ["23.3.0", "22.12.0"] } },
|
|
98
101
|
getSystemErrorName: { [READ]: { supported: ["9.7.0", "8.12.0"] } },
|
|
99
102
|
getSystemErrorMap: { [READ]: { supported: ["16.0.0", "14.17.0"] } },
|
|
100
|
-
getSystemErrorMessage: { [READ]: { supported: ["23.1.0"] } },
|
|
103
|
+
getSystemErrorMessage: { [READ]: { supported: ["23.1.0", "22.12.0"] } },
|
|
101
104
|
inherits: { [READ]: { supported: ["0.3.0"] } },
|
|
102
105
|
inspect: {
|
|
103
106
|
[READ]: { supported: ["0.3.0"] },
|
|
@@ -15,15 +15,16 @@ const unprefixNodeColon = require("./unprefix-node-colon")
|
|
|
15
15
|
* Enumerate property names of a given object recursively.
|
|
16
16
|
* @param {TraceMap} traceMap The map for APIs to enumerate.
|
|
17
17
|
* @param {string[]} [path] The path to the current map.
|
|
18
|
-
* @param {WeakSet<TraceMap>} [
|
|
18
|
+
* @param {{ [key: string]: WeakSet<TraceMap> }} [recursion] An object to block recursion (per module)
|
|
19
19
|
* @returns {IterableIterator<string>} The property names of the map.
|
|
20
20
|
*/
|
|
21
|
-
function* enumeratePropertyNames(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
function* enumeratePropertyNames(traceMap, path = [], recursion = {}) {
|
|
22
|
+
const recursionSet =
|
|
23
|
+
typeof path[0] === "string"
|
|
24
|
+
? (recursion[path[0]] ??= new WeakSet())
|
|
25
|
+
: undefined
|
|
26
|
+
|
|
27
|
+
if (recursionSet?.has(traceMap)) {
|
|
27
28
|
return
|
|
28
29
|
}
|
|
29
30
|
|
|
@@ -48,11 +49,8 @@ function* enumeratePropertyNames(
|
|
|
48
49
|
yield childName
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
childPath,
|
|
54
|
-
recursionSet.add(traceMap)
|
|
55
|
-
)
|
|
52
|
+
recursionSet?.add(traceMap)
|
|
53
|
+
yield* enumeratePropertyNames(childValue, childPath, recursion)
|
|
56
54
|
}
|
|
57
55
|
}
|
|
58
56
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Toru Nagashima
|
|
3
|
+
* See LICENSE file in root directory for full license.
|
|
4
|
+
*/
|
|
5
|
+
"use strict"
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {Partial<import('enhanced-resolve').ResolveOptions>} ResolverConfig
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** @type {ResolverConfig} */
|
|
12
|
+
const DEFAULT_VALUE = {}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Gets `resolverConfig` property from a given option object.
|
|
16
|
+
*
|
|
17
|
+
* @param {{ resolverConfig: ResolverConfig } | undefined} option - An option object to get.
|
|
18
|
+
* @returns {ResolverConfig | undefined} The `allowModules` value, or `null`.
|
|
19
|
+
*/
|
|
20
|
+
function get(option) {
|
|
21
|
+
if (option?.resolverConfig) return option.resolverConfig
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Gets "resolverConfig" setting.
|
|
26
|
+
*
|
|
27
|
+
* 1. This checks `options` property, then returns it if exists.
|
|
28
|
+
* 2. This checks `settings.n` | `settings.node` property, then returns it if exists.
|
|
29
|
+
* 3. This returns `[]`.
|
|
30
|
+
*
|
|
31
|
+
* @param {import('eslint').Rule.RuleContext} context - The rule context.
|
|
32
|
+
* @returns {ResolverConfig} A resolver config object.
|
|
33
|
+
*/
|
|
34
|
+
module.exports = function getResolverConfig(context, optionIndex = 0) {
|
|
35
|
+
return (
|
|
36
|
+
get(context.options?.[optionIndex]) ??
|
|
37
|
+
get(context.settings?.n) ??
|
|
38
|
+
get(context.settings?.node) ??
|
|
39
|
+
DEFAULT_VALUE
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
module.exports.schema = {
|
|
44
|
+
type: "object",
|
|
45
|
+
properties: {},
|
|
46
|
+
additionalProperties: true,
|
|
47
|
+
}
|
|
@@ -71,6 +71,7 @@ function getTSConfigAliases(context) {
|
|
|
71
71
|
* @typedef Options
|
|
72
72
|
* @property {string[]} [extensions]
|
|
73
73
|
* @property {string[]} [paths]
|
|
74
|
+
* @property {Partial<import('enhanced-resolve').ResolveOptions>} [resolverConfig]
|
|
74
75
|
* @property {string} basedir
|
|
75
76
|
*/
|
|
76
77
|
/** @typedef { 'unknown' | 'relative' | 'absolute' | 'node' | 'npm' | 'http' } ModuleType */
|
|
@@ -323,6 +324,11 @@ module.exports = class ImportTarget {
|
|
|
323
324
|
).backward
|
|
324
325
|
}
|
|
325
326
|
|
|
327
|
+
this.resolverConfig = {
|
|
328
|
+
...this.resolverConfig,
|
|
329
|
+
...this.options.resolverConfig,
|
|
330
|
+
}
|
|
331
|
+
|
|
326
332
|
const requireResolve = resolver.create.sync(this.resolverConfig)
|
|
327
333
|
|
|
328
334
|
const cwd = this.context.settings?.cwd ?? process.cwd()
|
package/lib/util/visit-import.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
const path = require("path")
|
|
8
8
|
const { isBuiltin } = require("node:module")
|
|
9
9
|
const getResolvePaths = require("./get-resolve-paths")
|
|
10
|
+
const getResolverConfig = require("./get-resolver-config")
|
|
10
11
|
const getTryExtensions = require("./get-try-extensions")
|
|
11
12
|
const ImportTarget = require("./import-target")
|
|
12
13
|
const stripImportPathParams = require("./strip-import-path-params")
|
|
@@ -41,8 +42,9 @@ module.exports = function visitImport(
|
|
|
41
42
|
path.resolve(context.filename ?? context.getFilename())
|
|
42
43
|
)
|
|
43
44
|
const paths = getResolvePaths(context, optionIndex)
|
|
45
|
+
const resolverConfig = getResolverConfig(context, optionIndex)
|
|
44
46
|
const extensions = getTryExtensions(context, optionIndex)
|
|
45
|
-
const options = { basedir, paths, extensions }
|
|
47
|
+
const options = { basedir, paths, extensions, resolverConfig }
|
|
46
48
|
|
|
47
49
|
/**
|
|
48
50
|
* @param {(
|
|
@@ -12,6 +12,7 @@ const {
|
|
|
12
12
|
} = require("@eslint-community/eslint-utils")
|
|
13
13
|
const { isBuiltin } = require("node:module")
|
|
14
14
|
const getResolvePaths = require("./get-resolve-paths")
|
|
15
|
+
const getResolverConfig = require("./get-resolver-config")
|
|
15
16
|
const getTryExtensions = require("./get-try-extensions")
|
|
16
17
|
const ImportTarget = require("./import-target")
|
|
17
18
|
const stripImportPathParams = require("./strip-import-path-params")
|
|
@@ -42,8 +43,9 @@ module.exports = function visitRequire(
|
|
|
42
43
|
path.resolve(context.filename ?? context.getFilename())
|
|
43
44
|
)
|
|
44
45
|
const paths = getResolvePaths(context)
|
|
46
|
+
const resolverConfig = getResolverConfig(context)
|
|
45
47
|
const extensions = getTryExtensions(context)
|
|
46
|
-
const options = { basedir, paths, extensions }
|
|
48
|
+
const options = { basedir, paths, extensions, resolverConfig }
|
|
47
49
|
|
|
48
50
|
return {
|
|
49
51
|
"Program:exit"(node) {
|