eslint-plugin-node-dependencies 1.3.0 → 2.0.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/README.md +10 -66
- package/dist/chunk-C7Uep-_p.mjs +20 -0
- package/dist/index.d.mts +28 -0
- package/dist/index.mjs +1633 -0
- package/dist/worker.d.mts +7 -0
- package/dist/worker.mjs +30 -0
- package/package.json +17 -11
- package/dist/configs/flat/recommended.d.ts +0 -17
- package/dist/configs/flat/recommended.js +0 -57
- package/dist/configs/recommended.d.ts +0 -9
- package/dist/configs/recommended.js +0 -15
- package/dist/configs/rules/recommended.d.ts +0 -5
- package/dist/configs/rules/recommended.js +0 -9
- package/dist/index.d.ts +0 -34
- package/dist/index.js +0 -54
- package/dist/meta.d.ts +0 -1
- package/dist/meta.js +0 -5
- package/dist/rules/absolute-version.d.ts +0 -2
- package/dist/rules/absolute-version.js +0 -161
- package/dist/rules/compat-engines.d.ts +0 -2
- package/dist/rules/compat-engines.js +0 -263
- package/dist/rules/no-deprecated.d.ts +0 -2
- package/dist/rules/no-deprecated.js +0 -63
- package/dist/rules/no-dupe-deps.d.ts +0 -2
- package/dist/rules/no-dupe-deps.js +0 -90
- package/dist/rules/no-restricted-deps.d.ts +0 -2
- package/dist/rules/no-restricted-deps.js +0 -259
- package/dist/rules/prefer-caret-range-version.d.ts +0 -2
- package/dist/rules/prefer-caret-range-version.js +0 -99
- package/dist/rules/prefer-tilde-range-version.d.ts +0 -2
- package/dist/rules/prefer-tilde-range-version.js +0 -100
- package/dist/rules/require-provenance-deps.d.ts +0 -2
- package/dist/rules/require-provenance-deps.js +0 -98
- package/dist/rules/valid-engines.d.ts +0 -2
- package/dist/rules/valid-engines.js +0 -11
- package/dist/rules/valid-semver.d.ts +0 -2
- package/dist/rules/valid-semver.js +0 -78
- package/dist/types.d.ts +0 -51
- package/dist/types.js +0 -2
- package/dist/utils/ast-utils.d.ts +0 -3
- package/dist/utils/ast-utils.js +0 -24
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.js +0 -72
- package/dist/utils/meta.d.ts +0 -30
- package/dist/utils/meta.js +0 -269
- package/dist/utils/package-json/index.d.ts +0 -1
- package/dist/utils/package-json/index.js +0 -17
- package/dist/utils/package-json/worker.d.mts +0 -1
- package/dist/utils/package-json/worker.mjs +0 -26
- package/dist/utils/regexp.d.ts +0 -3
- package/dist/utils/regexp.js +0 -20
- package/dist/utils/rules.d.ts +0 -2
- package/dist/utils/rules.js +0 -28
- package/dist/utils/semver-range.d.ts +0 -7
- package/dist/utils/semver-range.js +0 -37
- package/dist/utils/semver.d.ts +0 -7
- package/dist/utils/semver.js +0 -204
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const semver_1 = require("semver");
|
|
4
|
-
const utils_1 = require("../utils");
|
|
5
|
-
const semver_2 = require("../utils/semver");
|
|
6
|
-
const semver_range_1 = require("../utils/semver-range");
|
|
7
|
-
const eslint_compat_utils_1 = require("eslint-compat-utils");
|
|
8
|
-
exports.default = (0, utils_1.createRule)("prefer-caret-range-version", {
|
|
9
|
-
meta: {
|
|
10
|
-
docs: {
|
|
11
|
-
description: "require caret(`^`) version instead of range version.",
|
|
12
|
-
category: "Stylistic Issues",
|
|
13
|
-
recommended: false,
|
|
14
|
-
},
|
|
15
|
-
fixable: "code",
|
|
16
|
-
schema: [],
|
|
17
|
-
messages: {},
|
|
18
|
-
type: "suggestion",
|
|
19
|
-
},
|
|
20
|
-
create(context) {
|
|
21
|
-
const sourceCode = (0, eslint_compat_utils_1.getSourceCode)(context);
|
|
22
|
-
if (!sourceCode.parserServices.isJSON) {
|
|
23
|
-
return {};
|
|
24
|
-
}
|
|
25
|
-
function convertToUseCaret(range) {
|
|
26
|
-
if (range.comparators.length !== 2) {
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
const start = range.comparators.find((c) => c.operator === ">=");
|
|
30
|
-
const end = range.comparators.find((c) => c.operator === "<");
|
|
31
|
-
if (!start || !end) {
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
const caretRangeText = `^${start.semver.version}`;
|
|
35
|
-
const caretRange = (0, semver_2.getSemverRange)(caretRangeText);
|
|
36
|
-
if (!caretRange) {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
const caretEnd = caretRange.set[0].find((c) => c.operator === "<");
|
|
40
|
-
if (!caretEnd) {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
if (caretEnd.semver.compare(end.semver) !== 0) {
|
|
44
|
-
const endPre = new semver_1.SemVer(`${end.semver.version}-0`);
|
|
45
|
-
if (caretEnd.semver.compare(endPre) !== 0) {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return caretRangeText;
|
|
50
|
-
}
|
|
51
|
-
function verifyRange(range, node) {
|
|
52
|
-
const fixedRange = convertToUseCaret(range);
|
|
53
|
-
if (!fixedRange) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
context.report({
|
|
57
|
-
loc: {
|
|
58
|
-
start: sourceCode.getLocFromIndex(node.range[0] + range.range[0]),
|
|
59
|
-
end: sourceCode.getLocFromIndex(node.range[0] + range.range[1]),
|
|
60
|
-
},
|
|
61
|
-
message: `Use '${fixedRange}' syntax instead.`,
|
|
62
|
-
fix(fixer) {
|
|
63
|
-
return fixer.replaceTextRange(node.range, JSON.stringify(node.value.slice(0, range.range[0]) +
|
|
64
|
-
fixedRange +
|
|
65
|
-
node.value.slice(range.range[1])));
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
function verifyVersion(node) {
|
|
70
|
-
if (maybeDepId(node.value)) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
for (const range of (0, semver_range_1.iterateSemverRanges)(node.value)) {
|
|
74
|
-
const lowerRange = range.value.toLowerCase();
|
|
75
|
-
if (!lowerRange.startsWith("~")) {
|
|
76
|
-
if (lowerRange.startsWith("^") ||
|
|
77
|
-
/^\d+$/u.test(range.value) ||
|
|
78
|
-
((range.value.endsWith(".x") || range.value.endsWith(".*")) &&
|
|
79
|
-
!/\s+-\s+/u.test(range.value)))
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
verifyRange(range, node);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return (0, utils_1.defineJsonVisitor)({
|
|
86
|
-
"engines, dependencies, peerDependencies, devDependencies, optionalDependencies"(node) {
|
|
87
|
-
if (isJSONStringLiteral(node.value)) {
|
|
88
|
-
verifyVersion(node.value);
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
},
|
|
93
|
-
});
|
|
94
|
-
function isJSONStringLiteral(node) {
|
|
95
|
-
return node.type === "JSONLiteral" && typeof node.value === "string";
|
|
96
|
-
}
|
|
97
|
-
function maybeDepId(ver) {
|
|
98
|
-
return ver.includes("/") || ver.includes(":") || /^[-a-z]+$/.test(ver);
|
|
99
|
-
}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const semver_1 = require("semver");
|
|
4
|
-
const utils_1 = require("../utils");
|
|
5
|
-
const semver_2 = require("../utils/semver");
|
|
6
|
-
const semver_range_1 = require("../utils/semver-range");
|
|
7
|
-
const eslint_compat_utils_1 = require("eslint-compat-utils");
|
|
8
|
-
exports.default = (0, utils_1.createRule)("prefer-tilde-range-version", {
|
|
9
|
-
meta: {
|
|
10
|
-
docs: {
|
|
11
|
-
description: "require tilde(`~`) version instead of range version.",
|
|
12
|
-
category: "Stylistic Issues",
|
|
13
|
-
recommended: false,
|
|
14
|
-
},
|
|
15
|
-
fixable: "code",
|
|
16
|
-
schema: [],
|
|
17
|
-
messages: {},
|
|
18
|
-
type: "suggestion",
|
|
19
|
-
},
|
|
20
|
-
create(context) {
|
|
21
|
-
const sourceCode = (0, eslint_compat_utils_1.getSourceCode)(context);
|
|
22
|
-
if (!sourceCode.parserServices.isJSON) {
|
|
23
|
-
return {};
|
|
24
|
-
}
|
|
25
|
-
function convertToUseTilde(range) {
|
|
26
|
-
if (range.comparators.length !== 2) {
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
const start = range.comparators.find((c) => c.operator === ">=");
|
|
30
|
-
const end = range.comparators.find((c) => c.operator === "<");
|
|
31
|
-
if (!start || !end) {
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
const tildeRangeText = `~${start.semver.version}`;
|
|
35
|
-
const tildeRange = (0, semver_2.getSemverRange)(tildeRangeText);
|
|
36
|
-
if (!tildeRange) {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
const tildeEnd = tildeRange.set[0].find((c) => c.operator === "<");
|
|
40
|
-
if (!tildeEnd) {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
if (tildeEnd.semver.compare(end.semver) !== 0) {
|
|
44
|
-
const endPre = new semver_1.SemVer(`${end.semver.version}-0`);
|
|
45
|
-
if (tildeEnd.semver.compare(endPre) !== 0) {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return tildeRangeText;
|
|
50
|
-
}
|
|
51
|
-
function verifyRange(range, node) {
|
|
52
|
-
const fixedRange = convertToUseTilde(range);
|
|
53
|
-
if (!fixedRange) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
context.report({
|
|
57
|
-
loc: {
|
|
58
|
-
start: sourceCode.getLocFromIndex(node.range[0] + range.range[0]),
|
|
59
|
-
end: sourceCode.getLocFromIndex(node.range[0] + range.range[1]),
|
|
60
|
-
},
|
|
61
|
-
message: `Use '${fixedRange}' syntax instead.`,
|
|
62
|
-
fix(fixer) {
|
|
63
|
-
return fixer.replaceTextRange(node.range, JSON.stringify(node.value.slice(0, range.range[0]) +
|
|
64
|
-
fixedRange +
|
|
65
|
-
node.value.slice(range.range[1])));
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
function verifyVersion(node) {
|
|
70
|
-
if (maybeDepId(node.value)) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
for (const range of (0, semver_range_1.iterateSemverRanges)(node.value)) {
|
|
74
|
-
const lowerRange = range.value.toLowerCase();
|
|
75
|
-
if (!lowerRange.startsWith("^")) {
|
|
76
|
-
if (lowerRange.startsWith("~") ||
|
|
77
|
-
/^\d+$/u.test(range.value) ||
|
|
78
|
-
/^\d+\.\d+$/u.test(range.value) ||
|
|
79
|
-
((range.value.endsWith(".x") || range.value.endsWith(".*")) &&
|
|
80
|
-
!/\s+-\s+/u.test(range.value)))
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
verifyRange(range, node);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return (0, utils_1.defineJsonVisitor)({
|
|
87
|
-
"engines, dependencies, peerDependencies, devDependencies, optionalDependencies"(node) {
|
|
88
|
-
if (isJSONStringLiteral(node.value)) {
|
|
89
|
-
verifyVersion(node.value);
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
});
|
|
93
|
-
},
|
|
94
|
-
});
|
|
95
|
-
function isJSONStringLiteral(node) {
|
|
96
|
-
return node.type === "JSONLiteral" && typeof node.value === "string";
|
|
97
|
-
}
|
|
98
|
-
function maybeDepId(ver) {
|
|
99
|
-
return ver.includes("/") || ver.includes(":") || /^[-a-z]+$/.test(ver);
|
|
100
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const utils_1 = require("../utils");
|
|
4
|
-
const jsonc_eslint_parser_1 = require("jsonc-eslint-parser");
|
|
5
|
-
const ast_utils_1 = require("../utils/ast-utils");
|
|
6
|
-
const meta_1 = require("../utils/meta");
|
|
7
|
-
const eslint_compat_utils_1 = require("eslint-compat-utils");
|
|
8
|
-
exports.default = (0, utils_1.createRule)("require-provenance-deps", {
|
|
9
|
-
meta: {
|
|
10
|
-
docs: {
|
|
11
|
-
description: "Require provenance information for dependencies",
|
|
12
|
-
category: "Best Practices",
|
|
13
|
-
recommended: false,
|
|
14
|
-
},
|
|
15
|
-
schema: [
|
|
16
|
-
{
|
|
17
|
-
type: "object",
|
|
18
|
-
properties: {
|
|
19
|
-
devDependencies: { type: "boolean" },
|
|
20
|
-
allows: {
|
|
21
|
-
type: "array",
|
|
22
|
-
items: { type: "string" },
|
|
23
|
-
uniqueItems: true,
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
additionalProperties: false,
|
|
27
|
-
},
|
|
28
|
-
],
|
|
29
|
-
messages: {
|
|
30
|
-
missingProvenance: 'Dependency "{{name}}" has versions without provenance information: {{versions}}.',
|
|
31
|
-
},
|
|
32
|
-
type: "suggestion",
|
|
33
|
-
},
|
|
34
|
-
create(context) {
|
|
35
|
-
var _a;
|
|
36
|
-
const sourceCode = (0, eslint_compat_utils_1.getSourceCode)(context);
|
|
37
|
-
if (!sourceCode.parserServices.isJSON) {
|
|
38
|
-
return {};
|
|
39
|
-
}
|
|
40
|
-
const devDependencies = Boolean((_a = context.options[0]) === null || _a === void 0 ? void 0 : _a.devDependencies);
|
|
41
|
-
function extractNoProvenanceRanges(meta) {
|
|
42
|
-
var _a, _b;
|
|
43
|
-
const noProvenanceRanges = [];
|
|
44
|
-
let prev = null;
|
|
45
|
-
for (let index = 0; index < meta.length; index++) {
|
|
46
|
-
const m = meta[index];
|
|
47
|
-
if ((_b = (_a = m.dist) === null || _a === void 0 ? void 0 : _a.attestations) === null || _b === void 0 ? void 0 : _b.provenance) {
|
|
48
|
-
prev = null;
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
if (prev == null) {
|
|
52
|
-
prev = [m.version, m.version];
|
|
53
|
-
noProvenanceRanges.push(prev);
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
prev[1] = m.version;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return noProvenanceRanges;
|
|
60
|
-
}
|
|
61
|
-
return (0, utils_1.defineJsonVisitor)({
|
|
62
|
-
[devDependencies
|
|
63
|
-
? "dependencies, peerDependencies, devDependencies"
|
|
64
|
-
: "dependencies, peerDependencies"](node) {
|
|
65
|
-
var _a, _b;
|
|
66
|
-
const name = (0, ast_utils_1.getKeyFromJSONProperty)(node);
|
|
67
|
-
const ver = (0, jsonc_eslint_parser_1.getStaticJSONValue)(node.value);
|
|
68
|
-
if (typeof name !== "string" || typeof ver !== "string" || !ver) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
if ((_b = (_a = context.options[0]) === null || _a === void 0 ? void 0 : _a.allows) === null || _b === void 0 ? void 0 : _b.includes(name)) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const meta = (0, meta_1.getMetaFromNpm)(name, ver).get();
|
|
75
|
-
if (!meta || !meta.length) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
const noProvenanceRanges = extractNoProvenanceRanges(meta);
|
|
79
|
-
if (noProvenanceRanges.length === 0) {
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
context.report({
|
|
83
|
-
loc: node.loc,
|
|
84
|
-
messageId: "missingProvenance",
|
|
85
|
-
data: {
|
|
86
|
-
name,
|
|
87
|
-
versions: formatList(noProvenanceRanges.map(([from, to]) => from === to ? `${from}` : `${from} - ${to}`)),
|
|
88
|
-
},
|
|
89
|
-
});
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
function formatList(items) {
|
|
93
|
-
return items.length <= 2
|
|
94
|
-
? items.join(" and ")
|
|
95
|
-
: `${items.slice(0, -1).join(", ")}, and ${items[items.length - 1]}`;
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
});
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const utils_1 = require("../utils");
|
|
7
|
-
const compat_engines_1 = __importDefault(require("./compat-engines"));
|
|
8
|
-
exports.default = (0, utils_1.createRule)("valid-engines", {
|
|
9
|
-
meta: Object.assign(Object.assign({}, compat_engines_1.default.meta), { docs: Object.assign({}, compat_engines_1.default.meta.docs), deprecated: true, replacedBy: ["compat-engines"] }),
|
|
10
|
-
create: compat_engines_1.default.create,
|
|
11
|
-
});
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const jsonc_eslint_parser_1 = require("jsonc-eslint-parser");
|
|
4
|
-
const utils_1 = require("../utils");
|
|
5
|
-
const ast_utils_1 = require("../utils/ast-utils");
|
|
6
|
-
const semver_1 = require("../utils/semver");
|
|
7
|
-
const eslint_compat_utils_1 = require("eslint-compat-utils");
|
|
8
|
-
exports.default = (0, utils_1.createRule)("valid-semver", {
|
|
9
|
-
meta: {
|
|
10
|
-
docs: {
|
|
11
|
-
description: "enforce versions that is valid as a semantic version.",
|
|
12
|
-
category: "Possible Errors",
|
|
13
|
-
recommended: true,
|
|
14
|
-
},
|
|
15
|
-
schema: [],
|
|
16
|
-
messages: {},
|
|
17
|
-
type: "problem",
|
|
18
|
-
},
|
|
19
|
-
create(context) {
|
|
20
|
-
const sourceCode = (0, eslint_compat_utils_1.getSourceCode)(context);
|
|
21
|
-
if (!sourceCode.parserServices.isJSON) {
|
|
22
|
-
return {};
|
|
23
|
-
}
|
|
24
|
-
return (0, utils_1.defineJsonVisitor)({
|
|
25
|
-
engines(node) {
|
|
26
|
-
const ver = (0, jsonc_eslint_parser_1.getStaticJSONValue)(node.value);
|
|
27
|
-
if (typeof ver !== "string" || ver == null) {
|
|
28
|
-
context.report({
|
|
29
|
-
loc: node.value.loc,
|
|
30
|
-
message: `\`${JSON.stringify(ver)}\` is invalid.`,
|
|
31
|
-
});
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
if ((0, semver_1.getSemverRange)(ver) == null) {
|
|
35
|
-
context.report({
|
|
36
|
-
loc: node.value.loc,
|
|
37
|
-
message: `"${ver}" is invalid.`,
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
"dependencies, peerDependencies, devDependencies, optionalDependencies"(node) {
|
|
42
|
-
const name = (0, ast_utils_1.getKeyFromJSONProperty)(node);
|
|
43
|
-
if (typeof name !== "string") {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const ver = (0, jsonc_eslint_parser_1.getStaticJSONValue)(node.value);
|
|
47
|
-
if (typeof ver !== "string" || ver == null) {
|
|
48
|
-
context.report({
|
|
49
|
-
loc: node.value.loc,
|
|
50
|
-
message: `\`${JSON.stringify(ver)}\` is invalid.`,
|
|
51
|
-
});
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
if (maybeNotRange(ver)) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
if ((0, semver_1.getSemverRange)(ver) == null) {
|
|
58
|
-
context.report({
|
|
59
|
-
loc: node.value.loc,
|
|
60
|
-
message: `"${ver}" is invalid.`,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
});
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
function maybeNotRange(ver) {
|
|
68
|
-
if (ver.startsWith(".") || ver.startsWith("~") || ver.includes("/")) {
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
if (ver.includes(":")) {
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
if (/^[-a-z]+$/.test(ver)) {
|
|
75
|
-
return true;
|
|
76
|
-
}
|
|
77
|
-
return false;
|
|
78
|
-
}
|
package/dist/types.d.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import type { JSONSchema4 } from "json-schema";
|
|
2
|
-
import type { Rule } from "eslint";
|
|
3
|
-
export interface RuleListener {
|
|
4
|
-
[key: string]: ((node: never) => void) | undefined;
|
|
5
|
-
}
|
|
6
|
-
export interface RuleModule {
|
|
7
|
-
meta: RuleMetaData;
|
|
8
|
-
create: (context: Rule.RuleContext) => RuleListener;
|
|
9
|
-
}
|
|
10
|
-
export type RuleCategory = "Possible Errors" | "Best Practices" | "Stylistic Issues";
|
|
11
|
-
export interface RuleMetaData {
|
|
12
|
-
docs: {
|
|
13
|
-
description: string;
|
|
14
|
-
category: RuleCategory;
|
|
15
|
-
recommended: boolean;
|
|
16
|
-
url: string;
|
|
17
|
-
ruleId: string;
|
|
18
|
-
ruleName: string;
|
|
19
|
-
default?: "error" | "warn";
|
|
20
|
-
};
|
|
21
|
-
messages: {
|
|
22
|
-
[messageId: string]: string;
|
|
23
|
-
};
|
|
24
|
-
fixable?: "code" | "whitespace";
|
|
25
|
-
hasSuggestions?: boolean;
|
|
26
|
-
schema: JSONSchema4 | JSONSchema4[];
|
|
27
|
-
deprecated?: boolean;
|
|
28
|
-
replacedBy?: string[];
|
|
29
|
-
type: "problem" | "suggestion" | "layout";
|
|
30
|
-
}
|
|
31
|
-
export interface PartialRuleModule {
|
|
32
|
-
meta: PartialRuleMetaData;
|
|
33
|
-
create: (context: Rule.RuleContext) => RuleListener;
|
|
34
|
-
}
|
|
35
|
-
export interface PartialRuleMetaData {
|
|
36
|
-
docs: {
|
|
37
|
-
description: string;
|
|
38
|
-
category: RuleCategory;
|
|
39
|
-
recommended: boolean;
|
|
40
|
-
default?: "error" | "warn";
|
|
41
|
-
};
|
|
42
|
-
messages: {
|
|
43
|
-
[messageId: string]: string;
|
|
44
|
-
};
|
|
45
|
-
fixable?: "code" | "whitespace";
|
|
46
|
-
hasSuggestions?: boolean;
|
|
47
|
-
schema: JSONSchema4 | JSONSchema4[];
|
|
48
|
-
deprecated?: boolean;
|
|
49
|
-
replacedBy?: string[];
|
|
50
|
-
type: "problem" | "suggestion" | "layout";
|
|
51
|
-
}
|
package/dist/types.js
DELETED
package/dist/utils/ast-utils.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getKeyFromJSONProperty = getKeyFromJSONProperty;
|
|
4
|
-
exports.getKey = getKey;
|
|
5
|
-
function getKeyFromJSONProperty(node) {
|
|
6
|
-
if (node.key.type === "JSONIdentifier") {
|
|
7
|
-
return node.key.name;
|
|
8
|
-
}
|
|
9
|
-
return node.key.value;
|
|
10
|
-
}
|
|
11
|
-
function getKey(node) {
|
|
12
|
-
let parent = node.parent;
|
|
13
|
-
while (parent.type === "JSONUnaryExpression" ||
|
|
14
|
-
parent.type === "JSONBinaryExpression") {
|
|
15
|
-
parent = parent.parent;
|
|
16
|
-
}
|
|
17
|
-
if (parent.type === "JSONExpressionStatement") {
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
if (parent.type === "JSONArrayExpression") {
|
|
21
|
-
return parent.elements.indexOf(node);
|
|
22
|
-
}
|
|
23
|
-
return getKeyFromJSONProperty(parent);
|
|
24
|
-
}
|
package/dist/utils/index.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { RuleModule, PartialRuleModule, RuleListener } from "../types";
|
|
2
|
-
import type { AST } from "jsonc-eslint-parser";
|
|
3
|
-
export declare function createRule(ruleName: string, rule: PartialRuleModule): RuleModule;
|
|
4
|
-
export declare function defineJsonVisitor(visitor: Record<string, ((node: AST.JSONProperty) => void) | undefined>): RuleListener;
|
|
5
|
-
export declare function compositingVisitors(visitor: RuleListener, ...visitors: RuleListener[]): RuleListener;
|
package/dist/utils/index.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createRule = createRule;
|
|
4
|
-
exports.defineJsonVisitor = defineJsonVisitor;
|
|
5
|
-
exports.compositingVisitors = compositingVisitors;
|
|
6
|
-
const ast_utils_1 = require("./ast-utils");
|
|
7
|
-
function createRule(ruleName, rule) {
|
|
8
|
-
return {
|
|
9
|
-
meta: Object.assign(Object.assign({}, rule.meta), { docs: Object.assign(Object.assign({}, rule.meta.docs), { url: `https://ota-meshi.github.io/eslint-plugin-node-dependencies/rules/${ruleName}.html`, ruleId: `node-dependencies/${ruleName}`, ruleName }) }),
|
|
10
|
-
create: rule.create,
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
function defineJsonVisitor(visitor) {
|
|
14
|
-
let stack = null;
|
|
15
|
-
const visitors = [];
|
|
16
|
-
for (const [selector, visit] of Object.entries(visitor)) {
|
|
17
|
-
if (visit) {
|
|
18
|
-
for (const sel of selector.split(",").map((s) => s.trim())) {
|
|
19
|
-
visitors.push({
|
|
20
|
-
test: (s) => {
|
|
21
|
-
if (!s.key ||
|
|
22
|
-
!s.upper ||
|
|
23
|
-
s.upper.key != null) {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
return s.key === sel;
|
|
27
|
-
},
|
|
28
|
-
visit,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
"JSONObjectExpression, JSONArrayExpression"(node) {
|
|
35
|
-
stack = {
|
|
36
|
-
node,
|
|
37
|
-
upper: stack,
|
|
38
|
-
key: (0, ast_utils_1.getKey)(node),
|
|
39
|
-
};
|
|
40
|
-
},
|
|
41
|
-
"JSONObjectExpression, JSONArrayExpression:exit"() {
|
|
42
|
-
stack = stack && stack.upper;
|
|
43
|
-
},
|
|
44
|
-
JSONProperty(node) {
|
|
45
|
-
if (!stack) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
for (const v of visitors) {
|
|
49
|
-
if (v.test(stack)) {
|
|
50
|
-
v.visit(node);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
function compositingVisitors(visitor, ...visitors) {
|
|
57
|
-
for (const v of visitors) {
|
|
58
|
-
for (const key in v) {
|
|
59
|
-
const orig = visitor[key];
|
|
60
|
-
if (orig) {
|
|
61
|
-
visitor[key] = (...args) => {
|
|
62
|
-
orig(...args);
|
|
63
|
-
v[key](...args);
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
visitor[key] = v[key];
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return visitor;
|
|
72
|
-
}
|
package/dist/utils/meta.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { Rule } from "eslint";
|
|
2
|
-
export type PackageMeta = {
|
|
3
|
-
engines: Record<string, string | undefined> | undefined;
|
|
4
|
-
dependencies: Record<string, string | undefined> | undefined;
|
|
5
|
-
peerDependencies: Record<string, string | undefined> | undefined;
|
|
6
|
-
optionalDependencies: Record<string, string | undefined> | undefined;
|
|
7
|
-
version: string | undefined;
|
|
8
|
-
_where?: string;
|
|
9
|
-
};
|
|
10
|
-
export type NpmPackageMeta = PackageMeta & {
|
|
11
|
-
deprecated: string | undefined;
|
|
12
|
-
"dist-tags": {
|
|
13
|
-
[key: string]: string | void;
|
|
14
|
-
} | undefined;
|
|
15
|
-
dist?: {
|
|
16
|
-
attestations?: {
|
|
17
|
-
provenance?: Record<string, unknown>;
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
export declare function getMetaFromNodeModules(name: string, ver: string, options: {
|
|
22
|
-
context: Rule.RuleContext;
|
|
23
|
-
ownerPackageJsonPath?: string;
|
|
24
|
-
}): PackageMeta | null;
|
|
25
|
-
export declare function getMetaFromNpm(name: string, ver: string): {
|
|
26
|
-
cache: NpmPackageMeta[];
|
|
27
|
-
get: () => NpmPackageMeta[] | null;
|
|
28
|
-
};
|
|
29
|
-
export declare function getEngines(meta: unknown): Map<string, string>;
|
|
30
|
-
export declare function getDependencies(meta: unknown, kind: "dependencies" | "peerDependencies" | "optionalDependencies"): Map<string, string>;
|