eslint-plugin-node-dependencies 0.5.0 → 0.7.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 +1 -0
- package/dist/rules/absolute-version.js +156 -0
- package/dist/rules/compat-engines.js +19 -19
- package/dist/rules/no-deprecated.js +5 -5
- package/dist/rules/valid-engines.js +1 -1
- package/dist/rules/valid-semver.js +7 -7
- package/dist/utils/ast-utils.js +2 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/meta.js +7 -7
- package/dist/utils/regexp.js +21 -0
- package/dist/utils/rules.js +2 -0
- package/dist/utils/semver.js +15 -8
- package/package.json +22 -20
package/README.md
CHANGED
|
@@ -125,6 +125,7 @@ The rules with the following star :star: are included in the `plugin:node-depend
|
|
|
125
125
|
|
|
126
126
|
| Rule ID | Description | |
|
|
127
127
|
|:--------|:------------|:---|
|
|
128
|
+
| [node-dependencies/absolute-version](https://ota-meshi.github.io/eslint-plugin-node-dependencies/rules/absolute-version.html) | require or disallow absolute version of dependency. | |
|
|
128
129
|
| [node-dependencies/no-deprecated](https://ota-meshi.github.io/eslint-plugin-node-dependencies/rules/no-deprecated.html) | disallow having dependencies on deprecate packages. | |
|
|
129
130
|
|
|
130
131
|
### Deprecated
|
|
@@ -0,0 +1,156 @@
|
|
|
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 regexp_1 = require("../utils/regexp");
|
|
7
|
+
const semver_1 = require("../utils/semver");
|
|
8
|
+
const PREFERS = ["always", "never", "ignore"];
|
|
9
|
+
const SCHEMA_FOR_DEPS_PROPERTIES = {
|
|
10
|
+
dependencies: { enum: PREFERS },
|
|
11
|
+
peerDependencies: { enum: PREFERS },
|
|
12
|
+
optionalDependencies: { enum: PREFERS },
|
|
13
|
+
devDependencies: { enum: PREFERS },
|
|
14
|
+
};
|
|
15
|
+
const DEFAULT = {
|
|
16
|
+
dependencies: "ignore",
|
|
17
|
+
peerDependencies: "ignore",
|
|
18
|
+
optionalDependencies: "ignore",
|
|
19
|
+
devDependencies: "always",
|
|
20
|
+
};
|
|
21
|
+
function stringToOption(option) {
|
|
22
|
+
return {
|
|
23
|
+
dependencies: option,
|
|
24
|
+
peerDependencies: option,
|
|
25
|
+
optionalDependencies: option,
|
|
26
|
+
devDependencies: option,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function objectToOption(option, defaults) {
|
|
30
|
+
return {
|
|
31
|
+
dependencies: option.dependencies || defaults.dependencies,
|
|
32
|
+
peerDependencies: option.peerDependencies || defaults.peerDependencies,
|
|
33
|
+
optionalDependencies: option.optionalDependencies || defaults.optionalDependencies,
|
|
34
|
+
devDependencies: option.devDependencies || defaults.devDependencies,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function parseOption(option) {
|
|
38
|
+
if (!option) {
|
|
39
|
+
return () => DEFAULT;
|
|
40
|
+
}
|
|
41
|
+
if (typeof option === "string") {
|
|
42
|
+
const objectOption = stringToOption(option);
|
|
43
|
+
return () => objectOption;
|
|
44
|
+
}
|
|
45
|
+
const baseOption = objectToOption(option, DEFAULT);
|
|
46
|
+
if (!option.overridePackages) {
|
|
47
|
+
return () => baseOption;
|
|
48
|
+
}
|
|
49
|
+
const overridePackages = Object.entries(option.overridePackages).map(([packageName, opt]) => {
|
|
50
|
+
const regexp = (0, regexp_1.toRegExp)(packageName);
|
|
51
|
+
return Object.assign({ test: (s) => regexp.test(s) }, (typeof opt === "string"
|
|
52
|
+
? stringToOption(opt)
|
|
53
|
+
: objectToOption(opt, baseOption)));
|
|
54
|
+
});
|
|
55
|
+
return (name) => {
|
|
56
|
+
for (const overridePackage of overridePackages) {
|
|
57
|
+
if (overridePackage.test(name)) {
|
|
58
|
+
return overridePackage;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return baseOption;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
exports.default = (0, utils_1.createRule)("absolute-version", {
|
|
65
|
+
meta: {
|
|
66
|
+
docs: {
|
|
67
|
+
description: "require or disallow absolute version of dependency.",
|
|
68
|
+
category: "Best Practices",
|
|
69
|
+
recommended: false,
|
|
70
|
+
},
|
|
71
|
+
schema: [
|
|
72
|
+
{
|
|
73
|
+
oneOf: [
|
|
74
|
+
{ enum: PREFERS.filter((p) => p !== "ignore") },
|
|
75
|
+
{
|
|
76
|
+
type: "object",
|
|
77
|
+
properties: Object.assign(Object.assign({}, SCHEMA_FOR_DEPS_PROPERTIES), { overridePackages: {
|
|
78
|
+
type: "object",
|
|
79
|
+
patternProperties: {
|
|
80
|
+
"^(?:\\S+)$": {
|
|
81
|
+
oneOf: [
|
|
82
|
+
{ enum: PREFERS },
|
|
83
|
+
{
|
|
84
|
+
type: "object",
|
|
85
|
+
properties: SCHEMA_FOR_DEPS_PROPERTIES,
|
|
86
|
+
additionalProperties: false,
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
minProperties: 1,
|
|
92
|
+
additionalProperties: false,
|
|
93
|
+
} }),
|
|
94
|
+
additionalProperties: false,
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
messages: {},
|
|
100
|
+
type: "suggestion",
|
|
101
|
+
},
|
|
102
|
+
create(context) {
|
|
103
|
+
const getOption = parseOption(context.options[0]);
|
|
104
|
+
function defineVisitor(visitName) {
|
|
105
|
+
return (node) => {
|
|
106
|
+
const ver = (0, jsonc_eslint_parser_1.getStaticJSONValue)(node.value);
|
|
107
|
+
if (typeof ver !== "string" || ver == null) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const name = String((0, ast_utils_1.getKeyFromJSONProperty)(node));
|
|
111
|
+
const option = getOption(name)[visitName];
|
|
112
|
+
const semver = (0, semver_1.getSemverRange)(ver);
|
|
113
|
+
if (semver == null) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (option === "always") {
|
|
117
|
+
if (isAbsoluteVersion(semver)) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
context.report({
|
|
121
|
+
loc: node.value.loc,
|
|
122
|
+
message: "Use the absolute version instead.",
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
else if (option === "never") {
|
|
126
|
+
if (!isAbsoluteVersion(semver)) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
context.report({
|
|
130
|
+
loc: node.value.loc,
|
|
131
|
+
message: "Do not use the absolute version.",
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return (0, utils_1.defineJsonVisitor)({
|
|
137
|
+
dependencies: defineVisitor("dependencies"),
|
|
138
|
+
peerDependencies: defineVisitor("peerDependencies"),
|
|
139
|
+
optionalDependencies: defineVisitor("optionalDependencies"),
|
|
140
|
+
devDependencies: defineVisitor("devDependencies"),
|
|
141
|
+
});
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
function isAbsoluteVersion(semver) {
|
|
145
|
+
for (const comparators of semver.set) {
|
|
146
|
+
for (const comparator of comparators) {
|
|
147
|
+
if ((0, semver_1.isAnyComparator)(comparator)) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
if (comparator.operator !== "=" && comparator.operator !== "") {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
@@ -93,10 +93,10 @@ function extractDependencies(metaList) {
|
|
|
93
93
|
const dependencies = new Map();
|
|
94
94
|
for (const meta of metaList) {
|
|
95
95
|
for (const [m, v] of [
|
|
96
|
-
...meta_1.getDependencies(meta, "dependencies"),
|
|
97
|
-
...meta_1.getDependencies(meta, "peerDependencies"),
|
|
96
|
+
...(0, meta_1.getDependencies)(meta, "dependencies"),
|
|
97
|
+
...(0, meta_1.getDependencies)(meta, "peerDependencies"),
|
|
98
98
|
]) {
|
|
99
|
-
const range = semver_2.getSemverRange(v);
|
|
99
|
+
const range = (0, semver_2.getSemverRange)(v);
|
|
100
100
|
if (!range) {
|
|
101
101
|
continue;
|
|
102
102
|
}
|
|
@@ -111,7 +111,7 @@ function extractDependencies(metaList) {
|
|
|
111
111
|
}
|
|
112
112
|
return dependencies;
|
|
113
113
|
}
|
|
114
|
-
exports.default = utils_1.createRule("compat-engines", {
|
|
114
|
+
exports.default = (0, utils_1.createRule)("compat-engines", {
|
|
115
115
|
meta: {
|
|
116
116
|
docs: {
|
|
117
117
|
description: "enforce the versions of the engines of the dependencies to be compatible.",
|
|
@@ -140,13 +140,13 @@ exports.default = utils_1.createRule("compat-engines", {
|
|
|
140
140
|
const comparisonType = (_c = (_b = context.options[0]) === null || _b === void 0 ? void 0 : _b.comparisonType) !== null && _c !== void 0 ? _c : "normal";
|
|
141
141
|
const selfEngines = new Map();
|
|
142
142
|
function processMeta(ctx, meta) {
|
|
143
|
-
const depEngines = meta_1.getEngines(meta);
|
|
143
|
+
const depEngines = (0, meta_1.getEngines)(meta);
|
|
144
144
|
for (const module of ctx.engines) {
|
|
145
145
|
const selfVer = selfEngines.get(module);
|
|
146
146
|
const engineValue = depEngines.get(module);
|
|
147
147
|
if (engineValue) {
|
|
148
148
|
ctx.markAsProcessed(module);
|
|
149
|
-
const depVer = semver_2.getSemverRange(engineValue);
|
|
149
|
+
const depVer = (0, semver_2.getSemverRange)(engineValue);
|
|
150
150
|
if (depVer) {
|
|
151
151
|
if (semver_1.default.subset(selfVer.adjust, buildAdjustRangeForDeps(comparisonType, depVer))) {
|
|
152
152
|
ctx.markAsValid(module);
|
|
@@ -160,11 +160,11 @@ exports.default = utils_1.createRule("compat-engines", {
|
|
|
160
160
|
}
|
|
161
161
|
function processDependencyModule(ctx, name, ver, modules, node) {
|
|
162
162
|
const currModules = [...modules, `${name}@${ver}`];
|
|
163
|
-
processMeta(ctx, meta_1.getMetaFromNodeModules(name, ver, context));
|
|
163
|
+
processMeta(ctx, (0, meta_1.getMetaFromNodeModules)(name, ver, context));
|
|
164
164
|
if (!ctx.hasInvalid() && ctx.isAllProcessed()) {
|
|
165
165
|
return;
|
|
166
166
|
}
|
|
167
|
-
const metaData = meta_1.getMetaFromNpm(name, ver);
|
|
167
|
+
const metaData = (0, meta_1.getMetaFromNpm)(name, ver);
|
|
168
168
|
for (const meta of metaData.cache) {
|
|
169
169
|
processMeta(ctx, meta);
|
|
170
170
|
if (!ctx.hasInvalid() && ctx.isAllProcessed()) {
|
|
@@ -183,7 +183,7 @@ exports.default = utils_1.createRule("compat-engines", {
|
|
|
183
183
|
}
|
|
184
184
|
for (const [module, allowedVers] of ctx.getInvalid()) {
|
|
185
185
|
const selfVer = selfEngines.get(module);
|
|
186
|
-
const depVer = semver_2.normalizeSemverRange(...allowedVers.values()) ||
|
|
186
|
+
const depVer = (0, semver_2.normalizeSemverRange)(...allowedVers.values()) ||
|
|
187
187
|
[...allowedVers.values()].pop();
|
|
188
188
|
if (semver_1.default.subset(selfVer.adjust, buildAdjustRangeForDeps(comparisonType, depVer))) {
|
|
189
189
|
continue;
|
|
@@ -192,7 +192,7 @@ exports.default = utils_1.createRule("compat-engines", {
|
|
|
192
192
|
loc: node.loc,
|
|
193
193
|
message: `${currModules
|
|
194
194
|
.map((m) => `"${m}"`)
|
|
195
|
-
.join(" >> ")} is not compatible with "${module}@${semver_2.normalizeVer(selfVer.original)}". Allowed is: "${module}@${semver_2.normalizeVer(depVer)}"`,
|
|
195
|
+
.join(" >> ")} is not compatible with "${module}@${(0, semver_2.normalizeVer)(selfVer.original)}". Allowed is: "${module}@${(0, semver_2.normalizeVer)(depVer)}"`,
|
|
196
196
|
});
|
|
197
197
|
}
|
|
198
198
|
if (ctx.isAllProcessed()) {
|
|
@@ -200,26 +200,26 @@ exports.default = utils_1.createRule("compat-engines", {
|
|
|
200
200
|
}
|
|
201
201
|
if (deep) {
|
|
202
202
|
for (const [n, ranges] of extractDependencies(metaList)) {
|
|
203
|
-
const v = semver_2.normalizeSemverRange(...ranges);
|
|
203
|
+
const v = (0, semver_2.normalizeSemverRange)(...ranges);
|
|
204
204
|
if (v)
|
|
205
205
|
processDependencyModule(ctx.nextContext(), n, v.raw, currModules, node);
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
|
-
return utils_1.compositingVisitors({
|
|
209
|
+
return (0, utils_1.compositingVisitors)({
|
|
210
210
|
JSONExpressionStatement(node) {
|
|
211
211
|
const expr = node.expression;
|
|
212
212
|
if (expr.type !== "JSONObjectExpression") {
|
|
213
213
|
return;
|
|
214
214
|
}
|
|
215
|
-
const enginesNode = expr.properties.find((p) => ast_utils_1.getKeyFromJSONProperty(p) === "engines");
|
|
215
|
+
const enginesNode = expr.properties.find((p) => (0, ast_utils_1.getKeyFromJSONProperty)(p) === "engines");
|
|
216
216
|
if (!enginesNode) {
|
|
217
217
|
return;
|
|
218
218
|
}
|
|
219
|
-
for (const [key, val] of meta_1.getEngines({
|
|
220
|
-
engines: jsonc_eslint_parser_1.getStaticJSONValue(enginesNode.value),
|
|
219
|
+
for (const [key, val] of (0, meta_1.getEngines)({
|
|
220
|
+
engines: (0, jsonc_eslint_parser_1.getStaticJSONValue)(enginesNode.value),
|
|
221
221
|
})) {
|
|
222
|
-
const selfVer = semver_2.getSemverRange(val);
|
|
222
|
+
const selfVer = (0, semver_2.getSemverRange)(val);
|
|
223
223
|
if (!selfVer) {
|
|
224
224
|
continue;
|
|
225
225
|
}
|
|
@@ -229,13 +229,13 @@ exports.default = utils_1.createRule("compat-engines", {
|
|
|
229
229
|
});
|
|
230
230
|
}
|
|
231
231
|
},
|
|
232
|
-
}, utils_1.defineJsonVisitor({
|
|
232
|
+
}, (0, utils_1.defineJsonVisitor)({
|
|
233
233
|
"dependencies, peerDependencies"(node) {
|
|
234
234
|
if (selfEngines.size === 0) {
|
|
235
235
|
return;
|
|
236
236
|
}
|
|
237
|
-
const name = ast_utils_1.getKeyFromJSONProperty(node);
|
|
238
|
-
const ver = jsonc_eslint_parser_1.getStaticJSONValue(node.value);
|
|
237
|
+
const name = (0, ast_utils_1.getKeyFromJSONProperty)(node);
|
|
238
|
+
const ver = (0, jsonc_eslint_parser_1.getStaticJSONValue)(node.value);
|
|
239
239
|
if (typeof name !== "string" || typeof ver !== "string") {
|
|
240
240
|
return;
|
|
241
241
|
}
|
|
@@ -4,7 +4,7 @@ const jsonc_eslint_parser_1 = require("jsonc-eslint-parser");
|
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
5
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
6
6
|
const meta_1 = require("../utils/meta");
|
|
7
|
-
exports.default = utils_1.createRule("no-deprecated", {
|
|
7
|
+
exports.default = (0, utils_1.createRule)("no-deprecated", {
|
|
8
8
|
meta: {
|
|
9
9
|
docs: {
|
|
10
10
|
description: "disallow having dependencies on deprecate packages.",
|
|
@@ -29,18 +29,18 @@ exports.default = utils_1.createRule("no-deprecated", {
|
|
|
29
29
|
return {};
|
|
30
30
|
}
|
|
31
31
|
const devDependencies = Boolean((_a = context.options[0]) === null || _a === void 0 ? void 0 : _a.devDependencies);
|
|
32
|
-
return utils_1.defineJsonVisitor({
|
|
32
|
+
return (0, utils_1.defineJsonVisitor)({
|
|
33
33
|
[devDependencies
|
|
34
34
|
? "dependencies, peerDependencies, devDependencies"
|
|
35
35
|
: "dependencies, peerDependencies"](node) {
|
|
36
|
-
const name = ast_utils_1.getKeyFromJSONProperty(node);
|
|
37
|
-
const ver = jsonc_eslint_parser_1.getStaticJSONValue(node.value);
|
|
36
|
+
const name = (0, ast_utils_1.getKeyFromJSONProperty)(node);
|
|
37
|
+
const ver = (0, jsonc_eslint_parser_1.getStaticJSONValue)(node.value);
|
|
38
38
|
if (typeof name !== "string" ||
|
|
39
39
|
typeof ver !== "string" ||
|
|
40
40
|
!ver) {
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
|
-
const meta = meta_1.getMetaFromNpm(name, ver).get();
|
|
43
|
+
const meta = (0, meta_1.getMetaFromNpm)(name, ver).get();
|
|
44
44
|
const deprecated = meta && meta.length && meta[meta.length - 1].deprecated;
|
|
45
45
|
if (deprecated) {
|
|
46
46
|
context.report({
|
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const utils_1 = require("../utils");
|
|
7
7
|
const compat_engines_1 = __importDefault(require("./compat-engines"));
|
|
8
|
-
exports.default = utils_1.createRule("valid-engines", {
|
|
8
|
+
exports.default = (0, utils_1.createRule)("valid-engines", {
|
|
9
9
|
meta: Object.assign(Object.assign({}, compat_engines_1.default.meta), { docs: Object.assign(Object.assign({}, compat_engines_1.default.meta.docs), { replacedBy: ["compat-engines"] }), deprecated: true }),
|
|
10
10
|
create: compat_engines_1.default.create,
|
|
11
11
|
});
|
|
@@ -4,7 +4,7 @@ const jsonc_eslint_parser_1 = require("jsonc-eslint-parser");
|
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
5
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
6
6
|
const semver_1 = require("../utils/semver");
|
|
7
|
-
exports.default = utils_1.createRule("valid-semver", {
|
|
7
|
+
exports.default = (0, utils_1.createRule)("valid-semver", {
|
|
8
8
|
meta: {
|
|
9
9
|
docs: {
|
|
10
10
|
description: "enforce versions that is valid as a semantic version.",
|
|
@@ -19,9 +19,9 @@ exports.default = utils_1.createRule("valid-semver", {
|
|
|
19
19
|
if (!context.parserServices.isJSON) {
|
|
20
20
|
return {};
|
|
21
21
|
}
|
|
22
|
-
return utils_1.defineJsonVisitor({
|
|
22
|
+
return (0, utils_1.defineJsonVisitor)({
|
|
23
23
|
engines(node) {
|
|
24
|
-
const ver = jsonc_eslint_parser_1.getStaticJSONValue(node.value);
|
|
24
|
+
const ver = (0, jsonc_eslint_parser_1.getStaticJSONValue)(node.value);
|
|
25
25
|
if (typeof ver !== "string" || ver == null) {
|
|
26
26
|
context.report({
|
|
27
27
|
loc: node.value.loc,
|
|
@@ -29,7 +29,7 @@ exports.default = utils_1.createRule("valid-semver", {
|
|
|
29
29
|
});
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
|
-
if (semver_1.getSemverRange(ver) == null) {
|
|
32
|
+
if ((0, semver_1.getSemverRange)(ver) == null) {
|
|
33
33
|
context.report({
|
|
34
34
|
loc: node.value.loc,
|
|
35
35
|
message: `"${ver}" is invalid.`,
|
|
@@ -37,11 +37,11 @@ exports.default = utils_1.createRule("valid-semver", {
|
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
"dependencies, peerDependencies, devDependencies"(node) {
|
|
40
|
-
const name = ast_utils_1.getKeyFromJSONProperty(node);
|
|
40
|
+
const name = (0, ast_utils_1.getKeyFromJSONProperty)(node);
|
|
41
41
|
if (typeof name !== "string") {
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
|
-
const ver = jsonc_eslint_parser_1.getStaticJSONValue(node.value);
|
|
44
|
+
const ver = (0, jsonc_eslint_parser_1.getStaticJSONValue)(node.value);
|
|
45
45
|
if (typeof ver !== "string" || ver == null) {
|
|
46
46
|
context.report({
|
|
47
47
|
loc: node.value.loc,
|
|
@@ -52,7 +52,7 @@ exports.default = utils_1.createRule("valid-semver", {
|
|
|
52
52
|
if (maybeDepId(ver)) {
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
|
-
if (semver_1.getSemverRange(ver) == null) {
|
|
55
|
+
if ((0, semver_1.getSemverRange)(ver) == null) {
|
|
56
56
|
context.report({
|
|
57
57
|
loc: node.value.loc,
|
|
58
58
|
message: `"${ver}" is invalid.`,
|
package/dist/utils/ast-utils.js
CHANGED
|
@@ -10,7 +10,8 @@ function getKeyFromJSONProperty(node) {
|
|
|
10
10
|
exports.getKeyFromJSONProperty = getKeyFromJSONProperty;
|
|
11
11
|
function getKey(node) {
|
|
12
12
|
let parent = node.parent;
|
|
13
|
-
while (parent.type === "JSONUnaryExpression"
|
|
13
|
+
while (parent.type === "JSONUnaryExpression" ||
|
|
14
|
+
parent.type === "JSONBinaryExpression") {
|
|
14
15
|
parent = parent.parent;
|
|
15
16
|
}
|
|
16
17
|
if (parent.type === "JSONExpressionStatement") {
|
package/dist/utils/index.js
CHANGED
package/dist/utils/meta.js
CHANGED
|
@@ -28,9 +28,9 @@ function getMetaFromNodeModules(name, ver, context) {
|
|
|
28
28
|
const req = module_1.default.createRequire(relativeTo);
|
|
29
29
|
const pkg = req(`${name}/package.json`);
|
|
30
30
|
if (maybeMeta(pkg)) {
|
|
31
|
-
const vr = semver_1.getSemverRange(ver);
|
|
31
|
+
const vr = (0, semver_1.getSemverRange)(ver);
|
|
32
32
|
if (typeof pkg.version === "string" &&
|
|
33
|
-
(!vr || semver_2.satisfies(pkg.version, vr))) {
|
|
33
|
+
(!vr || (0, semver_2.satisfies)(pkg.version, vr))) {
|
|
34
34
|
return pkg;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -46,7 +46,7 @@ function getMetaFromNpm(name, ver) {
|
|
|
46
46
|
if (trimmed.startsWith("npm:")) {
|
|
47
47
|
let parsed = null;
|
|
48
48
|
try {
|
|
49
|
-
parsed = npm_package_arg_1.default(`${trimmed.slice(4).trim()}`);
|
|
49
|
+
parsed = (0, npm_package_arg_1.default)(`${trimmed.slice(4).trim()}`);
|
|
50
50
|
}
|
|
51
51
|
catch (_b) {
|
|
52
52
|
}
|
|
@@ -64,9 +64,9 @@ function getMetaFromNpm(name, ver) {
|
|
|
64
64
|
}
|
|
65
65
|
exports.getMetaFromNpm = getMetaFromNpm;
|
|
66
66
|
function getMetaFromNpmView(name, verOrTag) {
|
|
67
|
-
const range = semver_1.getSemverRange(verOrTag);
|
|
67
|
+
const range = (0, semver_1.getSemverRange)(verOrTag);
|
|
68
68
|
if (range) {
|
|
69
|
-
const min = semver_2.minVersion(range);
|
|
69
|
+
const min = (0, semver_2.minVersion)(range);
|
|
70
70
|
if (min) {
|
|
71
71
|
const isTargetVersion = (meta) => {
|
|
72
72
|
if (!meta.version) {
|
|
@@ -80,7 +80,7 @@ function getMetaFromNpmView(name, verOrTag) {
|
|
|
80
80
|
const metaList = cache.data.meta.filter(isTargetVersion);
|
|
81
81
|
let alive = cache.alive;
|
|
82
82
|
if (!alive) {
|
|
83
|
-
const maxNext = semver_1.maxNextVersion(range);
|
|
83
|
+
const maxNext = (0, semver_1.maxNextVersion)(range);
|
|
84
84
|
if (maxNext) {
|
|
85
85
|
alive = cache.data.meta.some((m) => m.version && maxNext.compare(m.version) <= 0);
|
|
86
86
|
}
|
|
@@ -234,7 +234,7 @@ function makeDirs(dir) {
|
|
|
234
234
|
}
|
|
235
235
|
}
|
|
236
236
|
function exec(command, args) {
|
|
237
|
-
const result = child_process_1.spawnSync(command, args, {
|
|
237
|
+
const result = (0, child_process_1.spawnSync)(command, args, {
|
|
238
238
|
windowsHide: true,
|
|
239
239
|
maxBuffer: Infinity,
|
|
240
240
|
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toRegExp = void 0;
|
|
4
|
+
function toRegExp(str) {
|
|
5
|
+
const regexp = parseRegExp(str);
|
|
6
|
+
if (regexp) {
|
|
7
|
+
return regexp;
|
|
8
|
+
}
|
|
9
|
+
return { test: (s) => s === str };
|
|
10
|
+
}
|
|
11
|
+
exports.toRegExp = toRegExp;
|
|
12
|
+
function parseRegExp(str) {
|
|
13
|
+
if (!str.startsWith("/")) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const lastSlashIndex = str.lastIndexOf("/");
|
|
17
|
+
if (lastSlashIndex <= 1) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return new RegExp(str.slice(1, lastSlashIndex), str.slice(lastSlashIndex + 1));
|
|
21
|
+
}
|
package/dist/utils/rules.js
CHANGED
|
@@ -4,11 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.rules = void 0;
|
|
7
|
+
const absolute_version_1 = __importDefault(require("../rules/absolute-version"));
|
|
7
8
|
const compat_engines_1 = __importDefault(require("../rules/compat-engines"));
|
|
8
9
|
const no_deprecated_1 = __importDefault(require("../rules/no-deprecated"));
|
|
9
10
|
const valid_engines_1 = __importDefault(require("../rules/valid-engines"));
|
|
10
11
|
const valid_semver_1 = __importDefault(require("../rules/valid-semver"));
|
|
11
12
|
exports.rules = [
|
|
13
|
+
absolute_version_1.default,
|
|
12
14
|
compat_engines_1.default,
|
|
13
15
|
no_deprecated_1.default,
|
|
14
16
|
valid_engines_1.default,
|
package/dist/utils/semver.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.maxNextVersion = exports.normalizeSemverRange = exports.normalizeVer = exports.getSemverRange = void 0;
|
|
3
|
+
exports.isAnyComparator = exports.maxNextVersion = exports.normalizeSemverRange = exports.normalizeVer = exports.getSemverRange = void 0;
|
|
4
4
|
const semver_1 = require("semver");
|
|
5
5
|
function getSemverRange(value) {
|
|
6
6
|
if (value == null) {
|
|
@@ -37,14 +37,14 @@ function normalizeSemverRange(...values) {
|
|
|
37
37
|
let consume = false;
|
|
38
38
|
let target = { range: normalizedVer, comparators };
|
|
39
39
|
for (const [k, data] of map) {
|
|
40
|
-
if (semver_1.subset(target.range, data.range)) {
|
|
40
|
+
if ((0, semver_1.subset)(target.range, data.range)) {
|
|
41
41
|
consume = true;
|
|
42
42
|
break;
|
|
43
43
|
}
|
|
44
|
-
if (semver_1.subset(data.range, target.range)) {
|
|
44
|
+
if ((0, semver_1.subset)(data.range, target.range)) {
|
|
45
45
|
map.delete(k);
|
|
46
46
|
}
|
|
47
|
-
if (semver_1.intersects(target.range, data.range)) {
|
|
47
|
+
if ((0, semver_1.intersects)(target.range, data.range)) {
|
|
48
48
|
const newComparators = joinComparators(comparators, data.comparators);
|
|
49
49
|
if (newComparators) {
|
|
50
50
|
target = {
|
|
@@ -86,10 +86,10 @@ function normalizeComparators(comparators) {
|
|
|
86
86
|
if (rangeComparator.min.operator === ">=" &&
|
|
87
87
|
rangeComparator.max.operator === "<") {
|
|
88
88
|
if (rangeComparator.min.semver.major !== 0 &&
|
|
89
|
-
semver_1.inc(rangeComparator.min.semver.version, "premajor") ===
|
|
89
|
+
(0, semver_1.inc)(rangeComparator.min.semver.version, "premajor") ===
|
|
90
90
|
rangeComparator.max.semver.version)
|
|
91
91
|
return `^${rangeComparator.min.semver.version}`;
|
|
92
|
-
if (semver_1.inc(rangeComparator.min.semver.version, "preminor") ===
|
|
92
|
+
if ((0, semver_1.inc)(rangeComparator.min.semver.version, "preminor") ===
|
|
93
93
|
rangeComparator.max.semver.version)
|
|
94
94
|
return `~${rangeComparator.min.semver.version}`;
|
|
95
95
|
}
|
|
@@ -171,6 +171,9 @@ function maxNextVersion(range) {
|
|
|
171
171
|
let max = null;
|
|
172
172
|
let hasMin = false;
|
|
173
173
|
for (const comparator of comparators) {
|
|
174
|
+
if (isAnyComparator(comparator)) {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
174
177
|
const compVer = new semver_1.SemVer(comparator.semver.version);
|
|
175
178
|
if (comparator.operator === "<=" ||
|
|
176
179
|
comparator.operator === "<" ||
|
|
@@ -178,7 +181,7 @@ function maxNextVersion(range) {
|
|
|
178
181
|
if (comparator.operator === "<=") {
|
|
179
182
|
compVer.inc("prerelease");
|
|
180
183
|
}
|
|
181
|
-
if (!max || semver_1.lt(max, compVer)) {
|
|
184
|
+
if (!max || (0, semver_1.lt)(max, compVer)) {
|
|
182
185
|
max = compVer;
|
|
183
186
|
}
|
|
184
187
|
}
|
|
@@ -188,7 +191,7 @@ function maxNextVersion(range) {
|
|
|
188
191
|
}
|
|
189
192
|
}
|
|
190
193
|
if (max) {
|
|
191
|
-
if (!maxVer || semver_1.lt(maxVer, max)) {
|
|
194
|
+
if (!maxVer || (0, semver_1.lt)(maxVer, max)) {
|
|
192
195
|
maxVer = max;
|
|
193
196
|
}
|
|
194
197
|
}
|
|
@@ -201,3 +204,7 @@ function maxNextVersion(range) {
|
|
|
201
204
|
return maxVer;
|
|
202
205
|
}
|
|
203
206
|
exports.maxNextVersion = maxNextVersion;
|
|
207
|
+
function isAnyComparator(comparator) {
|
|
208
|
+
return !comparator.semver.version;
|
|
209
|
+
}
|
|
210
|
+
exports.isAnyComparator = isAnyComparator;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-node-dependencies",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "ESLint plugin to check Node.js dependencies.",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": "^12 || >=14"
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"json"
|
|
42
42
|
],
|
|
43
43
|
"author": "Yosuke Ota (https://github.com/ota-meshi)",
|
|
44
|
+
"funding": "https://github.com/sponsors/ota-meshi",
|
|
44
45
|
"license": "MIT",
|
|
45
46
|
"bugs": {
|
|
46
47
|
"url": "https://github.com/ota-meshi/eslint-plugin-node-dependencies/issues"
|
|
@@ -50,49 +51,50 @@
|
|
|
50
51
|
"eslint": ">=6.0.0"
|
|
51
52
|
},
|
|
52
53
|
"devDependencies": {
|
|
53
|
-
"@ota-meshi/eslint-plugin": "^0.
|
|
54
|
+
"@ota-meshi/eslint-plugin": "^0.10.0",
|
|
54
55
|
"@types/chai": "^4.2.18",
|
|
55
|
-
"@types/eslint": "^
|
|
56
|
+
"@types/eslint": "^8.0.0",
|
|
56
57
|
"@types/eslint-scope": "^3.7.0",
|
|
57
58
|
"@types/eslint-visitor-keys": "^1.0.0",
|
|
58
|
-
"@types/estree": "^0.0.
|
|
59
|
+
"@types/estree": "^0.0.51",
|
|
59
60
|
"@types/mocha": "^9.0.0",
|
|
60
|
-
"@types/node": "^
|
|
61
|
+
"@types/node": "^16.0.0",
|
|
61
62
|
"@types/npm-package-arg": "^6.1.1",
|
|
62
63
|
"@types/semver": "^7.3.8",
|
|
63
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
64
|
-
"@typescript-eslint/parser": "^
|
|
64
|
+
"@typescript-eslint/eslint-plugin": "^5.0.0",
|
|
65
|
+
"@typescript-eslint/parser": "^5.0.0",
|
|
65
66
|
"chai": "^4.3.4",
|
|
66
67
|
"env-cmd": "^10.1.0",
|
|
67
|
-
"eslint": "^
|
|
68
|
+
"eslint": "^8.0.0",
|
|
68
69
|
"eslint-config-prettier": "^8.0.0",
|
|
69
70
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
70
|
-
"eslint-plugin-eslint-plugin": "^
|
|
71
|
-
"eslint-plugin-json-schema-validator": "^
|
|
72
|
-
"eslint-plugin-jsonc": "^
|
|
71
|
+
"eslint-plugin-eslint-plugin": "^4.0.0",
|
|
72
|
+
"eslint-plugin-json-schema-validator": "^2.0.0",
|
|
73
|
+
"eslint-plugin-jsonc": "^2.0.0",
|
|
73
74
|
"eslint-plugin-node": "^11.1.0",
|
|
74
|
-
"eslint-plugin-node-dependencies": "^0.
|
|
75
|
-
"eslint-plugin-prettier": "^
|
|
75
|
+
"eslint-plugin-node-dependencies": "^0.6.0",
|
|
76
|
+
"eslint-plugin-prettier": "^4.0.0",
|
|
76
77
|
"eslint-plugin-regexp": "^1.0.0",
|
|
77
|
-
"eslint-plugin-vue": "^
|
|
78
|
-
"eslint-plugin-yml": "^0.
|
|
78
|
+
"eslint-plugin-vue": "^8.0.0",
|
|
79
|
+
"eslint-plugin-yml": "^0.14.0",
|
|
79
80
|
"eslint4b": "^7.3.1",
|
|
80
81
|
"mocha": "^9.0.0",
|
|
81
82
|
"mocha-chai-jest-snapshot": "^1.1.2",
|
|
82
83
|
"nyc": "^15.1.0",
|
|
83
84
|
"prettier": "^2.0.5",
|
|
84
85
|
"raw-loader": "^4.0.1",
|
|
85
|
-
"stylelint": "^
|
|
86
|
-
"stylelint-config-
|
|
87
|
-
"stylelint-
|
|
86
|
+
"stylelint": "^14.0.0",
|
|
87
|
+
"stylelint-config-recommended-vue": "^1.0.0",
|
|
88
|
+
"stylelint-config-standard": "^25.0.0",
|
|
89
|
+
"stylelint-plugin-stylus": "^0.13.0",
|
|
88
90
|
"ts-node": "^10.0.0",
|
|
89
91
|
"typescript": "^4.0.0",
|
|
90
92
|
"vue-eslint-editor": "^1.1.0",
|
|
91
|
-
"vue-eslint-parser": "^
|
|
93
|
+
"vue-eslint-parser": "^8.0.0",
|
|
92
94
|
"vuepress": "^1.5.2"
|
|
93
95
|
},
|
|
94
96
|
"dependencies": {
|
|
95
|
-
"jsonc-eslint-parser": "^1.
|
|
97
|
+
"jsonc-eslint-parser": "^1 || ^2.0.2",
|
|
96
98
|
"npm-package-arg": "^8.1.5",
|
|
97
99
|
"semver": "^7.3.5"
|
|
98
100
|
}
|